Uploaded image for project: 'Commons JCS'
  1. Commons JCS
  2. JCS-73

concurrent cache access causes values loss

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: jcs-1.3
    • Fix Version/s: jcs-2.0-beta-1
    • Component/s: Indexed Disk Cache
    • Labels:
      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
      

        Attachments

        1. patch.txt
          2 kB
          Alexander Kleymenov
        2. repro.zip
          6.48 MB
          Alexander Kleymenov

          Issue Links

            Activity

              People

              • Assignee:
                tv Thomas Vandahl
                Reporter:
                san Alexander Kleymenov
              • Votes:
                1 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: