Yup, message digest is stateful and is not thread-safe and a new instance
needs to be instantiated for every execution.  Definitely a bug if a message
digest instance is being used by multiple threads concurrently without
synchronization.

Hanson

On Mon, Mar 3, 2008 at 3:54 PM, Miguel De Avila <[EMAIL PROTECTED]>
wrote:

>  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
>
>

Reply via email to