#include "system/glob.h"
#include "util_tdb.h"
#include "tdb_wrap/tdb_wrap.h"
-#include "../lib/util/memcache.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_TDB
static struct tdb_wrap *cache;
static struct tdb_wrap *cache_notrans;
-static int cache_notrans_seqnum;
/**
* @file gencache.c
cache_notrans = tdb_wrap_open(NULL, cache_fname, 0,
TDB_CLEAR_IF_FIRST|
TDB_INCOMPATIBLE_HASH|
- TDB_SEQNUM|
TDB_NOSYNC|
TDB_MUTEX_LOCKING,
open_flags, 0644);
struct gencache_parse_state {
void (*parser)(time_t timeout, DATA_BLOB blob, void *private_data);
void *private_data;
- bool is_memcache;
};
static int gencache_parse_fn(TDB_DATA key, TDB_DATA data, void *private_data)
endptr+1, data.dsize - PTR_DIFF(endptr+1, data.dptr));
state->parser(t, blob, state->private_data);
- if (!state->is_memcache) {
- memcache_add(NULL, GENCACHE_RAM,
- data_blob_const(key.dptr, key.dsize),
- data_blob_const(data.dptr, data.dsize));
- }
-
return 0;
}
{
struct gencache_parse_state state;
TDB_DATA key = string_term_tdb_data(keystr);
- DATA_BLOB memcache_val;
int ret;
if (keystr == NULL) {
state.parser = parser;
state.private_data = private_data;
- if (memcache_lookup(NULL, GENCACHE_RAM,
- data_blob_const(key.dptr, key.dsize),
- &memcache_val)) {
- /*
- * Make sure that nobody has changed the gencache behind our
- * back.
- */
- int current_seqnum = tdb_get_seqnum(cache_notrans->tdb);
- if (current_seqnum == cache_notrans_seqnum) {
- /*
- * Ok, our memcache is still current, use it without
- * going to the tdb files.
- */
- state.is_memcache = true;
- gencache_parse_fn(key, make_tdb_data(memcache_val.data,
- memcache_val.length),
- &state);
- return true;
- }
- memcache_flush(NULL, GENCACHE_RAM);
- cache_notrans_seqnum = current_seqnum;
- }
-
- state.is_memcache = false;
-
ret = tdb_parse_record(cache_notrans->tdb, key,
gencache_parse_fn, &state);
if (ret == 0) {