aboutsummaryrefslogtreecommitdiff
path: root/src/namecache
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-12-02 00:30:45 +0100
committerChristian Grothoff <christian@grothoff.org>2018-12-02 00:30:45 +0100
commit86a4cfa3852275ab2a286ffd112651c3ae609eea (patch)
tree2b1192899506504715c00c7f034d385ee2455b81 /src/namecache
parent65b840cd289c3f978e507e527443c8a8eb6ad113 (diff)
downloadgnunet-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.c40
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
406namecache_sqlite_cache_block (void *cls, 421namecache_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);