X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/8e2a225aa6cd1848a282d3d96742759cc24fc7e8..b0aa9bc8cdd36925b2d8e5d3a9c1e1476eaa6fc1:/src/migrate.c diff --git a/src/migrate.c b/src/migrate.c index a00f0e63..3886f62c 100644 --- a/src/migrate.c +++ b/src/migrate.c @@ -252,41 +252,54 @@ socket_rd_err: return; } -void mdb(void) { - int ret; +void stopKeyArchive(void) { + redisAssert(server.mdb_state == REDIS_MDB_ON); + redisAssert(env != NULL); - if (env != NULL) - return; + mdb_dbi_close(env, dbi); + mdb_env_close(env); + env = NULL; + + server.mdb_state = REDIS_MDB_OFF; +} + +int startKeyArchive(void) { + redisAssert(server.mdb_state == REDIS_MDB_OFF); + redisAssert(env == NULL); + + int ret; ret = mdb_env_create(&env); - redisAssert(ret == 0); + if (ret != 0) return ret; ret = mdb_env_set_mapsize(env, server.mdb_mapsize); - redisAssert(ret == 0); + if (ret != 0) return ret; ret = mdb_env_set_maxdbs(env, 1); - redisAssert(ret == 0); + if (ret != 0) return ret; mkdir(server.mdb_environment, 0644); ret = mdb_env_open(env, server.mdb_environment, MDB_FIXEDMAP | MDB_NOSYNC, 0664); - redisAssert(ret == 0); + if (ret != 0) return ret; MDB_txn *txn; ret = mdb_txn_begin(env, NULL, 0, &txn); - redisAssert(ret == 0); + if (ret != 0) return ret; ret = mdb_open(txn, NULL, 0, &dbi); - redisAssert(ret == 0); + if (ret != 0) return ret; mdb_txn_commit(txn); + + server.mdb_state = REDIS_MDB_ON; + return 0; } int archive(redisDb *db, robj *key) { if (server.mdb_state == REDIS_MDB_OFF) return 1; - - mdb(); + redisAssert(env != NULL); MDB_val kval; kval.mv_data = key->ptr; @@ -336,8 +349,6 @@ robj *recover(redisDb *db, robj *key) { int ret; - mdb(); - MDB_val kval; kval.mv_data = key->ptr; kval.mv_size = sdslen((sds)key->ptr);