From d30285a5dc7aa1e8274702f1d83b0cd5a86d421e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Wed, 5 Jun 2024 10:45:25 +0200 Subject: [PATCH] try to createStatementIterator once more after exception before giving up --- .../java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java | 9 ++++++++- .../org/eclipse/rdf4j/sail/shacl/MultithreadedTest.java | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java index 10d3eede18d..76f72f415e2 100644 --- a/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java +++ b/core/sail/lmdb/src/main/java/org/eclipse/rdf4j/sail/lmdb/LmdbSailStore.java @@ -920,7 +920,14 @@ public CloseableIteration getStatements(Resource subj, IRI try { return createStatementIterator(txn, subj, pred, obj, explicit, contexts); } catch (IOException e) { - throw new SailException("Unable to get statements", e); + try { + logger.warn("Failed to get statements, retrying", e); + // try once more before giving up + Thread.yield(); + return createStatementIterator(txn, subj, pred, obj, explicit, contexts); + } catch (IOException e2) { + throw new SailException("Unable to get statements", e); + } } } diff --git a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/MultithreadedTest.java b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/MultithreadedTest.java index 3eb0fed4aa5..89aea92cac9 100644 --- a/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/MultithreadedTest.java +++ b/core/sail/shacl/src/test/java/org/eclipse/rdf4j/sail/shacl/MultithreadedTest.java @@ -356,6 +356,9 @@ public void testLotsOfValidationFailuresSnapshot() throws IOException { @Test public void testLotsOfValidationFailuresSerializableValidation() throws IOException { System.out.println("testLotsOfValidationFailuresSerializableValidation"); + Logger root = (Logger) LoggerFactory.getLogger(ShaclSailBaseConfiguration.class.getName()); + root.setLevel(Level.ERROR); + ShaclSail sail = new ShaclSail(getBaseSail()); sail.setParallelValidation(true);