]> git.saurik.com Git - redis.git/commit
This fixes issue #327, is a very complex fix (unfortunately), details:
authorantirez <antirez@gmail.com>
Sat, 4 Feb 2012 13:05:54 +0000 (14:05 +0100)
committerantirez <antirez@gmail.com>
Sat, 4 Feb 2012 13:05:54 +0000 (14:05 +0100)
commitf6b32c14f4c8680d2a6b7a4d71758e76ca2c3554
tree01144eb48c1d8d3c106454cd4f05b2546c6dd42d
parent355f859134e6220cb35d7b3fa9ea19ea8d05c02a
This fixes issue #327, is a very complex fix (unfortunately), details:

1) sendReplyToClient() now no longer stops transferring data to a single
client in the case we are out of memory (maxmemory-wise).

2) in processCommand() the idea of we being out of memory is no longer
the naive zmalloc_used_memory() > server.maxmemory. To say if we can
accept or not write queries is up to the return value of
freeMemoryIfNeeded(), that has full control about that.

3) freeMemoryIfNeeded() now does its math without considering output
buffers size. But at the same time it can't let the output buffers to
put us too much outside the max memory limit, so at the same time it
makes sure there is enough effort into delivering the output buffers to
the slaves, calling the write handler directly.

This three changes are the result of many tests, I found (partially
empirically) that is the best way to address the problem, but maybe
we'll find better solutions in the future.
src/networking.c
src/redis.c
src/redis.h