From: Salvatore Sanfilippo <anti...@gmail.com>
Date: Thu, 15 Nov 2012 19:26:42 +0100
Local: Thurs, Nov 15 2012 1:26 pm
Subject: Re: Regressions in 2.6 when out of memory & writing during multi-exec?
First observation, the reality is that while 2.6 changed behavior and
made it worse, this was broken in Redis 2.4 as well. 1) If you set maxmemory to 1, then to 0 again during a transaction,
Now "broken" is not probably the right term as actually Redis issues
Now, how to fix this to have safety & simple behavior from the point
IMHO the best thing to do is:
1) If we detect an OOM error, syntax error, or any other error while
Does this makes sense?
Note that the alternative design where we simply always reply QUEUED
Cheers,
On Thu, Nov 15, 2012 at 6:56 PM, Martyn Loughran <mar...@pusher.com> wrote:
-- > While upgrading from 2.4 to 2.6 I noticed some changes which I haven't seen > documented, and look like regressions to me. > Scenario: out of memory & writing during multi-exec
> # Change 1 - exec succeeds even if one of commands was an error
> On redis 2.4 (tested 2.4.17)
> redis 127.0.0.1:6379> config get maxmemory
> In another client set memory limit `config set maxmemory 1`
> redis 127.0.0.1:6379> set bar uuu
> Transaction still open, need to call discard
> On redis 2.6 (tested 2.6.4)
> redis 127.0.0.1:6379> config get maxmemory
> In another client set memory limit `config set maxmemory 1`
> redis 127.0.0.1:6379> set bar uuu
> This seems like a pretty serious issue. foo and bar were set during a
> The only way to code around this is to check the response from each of the
> The OOM error is also inconsistent with this line in the transaction docs
> # Change 2 - memory limit enforced during queuing rather than exec
> This is related to the first change, but I just wanted to be explicit
> On redis 2.4 (tested 2.4.17) the memory limit is enforced when exec is
> redis 127.0.0.1:6379> multi
> In another client set memory limit `config set maxmemory 1`, then exec the
> redis 127.0.0.1:6379> exec
> As expected the set fails.
> For redis 2.6 (tested 2.6.4), the set does not fail
> redis 127.0.0.1:6379> multi
> In another client set memory limit `config set maxmemory 1`, then exec the
> redis 127.0.0.1:6379> exec
> This feels like a bug to me.
> Thanks very much for all your work on redis guys :)
> Martyn
> --
Salvatore 'antirez' Sanfilippo open source developer - VMware http://invece.org Beauty is more important in computing than anywhere else in technology
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
| ||||||||||||||