mdelete and Cache::Memcached::delete_multi()

Tomash Brechko tomash.brechko at gmail.com
Fri Nov 16 11:01:52 UTC 2007


On Thu, Nov 15, 2007 at 22:32:24 +0300, Tomash Brechko wrote:
> Currently 'noreply' will still send the error if the command has wrong
> number of tokens, and thus no attempt is made to parse it (though I
> could parse it, I think that wouldn't be right).  To help this a bit
> we may add a startup option to the server, 'close_on_error', and use
> it for some errors that should never be ignored, so the error
> condition won't go unnoticed.

It seems like 'noreply' is not the only command that is not immune to
syntax errors.  Recently the following test was added:

  # cas empty
  print $sock "cas foo 0 0 6 \r\nbarva2\r\n";
  is(scalar <$sock>, "ERROR\r\n", "cas empty, throw error");

But see what's happens:

  - server reads "cas foo 0 0 6 \r\n".  Wrong number of tokens (CAS
    value missing), server can't parse command reliably, sends ERROR.

  - server reads "barva2\r\n"!  No such command, server sends another
    ERROR (and you can imagine what would happen if this data would by
    accident be "flush_all\r\n", for instance).

It's the same transparent proxy problem.  Can't parse -> can't
reliably swallow the command.  Should we made close-on-error behaviour
mandatory for parse errors?  This is reasonable, since it's very
unlikely that any client out there has logic to recover from self
malformed commands.


-- 
   Tomash Brechko


More information about the memcached mailing list