MCPcopy Create free account
hub / github.com/F-Stack/f-stack / moduleDefragValue

Function moduleDefragValue

app/redis-6.2.6/src/module.c:9187–9220  ·  view source on GitHub ↗

Attempt to defrag a module data type value. Depending on complexity, * the operation may happen immediately or be scheduled for later. * * Returns 1 if the operation has been completed or 0 if it needs to * be scheduled for late defrag. */

Source from the content-addressed store, hash-verified

9185 * be scheduled for late defrag.
9186 */
9187int moduleDefragValue(robj *key, robj *value, long *defragged) {
9188 moduleValue *mv = value->ptr;
9189 moduleType *mt = mv->type;
9190
9191 /* Try to defrag moduleValue itself regardless of whether or not
9192 * defrag callbacks are provided.
9193 */
9194 moduleValue *newmv = activeDefragAlloc(mv);
9195 if (newmv) {
9196 (*defragged)++;
9197 value->ptr = mv = newmv;
9198 }
9199
9200 if (!mt->defrag)
9201 return 1;
9202
9203 /* Use free_effort to determine complexity of module value, and if
9204 * necessary schedule it for defragLater instead of quick immediate
9205 * defrag.
9206 */
9207 if (mt->free_effort) {
9208 size_t effort = mt->free_effort(key, mv->value);
9209 if (!effort)
9210 effort = SIZE_MAX;
9211 if (effort > server.active_defrag_max_scan_fields) {
9212 return 0; /* Defrag later */
9213 }
9214 }
9215
9216 RedisModuleDefragCtx defrag_ctx = { 0, 0, NULL };
9217 mt->defrag(&defrag_ctx, key, &mv->value);
9218 (*defragged) += defrag_ctx.defragged;
9219 return 1;
9220}
9221
9222/* Call registered module API defrag functions */
9223long moduleDefragGlobals(void) {

Callers 1

defragModuleFunction · 0.85

Calls 1

activeDefragAllocFunction · 0.85

Tested by

no test coverage detected