}
#endif
-/** Prune expired/invalid records. */
-static int cache_prune(lua_State *L)
-{
- struct kr_cache *cache = cache_assert_open(L);
- /* Check parameters */
- int prune_max = UINT16_MAX;
- int n = lua_gettop(L);
- if (n >= 1 && lua_isnumber(L, 1))
- prune_max = lua_tointeger(L, 1);
-
- /* Check if API supports pruning. */
- int ret = kr_error(ENOSYS);
- if (cache->api->prune)
- ret = cache->api->prune(cache->db, prune_max);
- /* Commit and format result. */
- lua_error_maybe(L, ret);
- lua_pushinteger(L, ret);
- return 1;
-}
-
/** Clear everything. */
static int cache_clear_everything(lua_State *L)
{
{ "checkpoint", cache_checkpoint },
{ "open", cache_open },
{ "close", cache_close },
- { "prune", cache_prune },
{ "clear_everything", cache_clear_everything },
{ "get", cache_get },
{ "max_ttl", cache_max_ttl },
/** Find key-value pairs that are prefixed by the given key, limited by maxcount.
* \return the number of pairs or negative error. */
int (*match)(knot_db_t *db, knot_db_val_t *key, knot_db_val_t keyval[][2], int maxcount);
- /** Not implemented ATM. */
- int (*prune)(knot_db_t *db, int maxcount);
/** Less-or-equal search (lexicographic ordering).
* On successful return, key->data and val->data point to DB-owned data.
}
-static int cdb_prune(knot_db_t *db, int limit)
-{
- return -1;
-#if 0
- /* Sync in-flight transactions */
- cdb_sync(db);
-
- /* Prune old records */
- struct lmdb_env *env = db;
- MDB_txn *txn = NULL;
- int ret = txn_get(env, &txn, false);
- if (ret != 0) {
- return ret;
- }
-
- MDB_cursor *cur = NULL;
- ret = mdb_cursor_open(txn, env->dbi, &cur);
- if (ret != 0) {
- return lmdb_error(ret);
- }
-
- MDB_val cur_key, cur_val;
- ret = mdb_cursor_get(cur, &cur_key, &cur_val, MDB_FIRST);
- if (ret != 0) {
- mdb_cursor_close(cur);
- return lmdb_error(ret);
- }
-
- int results = 0;
- struct timeval now;
- gettimeofday(&now, NULL);
- while (ret == 0 && results < limit) {
- /* Ignore special namespaces. */
- if (cur_key.mv_size < 2 || ((const char *)cur_key.mv_data)[0] == 'V') {
- ret = mdb_cursor_get(cur, &cur_key, &cur_val, MDB_NEXT);
- continue;
- }
- /* Check entry age. */
- struct kr_cache_entry *entry = cur_val.mv_data;
- if (entry->timestamp > now.tv_sec ||
- (now.tv_sec - entry->timestamp) < entry->ttl) {
- ret = mdb_cursor_get(cur, &cur_key, &cur_val, MDB_NEXT);
- continue;
- }
- /* Remove entry */
- mdb_cursor_del(cur, 0);
- ++results;
- ret = mdb_cursor_get(cur, &cur_key, &cur_val, MDB_NEXT);
- }
- mdb_cursor_close(cur);
- return ret < 0 ? ret : results;
-#endif
-}
-
static int cdb_read_leq(knot_db_t *env, knot_db_val_t *key, knot_db_val_t *val)
{
assert(env && key && key->data && val);
"lmdb",
cdb_init, cdb_deinit, cdb_count, cdb_clear, cdb_sync,
cdb_readv, cdb_writev, cdb_remove,
- cdb_match, cdb_prune,
+ cdb_match,
cdb_read_leq
};