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

Function mvccrestoreCommand

src/cluster.cpp:5206–5249  ·  view source on GitHub ↗

KEYDB.MVCCRESTORE key mvcc expire serialized-value */

Source from the content-addressed store, hash-verified

5204
5205/* KEYDB.MVCCRESTORE key mvcc expire serialized-value */
5206void mvccrestoreCommand(client *c) {
5207 long long expire;
5208 uint64_t mvcc;
5209 robj *key = c->argv[1], *obj = nullptr;
5210 int type;
5211
5212 if (getUnsignedLongLongFromObjectOrReply(c, c->argv[2], &mvcc, "Invalid MVCC Tstamp") != C_OK)
5213 return;
5214
5215 if (getLongLongFromObjectOrReply(c, c->argv[3], &expire, "Invalid expire") != C_OK)
5216 return;
5217
5218 /* Verify RDB version and data checksum unles the client is already a replica or master */
5219 if (!(c->flags & (CLIENT_SLAVE | CLIENT_MASTER))) {
5220 if (verifyDumpPayload((unsigned char*)ptrFromObj(c->argv[4]),sdslen(szFromObj(c->argv[4]))) == C_ERR)
5221 {
5222 addReplyError(c,"DUMP payload version or checksum are wrong");
5223 return;
5224 }
5225 }
5226
5227 rio payload;
5228 rioInitWithBuffer(&payload,szFromObj(c->argv[4]));
5229 if (((type = rdbLoadObjectType(&payload)) == -1) ||
5230 ((obj = rdbLoadObject(type,&payload,szFromObj(key),NULL,OBJ_MVCC_INVALID)) == NULL))
5231 {
5232 addReplyError(c,"Bad data format");
5233 return;
5234 }
5235 setMvccTstamp(obj, mvcc);
5236
5237 /* Create the key and set the TTL if any */
5238 if (dbMerge(c->db,szFromObj(key),obj,true)) {
5239 if (expire >= 0) {
5240 setExpire(c,c->db,key,nullptr,expire);
5241 }
5242 signalModifiedKey(c,c->db,key);
5243 notifyKeyspaceEvent(NOTIFY_GENERIC,"restore",key,c->db->id);
5244 } else {
5245 decrRefCount(obj);
5246 }
5247 addReply(c,shared.ok);
5248 g_pserver->dirty++;
5249}
5250
5251/* RESTORE key ttl serialized-value [REPLACE] */
5252void restoreCommand(client *c) {

Callers

nothing calls this directly

Calls 15

verifyDumpPayloadFunction · 0.85
ptrFromObjFunction · 0.85
sdslenFunction · 0.85
szFromObjFunction · 0.85
addReplyErrorFunction · 0.85
rioInitWithBufferFunction · 0.85
rdbLoadObjectTypeFunction · 0.85
rdbLoadObjectFunction · 0.85
setMvccTstampFunction · 0.85
dbMergeFunction · 0.85

Tested by

no test coverage detected