MCPcopy Create free account
hub / github.com/F-Stack/f-stack / restoreCommand

Function restoreCommand

app/redis-6.2.6/src/cluster.c:5116–5214  ·  view source on GitHub ↗

RESTORE key ttl serialized-value [REPLACE] */

Source from the content-addressed store, hash-verified

5114
5115/* RESTORE key ttl serialized-value [REPLACE] */
5116void restoreCommand(client *c) {
5117 long long ttl, lfu_freq = -1, lru_idle = -1, lru_clock = -1;
5118 rio payload;
5119 int j, type, replace = 0, absttl = 0;
5120 robj *obj;
5121
5122 /* Parse additional options */
5123 for (j = 4; j < c->argc; j++) {
5124 int additional = c->argc-j-1;
5125 if (!strcasecmp(c->argv[j]->ptr,"replace")) {
5126 replace = 1;
5127 } else if (!strcasecmp(c->argv[j]->ptr,"absttl")) {
5128 absttl = 1;
5129 } else if (!strcasecmp(c->argv[j]->ptr,"idletime") && additional >= 1 &&
5130 lfu_freq == -1)
5131 {
5132 if (getLongLongFromObjectOrReply(c,c->argv[j+1],&lru_idle,NULL)
5133 != C_OK) return;
5134 if (lru_idle < 0) {
5135 addReplyError(c,"Invalid IDLETIME value, must be >= 0");
5136 return;
5137 }
5138 lru_clock = LRU_CLOCK();
5139 j++; /* Consume additional arg. */
5140 } else if (!strcasecmp(c->argv[j]->ptr,"freq") && additional >= 1 &&
5141 lru_idle == -1)
5142 {
5143 if (getLongLongFromObjectOrReply(c,c->argv[j+1],&lfu_freq,NULL)
5144 != C_OK) return;
5145 if (lfu_freq < 0 || lfu_freq > 255) {
5146 addReplyError(c,"Invalid FREQ value, must be >= 0 and <= 255");
5147 return;
5148 }
5149 j++; /* Consume additional arg. */
5150 } else {
5151 addReplyErrorObject(c,shared.syntaxerr);
5152 return;
5153 }
5154 }
5155
5156 /* Make sure this key does not already exist here... */
5157 robj *key = c->argv[1];
5158 if (!replace && lookupKeyWrite(c->db,key) != NULL) {
5159 addReplyErrorObject(c,shared.busykeyerr);
5160 return;
5161 }
5162
5163 /* Check if the TTL value makes sense */
5164 if (getLongLongFromObjectOrReply(c,c->argv[2],&ttl,NULL) != C_OK) {
5165 return;
5166 } else if (ttl < 0) {
5167 addReplyError(c,"Invalid TTL value, must be >= 0");
5168 return;
5169 }
5170
5171 /* Verify RDB version and data checksum. */
5172 if (verifyDumpPayload(c->argv[3]->ptr,sdslen(c->argv[3]->ptr)) == C_ERR)
5173 {

Callers

nothing calls this directly

Calls 15

strcasecmpFunction · 0.85
addReplyErrorFunction · 0.85
LRU_CLOCKFunction · 0.85
addReplyErrorObjectFunction · 0.85
lookupKeyWriteFunction · 0.85
verifyDumpPayloadFunction · 0.85
sdslenFunction · 0.85
rioInitWithBufferFunction · 0.85
rdbLoadObjectTypeFunction · 0.85
rdbLoadObjectFunction · 0.85
dbDeleteFunction · 0.85

Tested by

no test coverage detected