Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
jcs-1.3
-
None
Description
The following groovy code demonstrates the problem: several threads write to the cache and try to read previously written values. Sometimes just written values can't be retrieved. In this case, subsequent tries can get the value, but not always.
cache = org.apache.jcs.JCS.getInstance("cache") group = "group" worker = { def name = Thread.currentThread().name 10000.times { idx -> if (idx) { // get previously stored value def res = cache.getFromGroup(idx-1, group) if (!res) { // null value got inspite of the fact it was placed in cache! println "ERROR: for ${idx} in " + name // try to get the value again: def n = 5 while (n-- > 0) { res = cache.getFromGroup(idx-1, group) if (res) { // the value finally appeared in cache println "ERROR FIXED for ${idx}: ${res} " + name break } println "ERROR STILL PERSISTS for ${idx} in " + name Thread.sleep(1000) } } } // put value in the cache cache.putInGroup(idx, group, [value:[a:1, b:2, c:3], aux:[1:'a', 2:'b', 3:'c', t:name]]) if (!(idx % 10000)) { println name+" "+idx } } } Thread.start worker Thread.start worker Thread.start worker Thread.start worker Thread.start worker Thread.start worker Thread.start worker Thread.start worker
Cache configuration:
jcs.default=CACHE jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes jcs.default.cacheattributes.MaxObjects=-1 jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache jcs.default.cacheattributes.DiskUsagePatternName=UPDATE jcs.default.cacheattributes.UseMemoryShrinker=true jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=10 jcs.default.cacheattributes.ShrinkerIntervalSeconds=10 jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes jcs.default.elementattributes.IsRemote=false jcs.default.elementattributes.IsLateral=false jcs.default.elementattributes.IsSpool=true jcs.default.elementattributes.IsEternal=true jcs.auxiliary.CACHE=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory jcs.auxiliary.CACHE.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes jcs.auxiliary.CACHE.attributes.DiskPath=./cache jcs.auxiliary.CACHE.attributes.MaxPurgatorySize=-1 jcs.auxiliary.CACHE.attributes.MaxKeySize=-1 jcs.auxiliary.CACHE.attributes.MaxRecycleBinSize=500 jcs.auxiliary.CACHE.attributes.ShutdownSpoolTimeLimit=60 jcs.auxiliary.CACHE.attributes.OptimizeAtRemoveCount=30000 jcs.auxiliary.CACHE.attributes.OptimizeOnShutdown=true jcs.auxiliary.CACHE.attributes.EventQueueType=SINGLE