diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-11-12 11:00:20 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-11-12 11:00:20 +0000 |
commit | c83da8c6bf5e80cd1b8597b30ba17a312718e4cc (patch) | |
tree | 519caa183917783d800d87118973ca5ef4e65230 /src/datacache | |
parent | 8282abfff7909f8034c63188d982c5c602246f91 (diff) | |
download | gnunet-c83da8c6bf5e80cd1b8597b30ba17a312718e4cc.tar.gz gnunet-c83da8c6bf5e80cd1b8597b30ba17a312718e4cc.zip |
support running purely in-memory
Diffstat (limited to 'src/datacache')
-rw-r--r-- | src/datacache/datacache.c | 11 | ||||
-rw-r--r-- | src/datacache/plugin_datacache_sqlite.c | 48 |
2 files changed, 43 insertions, 16 deletions
diff --git a/src/datacache/datacache.c b/src/datacache/datacache.c index 80ce1a677..1af4a148f 100644 --- a/src/datacache/datacache.c +++ b/src/datacache/datacache.c | |||
@@ -154,12 +154,19 @@ GNUNET_DATACACHE_create (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
154 | bf_size = quota / 32; /* 8 bit per entry, 1 bit per 32 kb in DB */ | 154 | bf_size = quota / 32; /* 8 bit per entry, 1 bit per 32 kb in DB */ |
155 | 155 | ||
156 | ret = GNUNET_malloc (sizeof (struct GNUNET_DATACACHE_Handle)); | 156 | ret = GNUNET_malloc (sizeof (struct GNUNET_DATACACHE_Handle)); |
157 | ret->bloom_name = GNUNET_DISK_mktemp ("gnunet-datacachebloom"); | 157 | |
158 | if (GNUNET_YES != | ||
159 | GNUNET_CONFIGURATION_get_value_yesno (cfg, section, "DISABLE_BF_RC")) | ||
160 | { | ||
161 | fprintf (stderr, "Using RC!\n"); | ||
162 | ret->bloom_name = GNUNET_DISK_mktemp ("gnunet-datacachebloom"); | ||
163 | } | ||
158 | if (NULL != ret->bloom_name) | 164 | if (NULL != ret->bloom_name) |
159 | { | 165 | { |
160 | ret->filter = GNUNET_CONTAINER_bloomfilter_load (ret->bloom_name, quota / 1024, /* 8 bit per entry in DB, expect 1k entries */ | 166 | ret->filter = GNUNET_CONTAINER_bloomfilter_load (ret->bloom_name, quota / 1024, /* 8 bit per entry in DB, expect 1k entries */ |
161 | 5); | 167 | 5); |
162 | } | 168 | } |
169 | |||
163 | if (NULL == ret->filter) | 170 | if (NULL == ret->filter) |
164 | { | 171 | { |
165 | ret->filter = GNUNET_CONTAINER_bloomfilter_init (NULL, bf_size, 5); /* approx. 3% false positives at max use */ | 172 | ret->filter = GNUNET_CONTAINER_bloomfilter_init (NULL, bf_size, 5); /* approx. 3% false positives at max use */ |
diff --git a/src/datacache/plugin_datacache_sqlite.c b/src/datacache/plugin_datacache_sqlite.c index 62d5445b4..74fa38544 100644 --- a/src/datacache/plugin_datacache_sqlite.c +++ b/src/datacache/plugin_datacache_sqlite.c | |||
@@ -364,21 +364,33 @@ libgnunet_plugin_datacache_sqlite_init (void *cls) | |||
364 | sqlite3 *dbh; | 364 | sqlite3 *dbh; |
365 | char *emsg; | 365 | char *emsg; |
366 | 366 | ||
367 | fn = GNUNET_DISK_mktemp ("gnunet-datacache"); | 367 | if (GNUNET_YES == |
368 | if (fn == NULL) | 368 | GNUNET_CONFIGURATION_get_value_yesno (env->cfg, |
369 | "datacache-sqlite", | ||
370 | "IN_MEMORY")) | ||
369 | { | 371 | { |
370 | GNUNET_break (0); | 372 | if (SQLITE_OK != sqlite3_open (":memory:", &dbh)) |
371 | return NULL; | 373 | return NULL; |
374 | fn_utf8 = NULL; | ||
372 | } | 375 | } |
373 | /* fn should be UTF-8-encoded. If it isn't, it's a bug. */ | 376 | else |
374 | fn_utf8 = GNUNET_strdup (fn); | ||
375 | if (SQLITE_OK != sqlite3_open (fn_utf8, &dbh)) | ||
376 | { | 377 | { |
378 | fn = GNUNET_DISK_mktemp ("gnunet-datacache"); | ||
379 | if (fn == NULL) | ||
380 | { | ||
381 | GNUNET_break (0); | ||
382 | return NULL; | ||
383 | } | ||
384 | /* fn should be UTF-8-encoded. If it isn't, it's a bug. */ | ||
385 | fn_utf8 = GNUNET_strdup (fn); | ||
386 | if (SQLITE_OK != sqlite3_open (fn_utf8, &dbh)) | ||
387 | { | ||
388 | GNUNET_free (fn); | ||
389 | GNUNET_free (fn_utf8); | ||
390 | return NULL; | ||
391 | } | ||
377 | GNUNET_free (fn); | 392 | GNUNET_free (fn); |
378 | GNUNET_free (fn_utf8); | ||
379 | return NULL; | ||
380 | } | 393 | } |
381 | GNUNET_free (fn); | ||
382 | 394 | ||
383 | SQLITE3_EXEC (dbh, "PRAGMA temp_store=MEMORY"); | 395 | SQLITE3_EXEC (dbh, "PRAGMA temp_store=MEMORY"); |
384 | SQLITE3_EXEC (dbh, "PRAGMA locking_mode=EXCLUSIVE"); | 396 | SQLITE3_EXEC (dbh, "PRAGMA locking_mode=EXCLUSIVE"); |
@@ -386,6 +398,12 @@ libgnunet_plugin_datacache_sqlite_init (void *cls) | |||
386 | SQLITE3_EXEC (dbh, "PRAGMA synchronous=OFF"); | 398 | SQLITE3_EXEC (dbh, "PRAGMA synchronous=OFF"); |
387 | SQLITE3_EXEC (dbh, "PRAGMA count_changes=OFF"); | 399 | SQLITE3_EXEC (dbh, "PRAGMA count_changes=OFF"); |
388 | SQLITE3_EXEC (dbh, "PRAGMA page_size=4092"); | 400 | SQLITE3_EXEC (dbh, "PRAGMA page_size=4092"); |
401 | if (GNUNET_YES == | ||
402 | GNUNET_CONFIGURATION_get_value_yesno (env->cfg, | ||
403 | "datacache-sqlite", | ||
404 | "IN_MEMORY")) | ||
405 | SQLITE3_EXEC (dbh, "PRAGMA sqlite_temp_store=3"); | ||
406 | |||
389 | SQLITE3_EXEC (dbh, | 407 | SQLITE3_EXEC (dbh, |
390 | "CREATE TABLE ds090 (" " type INTEGER NOT NULL DEFAULT 0," | 408 | "CREATE TABLE ds090 (" " type INTEGER NOT NULL DEFAULT 0," |
391 | " expire INTEGER NOT NULL DEFAULT 0," | 409 | " expire INTEGER NOT NULL DEFAULT 0," |
@@ -425,9 +443,10 @@ libgnunet_plugin_datacache_sqlite_done (void *cls) | |||
425 | #endif | 443 | #endif |
426 | 444 | ||
427 | #if !WINDOWS || defined(__CYGWIN__) | 445 | #if !WINDOWS || defined(__CYGWIN__) |
428 | if (0 != UNLINK (plugin->fn)) | 446 | if ( (NULL != plugin->fn) && |
447 | (0 != UNLINK (plugin->fn)) ) | ||
429 | LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn); | 448 | LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn); |
430 | GNUNET_free (plugin->fn); | 449 | GNUNET_free_non_null (plugin->fn); |
431 | #endif | 450 | #endif |
432 | result = sqlite3_close (plugin->dbh); | 451 | result = sqlite3_close (plugin->dbh); |
433 | #if SQLITE_VERSION_NUMBER >= 3007000 | 452 | #if SQLITE_VERSION_NUMBER >= 3007000 |
@@ -453,9 +472,10 @@ libgnunet_plugin_datacache_sqlite_done (void *cls) | |||
453 | LOG_SQLITE (plugin->dbh, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close"); | 472 | LOG_SQLITE (plugin->dbh, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close"); |
454 | 473 | ||
455 | #if WINDOWS && !defined(__CYGWIN__) | 474 | #if WINDOWS && !defined(__CYGWIN__) |
456 | if (0 != UNLINK (plugin->fn)) | 475 | if ( (NULL != plugin->fn) && |
476 | (0 != UNLINK (plugin->fn)) ) | ||
457 | LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn); | 477 | LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "unlink", plugin->fn); |
458 | GNUNET_free (plugin->fn); | 478 | GNUNET_free_non_null (plugin->fn); |
459 | #endif | 479 | #endif |
460 | GNUNET_free (plugin); | 480 | GNUNET_free (plugin); |
461 | GNUNET_free (api); | 481 | GNUNET_free (api); |