consistent hash + heavy concurrency provokes ArrayIndexOutOfBoundsException in java client

Greg Whalin gwhalin at gmail.com
Tue Mar 4 13:04:09 UTC 2008


Already a fix in trunk for this.  Easier to actually submit bug reports
directly to me as opposed to the list.  I only periodically monitor this
list.

gw

On Mon, Mar 3, 2008 at 7:58 PM, Chris Lamprecht <clamprecht at gmail.com>
wrote:

> Using a ThreadLocal<http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ThreadLocal.html>may work too.
>
>
> On Mon, Mar 3, 2008 at 6:27 PM, Hanson Char <hanson.char at gmail.com> wrote:
>
> > 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 <mdeavila at hotmail.com>
> > 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
> > >
> > >
> >
>


-- 
Greg Whalin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.danga.com/pipermail/memcached/attachments/20080304/03ac0209/attachment.htm 


More information about the memcached mailing list