CACHE.flush_all がうまく動かないのはなぜだろう・・・

TEST

環境

version
memcache-client 1.7.2
ruby 1.8.6 p368
memcached 1.2.2

コード

require 'rubygems'
require 'memcache'

cache = MemCache.new 'localhost:11211'

cache["bar"] = "hoge"
puts cache["bar"]

cache.flush_all

puts "== after flush_all =="
puts cache["bar"]

cache.delete("bar")

puts "== after delete =="
puts cache["bar"]

実行

% ruby ./memcache_test.rb
fuga
== AFTER flush_all ==
fuga
== AFTER delete ==
nil

flush_all したときは、消えていなくて、delete したときは消えているのが分かる

flush_all で ERROR が吐かれている

/usr/local/lib/ruby/gems/1.8/gems/memcache-client-1.7.2/lib/memcache.rb の下記の部分を以下のようにすれば flush_all 使用可能だが・・・。\r\n は \n でもOK。

- socket.write "flush_all #{delay_time}#{noreply}\r\n"
+ socket.write "flush_all \r\n"

修正後の実行、flush_all で消えている。

% ruby ./memcache_test.rb
fuga
== AFTER flush_all ==
nil
== AFTER delete ==
nil

下記は ERROR になり、flush_all が効かない。そのため、delay_timeが設定できない・・。うーむ。

socket.write "flush_all #{delay_time}\r\n"

socket.write で 引数つきのコマンドを発行する場合の問題とかかな・・・?