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

Function setDeferredAggregateLen

src/networking.cpp:771–802  ·  view source on GitHub ↗

Populate the length object and try gluing it to the next chunk. */

Source from the content-addressed store, hash-verified

769
770/* Populate the length object and try gluing it to the next chunk. */
771void setDeferredAggregateLen(client *c, void *node, long length, char prefix) {
772 serverAssert(length >= 0);
773
774 if (FCorrectThread(c)) {
775 /* Abort when *node is NULL: when the client should not accept writes
776 * we return NULL in addReplyDeferredLen() */
777 if (node == NULL) return;
778 char lenstr[128];
779 size_t lenstr_len = snprintf(lenstr, sizeof(lenstr), "%c%ld\r\n", prefix, length);
780 setDeferredReply(c, node, lenstr, lenstr_len);
781 } else {
782 char lenstr[128];
783 int lenstr_len = snprintf(lenstr, sizeof(lenstr), "%c%ld\r\n", prefix, length);
784
785 size_t idxSplice = (size_t)node;
786 serverAssert(idxSplice <= c->replyAsync->used);
787 if (c->replyAsync->size < (c->replyAsync->used + lenstr_len))
788 {
789 int newsize = std::max(c->replyAsync->used + lenstr_len, c->replyAsync->size*2);
790 clientReplyBlock *replyNew = (clientReplyBlock*)zmalloc(sizeof(clientReplyBlock) + newsize);
791 replyNew->size = zmalloc_usable_size(replyNew) - sizeof(clientReplyBlock);
792 replyNew->used = c->replyAsync->used;
793 memcpy(replyNew->buf(), c->replyAsync->buf(), c->replyAsync->used);
794 zfree(c->replyAsync);
795 c->replyAsync = replyNew;
796 }
797
798 memmove(c->replyAsync->buf() + idxSplice + lenstr_len, c->replyAsync->buf() + idxSplice, c->replyAsync->used - idxSplice);
799 memcpy(c->replyAsync->buf() + idxSplice, lenstr, lenstr_len);
800 c->replyAsync->used += lenstr_len;
801 }
802}
803
804void setDeferredArrayLen(client *c, void *node, long length) {
805 setDeferredAggregateLen(c,node,length,'*');

Callers 5

setDeferredArrayLenFunction · 0.85
setDeferredMapLenFunction · 0.85
setDeferredSetLenFunction · 0.85
setDeferredAttributeLenFunction · 0.85
setDeferredPushLenFunction · 0.85

Calls 6

FCorrectThreadFunction · 0.85
setDeferredReplyFunction · 0.85
zmallocFunction · 0.85
zmalloc_usable_sizeFunction · 0.85
zfreeFunction · 0.85
bufMethod · 0.45

Tested by

no test coverage detected