This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch tinkergraph-storage
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 73dbe40cb2d855be2afc54bfb9f92a9e62a8d584
Author: Stephen Mallette <[email protected]>
AuthorDate: Thu Aug 20 15:07:03 2026 +0000

    Document TinkerStorageGraph single-writer stance; enforce meta-property 
conflict
    
    Add a comment explaining why supportsConcurrentAccess() is false: a 
persistent
    TinkerStorageGraph is a single-writer store (DirectoryLock), and the feature
    denotes multiple connections/instances sharing the same data, not the
    intra-instance multi-thread transaction access the graph already provides.
    
    Re-enable the stale commented-out fail() in the concurrent meta-property 
test
    and strengthen its assertion so it proves the losing transaction rolled 
back,
    turning a decorative test into a real guard for conflict detection.
    
    Assisted-by: Claude Code:claude-opus-4-8
---
 .../gremlin/tinkergraph/structure/TinkerStorageGraph.java         | 6 ++++++
 .../gremlin/tinkergraph/structure/TinkerStorageGraphTest.java     | 8 +++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git 
a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraph.java
 
b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraph.java
index 0eced39af1..803cc27dcf 100644
--- 
a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraph.java
+++ 
b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraph.java
@@ -545,6 +545,12 @@ public final class TinkerStorageGraph extends 
AbstractTinkerGraph {
         private TinkerGraphGraphFeatures() {
         }
 
+        /**
+         * A persistent {@link TinkerStorageGraph} is a single-writer store: 
{@code DirectoryLock} permits only one
+         * graph instance to open a given storage directory at a time. This 
feature denotes multiple connections /
+         * instances sharing the same data — not the intra-instance, 
multi-thread transaction access that the
+         * thread-local {@link TinkerTransaction} already provides — so it is 
{@code false}.
+         */
         @Override
         public boolean supportsConcurrentAccess() {
             return false;
diff --git 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraphTest.java
 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraphTest.java
index af5e79124a..67bb6bffdd 100644
--- 
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraphTest.java
+++ 
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerStorageGraphTest.java
@@ -1415,14 +1415,16 @@ public class TinkerStorageGraphTest {
 
         try {
             gtx.tx().commit();
-            //fail("should throw TransactionException");
+            fail("should throw TransactionException");
         } catch (TransactionException e) {
 
         }
 
-        // should be only 1 vertex with updated property
+        // tx2 committed first and wins; tx1 conflicted and rolled back, so 
its meta1 was never persisted
         assertEquals(1L, (long) gtx.V().count().next());
-        assertEquals("tx2", gtx.V(v1.id()).properties("test").values("meta1", 
"meta2").next());
+        assertEquals(1L, (long) 
gtx.V(v1.id()).properties("test").properties().count().next());
+        assertEquals("tx2", 
gtx.V(v1.id()).properties("test").values("meta2").next());
+        
assertFalse(gtx.V(v1.id()).properties("test").values("meta1").hasNext());
     }
 
     @Test

Reply via email to