Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6930a81

Browse files
committed
Auto-select db in redis_sock_server_open
1 parent 82265c4 commit 6930a81

3 files changed

Lines changed: 20 additions & 29 deletions

File tree

common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ typedef enum {
3737
REDIS_SOCK_STATUS_FAILED = -1,
3838
REDIS_SOCK_STATUS_DISCONNECTED,
3939
REDIS_SOCK_STATUS_CONNECTED,
40+
REDIS_SOCK_STATUS_AUTHENTICATED,
4041
REDIS_SOCK_STATUS_READY
4142
} redis_sock_status;
4243

library.c

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -375,13 +375,14 @@ redis_check_eof(RedisSock *redis_sock, zend_bool no_retry, zend_bool no_throw)
375375
errmsg = "AUTH failed while reconnecting";
376376
break;
377377
}
378+
redis_sock->status = REDIS_SOCK_STATUS_AUTHENTICATED;
378379

379-
redis_sock->status = REDIS_SOCK_STATUS_READY;
380380
/* If we're using a non-zero db, reselect it */
381381
if (redis_sock->dbNumber && reselect_db(redis_sock) != 0) {
382382
errmsg = "SELECT failed while reconnecting";
383383
break;
384384
}
385+
redis_sock->status = REDIS_SOCK_STATUS_READY;
385386
/* Success */
386387
return 0;
387388
}
@@ -3015,7 +3016,7 @@ redis_sock_check_liveness(RedisSock *redis_sock)
30153016
} else {
30163017
goto failure;
30173018
}
3018-
redis_sock->status = REDIS_SOCK_STATUS_READY;
3019+
redis_sock->status = REDIS_SOCK_STATUS_AUTHENTICATED;
30193020
} else {
30203021
if (strncmp(inbuf, "-NOAUTH", 7) == 0) {
30213022
/* connection is fine but authentication required */
@@ -3179,13 +3180,19 @@ redis_sock_server_open(RedisSock *redis_sock)
31793180
case REDIS_SOCK_STATUS_DISCONNECTED:
31803181
if (redis_sock_connect(redis_sock) != SUCCESS) {
31813182
break;
3182-
} else if (redis_sock->status == REDIS_SOCK_STATUS_READY) {
3183-
return SUCCESS;
31843183
}
3184+
redis_sock->status = REDIS_SOCK_STATUS_CONNECTED;
31853185
// fall through
31863186
case REDIS_SOCK_STATUS_CONNECTED:
3187-
if (redis_sock_auth(redis_sock) != SUCCESS)
3187+
if (redis_sock_auth(redis_sock) != SUCCESS) {
3188+
break;
3189+
}
3190+
redis_sock->status = REDIS_SOCK_STATUS_AUTHENTICATED;
3191+
// fall through
3192+
case REDIS_SOCK_STATUS_AUTHENTICATED:
3193+
if (redis_sock->dbNumber && reselect_db(redis_sock) != SUCCESS) {
31883194
break;
3195+
}
31893196
redis_sock->status = REDIS_SOCK_STATUS_READY;
31903197
// fall through
31913198
case REDIS_SOCK_STATUS_READY:

redis_session.c

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ typedef struct redis_pool_member_ {
7474

7575
RedisSock *redis_sock;
7676
int weight;
77-
int database;
7877
struct redis_pool_member_ *next;
7978

8079
} redis_pool_member;
@@ -93,12 +92,11 @@ typedef struct {
9392
// }
9493

9594
PHP_REDIS_API void
96-
redis_pool_add(redis_pool *pool, RedisSock *redis_sock, int weight, int database)
95+
redis_pool_add(redis_pool *pool, RedisSock *redis_sock, int weight)
9796
{
9897
redis_pool_member *rpm = ecalloc(1, sizeof(redis_pool_member));
9998
rpm->redis_sock = redis_sock;
10099
rpm->weight = weight;
101-
rpm->database = database;
102100

103101
rpm->next = pool->head;
104102
pool->head = rpm;
@@ -156,21 +154,6 @@ static int redis_simple_cmd(RedisSock *redis_sock, char *cmd, int cmdlen,
156154
return len_written;
157155
}
158156

159-
static void
160-
redis_pool_member_select(redis_pool_member *rpm) {
161-
RedisSock *redis_sock = rpm->redis_sock;
162-
char *response, *cmd;
163-
int response_len, cmd_len;
164-
165-
cmd_len = REDIS_SPPRINTF(&cmd, "SELECT", "d", rpm->database);
166-
if (redis_sock_write(redis_sock, cmd, cmd_len) >= 0) {
167-
if ((response = redis_sock_read(redis_sock, &response_len))) {
168-
efree(response);
169-
}
170-
}
171-
efree(cmd);
172-
}
173-
174157
PHP_REDIS_API redis_pool_member *
175158
redis_pool_get_sock(redis_pool *pool, const char *key) {
176159

@@ -183,10 +166,6 @@ redis_pool_get_sock(redis_pool *pool, const char *key) {
183166
for(i = 0; i < pool->totalWeight;) {
184167
if (pos >= i && pos < i + rpm->weight) {
185168
if (redis_sock_server_open(rpm->redis_sock) == 0) {
186-
if (rpm->database >= 0) { /* default is -1 which leaves the choice to redis. */
187-
redis_pool_member_select(rpm);
188-
}
189-
190169
return rpm;
191170
}
192171
}
@@ -495,11 +474,15 @@ PS_OPEN_FUNC(redis)
495474
persistent, persistent_id ? ZSTR_VAL(persistent_id) : NULL,
496475
retry_interval);
497476

477+
if (db >= 0) { /* default is -1 which leaves the choice to redis. */
478+
redis_sock->dbNumber = db;
479+
}
480+
498481
if (Z_TYPE(context) == IS_ARRAY) {
499482
redis_sock_set_stream_context(redis_sock, &context);
500483
}
501484

502-
redis_pool_add(pool, redis_sock, weight, db);
485+
redis_pool_add(pool, redis_sock, weight);
503486
redis_sock->prefix = prefix;
504487
redis_sock_set_auth(redis_sock, user, pass);
505488

@@ -1294,4 +1277,4 @@ PS_GC_FUNC(rediscluster) {
12941277

12951278
#endif
12961279

1297-
/* vim: set tabstop=4 expandtab: */
1280+
/* vim: set tabstop=4 expandtab: */

0 commit comments

Comments
 (0)