]> source.dussan.org Git - rspamd.git/commitdiff
Fix expiration for fuzzy hashes.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 27 Apr 2015 10:10:54 +0000 (11:10 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 27 Apr 2015 10:10:54 +0000 (11:10 +0100)
Issue: #267
Reported by: @moiseev

src/libserver/fuzzy_backend.c

index 7ebb9c69b47ca4d81ec1988c866ab7f275665ef5..0d7ce9485e8980476aaa3d0d44d6cfd7c07c772e 100644 (file)
@@ -720,20 +720,44 @@ gboolean
 rspamd_fuzzy_backend_sync (struct rspamd_fuzzy_backend *backend, gint64 expire)
 {
        gboolean ret = FALSE;
+       gint64 expire_lim, expired;
+       gint rc;
+       GError *err = NULL;
 
        /* Perform expire */
        if (expire > 0) {
-               rspamd_fuzzy_backend_run_simple (RSPAMD_FUZZY_BACKEND_EXPIRE,
-                               backend, NULL);
-               backend->expired += sqlite3_changes (backend->db);
+               expire_lim = time (NULL) - expire;
+
+               if (expire_lim > 0) {
+                       rc = rspamd_fuzzy_backend_run_stmt (backend,
+                                       RSPAMD_FUZZY_BACKEND_EXPIRE, expire_lim);
+
+                       if (rc == SQLITE_OK) {
+                               expired = sqlite3_changes (backend->db);
+
+                               if (expired > 0) {
+                                       backend->expired += expired;
+                                       msg_info ("expired %L hashes", expired);
+                               }
+                       }
+                       else {
+                               msg_warn ("cannot execute expired statement: %s",
+                                               sqlite3_errmsg (backend->db));
+                       }
+               }
+
        }
        ret = rspamd_fuzzy_backend_run_simple (RSPAMD_FUZZY_BACKEND_TRANSACTION_COMMIT,
-                       backend, NULL);
+                       backend, &err);
 
        if (ret) {
                ret = rspamd_fuzzy_backend_run_simple (RSPAMD_FUZZY_BACKEND_TRANSACTION_START,
                        backend, NULL);
        }
+       else {
+               msg_warn ("cannot synchronise fuzzy backend: %e", err);
+               g_error_free (err);
+       }
 
        return ret;
 }