You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/10/25 12:21:46 UTC

svn commit: r1027030 - in /incubator/clerezza/trunk/org.apache.clerezza.parent: org.apache.clerezza.integrationtest.web/ org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/ org.apache.clerezza.rdf.jena.tdb.s...

Author: reto
Date: Mon Oct 25 10:21:46 2010
New Revision: 1027030

URL: http://svn.apache.org/viewvc?rev=1027030&view=rev
Log:
CLEREZZA-340: TDB STorage provider now returns LockableMGraphs

Added:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/test/java/org/apache/clerezza/rdf/jena/tdb/storage/MultiThreadedTest.java
Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml?rev=1027030&r1=1027029&r2=1027030&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.integrationtest.web/pom-run.xml Mon Oct 25 10:21:46 2010
@@ -12,6 +12,9 @@
 	<version>0.1-incubating-SNAPSHOT</version>
 	<name>Clerezza - Web Test Framework</name>
 	<description>A framework to run tests against a webserver</description>
+  <properties>
+    <org.osgi.service.http.port>8383</org.osgi.service.http.port>
+  </properties>
 	<dependencies>
 		<dependency>
 			<groupId>org.ops4j.pax.logging</groupId>
@@ -31,10 +34,10 @@
 			<groupId>org.apache.clerezza.ext</groupId>
 			<artifactId>javax.mail</artifactId>
 		</dependency>
-		<dependency>
+ 		<dependency>
 			<groupId>org.apache.clerezza</groupId>
 			<artifactId>org.apache.clerezza.integrationtest.web.performance</artifactId>
-		</dependency>
+		</dependency> 
 		<dependency>
 			<groupId>org.apache.commons</groupId>
 			<artifactId>com.springsource.org.apache.commons.httpclient</artifactId>

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java?rev=1027030&r1=1027029&r2=1027030&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Mon Oct 25 10:21:46 2010
@@ -41,6 +41,8 @@ import org.apache.clerezza.rdf.core.Trip
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.EntityAlreadyExistsException;
 import org.apache.clerezza.rdf.core.access.EntityUndeletableException;
+import org.apache.clerezza.rdf.core.access.LockableMGraph;
+import org.apache.clerezza.rdf.core.access.LockableMGraphWrapper;
 import org.apache.clerezza.rdf.core.access.NoSuchEntityException;
 import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
 import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
@@ -68,17 +70,17 @@ import org.apache.felix.scr.annotations.
 @Property(name="weight", intValue=105)
 public class TdbTcProvider implements WeightedTcProvider {
 
-	@Property(intValue=600, description="Specifies the number of seconds to wait "
+	@Property(intValue=6, description="Specifies the number of seconds to wait "
 	+ "between synchronizations of the TDB datasets to the filesystem")
 	public static final String SYNC_INTERVAL = "sync-interval";
-	private int syncInterval = 600;
+	private int syncInterval = 6;
 
 	/**
 	 *	directory where all graphs are stored
 	 */
 	private static final String DATA_PATH_NAME = "tdb-data/";
 	private String dataPathString = DATA_PATH_NAME;
-	private Map<UriRef, MGraph> mGraphMap = new HashMap<UriRef, MGraph>();
+	private Map<UriRef, LockableMGraph> mGraphMap = new HashMap<UriRef, LockableMGraph>();
 	private Map<UriRef, Graph> graphMap = new HashMap<UriRef, Graph>();
 	private Map<File, com.hp.hpl.jena.graph.Graph> dir2JenaGraphMap =
 			new HashMap<File, com.hp.hpl.jena.graph.Graph>();
@@ -182,7 +184,7 @@ public class TdbTcProvider implements We
 			throw new EntityAlreadyExistsException(name);
 		}
 		tcDir.mkdirs();
-		MGraph result = new PrivilegedMGraphWrapper(getMGraph(tcDir));
+		LockableMGraph result = new LockableMGraphWrapper(getMGraph(tcDir));
 		mGraphMap.put(name, result);
 		return result;
 	}
@@ -199,7 +201,7 @@ public class TdbTcProvider implements We
 			triples = new SimpleMGraph();
 		}
 		tcDir.mkdirs();
-		MGraph mGraph = new PrivilegedMGraphWrapper(getMGraph(tcDir));
+		MGraph mGraph = getMGraph(tcDir);
 		mGraph.addAll(triples);
 		Graph result = mGraph.getGraph();
 		
@@ -309,7 +311,7 @@ public class TdbTcProvider implements We
 		synchronized(dir2Dataset) {
 			dir2Dataset.put(tcDir, dataset);
 		}
