Good to know, thanks. Yes that's when we see it too, under high load.
For us it seems to happen around removes, we use the key: linkage and It happens to data that's linked and would get cleared with the key: call. -----Original Message----- From: Al Forbes [mailto:forbes...@googlemail.com] Sent: Tuesday, August 11, 2009 4:13 PM To: JCS Users List Subject: Re: index cache corruption Hi Tim, I had the same problem. It seems to happen under high load, with fairly large objects, but I could not reproduce it offline. I changed to using a JDBC cache and have not had a problem since then. We still use disk caches for more static data - mostly read only, and the problem never happens there, so I assume it's the writes that cause the corruption. Regards Al 2009/8/11 Tim Cronin <tim.cro...@autonomy.com> > We initially were using indexed disk cache but ran into cache corruption > where the data returned for a key would not be the data associated for > that key. I haven't been able to come up with a good repro scenario... > > We had to work around it with the following code: > > /** > * is the cache element not the correct object for the key > * @param key the current key > * @param element the current element associated with the key > * @param hasReadLock whether caller has read lock > * @return true if key mismatch els false > * @throws InterruptedException if locking fails > */ > private boolean isCorrupt(String key, ICacheElement element, boolean > hasReadLock) throws InterruptedException > { > boolean corrupt = !key.equals(element.getKey()); > if (corrupt) > { > mLogger.error("cache corruption!!! [" + (mCorruptionCounter++) + > "]"); > > if (mLogger.isDebugEnabled()) > { > mLogger.error("culprit stack...", new Exception("cache > corruption")); > } > > try > { > if (hasReadLock) > { > mLock.readLock().release(); > } > mLock.writeLock().acquire(); > try > { > mLogger.error("purging " + key); > mCache.remove(key); > mCache.remove(key + ":"); > } > catch (Exception e) > { > mLogger.error("failed to purge key " + key, e); > } > try > { > String k = (String)element.getKey(); > mLogger.error("purging " + k); > mCache.remove(k); > mCache.remove(k + ":"); > } > catch (Exception e) > { > mLogger.error("failed to purge key " + element.getKey(), e); > } > } > finally > { > if (hasReadLock) > { > mLock.readLock().acquire(); > } > mLock.writeLock().release(); > } > } > return corrupt; > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: jcs-users-unsubscr...@jakarta.apache.org > For additional commands, e-mail: jcs-users-h...@jakarta.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: jcs-users-unsubscr...@jakarta.apache.org For additional commands, e-mail: jcs-users-h...@jakarta.apache.org