mirror of
https://github.com/fluencelabs/redis
synced 2025-05-31 03:01:19 +00:00
freeMemoryIfNeeded() minor refactoring
This commit is contained in:
parent
5a7999e66a
commit
35a4761f1d
@ -1091,3 +1091,24 @@ unsigned long getClientOutputBufferMemoryUsage(redisClient *c) {
|
|||||||
|
|
||||||
return c->reply_bytes + (list_item_size*listLength(c->reply));
|
return c->reply_bytes + (list_item_size*listLength(c->reply));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper function used by freeMemoryIfNeeded() in order to flush slaves
|
||||||
|
* output buffers without returning control to the event loop. */
|
||||||
|
void flushSlavesOutputBuffers(void) {
|
||||||
|
listIter li;
|
||||||
|
listNode *ln;
|
||||||
|
|
||||||
|
listRewind(server.slaves,&li);
|
||||||
|
while((ln = listNext(&li))) {
|
||||||
|
redisClient *slave = listNodeValue(ln);
|
||||||
|
int events;
|
||||||
|
|
||||||
|
events = aeGetFileEvents(server.el,slave->fd);
|
||||||
|
if (events & AE_WRITABLE &&
|
||||||
|
slave->replstate == REDIS_REPL_ONLINE &&
|
||||||
|
listLength(slave->reply))
|
||||||
|
{
|
||||||
|
sendReplyToClient(server.el,slave->fd,slave,0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
24
src/redis.c
24
src/redis.c
@ -1577,7 +1577,6 @@ int freeMemoryIfNeeded(void) {
|
|||||||
|
|
||||||
/* Compute how much memory we need to free. */
|
/* Compute how much memory we need to free. */
|
||||||
mem_tofree = mem_used - server.maxmemory;
|
mem_tofree = mem_used - server.maxmemory;
|
||||||
printf("USED: %zu, TOFREE: %zu\n", mem_used, mem_tofree);
|
|
||||||
mem_freed = 0;
|
mem_freed = 0;
|
||||||
while (mem_freed < mem_tofree) {
|
while (mem_freed < mem_tofree) {
|
||||||
int j, k, keys_freed = 0;
|
int j, k, keys_freed = 0;
|
||||||
@ -1668,7 +1667,6 @@ int freeMemoryIfNeeded(void) {
|
|||||||
delta = (long long) zmalloc_used_memory();
|
delta = (long long) zmalloc_used_memory();
|
||||||
dbDelete(db,keyobj);
|
dbDelete(db,keyobj);
|
||||||
delta -= (long long) zmalloc_used_memory();
|
delta -= (long long) zmalloc_used_memory();
|
||||||
// printf("%lld\n",delta);
|
|
||||||
mem_freed += delta;
|
mem_freed += delta;
|
||||||
server.stat_evictedkeys++;
|
server.stat_evictedkeys++;
|
||||||
decrRefCount(keyobj);
|
decrRefCount(keyobj);
|
||||||
@ -1678,27 +1676,7 @@ int freeMemoryIfNeeded(void) {
|
|||||||
* start spending so much time here that is impossible to
|
* start spending so much time here that is impossible to
|
||||||
* deliver data to the slaves fast enough, so we force the
|
* deliver data to the slaves fast enough, so we force the
|
||||||
* transmission here inside the loop. */
|
* transmission here inside the loop. */
|
||||||
if (slaves) {
|
if (slaves) flushSlavesOutputBuffers();
|
||||||
listIter li;
|
|
||||||
listNode *ln;
|
|
||||||
|
|
||||||
listRewind(server.slaves,&li);
|
|
||||||
while((ln = listNext(&li))) {
|
|
||||||
redisClient *slave = listNodeValue(ln);
|
|
||||||
int events;
|
|
||||||
|
|
||||||
events = aeGetFileEvents(server.el,slave->fd);
|
|
||||||
printf("EVENTS: %d\n", events);
|
|
||||||
if (events & AE_WRITABLE &&
|
|
||||||
slave->replstate == REDIS_REPL_ONLINE &&
|
|
||||||
listLength(slave->reply))
|
|
||||||
{
|
|
||||||
printf("SLAVE %d -> %d\n",
|
|
||||||
slave->fd, (int) listLength(slave->reply));
|
|
||||||
sendReplyToClient(server.el,slave->fd,slave,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!keys_freed) return REDIS_ERR; /* nothing to free... */
|
if (!keys_freed) return REDIS_ERR; /* nothing to free... */
|
||||||
|
@ -716,6 +716,7 @@ void getClientsMaxBuffers(unsigned long *longest_output_list,
|
|||||||
sds getClientInfoString(redisClient *client);
|
sds getClientInfoString(redisClient *client);
|
||||||
sds getAllClientsInfoString(void);
|
sds getAllClientsInfoString(void);
|
||||||
void rewriteClientCommandVector(redisClient *c, int argc, ...);
|
void rewriteClientCommandVector(redisClient *c, int argc, ...);
|
||||||
|
void flushSlavesOutputBuffers(void);
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
void addReplyErrorFormat(redisClient *c, const char *fmt, ...)
|
void addReplyErrorFormat(redisClient *c, const char *fmt, ...)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user