aboutsummaryrefslogtreecommitdiffstats
path: root/src/binlog.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-11-12 20:38:20 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-11-12 20:38:20 +0300
commit092a40dcf813accb11a0b6bb600dccea0b35fb1d (patch)
treebc15b37adda2a21575799204dbc528874d2e82c2 /src/binlog.c
parent1ad9f1f651ef3f0ee26d69007dd27e60f99f1f12 (diff)
downloadrspamd-092a40dcf813accb11a0b6bb600dccea0b35fb1d.tar.gz
rspamd-092a40dcf813accb11a0b6bb600dccea0b35fb1d.zip
* Write revision and revision time to statfile
* Make some improvements to API (trying to make it more clear)
Diffstat (limited to 'src/binlog.c')
-rw-r--r--src/binlog.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/binlog.c b/src/binlog.c
index c42e6b2af..9a96d4f7b 100644
--- a/src/binlog.c
+++ b/src/binlog.c
@@ -120,6 +120,9 @@ binlog_check_file (struct rspamd_binlog *log)
return FALSE;
}
+ log->cur_seq = log->cur_idx->last_index;
+ log->cur_time = log->cur_idx->indexes[log->cur_idx->last_index].time;
+
return TRUE;
}
@@ -246,6 +249,7 @@ write_binlog_tree (struct rspamd_binlog *log, GTree *nodes)
idx = &log->cur_idx->indexes[log->cur_idx->last_index];
idx->seek = seek;
idx->time = (uint64_t)time (NULL);
+ log->cur_time = idx->time;
idx->len = g_tree_nnodes (nodes) * sizeof (struct rspamd_binlog_element);
if (lseek (log->fd, log->metaindex->indexes[log->metaindex->last_index], SEEK_SET) == -1) {
unlock_file (log->fd, FALSE);
@@ -498,33 +502,22 @@ maybe_init_static ()
return TRUE;
}
-void
-maybe_write_binlog (struct classifier_config *ccf, const char *symbol, GTree *nodes)
+gboolean
+maybe_write_binlog (struct classifier_config *ccf, struct statfile *st, stat_file_t *file, GTree *nodes)
{
struct rspamd_binlog *log;
- struct statfile *st = NULL;
- GList *cur;
if (ccf == NULL) {
- return;
- }
-
- cur = g_list_first (ccf->statfiles);
- while (cur) {
- st = cur->data;
- if (strcmp (symbol, st->symbol) == 0) {
- break;
- }
- st = NULL;
- cur = g_list_next (cur);
+ return FALSE;
}
+
if (st == NULL || nodes == NULL || st->binlog == NULL || st->binlog->affinity != AFFINITY_MASTER) {
- return;
+ return FALSE;
}
if (!maybe_init_static ()) {
- return;
+ return FALSE;
}
if ((log = g_hash_table_lookup (binlog_opened, st)) == NULL) {
@@ -532,11 +525,16 @@ maybe_write_binlog (struct classifier_config *ccf, const char *symbol, GTree *no
g_hash_table_insert (binlog_opened, st, log);
}
else {
- return;
+ return FALSE;
}
}
- (void)binlog_insert (log, nodes);
+ if (binlog_insert (log, nodes)) {
+ (void)statfile_set_revision (file, log->cur_seq, log->cur_time);
+ return TRUE;
+ }
+
+ return FALSE;
}