-		return new JenaGraphAdaptor(jenaGraph);
+		return new PrivilegedMGraphWrapper(new JenaGraphAdaptor(jenaGraph));
 	}
 
 	private File getMGraphDir(UriRef name) {
@@ -346,7 +348,7 @@ public class TdbTcProvider implements We
 			for (String mGraphDirName : mGraphsDir.list()) {
 				try {
 					UriRef uri = new UriRef(URLDecoder.decode(mGraphDirName, "utf-8"));
-					mGraphMap.put(uri, getMGraph(new File(mGraphsDir, mGraphDirName)));
+					mGraphMap.put(uri, new LockableMGraphWrapper(getMGraph(new File(mGraphsDir, mGraphDirName))));
 				} catch (UnsupportedEncodingException ex) {
 					throw new RuntimeException("utf-8 not supported", ex);
 				}

Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/test/java/org/apache/clerezza/rdf/jena/tdb/storage/MultiThreadedTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/test/java/org/apache/clerezza/rdf/jena/tdb/storage/MultiThreadedTest.java?rev=1027030&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/test/java/org/apache/clerezza/rdf/jena/tdb/storage/MultiThreadedTest.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.rdf.jena.tdb.storage/src/test/java/org/apache/clerezza/rdf/jena/tdb/storage/MultiThreadedTest.java Mon Oct 25 10:21:46 2010
@@ -0,0 +1,114 @@
+package org.apache.clerezza.rdf.jena.tdb.storage;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.Assert;
+
+import org.apache.clerezza.rdf.core.BNode;
+import org.apache.clerezza.rdf.core.Literal;
+import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.Resource;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
+import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.felix.scr.annotations.Activate;
+import org.junit.Before;
+import org.junit.Test;
+import org.wymiwyg.commons.util.Util;
+
+
+public class MultiThreadedTest {
+	
+	
+	
+	/** 
+	 * how many threads to start
+	 */
+	private static final int THREAD_COUNT = 100;
+	/**
+	 * how many seconds to let them run
+	 */
+	private static final int DELAY = 120;
+	
+	
+	private MGraph mGraph;
+	private Set<Triple> testTriples = Collections.synchronizedSet(new HashSet<Triple>()); 
+
+	class TestThread extends Thread {
+
+		private final int id;
+		private boolean stopRequested;
+		private int addedTripleCount = 0;
+
+		public TestThread(final int id) {
+			this.id = id;
+			start();
+		}
+
+		public void requestStop() {
+			stopRequested = true;
+		}
+
+		@Override
+		public void run() {
+			while (!stopRequested) {
+				Literal randomLiteral = new PlainLiteralImpl(Util.createRandomString(22));
+				Triple triple = new TripleImpl(new BNode(), new UriRef("http://example.com/property"), randomLiteral);
+				mGraph.add(triple);
+				addedTripleCount++;
+				if ((addedTripleCount % 100) == 0) {
+					testTriples.add(triple);
+				}
+			}
+		}
+
+		public int getAddedTripleCount() {
+			return addedTripleCount;
+		}
+
+	}
+
+	
+	
+	@Before
+	public void setUp() throws IOException {
+		File tempFile;
+		UriRef MGRAPHNAME = new UriRef("http://text.example.org/");
+		TdbTcProvider tdbTcProvider;
+		tempFile = File.createTempFile("tdbtest", null);
+		tempFile.delete();
+		tempFile.mkdirs();
+		tdbTcProvider = new TdbTcProvider(tempFile);
+		tdbTcProvider.activate(null);
+		mGraph = tdbTcProvider.createMGraph(MGRAPHNAME);
+	}
+
+	@Test
+	public void perform() throws InterruptedException {
+		TestThread[] threads =  new TestThread[THREAD_COUNT];
+		for (int i = 0; i < threads.length; i++) {
+			threads[i] = new TestThread(i);
+		}
+		Thread.sleep(DELAY*1000);
+		for (TestThread testThread : threads) {
+			testThread.requestStop();
+		}
+		for (TestThread testThread : threads) {
+			testThread.join();
+		}
+		int addedTriples = 0;
+		for (TestThread testThread : threads) {
+			addedTriples += testThread.getAddedTripleCount();
+		}
+		Assert.assertEquals(addedTriples, mGraph.size());
+		for (Triple testTriple : testTriples) {
+			Assert.assertTrue(mGraph.contains(testTriple));
+		}
+	}
+
+}