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

Function restoreCommand

src/cluster.cpp:5252–5365  ·  view source on GitHub ↗

RESTORE key ttl serialized-value [REPLACE] */

Source from the content-addressed store, hash-verified

5250
5251/* RESTORE key ttl serialized-value [REPLACE] */
5252void restoreCommand(client *c) {
5253 long long ttl, lfu_freq = -1, lru_idle = -1, lru_clock = -1;
5254 rio payload;
5255 int j, type, replace = 0, absttl = 0;
5256 robj *obj;
5257
5258 /* Parse additional options */
5259 for (j = 4; j < c->argc; j++) {
5260 int additional = c->argc-j-1;
5261 if (!strcasecmp(szFromObj(c->argv[j]),"replace")) {
5262 replace = 1;
5263 } else if (!strcasecmp(szFromObj(c->argv[j]),"absttl")) {
5264 absttl = 1;
5265 } else if (!strcasecmp(szFromObj(c->argv[j]),"idletime") && additional >= 1 &&
5266 lfu_freq == -1)
5267 {
5268 if (getLongLongFromObjectOrReply(c,c->argv[j+1],&lru_idle,NULL)
5269 != C_OK) return;
5270 if (lru_idle < 0) {
5271 addReplyError(c,"Invalid IDLETIME value, must be >= 0");
5272 return;
5273 }
5274 lru_clock = LRU_CLOCK();
5275 j++; /* Consume additional arg. */
5276 } else if (!strcasecmp(szFromObj(c->argv[j]),"freq") && additional >= 1 &&
5277 lru_idle == -1)
5278 {
5279 if (getLongLongFromObjectOrReply(c,c->argv[j+1],&lfu_freq,NULL)
5280 != C_OK) return;
5281 if (lfu_freq < 0 || lfu_freq > 255) {
5282 addReplyError(c,"Invalid FREQ value, must be >= 0 and <= 255");
5283 return;
5284 }
5285 j++; /* Consume additional arg. */
5286 } else {
5287 addReplyErrorObject(c,shared.syntaxerr);
5288 return;
5289 }
5290 }
5291
5292 /* Make sure this key does not already exist here... */
5293 robj *key = c->argv[1];
5294 if (!replace && lookupKeyWrite(c->db,key) != NULL) {
5295 addReplyErrorObject(c,shared.busykeyerr);
5296 return;
5297 }
5298
5299 /* Check if the TTL value makes sense */
5300 if (getLongLongFromObjectOrReply(c,c->argv[2],&ttl,NULL) != C_OK) {
5301 return;
5302 } else if (ttl < 0) {
5303 addReplyError(c,"Invalid TTL value, must be >= 0");
5304 return;
5305 }
5306
5307 /* Verify RDB version and data checksum. */
5308 if (verifyDumpPayload((unsigned char*)ptrFromObj(c->argv[3]),sdslen(szFromObj(c->argv[3]))) == C_ERR)
5309 {

Callers

nothing calls this directly

Calls 15

szFromObjFunction · 0.85
addReplyErrorFunction · 0.85
LRU_CLOCKFunction · 0.85
addReplyErrorObjectFunction · 0.85
lookupKeyWriteFunction · 0.85
verifyDumpPayloadFunction · 0.85
ptrFromObjFunction · 0.85
sdslenFunction · 0.85
rioInitWithBufferFunction · 0.85
rdbLoadObjectTypeFunction · 0.85
rdbLoadObjectFunction · 0.85

Tested by

no test coverage detected