diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-12-02 00:30:45 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-12-02 00:30:45 +0100 |
commit | 86a4cfa3852275ab2a286ffd112651c3ae609eea (patch) | |
tree | 2b1192899506504715c00c7f034d385ee2455b81 /src/namecache | |
parent | 65b840cd289c3f978e507e527443c8a8eb6ad113 (diff) | |
download | gnunet-86a4cfa3852275ab2a286ffd112651c3ae609eea.tar.gz gnunet-86a4cfa3852275ab2a286ffd112651c3ae609eea.zip |
run expiration only once per hour, use WAL
Diffstat (limited to 'src/namecache')
-rw-r--r-- | src/namecache/plugin_namecache_sqlite.c | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/namecache/plugin_namecache_sqlite.c b/src/namecache/plugin_namecache_sqlite.c index 3f9d474de..f67831708 100644 --- a/src/namecache/plugin_namecache_sqlite.c +++ b/src/namecache/plugin_namecache_sqlite.c | |||
@@ -243,6 +243,11 @@ database_setup (struct Plugin *plugin) | |||
243 | "PRAGMA page_size=4092", | 243 | "PRAGMA page_size=4092", |
244 | NULL, NULL, | 244 | NULL, NULL, |
245 | ENULL)); | 245 | ENULL)); |
246 | CHECK (SQLITE_OK == | ||
247 | sqlite3_exec (plugin->dbh, | ||
248 | "PRAGMA journal_mode=WAL", | ||
249 | NULL, NULL, | ||
250 | ENULL)); | ||
246 | 251 | ||
247 | CHECK (SQLITE_OK == | 252 | CHECK (SQLITE_OK == |
248 | sqlite3_busy_timeout (plugin->dbh, | 253 | sqlite3_busy_timeout (plugin->dbh, |
@@ -325,21 +330,30 @@ database_shutdown (struct Plugin *plugin) | |||
325 | { | 330 | { |
326 | LOG (GNUNET_ERROR_TYPE_WARNING, | 331 | LOG (GNUNET_ERROR_TYPE_WARNING, |
327 | _("Tried to close sqlite without finalizing all prepared statements.\n")); | 332 | _("Tried to close sqlite without finalizing all prepared statements.\n")); |
328 | stmt = sqlite3_next_stmt (plugin->dbh, NULL); | 333 | stmt = sqlite3_next_stmt (plugin->dbh, |
334 | NULL); | ||
329 | while (stmt != NULL) | 335 | while (stmt != NULL) |
330 | { | 336 | { |
331 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, "sqlite", | 337 | GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, |
332 | "Closing statement %p\n", stmt); | 338 | "sqlite", |
339 | "Closing statement %p\n", | ||
340 | stmt); | ||
333 | result = sqlite3_finalize (stmt); | 341 | result = sqlite3_finalize (stmt); |
334 | if (result != SQLITE_OK) | 342 | if (result != SQLITE_OK) |
335 | GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, "sqlite", | 343 | GNUNET_log_from (GNUNET_ERROR_TYPE_WARNING, |
336 | "Failed to close statement %p: %d\n", stmt, result); | 344 | "sqlite", |
337 | stmt = sqlite3_next_stmt (plugin->dbh, NULL); | 345 | "Failed to close statement %p: %d\n", |
346 | stmt, | ||
347 | result); | ||
348 | stmt = sqlite3_next_stmt (plugin->dbh, | ||
349 | NULL); | ||
338 | } | 350 | } |
339 | result = sqlite3_close (plugin->dbh); | 351 | result = sqlite3_close (plugin->dbh); |
340 | } | 352 | } |
341 | if (SQLITE_OK != result) | 353 | if (SQLITE_OK != result) |
342 | LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close"); | 354 | LOG_SQLITE (plugin, |
355 | GNUNET_ERROR_TYPE_ERROR, | ||
356 | "sqlite3_close"); | ||
343 | 357 | ||
344 | GNUNET_free_non_null (plugin->fn); | 358 | GNUNET_free_non_null (plugin->fn); |
345 | } | 359 | } |
@@ -365,7 +379,8 @@ namecache_sqlite_expire_blocks (struct Plugin *plugin) | |||
365 | GNUNET_SQ_bind (plugin->expire_blocks, | 379 | GNUNET_SQ_bind (plugin->expire_blocks, |
366 | params)) | 380 | params)) |
367 | { | 381 | { |
368 | LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, | 382 | LOG_SQLITE (plugin, |
383 | GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, | ||
369 | "sqlite3_bind_XXXX"); | 384 | "sqlite3_bind_XXXX"); |
370 | GNUNET_SQ_reset (plugin->dbh, | 385 | GNUNET_SQ_reset (plugin->dbh, |
371 | plugin->expire_blocks); | 386 | plugin->expire_blocks); |
@@ -406,6 +421,7 @@ static int | |||
406 | namecache_sqlite_cache_block (void *cls, | 421 | namecache_sqlite_cache_block (void *cls, |
407 | const struct GNUNET_GNSRECORD_Block *block) | 422 | const struct GNUNET_GNSRECORD_Block *block) |
408 | { | 423 | { |
424 | static struct GNUNET_TIME_Absolute last_expire; | ||
409 | struct Plugin *plugin = cls; | 425 | struct Plugin *plugin = cls; |
410 | struct GNUNET_HashCode query; | 426 | struct GNUNET_HashCode query; |
411 | struct GNUNET_TIME_Absolute expiration; | 427 | struct GNUNET_TIME_Absolute expiration; |
@@ -426,7 +442,13 @@ namecache_sqlite_cache_block (void *cls, | |||
426 | }; | 442 | }; |
427 | int n; | 443 | int n; |
428 | 444 | ||
429 | namecache_sqlite_expire_blocks (plugin); | 445 | /* run expiration of old cache entries once per hour */ |
446 | if (GNUNET_TIME_absolute_get_duration (last_expire).rel_value_us > | ||
447 | GNUNET_TIME_UNIT_HOURS.rel_value_us) | ||
448 | { | ||
449 | last_expire = GNUNET_TIME_absolute_get (); | ||
450 | namecache_sqlite_expire_blocks (plugin); | ||
451 | } | ||
430 | GNUNET_CRYPTO_hash (&block->derived_key, | 452 | GNUNET_CRYPTO_hash (&block->derived_key, |
431 | sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), | 453 | sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey), |
432 | &query); | 454 | &query); |