[ 
https://issues.apache.org/jira/browse/JCS-73?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13139697#comment-13139697
 ] 

Thomas Vandahl commented on JCS-73:
-----------------------------------

The IndexedDiskCache has been modified to use NIO to resolve concurrency 
issues. Could you please test with the latest trunk?
                
> concurrent cache access causes values loss
> ------------------------------------------
>
>                 Key: JCS-73
>                 URL: https://issues.apache.org/jira/browse/JCS-73
>             Project: JCS
>          Issue Type: Bug
>          Components: Indexed Disk Cache
>    Affects Versions: jcs-1.3
>            Reporter: Alexander Kleymenov
>            Assignee: Aaron Smuts
>
> 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.
> {code}
> 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
> {code}
> Cache configuration:
> {code}
> 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
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to