@@ -2163,6 +2163,7 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
2163
2163
uint64_t mvcc_tstamp = OBJ_MVCC_INVALID;
2164
2164
robj *subexpireKey = nullptr ;
2165
2165
sds key = nullptr ;
2166
+ bool fLastKeyExpired = false ;
2166
2167
2167
2168
rdb->update_cksum = rdbLoadProgressCallback;
2168
2169
rdb->max_processing_chunk = g_pserver->loading_process_events_interval_bytes ;
@@ -2295,11 +2296,22 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
2295
2296
static_assert (sizeof (unsigned long long ) == sizeof (uint64_t ), " Ensure long long is 64-bits" );
2296
2297
mvcc_tstamp = strtoull (szFromObj (auxval), nullptr , 10 );
2297
2298
} else if (!strcasecmp (szFromObj (auxkey), " keydb-subexpire-key" )) {
2299
+ if (subexpireKey != nullptr ) {
2300
+ serverLog (LL_WARNING, " Corrupt subexpire entry in RDB skipping. key: %s subkey: %s" , key != nullptr ? key : " (null)" , subexpireKey != nullptr ? szFromObj (subexpireKey) : " (null)" );
2301
+ decrRefCount (subexpireKey);
2302
+ subexpireKey = nullptr ;
2303
+ }
2298
2304
subexpireKey = auxval;
2299
2305
incrRefCount (subexpireKey);
2300
2306
} else if (!strcasecmp (szFromObj (auxkey), " keydb-subexpire-when" )) {
2301
2307
if (key == nullptr || subexpireKey == nullptr ) {
2302
- serverLog (LL_WARNING, " Corrupt subexpire entry in RDB skipping. key: %s subkey: %s" , key != nullptr ? key : " (null)" , subexpireKey != nullptr ? szFromObj (subexpireKey) : " (null)" );
2308
+ if (!fLastKeyExpired ) { // This is not an error if we just expired the key associated with this subexpire
2309
+ serverLog (LL_WARNING, " Corrupt subexpire entry in RDB skipping. key: %s subkey: %s" , key != nullptr ? key : " (null)" , subexpireKey != nullptr ? szFromObj (subexpireKey) : " (null)" );
2310
+ }
2311
+ if (subexpireKey) {
2312
+ decrRefCount (subexpireKey);
2313
+ subexpireKey = nullptr ;
2314
+ }
2303
2315
}
2304
2316
else {
2305
2317
redisObject keyobj;
@@ -2404,13 +2416,17 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
2404
2416
rsi->mi ->staleKeyMap ->operator [](db - g_pserver->db ).push_back (objKeyDup);
2405
2417
decrRefCount (objKeyDup);
2406
2418
}
2419
+ serverLog (LL_WARNING, " Loaded expired key" );
2420
+ fLastKeyExpired = true ;
2407
2421
sdsfree (key);
2408
2422
key = nullptr ;
2409
2423
decrRefCount (val);
2410
2424
val = nullptr ;
2411
2425
} else {
2412
2426
/* Add the new object in the hash table */
2413
2427
int fInserted = dbMerge (db, &keyobj, val, (rsi && rsi->fForceSetKey ) || (rdbflags & RDBFLAGS_ALLOW_DUP)); // Note: dbMerge will incrRef
2428
+ serverLog (LL_WARNING, " Loaded: %s" , key);
2429
+ fLastKeyExpired = false ;
2414
2430
2415
2431
if (fInserted )
2416
2432
{
0 commit comments