We're using the java client library from Greg Whalin (
http://www.whalin.com/memcached/).
When using the consistent hash (md5-based) under heavy load we're seeing
ArrayIndexOutOfBoundsExceptions,
java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at sun.security.provider.DigestBase.engineUpdate(DigestBase.java:102)
at sun.security.provider.MD5.implDigest(MD5.java:100)
at sun.security.provider.DigestBase.engineDigest(DigestBase.java:161)
at sun.security.provider.DigestBase.engineDigest(DigestBase.java:140)
at
java.security.MessageDigest$Delegate.engineDigest(MessageDigest.java:531)
at java.security.MessageDigest.digest(MessageDigest.java:309)
at com.danga.MemCached.SockIOPool.md5HashingAlg(SockIOPool.java:522)
at com.danga.MemCached.SockIOPool.getHash(SockIOPool.java:547)
at com.danga.MemCached.SockIOPool.getBucket(SockIOPool.java:557)
at com.danga.MemCached.SockIOPool.getSock(SockIOPool.java:918)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1266)
Looks like the culprit is the static MessageDigest instance on line 140 of
SockIOPool.java.
The MessageDigest instance is statefull, and I don't see any indication that
it is thread-safe.
Has anyone else encountered this problem?
My plan is to switch to a stateless FNV hashing implementation.
Miguel