MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / defragZsetSkiplist

Function defragZsetSkiplist

src/defrag.cpp:585–616  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

583}
584
585long defragZsetSkiplist(redisDb *db, dictEntry *kde) {
586 robj *ob = (robj*)dictGetVal(kde);
587 long defragged = 0;
588 zset *zs = (zset*)ptrFromObj(ob);
589 zset *newzs;
590 zskiplist *newzsl;
591 dict *newdict;
592 dictEntry *de;
593 struct zskiplistNode *newheader;
594 serverAssert(ob->type == OBJ_ZSET && ob->encoding == OBJ_ENCODING_SKIPLIST);
595 if ((newzs = (zset*)activeDefragAlloc(zs)))
596 defragged++, ob->m_ptr = zs = newzs;
597 if ((newzsl = (zskiplist*)activeDefragAlloc(zs->zsl)))
598 defragged++, zs->zsl = newzsl;
599 if ((newheader = (zskiplistNode*)activeDefragAlloc(zs->zsl->header)))
600 defragged++, zs->zsl->header = newheader;
601 if (dictSize(zs->dict) > cserver.active_defrag_max_scan_fields)
602 defragLater(db, kde);
603 else {
604 dictIterator *di = dictGetIterator(zs->dict);
605 while((de = dictNext(di)) != NULL) {
606 defragged += activeDefragZsetEntry(zs, de);
607 }
608 dictReleaseIterator(di);
609 }
610 /* handle the dict struct */
611 if ((newdict = (dict*)activeDefragAlloc(zs->dict)))
612 defragged++, zs->dict = newdict;
613 /* defrag the dict tables */
614 defragged += dictDefragTables(zs->dict);
615 return defragged;
616}
617
618long defragHash(redisDb *db, dictEntry *kde) {
619 long defragged = 0;

Callers 1

defragKeyFunction · 0.85

Calls 8

ptrFromObjFunction · 0.85
activeDefragAllocFunction · 0.85
defragLaterFunction · 0.85
activeDefragZsetEntryFunction · 0.85
dictDefragTablesFunction · 0.85
dictGetIteratorFunction · 0.70
dictNextFunction · 0.70
dictReleaseIteratorFunction · 0.70

Tested by

no test coverage detected