jmemcached + Java memcached clientでcasが動かない

jmemcachedJava memcached clientでアクセスするとcasコマンドの実行時に必ず以下のような例外が発生してしまいます。

20:59:42.360 [New I/O server worker #1-1] ERROR c.t.j.p.t.MemcachedResponseEncoder - error
java.lang.NumberFormatException: For input string: ""
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) ~[na:1.6.0_20]
  at java.lang.Long.parseLong(Long.java:431) ~[na:1.6.0_20]
  at java.lang.Long.valueOf(Long.java:525) ~[na:1.6.0_20]
  at com.thimbleware.jmemcached.protocol.text.MemcachedCommandDecoder.processLine(MemcachedCommandDecoder.java:121) ~[jmemcached-core-0.8.jar:na]
  at com.thimbleware.jmemcached.protocol.text.MemcachedCommandDecoder.messageReceived(MemcachedCommandDecoder.java:55) ~[jmemcached-core-0.8.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:350) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201) ~[netty-3.2.3.Final.jar:na]
  at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46) [netty-3.2.3.Final.jar:na]
  at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_20]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_20]
  at java.lang.Thread.run(Thread.java:619) [na:1.6.0_20]

サーバをmemcachedにするとちゃんと処理できるので、jmemcached側の問題かなぁ、と思いソースを見てみました。が、ソースを眺めてみただけではよくわからなかったので少し手を入れてjmemcached側で受信したリクエストをダンプしてみたたところ、以下のような感じになっていました。

cas name 32 0 5       1
value

objectSize(5)とcasUnique(1)の間に余計な空白が入ってしまっています。jmemcached側では上記のリクエストの1行目を半角スペースで分割しているため、空文字列を数値に変換しようとしてNumberFormatExceptionが起きている、ということのようです。つまり、以下のように余分な余白のないリクエストであればjmemcachedは正しく動作します。

cas name 32 0 5 1
value

しかし、Java memcached clientはナゼにこのような余計な空白の入ったリクエストを送信してくるのでしょうか?今度はJava memcached client側のコードを見てリクエストが組み立てられる処理の流れを追ってみました。
まずは1行目のobjectSize以外を書き出します。objectSizeはあとで書くので、その分の余白を用意しています。

cas name 32 0         1

続いて値を書き出します。

cas name 32 0         1
value

値を書き出す際にobjectSizeを計算し、1行目に予め用意してある余白に書き込みます。

cas name 32 0 5       1
value

というわけで、objectSizeを後から書き込むための余白を予め確保しているのが原因のようです。なんでこんなロジックになっているんだろう?性能面への配慮でしょうか。
Java memcached client側はわざとやってるっぽいですが、jmemcachedはmemcachedでパースできるリクエストをパースできないというのは問題だと思うのでバグレポートをしておきました。まあ、普通はmemcachedを使うと思うので、わざわざjmemcachedを使う人はいないような気もしますが…。
しかし何か思わぬところで時間を使ってしまいました…。