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

Function rdbSaveObject

src/rdb.cpp:822–1093  ·  view source on GitHub ↗

Save a Redis object. * Returns -1 on error, number of bytes written on success. */

Source from the content-addressed store, hash-verified

820/* Save a Redis object.
821 * Returns -1 on error, number of bytes written on success. */
822ssize_t rdbSaveObject(rio *rdb, robj_roptr o, robj_roptr key) {
823 ssize_t n = 0, nwritten = 0;
824
825 if (o->type == OBJ_STRING) {
826 /* Save a string value */
827 if ((n = rdbSaveStringObject(rdb,o)) == -1) return -1;
828 nwritten += n;
829 } else if (o->type == OBJ_LIST) {
830 /* Save a list value */
831 if (o->encoding == OBJ_ENCODING_QUICKLIST) {
832 quicklist *ql = (quicklist*)ptrFromObj(o);
833 quicklistNode *node = ql->head;
834
835 if ((n = rdbSaveLen(rdb,ql->len)) == -1) return -1;
836 nwritten += n;
837
838 while(node) {
839 if (quicklistNodeIsCompressed(node)) {
840 void *data;
841 size_t compress_len = quicklistGetLzf(node, &data);
842 if ((n = rdbSaveLzfBlob(rdb,data,compress_len,node->sz)) == -1) return -1;
843 nwritten += n;
844 } else {
845 if ((n = rdbSaveRawString(rdb,node->zl,node->sz)) == -1) return -1;
846 nwritten += n;
847 }
848 node = node->next;
849 }
850 } else {
851 serverPanic("Unknown list encoding");
852 }
853 } else if (o->type == OBJ_SET) {
854 /* Save a set value */
855 if (o->encoding == OBJ_ENCODING_HT) {
856 dict *set = (dict*)ptrFromObj(o);
857 dictIterator *di = dictGetIterator(set);
858 dictEntry *de;
859
860 if ((n = rdbSaveLen(rdb,dictSize(set))) == -1) {
861 dictReleaseIterator(di);
862 return -1;
863 }
864 nwritten += n;
865
866 while((de = dictNext(di)) != NULL) {
867 sds ele = (sds)dictGetKey(de);
868 if ((n = rdbSaveRawString(rdb,(unsigned char*)ele,sdslen(ele)))
869 == -1)
870 {
871 dictReleaseIterator(di);
872 return -1;
873 }
874 nwritten += n;
875 }
876 dictReleaseIterator(di);
877 } else if (o->encoding == OBJ_ENCODING_INTSET) {
878 size_t l = intsetBlobLen((intset*)ptrFromObj(o));
879

Callers 3

createDumpPayloadFunction · 0.85
rdbSavedObjectLenFunction · 0.85
rdbSaveKeyValuePairFunction · 0.85

Calls 15

rdbSaveStringObjectFunction · 0.85
ptrFromObjFunction · 0.85
rdbSaveLenFunction · 0.85
quicklistGetLzfFunction · 0.85
rdbSaveLzfBlobFunction · 0.85
rdbSaveRawStringFunction · 0.85
sdslenFunction · 0.85
intsetBlobLenFunction · 0.85
szFromObjFunction · 0.85
ziplistBlobLenFunction · 0.85
rdbSaveBinaryDoubleValueFunction · 0.85
raxSizeFunction · 0.85

Tested by

no test coverage detected