returns 0 more work may or may not be needed (see non-zero cursor), * and 1 if time is up and more work is needed. */
| 949 | /* returns 0 more work may or may not be needed (see non-zero cursor), |
| 950 | * and 1 if time is up and more work is needed. */ |
| 951 | int defragLaterItem(dictEntry *de, unsigned long *cursor, long long endtime) { |
| 952 | if (de) { |
| 953 | robj *ob = dictGetVal(de); |
| 954 | if (ob->type == OBJ_LIST) { |
| 955 | return scanLaterList(ob, cursor, endtime, &server.stat_active_defrag_hits); |
| 956 | } else if (ob->type == OBJ_SET) { |
| 957 | server.stat_active_defrag_hits += scanLaterSet(ob, cursor); |
| 958 | } else if (ob->type == OBJ_ZSET) { |
| 959 | server.stat_active_defrag_hits += scanLaterZset(ob, cursor); |
| 960 | } else if (ob->type == OBJ_HASH) { |
| 961 | server.stat_active_defrag_hits += scanLaterHash(ob, cursor); |
| 962 | } else if (ob->type == OBJ_STREAM) { |
| 963 | return scanLaterStreamListpacks(ob, cursor, endtime, &server.stat_active_defrag_hits); |
| 964 | } else if (ob->type == OBJ_MODULE) { |
| 965 | return moduleLateDefrag(dictGetKey(de), ob, cursor, endtime, &server.stat_active_defrag_hits); |
| 966 | } else { |
| 967 | *cursor = 0; /* object type may have changed since we schedule it for later */ |
| 968 | } |
| 969 | } else { |
| 970 | *cursor = 0; /* object may have been deleted already */ |
| 971 | } |
| 972 | return 0; |
| 973 | } |
| 974 | |
| 975 | /* static variables serving defragLaterStep to continue scanning a key from were we stopped last time. */ |
| 976 | static sds defrag_later_current_key = NULL; |
no test coverage detected