提交 3669f96e 编写于 作者: A antirez

Issue #4027: unify comment and modify return value in freeMemoryIfNeeded().

It looks safer to return C_OK from freeMemoryIfNeeded() when clients are
paused because returning C_ERR may prevent success of writes. It is
possible that there is no difference in practice since clients cannot
execute writes while clients are paused, but it looks more correct this
way, at least conceptually.

Related to PR #4028.
上级 896c4690
......@@ -380,11 +380,10 @@ int freeMemoryIfNeeded(void) {
long long delta;
int slaves = listLength(server.slaves);
/* We cannot free memory while clients are paused as this will require
* evictions which modify the dataset and will break the guarantee that
* data will be static while clients are paused. */
if (clientsArePaused())
goto cant_free;
/* When clients are paused the dataset should be static not just from the
* POV of clients not being able to write, but also from the POV of
* expires and evictions of keys not being performed. */
if (clientsArePaused()) return C_OK;
/* Check if we are over the memory usage limit. If we are not, no need
* to subtract the slaves output buffers. We can just return ASAP. */
......
......@@ -105,8 +105,9 @@ void activeExpireCycle(int type) {
int dbs_per_call = CRON_DBS_PER_CALL;
long long start = ustime(), timelimit;
/* We cannot expire keys while clients are paused as the dataset is
* supposed to be static. */
/* When clients are paused the dataset should be static not just from the
* POV of clients not being able to write, but also from the POV of
* expires and evictions of keys not being performed. */
if (clientsArePaused()) return;
if (type == ACTIVE_EXPIRE_CYCLE_FAST) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册