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

concurrent cache access causes values loss

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • jcs-1.3
    • jcs-2.0-beta-1
    • Indexed Disk Cache
    • 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

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

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

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment