Return-Path: X-Original-To: apmail-clerezza-commits-archive@www.apache.org Delivered-To: apmail-clerezza-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BCFB8107FC for ; Fri, 11 Oct 2013 18:14:11 +0000 (UTC) Received: (qmail 51844 invoked by uid 500); 11 Oct 2013 18:14:11 -0000 Delivered-To: apmail-clerezza-commits-archive@clerezza.apache.org Received: (qmail 51816 invoked by uid 500); 11 Oct 2013 18:14:10 -0000 Mailing-List: contact commits-help@clerezza.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@clerezza.apache.org Delivered-To: mailing list commits@clerezza.apache.org Received: (qmail 51808 invoked by uid 99); 11 Oct 2013 18:14:10 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 Oct 2013 18:14:10 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 Oct 2013 18:14:08 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id A3A3623888E4; Fri, 11 Oct 2013 18:13:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1531379 - /clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Date: Fri, 11 Oct 2013 18:13:47 -0000 To: commits@clerezza.apache.org From: reto@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131011181347.A3A3623888E4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: reto Date: Fri Oct 11 18:13:47 2013 New Revision: 1531379 URL: http://svn.apache.org/r1531379 Log: CLEREZZA-792: locking when doing a sync Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java?rev=1531379&r1=1531378&r2=1531379&view=diff ============================================================================== --- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java (original) +++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Fri Oct 11 18:13:47 2013 @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.locks.Lock; import org.osgi.service.component.ComponentContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -91,6 +92,8 @@ public class TdbTcProvider implements We private Map graphMap = new HashMap(); private Map dir2JenaGraphMap = new HashMap(); + private Map dir2Lock = + new HashMap(); private final Map dir2Dataset = new HashMap(); private static final Logger log = LoggerFactory.getLogger(TdbTcProvider.class); private int weight = 105; @@ -200,6 +203,7 @@ public class TdbTcProvider implements We throw new RuntimeException(ex); } LockableMGraph result = new LockableMGraphWrapper(getMGraph(tcDir)); + dir2Lock.put(tcDir, result.getLock().writeLock()); mGraphMap.put(name, result); return result; } @@ -338,6 +342,7 @@ public class TdbTcProvider implements We //Model model = TDBFactory.createModel(tcDir.getAbsolutePath()); final com.hp.hpl.jena.graph.Graph jenaGraph = model.getGraph(); dir2JenaGraphMap.put(tcDir, jenaGraph); + //dataset. synchronized(dir2Dataset) { dir2Dataset.put(tcDir, dataset); } @@ -383,7 +388,10 @@ public class TdbTcProvider implements We try { UriRef uri = new UriRef(URLDecoder.decode(mGraphDirName, "utf-8")); log.info("loading: "+mGraphDirName); - mGraphMap.put(uri, new LockableMGraphWrapper(getMGraph(new File(mGraphsDir, mGraphDirName)))); + final File tcDir = new File(mGraphsDir, mGraphDirName); + final LockableMGraphWrapper lockableMGraph = new LockableMGraphWrapper(getMGraph(tcDir)); + mGraphMap.put(uri, lockableMGraph); + dir2Lock.put(tcDir, lockableMGraph.getLock().writeLock()); } catch (UnsupportedEncodingException ex) { throw new RuntimeException("utf-8 not supported", ex); } catch (Exception e) { @@ -395,8 +403,14 @@ public class TdbTcProvider implements We public void syncWithFileSystem() { synchronized(dir2Dataset) { - for (Dataset dataset : dir2Dataset.values()) { - TDB.sync(dataset); + for (Map.Entry entry : dir2Dataset.entrySet()) { + Lock l = dir2Lock.get(entry.getKey()); + l.lock(); + try { + TDB.sync(entry.getValue()); + } finally { + l.unlock(); + } } } }