X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/5290f05c34291ab6853ad097893238efb53bfb8e..35e29472609cb3345809d48f0b4e7c75b6c1be6f:/src/migrate.c diff --git a/src/migrate.c b/src/migrate.c index 23f40e48..59d2ed5a 100644 --- a/src/migrate.c +++ b/src/migrate.c @@ -253,7 +253,6 @@ socket_rd_err: } void stopKeyArchive(void) { - redisAssert(server.mdb_state == REDIS_MDB_ON); redisAssert(env != NULL); mdb_dbi_close(env, dbi); @@ -264,7 +263,6 @@ void stopKeyArchive(void) { } int startKeyArchive(void) { - redisAssert(server.mdb_state == REDIS_MDB_OFF); redisAssert(env == NULL); int ret; @@ -278,9 +276,9 @@ int startKeyArchive(void) { ret = mdb_env_set_maxdbs(env, 1); if (ret != 0) return ret; - mkdir(server.mdb_environment, 0644); + mkdir(server.mdb_environment, 0755); - ret = mdb_env_open(env, server.mdb_environment, MDB_FIXEDMAP | MDB_NOSYNC, 0664); + ret = mdb_env_open(env, server.mdb_environment, MDB_FIXEDMAP | MDB_NOSYNC, 0644); if (ret != 0) return ret; MDB_txn *txn; @@ -400,3 +398,27 @@ recover_err: sdsfree(sval); return NULL; } + +void purge(robj *key) { + if (server.mdb_state == REDIS_MDB_OFF) + return; + + int ret; + + MDB_val kval; + kval.mv_data = key->ptr; + kval.mv_size = sdslen((sds)key->ptr); + + MDB_txn *txn; + ret = mdb_txn_begin(env, NULL, 0, &txn); + if (ret != 0) + return; + + ret = mdb_del(txn, dbi, &kval, NULL); + if (ret != 0) { + mdb_txn_abort(txn); + return; + } + + mdb_txn_commit(txn); +}