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 2013/10/25 14:49:16 UTC
svn commit: r1535716 - in /clerezza/trunk:
rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java
rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
Author: reto
Date: Fri Oct 25 12:49:15 2013
New Revision: 1535716
URL: http://svn.apache.org/r1535716
Log:
CLEREZZA-737: trying hard to delete files on windows too (using System.gc() repeatedly)
Modified:
clerezza/trunk/rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java
clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
Modified: clerezza/trunk/rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java?rev=1535716&r1=1535715&r2=1535716&view=diff
==============================================================================
--- clerezza/trunk/rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java (original)
+++ clerezza/trunk/rdf.core.test/src/main/java/org/apache/clerezza/rdf/core/test/TcProviderTest.java Fri Oct 25 12:49:15 2013
@@ -72,6 +72,7 @@ public abstract class TcProviderTest {
} catch (EntityAlreadyExistsException e) {
assertTrue(true);
}
+ simpleTcmProvider.deleteTripleCollection(uriRefA);
}
@Test
@@ -86,6 +87,7 @@ public abstract class TcProviderTest {
} catch (EntityAlreadyExistsException e) {
assertTrue(true);
}
+ simpleTcmProvider.deleteTripleCollection(uriRefA);
}
@Test
@@ -109,6 +111,10 @@ public abstract class TcProviderTest {
Iterator<Triple> iterator = bGraph.iterator();
assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
assertFalse(iterator.hasNext());
+ simpleTcmProvider.deleteTripleCollection(uriRefA);
+ simpleTcmProvider.deleteTripleCollection(uriRefA1);
+ simpleTcmProvider.deleteTripleCollection(uriRefB);
+ simpleTcmProvider.deleteTripleCollection(uriRefB1);
}
@Test
@@ -131,6 +137,11 @@ public abstract class TcProviderTest {
Iterator<Triple> iterator = bGraph.iterator();
assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
assertFalse(iterator.hasNext());
+ simpleTcmProvider.deleteTripleCollection(uriRefA);
+ simpleTcmProvider.deleteTripleCollection(uriRefA1);
+ simpleTcmProvider.deleteTripleCollection(uriRefB);
+ simpleTcmProvider.deleteTripleCollection(uriRefB1);
+
}
@Test
@@ -161,6 +172,10 @@ public abstract class TcProviderTest {
iterator = tripleCollection2.iterator();
assertEquals(new TripleImpl(uriRefB1, uriRefB1, uriRefB1), iterator.next());
assertFalse(iterator.hasNext());
+ simpleTcmProvider.deleteTripleCollection(uriRefA);
+ simpleTcmProvider.deleteTripleCollection(uriRefA1);
+ simpleTcmProvider.deleteTripleCollection(uriRefB);
+ simpleTcmProvider.deleteTripleCollection(uriRefB1);
}
@Test
@@ -183,6 +198,7 @@ public abstract class TcProviderTest {
// Check that graph is still available under uriRefC
Graph cGraph = simpleTcmProvider.getGraph(uriRefC);
assertNotNull(cGraph);
+ simpleTcmProvider.deleteTripleCollection(uriRefC);
}
/**
@@ -236,6 +252,7 @@ public abstract class TcProviderTest {
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -261,6 +278,7 @@ public abstract class TcProviderTest {
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -276,6 +294,7 @@ public abstract class TcProviderTest {
expThrown = true;
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -291,6 +310,7 @@ public abstract class TcProviderTest {
expThrown = true;
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -304,6 +324,7 @@ public abstract class TcProviderTest {
assertEquals(1, graph.size());
assertTrue(graph.contains(t1));
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -364,6 +385,7 @@ public abstract class TcProviderTest {
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(graphUriRef);
}
// This tests can not pass, because equals in AbstractGraph is not implemented
@@ -427,6 +449,7 @@ public abstract class TcProviderTest {
}
assertTrue(expThrown);
+ provider.deleteTripleCollection(name2);
}
@@ -437,6 +460,7 @@ public abstract class TcProviderTest {
createTestTripleCollection(createTestTriple()));
TripleCollection tc = provider.getTriples(graphUriRef);
assertNotNull(tc);
+ provider.deleteTripleCollection(graphUriRef);
}
@Test
@@ -447,6 +471,7 @@ public abstract class TcProviderTest {
TripleCollection tc = provider.getTriples(graphUriRef);
assertNotNull(tc);
+ provider.deleteTripleCollection(graphUriRef);
}
private Triple createTestTriple() {
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=1535716&r1=1535715&r2=1535716&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 25 12:49:15 2013
@@ -34,6 +34,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.locks.Lock;
+import java.util.logging.Level;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -50,12 +51,14 @@ import org.apache.clerezza.rdf.core.acce
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.impl.util.PrivilegedMGraphWrapper;
import org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor;
+import org.apache.commons.io.FileDeleteStrategy;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
/**
- * A {@link org.apache.clerezza.rdf.core.access.WeightedTcProvider} based on Jena TDB.
+ * A {@link org.apache.clerezza.rdf.core.access.WeightedTcProvider} based on
+ * Jena TDB.
*
* @see <a href="http://jena.hpl.hp.com/wiki/TDB/JavaAPI">
* TDB/JavaAPI</a>
@@ -63,13 +66,14 @@ import org.apache.felix.scr.annotations.
* @author reto, hasan
*
* @scr.component immediate="true"
- * @scr.service interface="org.apache.clerezza.rdf.core.access.WeightedTcProvider"
+ * @scr.service
+ * interface="org.apache.clerezza.rdf.core.access.WeightedTcProvider"
* @scr.property name="weight" type="Integer" value="105"
*
*/
-@Component(metatype=true, immediate=true)
+@Component(metatype = true, immediate = true)
@Service(WeightedTcProvider.class)
-@Property(name="weight", intValue=105)
+@Property(name = "weight", intValue = 105)
public class TdbTcProvider implements WeightedTcProvider {
static {
@@ -77,35 +81,36 @@ public class TdbTcProvider implements We
//it is only needed so that on windows the files of a dataset can be deleteds
SystemTDB.setFileMode(FileMode.direct);
}
-
- @Property(intValue=6, description="Specifies the number of seconds to wait "
- + "between synchronizations of the TDB datasets to the filesystem")
+
+ @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 = 6;
/**
- * directory where all graphs are stored
+ * directory where all graphs are stored
*/
private static final String DATA_PATH_NAME = "tdb-data/";
private String dataPathString = DATA_PATH_NAME;
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>();
- private Map<File, Lock> dir2Lock =
- new HashMap<File, Lock>();
+ private Map<File, com.hp.hpl.jena.graph.Graph> dir2JenaGraphMap
+ = new HashMap<File, com.hp.hpl.jena.graph.Graph>();
+ private Map<File, Lock> dir2Lock
+ = new HashMap<File, Lock>();
private final Map<File, Dataset> dir2Dataset = new HashMap<File, Dataset>();
private static final Logger log = LoggerFactory.getLogger(TdbTcProvider.class);
private int weight = 105;
-
+
class SyncThread extends Thread {
+
private boolean stopRequested = false;
@Override
public void run() {
while (!stopRequested) {
try {
- Thread.sleep(syncInterval*1000);
+ Thread.sleep(syncInterval * 1000);
} catch (InterruptedException ex) {
interrupt();
}
@@ -114,7 +119,7 @@ public class TdbTcProvider implements We
}
}
}
-
+
public void requestStop() {
stopRequested = true;
}
@@ -151,7 +156,7 @@ public class TdbTcProvider implements We
for (com.hp.hpl.jena.graph.Graph jenaGraph : dir2JenaGraphMap.values()) {
jenaGraph.close();
}
- synchronized(dir2Dataset) {
+ synchronized (dir2Dataset) {
for (Dataset dataset : dir2Dataset.values()) {
dataset.close();
}
@@ -254,23 +259,38 @@ public class TdbTcProvider implements We
if (tcDir.exists()) {
dir2JenaGraphMap.get(tcDir).close();
dir2JenaGraphMap.remove(tcDir);
- synchronized(dir2Dataset) {
+ synchronized (dir2Dataset) {
dir2Dataset.get(tcDir).close();
dir2Dataset.remove(tcDir);
}
try {
delete(tcDir);
} catch (IOException ex) {
+ for (int i = 0; i < 10; i++) {
+ try {
+ System.gc();
+ delete(tcDir);
+ } catch (IOException ex1) {
+ try {
+ Thread.sleep(10);
+ } catch (InterruptedException ex2) {
+ Thread.currentThread().interrupt();
+ }
+ continue;
+ }
+ return true;
+ }
throw new RuntimeException(ex);
}
return true;
}
return false;
}
-
+
/**
* Cleans the content of the specified directory recursively.
- * @param dir Abstract path denoting the directory to clean.
+ *
+ * @param dir Abstract path denoting the directory to clean.
*/
private static void cleanDirectory(File dir) throws IOException {
File[] files = dir.listFiles();
@@ -283,16 +303,17 @@ public class TdbTcProvider implements We
/**
* Deletes the specified file or directory.
- * @param file Abstract path denoting the file or directory to clean.
+ *
+ * @param file Abstract path denoting the file or directory to clean.
*/
protected static void delete(File file) throws IOException {
if (file.isDirectory()) {
cleanDirectory(file);
}
//better but only in java 7
- //Files.delete(file.toPath());
+ //java.nio.file.Files.delete(file.toPath());
if (!file.delete()) {
- throw new IOException("couldn't delete "+file.getAbsolutePath());
+ throw new IOException("couldn't delete " + file.getAbsolutePath());
}
}
@@ -343,7 +364,7 @@ public class TdbTcProvider implements We
final com.hp.hpl.jena.graph.Graph jenaGraph = model.getGraph();
dir2JenaGraphMap.put(tcDir, jenaGraph);
//dataset.
- synchronized(dir2Dataset) {
+ synchronized (dir2Dataset) {
dir2Dataset.put(tcDir, dataset);
}
return new PrivilegedMGraphWrapper(new JenaGraphAdaptor(jenaGraph));
@@ -363,19 +384,18 @@ public class TdbTcProvider implements We
}
}
-
private void loadGraphs() {
File graphsDir = new File(new File(dataPathString), "graph");
if (graphsDir.exists()) {
for (String graphDirName : graphsDir.list()) {
try {
UriRef uri = new UriRef(URLDecoder.decode(graphDirName, "utf-8"));
- log.info("loading: "+graphDirName);
+ log.info("loading: " + graphDirName);
graphMap.put(uri, getGraph(new File(graphsDir, graphDirName)));
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException("utf-8 not supported", ex);
} catch (Exception e) {
- log.error("Could not load tdb graph in "+graphDirName, e);
+ log.error("Could not load tdb graph in " + graphDirName, e);
}
}
}
@@ -387,7 +407,7 @@ public class TdbTcProvider implements We
for (String mGraphDirName : mGraphsDir.list()) {
try {
UriRef uri = new UriRef(URLDecoder.decode(mGraphDirName, "utf-8"));
- log.info("loading: "+mGraphDirName);
+ log.info("loading: " + mGraphDirName);
final File tcDir = new File(mGraphsDir, mGraphDirName);
final LockableMGraphWrapper lockableMGraph = new LockableMGraphWrapper(getMGraph(tcDir));
mGraphMap.put(uri, lockableMGraph);
@@ -395,17 +415,19 @@ public class TdbTcProvider implements We
} catch (UnsupportedEncodingException ex) {
throw new RuntimeException("utf-8 not supported", ex);
} catch (Exception e) {
- log.error("Could not load tdb graph in "+mGraphDirName, e);
+ log.error("Could not load tdb graph in " + mGraphDirName, e);
}
}
}
}
-
+
public void syncWithFileSystem() {
- synchronized(dir2Dataset) {
- for (Map.Entry<File,Dataset> entry : dir2Dataset.entrySet()) {
+ synchronized (dir2Dataset) {
+ for (Map.Entry<File, Dataset> entry : dir2Dataset.entrySet()) {
Lock l = dir2Lock.get(entry.getKey());
- if (l == null) return;
+ if (l == null) {
+ return;
+ }
l.lock();
try {
TDB.sync(entry.getValue());