Spontaneous error reply can always happen
This commit is contained in:
parent
f2ddeeae95
commit
7ec4df9403
24
async.c
24
async.c
@ -386,14 +386,22 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
|
|||||||
/* Even if the context is subscribed, pending regular callbacks will
|
/* Even if the context is subscribed, pending regular callbacks will
|
||||||
* get a reply before pub/sub messages arrive. */
|
* get a reply before pub/sub messages arrive. */
|
||||||
if (__redisShiftCallback(&ac->replies,&cb) != REDIS_OK) {
|
if (__redisShiftCallback(&ac->replies,&cb) != REDIS_OK) {
|
||||||
/* A spontaneous reply in a not-subscribed context can only be the
|
/*
|
||||||
* error reply that is sent when a new connection exceeds the
|
* A spontaneous reply in a not-subscribed context can be the error
|
||||||
* maximum number of allowed connections on the server side. This
|
* reply that is sent when a new connection exceeds the maximum
|
||||||
* is seen as an error instead of a regular reply because the
|
* number of allowed connections on the server side.
|
||||||
* server closes the connection after sending it. To prevent the
|
*
|
||||||
* error from being overwritten by an EOF error the connection is
|
* This is seen as an error instead of a regular reply because the
|
||||||
* closed here. See issue #43. */
|
* server closes the connection after sending it.
|
||||||
if ( !(c->flags & REDIS_SUBSCRIBED) && ((redisReply*)reply)->type == REDIS_REPLY_ERROR ) {
|
*
|
||||||
|
* To prevent the error from being overwritten by an EOF error the
|
||||||
|
* connection is closed here. See issue #43.
|
||||||
|
*
|
||||||
|
* Another possibility is that the server is loading its dataset.
|
||||||
|
* In this case we also want to close the connection, and have the
|
||||||
|
* user wait until the server is ready to take our request.
|
||||||
|
*/
|
||||||
|
if (((redisReply*)reply)->type == REDIS_REPLY_ERROR) {
|
||||||
c->err = REDIS_ERR_OTHER;
|
c->err = REDIS_ERR_OTHER;
|
||||||
snprintf(c->errstr,sizeof(c->errstr),"%s",((redisReply*)reply)->str);
|
snprintf(c->errstr,sizeof(c->errstr),"%s",((redisReply*)reply)->str);
|
||||||
__redisAsyncDisconnect(ac);
|
__redisAsyncDisconnect(ac);
|
||||||
|
Loading…
Reference in New Issue
Block a user