diff --git a/src/ctrip_swap_string.c b/src/ctrip_swap_string.c index 03024daab5a..a85e3e6726f 100644 --- a/src/ctrip_swap_string.c +++ b/src/ctrip_swap_string.c @@ -282,7 +282,8 @@ static void tryTransStringToBitmap(redisDb *db, robj *key) { int wholeKeyBeforeCall(swapData *data, keyRequest *key_request, client *c, void *datactx) { UNUSED(data), UNUSED(c), UNUSED(datactx); - if (key_request->cmd_flags & CMD_SWAP_DATATYPE_BITMAP) { + robj *o = lookupKey(data->db, data->key, LOOKUP_NOTOUCH); + if ((key_request->cmd_flags & CMD_SWAP_DATATYPE_BITMAP) && o) { tryTransStringToBitmap(data->db,data->key); } return 0; diff --git a/src/networking.c b/src/networking.c index b8260a031e7..79a0e223072 100644 --- a/src/networking.c +++ b/src/networking.c @@ -1426,6 +1426,7 @@ void freeClient(client *c) { serverAssert(!(server.swap_draining_master && server.master)); if (c->keyrequests_count) { + c->flags &= ~CLIENT_CLOSE_ASAP; if (server.master && c->flags & CLIENT_MASTER) { serverLog(LL_WARNING, "Connection with master lost (defer start with %d key requests).", c->keyrequests_count); server.swap_draining_master = server.master;