Skip to content

Commit c80bba7

Browse files
authored
Moved most static strings into the shared structure (#8411)
Moved most static strings into the shared structure
1 parent 847ca09 commit c80bba7

11 files changed

Lines changed: 61 additions & 80 deletions

File tree

src/acl.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,7 +2253,7 @@ void authCommand(client *c) {
22532253
return;
22542254
}
22552255

2256-
username = createStringObject("default",7);
2256+
username = shared.default_username;
22572257
password = c->argv[1];
22582258
} else {
22592259
username = c->argv[1];
@@ -2265,9 +2265,5 @@ void authCommand(client *c) {
22652265
} else {
22662266
addReplyError(c,"-WRONGPASS invalid username-password pair or user is disabled.");
22672267
}
2268-
2269-
/* Free the "default" string object we created for the two
2270-
* arguments form. */
2271-
if (c->argc == 2) decrRefCount(username);
22722268
}
22732269

src/aof.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,11 +588,10 @@ sds catAppendOnlyExpireAtCommand(sds buf, struct redisCommand *cmd, robj *key, r
588588
}
589589
decrRefCount(seconds);
590590

591-
argv[0] = createStringObject("PEXPIREAT",9);
591+
argv[0] = shared.pexpireat;
592592
argv[1] = key;
593593
argv[2] = createStringObjectFromLongLong(when);
594594
buf = catAppendOnlyGenericCommand(buf, 3, argv);
595-
decrRefCount(argv[0]);
596595
decrRefCount(argv[2]);
597596
return buf;
598597
}

src/object.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -384,23 +384,6 @@ void decrRefCountVoid(void *o) {
384384
decrRefCount(o);
385385
}
386386

