| 773 | } |
| 774 | |
| 775 | long defragStream(redisDb *db, dictEntry *kde) { |
| 776 | long defragged = 0; |
| 777 | robj *ob = dictGetVal(kde); |
| 778 | serverAssert(ob->type == OBJ_STREAM && ob->encoding == OBJ_ENCODING_STREAM); |
| 779 | stream *s = ob->ptr, *news; |
| 780 | |
| 781 | /* handle the main struct */ |
| 782 | if ((news = activeDefragAlloc(s))) |
| 783 | defragged++, ob->ptr = s = news; |
| 784 | |
| 785 | if (raxSize(s->rax) > server.active_defrag_max_scan_fields) { |
| 786 | rax *newrax = activeDefragAlloc(s->rax); |
| 787 | if (newrax) |
| 788 | defragged++, s->rax = newrax; |
| 789 | defragLater(db, kde); |
| 790 | } else |
| 791 | defragged += defragRadixTree(&s->rax, 1, NULL, NULL); |
| 792 | |
| 793 | if (s->cgroups) |
| 794 | defragged += defragRadixTree(&s->cgroups, 1, defragStreamConsumerGroup, NULL); |
| 795 | return defragged; |
| 796 | } |
| 797 | |
| 798 | /* Defrag a module key. This is either done immediately or scheduled |
| 799 | * for later. Returns then number of pointers defragged. |
no test coverage detected