From issues-return-30440-apmail-commons-issues-archive=commons.apache.org@commons.apache.org Fri Nov 2 09:25:17 2012 Return-Path: X-Original-To: apmail-commons-issues-archive@minotaur.apache.org Delivered-To: apmail-commons-issues-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 859B5D9E2 for ; Fri, 2 Nov 2012 09:25:17 +0000 (UTC) Received: (qmail 56617 invoked by uid 500); 2 Nov 2012 09:25:16 -0000 Delivered-To: apmail-commons-issues-archive@commons.apache.org Received: (qmail 56129 invoked by uid 500); 2 Nov 2012 09:25:15 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 56028 invoked by uid 99); 2 Nov 2012 09:25:12 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 02 Nov 2012 09:25:12 +0000 Date: Fri, 2 Nov 2012 09:25:12 +0000 (UTC) From: "Alexander Kleymenov (JIRA)" To: issues@commons.apache.org Message-ID: <1707632375.59931.1351848312521.JavaMail.jiratomcat@arcas> Subject: [jira] [Updated] (JCS-73) concurrent cache access causes values loss MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/JCS-73?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Alexander Kleymenov updated JCS-73: ----------------------------------- Attachment: patch.txt Patch to make JCS source buildable > concurrent cache access causes values loss > ------------------------------------------ > > Key: JCS-73 > URL: https://issues.apache.org/jira/browse/JCS-73 > Project: Commons JCS > Issue Type: Bug > Components: Indexed Disk Cache > Affects Versions: jcs-1.3 > Reporter: Alexander Kleymenov > Assignee: Thomas Vandahl > Fix For: jcs-1.4-dev > > Attachments: patch.txt > > > 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 For more information on JIRA, see: http://www.atlassian.com/software/jira