387-
/* This function set the ref count to zero without freeing the object.
388-
* It is useful in order to pass a new object to functions incrementing
389-
* the ref count of the received object. Example:
390-
*
391-
* functionThatWillIncrementRefCount(resetRefCount(CreateObject(...)));
392-
*
393-
* Otherwise you need to resort to the less elegant pattern:
394-
*
395-
* *obj = createObject(...);
396-
* functionThatWillIncrementRefCount(obj);
397-
* decrRefCount(obj);
398-
*/
399-
robj *resetRefCount(robj *obj) {
400-
obj->refcount = 0;
401-
return obj;
402-
}
403-
404387
int checkType(client *c, robj *o, int type) {
405388
/* A NULL is considered an empty key */
406389
if (o && o->type != type) {

src/replication.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3333,10 +3333,9 @@ void replicationCron(void) {
33333333
checkClientPauseTimeoutAndReturnIfPaused();
33343334

33353335
if (!manual_failover_in_progress) {
3336-
ping_argv[0] = createStringObject("PING",4);
3336+
ping_argv[0] = shared.ping;
33373337
replicationFeedSlaves(server.slaves, server.slaveseldb,
33383338
ping_argv, 1);
3339-
decrRefCount(ping_argv[0]);
33403339
}
33413340
}
33423341

src/scripting.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1668,12 +1668,11 @@ void evalGenericCommand(client *c, int evalsha) {
16681668
* or just running a CPU costly read-only script on the slaves. */
16691669
if (server.dirty == initial_server_dirty) {
16701670
rewriteClientCommandVector(c,3,
1671-
resetRefCount(createStringObject("SCRIPT",6)),
1672-
resetRefCount(createStringObject("LOAD",4)),
1671+
shared.script,
1672+
shared.load,
16731673
script);
16741674
} else {
1675-
rewriteClientCommandArgument(c,0,
1676-
resetRefCount(createStringObject("EVAL",4)));
1675+
rewriteClientCommandArgument(c,0,shared.eval);
16771676
rewriteClientCommandArgument(c,1,script);
16781677
}
16791678
forceCommandPropagation(c,PROPAGATE_REPL|PROPAGATE_AOF);

src/server.c

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2418,13 +2418,10 @@ void beforeSleep(struct aeEventLoop *eventLoop) {
24182418
if (server.get_ack_from_slaves && !checkClientPauseTimeoutAndReturnIfPaused()) {
24192419
robj *argv[3];
24202420

2421-
argv[0] = createStringObject("REPLCONF",8);
2422-
argv[1] = createStringObject("GETACK",6);
2423-
argv[2] = createStringObject("*",1); /* Not used argument. */
2421+
argv[0] = shared.replconf;
2422+
argv[1] = shared.getack;
2423+
argv[2] = shared.special_asterick; /* Not used argument. */
24242424
replicationFeedSlaves(server.slaves, server.slaveseldb, argv, 3);
2425-
decrRefCount(argv[0]);
2426-
decrRefCount(argv[1]);
2427-
decrRefCount(argv[2]);
24282425
server.get_ack_from_slaves = 0;
24292426
}
24302427

@@ -2565,6 +2562,8 @@ void createSharedObjects(void) {
25652562
shared.unsubscribebulk = createStringObject("$11\r\nunsubscribe\r\n",18);
25662563
shared.psubscribebulk = createStringObject("$10\r\npsubscribe\r\n",17);
25672564
shared.punsubscribebulk = createStringObject("$12\r\npunsubscribe\r\n",19);
2565+
2566+
/* Shared command names */
25682567
shared.del = createStringObject("DEL",3);
25692568
shared.unlink = createStringObject("UNLINK",6);
25702569
shared.rpop = createStringObject("RPOP",4);
@@ -2577,15 +2576,38 @@ void createSharedObjects(void) {
25772576
shared.zpopmax = createStringObject("ZPOPMAX",7);
25782577
shared.multi = createStringObject("MULTI",5);
25792578
shared.exec = createStringObject("EXEC",4);
2580-
/* Used in the LMOVE/BLMOVE commands */
2581-
shared.left = createStringObject("left",4);
2582-
shared.right = createStringObject("right",5);
2579+
shared.hset = createStringObject("HSET",4);
2580+
shared.srem = createStringObject("SREM",4);
2581+
shared.xgroup = createStringObject("XGROUP",6);
2582+
shared.xclaim = createStringObject("XCLAIM",6);
2583+
shared.script = createStringObject("SCRIPT",6);
2584+
shared.replconf = createStringObject("REPLCONF",8);
25832585
shared.pexpireat = createStringObject("PEXPIREAT",9);
25842586
shared.pexpire = createStringObject("PEXPIRE",7);
25852587
shared.persist = createStringObject("PERSIST",7);
25862588
shared.set = createStringObject("SET",3);
2589+
shared.eval = createStringObject("EVAL",4);
2590+
2591+
/* Shared command argument */
2592+
shared.left = createStringObject("left",4);
2593+
shared.right = createStringObject("right",5);
25872594
shared.pxat = createStringObject("PXAT", 4);
25882595
shared.px = createStringObject("PX",2);
2596+
shared.time = createStringObject("TIME",4);
2597+
shared.retrycount = createStringObject("RETRYCOUNT",10);
2598+
shared.force = createStringObject("FORCE",5);
2599+
shared.justid = createStringObject("JUSTID",6);
2600+
shared.lastid = createStringObject("LASTID",6);
2601+
shared.default_username = createStringObject("default",7);
2602+
shared.ping = createStringObject("ping",7);
2603+
shared.setid = createStringObject("SETID",5);
2604+
shared.keepttl = createStringObject("KEEPTTL",7);
2605+
shared.load = createStringObject("LOAD",4);
2606+
shared.createconsumer = createStringObject("CREATECONSUMER",14);
2607+
shared.getack = createStringObject("GETACK",6);
2608+
shared.special_asterick = createStringObject("*",1);
2609+
shared.special_equals = createStringObject("=",1);
2610+
25892611
for (j = 0; j < OBJ_SHARED_INTEGERS; j++) {
25902612
shared.integers[j] =
25912613
makeObjectShared(createObject(OBJ_STRING,(void*)(long)j));

src/server.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -976,8 +976,11 @@ struct sharedObjectsStruct {
976976
*busykeyerr, *oomerr, *plus, *messagebulk, *pmessagebulk, *subscribebulk,
977977
*unsubscribebulk, *psubscribebulk, *punsubscribebulk, *del, *unlink,
978978
*rpop, *lpop, *lpush, *rpoplpush, *lmove, *blmove, *zpopmin, *zpopmax,
979-
*emptyscan, *multi, *exec, *left, *right, *persist, *set, *pexpireat,
980-
*pexpire, *pxat, *px,
979+
*emptyscan, *multi, *exec, *left, *right, *hset, *srem, *xgroup, *xclaim,
980+
*script, *replconf, *eval, *persist, *set, *pexpireat, *pexpire,
981+
*time, *pxat, *px, *retrycount, *force, *justid,
982+
*lastid, *ping, *setid, *keepttl, *load, *createconsumer,
983+
*getack, *special_asterick, *special_equals, *default_username,
981984
*select[PROTO_SHARED_SELECT_CMDS],
982985
*integers[OBJ_SHARED_INTEGERS],
983986
*mbulkhdr[OBJ_SHARED_BULKHDR_LEN], /* "*<value>\r\n" */

src/t_hash.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -759,11 +759,9 @@ void hincrbyfloatCommand(client *c) {
759759
/* Always replicate HINCRBYFLOAT as an HSET command with the final value
760760
* in order to make sure that differences in float precision or formatting
761761
* will not create differences in replicas or after an AOF restart. */
762-
robj *aux, *newobj;
763-
aux = createStringObject("HSET",4);
762+
robj *newobj;
764763
newobj = createRawStringObject(buf,len);
765-
rewriteClientCommandArgument(c,0,aux);
766-
decrRefCount(aux);
764+
rewriteClientCommandArgument(c,0,shared.hset);
767765
rewriteClientCommandArgument(c,3,newobj);
768766
decrRefCount(newobj);
769767
}

src/t_set.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ void spopWithCountCommand(client *c) {
499499
* Prepare our replication argument vector. Also send the array length
500500
* which is common to both the code paths. */
501501
robj *propargv[3];
502-
propargv[0] = createStringObject("SREM",4);
502+
propargv[0] = shared.srem;
503503
propargv[1] = c->argv[1];
504504
addReplySetLen(c,count);
505505

@@ -590,13 +590,12 @@ void spopWithCountCommand(client *c) {
590590
* dirty counter. We don't want to propagate an SPOP command since
591591
* we propagated the command as a set of SREMs operations using
592592
* the alsoPropagate() API. */
593-
decrRefCount(propargv[0]);
594593
preventCommandPropagation(c);
595594
signalModifiedKey(c,c->db,c->argv[1]);
596595
}
597596

598597
void spopCommand(client *c) {
599-
robj *set, *ele, *aux;
598+
robj *set, *ele;
600599
sds sdsele;
601600
int64_t llele;
602601
int encoding;
@@ -629,9 +628,7 @@ void spopCommand(client *c) {
629628
notifyKeyspaceEvent(NOTIFY_SET,"spop",c->argv[1],c->db->id);
630629

631630
/* Replicate/AOF this command as an SREM operation */
632-
aux = createStringObject("SREM",4);
633-
rewriteClientCommandVector(c,3,aux,c->argv[1],ele);
634-
decrRefCount(aux);
631+
rewriteClientCommandVector(c,3,shared.srem,c->argv[1],ele);
635632

636633
/* Add the element to the reply */
637634
addReplyBulk(c,ele);

src/t_stream.c

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,36 +1328,29 @@ void streamPropagateXCLAIM(client *c, robj *key, streamCG *group, robj *groupnam
13281328
* Note that JUSTID is useful in order to avoid that XCLAIM will do
13291329
* useless work in the slave side, trying to fetch the stream item. */
13301330
robj *argv[14];
1331-
argv[0] = createStringObject("XCLAIM",6);
1331+
argv[0] = shared.xclaim;
13321332
argv[1] = key;
13331333
argv[2] = groupname;
13341334
argv[3] = createStringObject(nack->consumer->name,sdslen(nack->consumer->name));
1335-
argv[4] = createStringObjectFromLongLong(0);
1335+
argv[4] = shared.integers[0];
13361336
argv[5] = id;
1337-
argv[6] = createStringObject("TIME",4);
1337+
argv[6] = shared.time;
13381338
argv[7] = createStringObjectFromLongLong(nack->delivery_time);
1339-
argv[8] = createStringObject("RETRYCOUNT",10);
1339+
argv[8] = shared.retrycount;
13401340
argv[9] = createStringObjectFromLongLong(nack->delivery_count);
1341-
argv[10] = createStringObject("FORCE",5);
1342-
argv[11] = createStringObject("JUSTID",6);
1343-
argv[12] = createStringObject("LASTID",6);
1341+
argv[10] = shared.force;
1342+
argv[11] = shared.justid;
1343+
argv[12] = shared.lastid;
13441344
argv[13] = createObjectFromStreamID(&group->last_id);
13451345

13461346
/* We use progagate() because this code path is not always called from
13471347
* the command execution context. Moreover this will just alter the
13481348
* consumer group state, and we don't need MULTI/EXEC wrapping because
13491349
* there is no message state cross-message atomicity required. */
13501350
propagate(server.xclaimCommand,c->db->id,argv,14,PROPAGATE_AOF|PROPAGATE_REPL);
1351-
decrRefCount(argv[0]);
13521351
decrRefCount(argv[3]);
1353-
decrRefCount(argv[4]);
1354-
decrRefCount(argv[6]);
13551352
decrRefCount(argv[7]);
1356-
decrRefCount(argv[8]);
13571353
decrRefCount(argv[9]);
1358-
decrRefCount(argv[10]);
1359-
decrRefCount(argv[11]);
1360-
decrRefCount(argv[12]);
13611354
decrRefCount(argv[13]);
13621355
}
13631356

@@ -1369,8 +1362,8 @@ void streamPropagateXCLAIM(client *c, robj *key, streamCG *group, robj *groupnam
13691362
*/
13701363
void streamPropagateGroupID(client *c, robj *key, streamCG *group, robj *groupname) {
13711364
robj *argv[5];
1372-
argv[0] = createStringObject("XGROUP",6);
1373-
argv[1] = createStringObject("SETID",5);
1365+
argv[0] = shared.xgroup;
1366+
argv[1] = shared.setid;
13741367
argv[2] = key;
13751368
argv[3] = groupname;
13761369
argv[4] = createObjectFromStreamID(&group->last_id);
@@ -1380,8 +1373,6 @@ void streamPropagateGroupID(client *c, robj *key, streamCG *group, robj *groupna
13801373
* consumer group state, and we don't need MULTI/EXEC wrapping because
13811374
* there is no message state cross-message atomicity required. */
13821375
propagate(server.xgroupCommand,c->db->id,argv,5,PROPAGATE_AOF|PROPAGATE_REPL);
1383-
decrRefCount(argv[0]);
1384-
decrRefCount(argv[1]);
13851376
decrRefCount(argv[4]);
13861377
}
13871378

@@ -1393,8 +1384,8 @@ void streamPropagateGroupID(client *c, robj *key, streamCG *group, robj *groupna
13931384
*/
13941385
void streamPropagateConsumerCreation(client *c, robj *key, robj *groupname, sds consumername) {
13951386
robj *argv[5];
1396-
argv[0] = createStringObject("XGROUP",6);
1397-
argv[1] = createStringObject("CREATECONSUMER",14);
1387+
argv[0] = shared.xgroup;
1388+
argv[1] = shared.createconsumer;
13981389
argv[2] = key;
13991390
argv[3] = groupname;
14001391
argv[4] = createObject(OBJ_STRING,sdsdup(consumername));
@@ -1404,8 +1395,6 @@ void streamPropagateConsumerCreation(client *c, robj *key, robj *groupname, sds
14041395
* consumer group state, and we don't need MULTI/EXEC wrapping because
14051396
* there is no message state cross-message atomicity required. */
14061397
propagate(server.xgroupCommand,c->db->id,argv,5,PROPAGATE_AOF|PROPAGATE_REPL);
1407-
decrRefCount(argv[0]);
1408-
decrRefCount(argv[1]);
14091398
decrRefCount(argv[4]);
14101399
}
14111400

@@ -1725,9 +1714,7 @@ int streamParseIntervalIDOrReply(client *c, robj *o, streamID *id, int *exclude,
17251714
}
17261715

17271716
void streamRewriteApproxSpecifier(client *c, int idx) {
1728-
robj *equal_obj = createStringObject("=",1);
1729-
rewriteClientCommandArgument(c,idx,equal_obj);
1730-
decrRefCount(equal_obj);
1717+
rewriteClientCommandArgument(c,idx,shared.special_equals);
17311718
}
17321719

17331720
/* We propagate MAXLEN/MINID ~ <count> as MAXLEN/MINID = <resulting-len-of-stream>

0 commit comments

Comments
 (0)