@@ -212,7 +212,14 @@ void slab_expireDelete(tairhash_zskiplist *zsl, RedisModuleString *key, long lon
212212
213213 if (update_findNode ) { // update min value
214214 int smallest_subscript = slab_minExpireTimeIndex (find_slab );
215- find_node -> expire_min = find_slab -> expires [smallest_subscript ], find_node -> key_min = find_slab -> keys [smallest_subscript ];
215+ long long new_expire_min = find_slab -> expires [smallest_subscript ];
216+ RedisModuleString * new_key_min = find_slab -> keys [smallest_subscript ];
217+ if (new_expire_min != find_node -> expire_min || RedisModule_StringCompare (new_key_min , find_node -> key_min ) != 0 ) {
218+ Slab * slab = find_node -> slab ;
219+ int ret = tairhash_zslDelete (zsl , find_node -> key_min , find_node -> expire_min );
220+ assert (ret == 1 );
221+ find_node = tairhash_zslInsertNode (zsl , slab , new_key_min , new_expire_min );
222+ }
216223 }
217224 slab_mergeIfNeed (zsl , find_node ); // if need merge
218225 return ;
@@ -268,7 +275,13 @@ void slab_deleteSlabExpire(tairhash_zskiplist *zsl, tairhash_zskiplistNode *zsl_
268275 }
269276 }
270277 slab -> num_keys = effective_num ;
271- zsl_node -> expire_min = slab -> expires [min_index ], zsl_node -> key_min = slab -> keys [min_index ];
278+ long long new_expire_min = slab -> expires [min_index ];
279+ RedisModuleString * new_key_min = slab -> keys [min_index ];
280+ if (new_expire_min != zsl_node -> expire_min || RedisModule_StringCompare (new_key_min , zsl_node -> key_min ) != 0 ) {
281+ int ret = tairhash_zslDelete (zsl , zsl_node -> key_min , zsl_node -> expire_min );
282+ assert (ret == 1 );
283+ zsl_node = tairhash_zslInsertNode (zsl , slab , new_key_min , new_expire_min );
284+ }
272285 slab_mergeIfNeed (zsl , zsl_node );
273286 return ;
274287}
0 commit comments