aboutsummaryrefslogtreecommitdiff
path: root/src/datacache
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-11-12 11:00:20 +0000
committerChristian Grothoff <christian@grothoff.org>2012-11-12 11:00:20 +0000
commitc83da8c6bf5e80cd1b8597b30ba17a312718e4cc (patch)
tree519caa183917783d800d87118973ca5ef4e65230 /src/datacache
parent8282abfff7909f8034c63188d982c5c602246f91 (diff)
downloadgnunet-c83da8c6bf5e80cd1b8597b30ba17a312718e4cc.tar.gz
gnunet-c83da8c6bf5e80cd1b8597b30ba17a312718e4cc.zip
support running purely in-memory
Diffstat (limited to 'src/datacache')
-rw-r--r--src/datacache/datacache.c11
-rw-r--r--src/datacache/plugin_datacache_sqlite.c48
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);