mirror of
https://github.com/fluencelabs/redis
synced 2025-03-30 22:31:03 +00:00
Remove glueoutputbuf option and broken code
This commit is contained in:
parent
6eaad66373
commit
a510cb0c03
@ -194,10 +194,8 @@ void loadServerConfig(char *filename) {
|
|||||||
if ((server.repl_serve_stale_data = yesnotoi(argv[1])) == -1) {
|
if ((server.repl_serve_stale_data = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
}
|
}
|
||||||
} else if (!strcasecmp(argv[0],"glueoutputbuf") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"glueoutputbuf")) {
|
||||||
if ((server.glueoutputbuf = yesnotoi(argv[1])) == -1) {
|
redisLog(REDIS_WARNING, "Deprecated configuration directive: \"%s\"", argv[0]);
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
|
||||||
}
|
|
||||||
} else if (!strcasecmp(argv[0],"rdbcompression") && argc == 2) {
|
} else if (!strcasecmp(argv[0],"rdbcompression") && argc == 2) {
|
||||||
if ((server.rdbcompression = yesnotoi(argv[1])) == -1) {
|
if ((server.rdbcompression = yesnotoi(argv[1])) == -1) {
|
||||||
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
err = "argument must be 'yes' or 'no'"; goto loaderr;
|
||||||
|
@ -515,15 +515,6 @@ void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask) {
|
|||||||
REDIS_NOTUSED(el);
|
REDIS_NOTUSED(el);
|
||||||
REDIS_NOTUSED(mask);
|
REDIS_NOTUSED(mask);
|
||||||
|
|
||||||
/* Use writev() if we have enough buffers to send */
|
|
||||||
if (!server.glueoutputbuf &&
|
|
||||||
listLength(c->reply) > REDIS_WRITEV_THRESHOLD &&
|
|
||||||
!(c->flags & REDIS_MASTER))
|
|
||||||
{
|
|
||||||
sendReplyToClientWritev(el, fd, privdata, mask);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while(c->bufpos > 0 || listLength(c->reply)) {
|
while(c->bufpos > 0 || listLength(c->reply)) {
|
||||||
if (c->bufpos > 0) {
|
if (c->bufpos > 0) {
|
||||||
if (c->flags & REDIS_MASTER) {
|
if (c->flags & REDIS_MASTER) {
|
||||||
@ -594,84 +585,6 @@ void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendReplyToClientWritev(aeEventLoop *el, int fd, void *privdata, int mask)
|
|
||||||
{
|
|
||||||
redisClient *c = privdata;
|
|
||||||
int nwritten = 0, totwritten = 0, objlen, willwrite;
|
|
||||||
robj *o;
|
|
||||||
struct iovec iov[REDIS_WRITEV_IOVEC_COUNT];
|
|
||||||
int offset, ion = 0;
|
|
||||||
REDIS_NOTUSED(el);
|
|
||||||
REDIS_NOTUSED(mask);
|
|
||||||
|
|
||||||
listNode *node;
|
|
||||||
while (listLength(c->reply)) {
|
|
||||||
offset = c->sentlen;
|
|
||||||
ion = 0;
|
|
||||||
willwrite = 0;
|
|
||||||
|
|
||||||
/* fill-in the iov[] array */
|
|
||||||
for(node = listFirst(c->reply); node; node = listNextNode(node)) {
|
|
||||||
o = listNodeValue(node);
|
|
||||||
objlen = sdslen(o->ptr);
|
|
||||||
|
|
||||||
if (totwritten + objlen - offset > REDIS_MAX_WRITE_PER_EVENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if(ion == REDIS_WRITEV_IOVEC_COUNT)
|
|
||||||
break; /* no more iovecs */
|
|
||||||
|
|
||||||
iov[ion].iov_base = ((char*)o->ptr) + offset;
|
|
||||||
iov[ion].iov_len = objlen - offset;
|
|
||||||
willwrite += objlen - offset;
|
|
||||||
offset = 0; /* just for the first item */
|
|
||||||
ion++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(willwrite == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* write all collected blocks at once */
|
|
||||||
if((nwritten = writev(fd, iov, ion)) < 0) {
|
|
||||||
if (errno != EAGAIN) {
|
|
||||||
redisLog(REDIS_VERBOSE,
|
|
||||||
"Error writing to client: %s", strerror(errno));
|
|
||||||
freeClient(c);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
totwritten += nwritten;
|
|
||||||
offset = c->sentlen;
|
|
||||||
|
|
||||||
/* remove written robjs from c->reply */
|
|
||||||
while (nwritten && listLength(c->reply)) {
|
|
||||||
o = listNodeValue(listFirst(c->reply));
|
|
||||||
objlen = sdslen(o->ptr);
|
|
||||||
|
|
||||||
if(nwritten >= objlen - offset) {
|
|
||||||
listDelNode(c->reply, listFirst(c->reply));
|
|
||||||
nwritten -= objlen - offset;
|
|
||||||
c->sentlen = 0;
|
|
||||||
} else {
|
|
||||||
/* partial write */
|
|
||||||
c->sentlen += nwritten;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (totwritten > 0)
|
|
||||||
c->lastinteraction = time(NULL);
|
|
||||||
|
|
||||||
if (listLength(c->reply) == 0) {
|
|
||||||
c->sentlen = 0;
|
|
||||||
aeDeleteFileEvent(server.el,c->fd,AE_WRITABLE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* resetClient prepare the client to process the next command */
|
/* resetClient prepare the client to process the next command */
|
||||||
void resetClient(redisClient *c) {
|
void resetClient(redisClient *c) {
|
||||||
freeClientArgv(c);
|
freeClientArgv(c);
|
||||||
|
@ -749,7 +749,6 @@ void initServerConfig() {
|
|||||||
server.syslog_enabled = 0;
|
server.syslog_enabled = 0;
|
||||||
server.syslog_ident = zstrdup("redis");
|
server.syslog_ident = zstrdup("redis");
|
||||||
server.syslog_facility = LOG_LOCAL0;
|
server.syslog_facility = LOG_LOCAL0;
|
||||||
server.glueoutputbuf = 1;
|
|
||||||
server.daemonize = 0;
|
server.daemonize = 0;
|
||||||
server.appendonly = 0;
|
server.appendonly = 0;
|
||||||
server.appendfsync = APPENDFSYNC_EVERYSEC;
|
server.appendfsync = APPENDFSYNC_EVERYSEC;
|
||||||
|
@ -50,11 +50,6 @@
|
|||||||
#define REDIS_REPLY_CHUNK_BYTES (5*1500) /* 5 TCP packets with default MTU */
|
#define REDIS_REPLY_CHUNK_BYTES (5*1500) /* 5 TCP packets with default MTU */
|
||||||
#define REDIS_MAX_LOGMSG_LEN 1024 /* Default maximum length of syslog messages */
|
#define REDIS_MAX_LOGMSG_LEN 1024 /* Default maximum length of syslog messages */
|
||||||
|
|
||||||
/* If more then REDIS_WRITEV_THRESHOLD write packets are pending use writev */
|
|
||||||
#define REDIS_WRITEV_THRESHOLD 3
|
|
||||||
/* Max number of iovecs used for each writev call */
|
|
||||||
#define REDIS_WRITEV_IOVEC_COUNT 256
|
|
||||||
|
|
||||||
/* Hash table parameters */
|
/* Hash table parameters */
|
||||||
#define REDIS_HT_MINFILL 10 /* Minimal hash table fill 10% */
|
#define REDIS_HT_MINFILL 10 /* Minimal hash table fill 10% */
|
||||||
|
|
||||||
@ -384,7 +379,6 @@ struct redisServer {
|
|||||||
long long stat_keyspace_misses; /* number of failed lookups of keys */
|
long long stat_keyspace_misses; /* number of failed lookups of keys */
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
int verbosity;
|
int verbosity;
|
||||||
int glueoutputbuf;
|
|
||||||
int maxidletime;
|
int maxidletime;
|
||||||
int dbnum;
|
int dbnum;
|
||||||
int daemonize;
|
int daemonize;
|
||||||
@ -629,7 +623,6 @@ void closeTimedoutClients(void);
|
|||||||
void freeClient(redisClient *c);
|
void freeClient(redisClient *c);
|
||||||
void resetClient(redisClient *c);
|
void resetClient(redisClient *c);
|
||||||
void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask);
|
void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask);
|
||||||
void sendReplyToClientWritev(aeEventLoop *el, int fd, void *privdata, int mask);
|
|
||||||
void addReply(redisClient *c, robj *obj);
|
void addReply(redisClient *c, robj *obj);
|
||||||
void *addDeferredMultiBulkLength(redisClient *c);
|
void *addDeferredMultiBulkLength(redisClient *c);
|
||||||
void setDeferredMultiBulkLength(redisClient *c, void *node, long length);
|
void setDeferredMultiBulkLength(redisClient *c, void *node, long length);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user