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 1b165181033f9e4c8c59ad089a200138b97bce1e
Author: Stephen Mallette <[email protected]>
AuthorDate: Tue Aug 4 23:53:23 2026 +0000

    Document TinkerStorageGraph durability, compaction, and locking
    
    Bring the TinkerGraph reference persistence section up to date with the 
storage
    engine's settings: the gremlin.tinkergraph.storage.sync durability modes
    (commit/os) and gremlin.tinkergraph.storage.compactThreshold auto-compaction
    knob are added to the configuration table, and the persistence prose now 
covers
    commit durability, log compaction, single-writer directory locking, and the
    storage-format version check with g.io() export as the migration path.
    
    Assisted-by: Claude Code:claude-opus-4-8
---
 .../reference/implementations-tinkergraph.asciidoc | 26 ++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/docs/src/reference/implementations-tinkergraph.asciidoc 
b/docs/src/reference/implementations-tinkergraph.asciidoc
index 6f7c417bfb..b657d0c9f4 100644
--- a/docs/src/reference/implementations-tinkergraph.asciidoc
+++ b/docs/src/reference/implementations-tinkergraph.asciidoc
@@ -178,6 +178,14 @@ to disk. The value is either a built-in engine name 
(`graphbinary`) or a fully q
 only valid on `TinkerStorageGraph` and is ignored by the in-memory 
`TinkerMemoryGraph`.
 |gremlin.tinkergraph.graphLocation |The directory in which 
`TinkerStorageGraph` stores its durable data. Required when
 `gremlin.tinkergraph.storage` is set and ignored otherwise.
+|gremlin.tinkergraph.storage.sync |The durability applied to each committed 
transaction by a `TinkerStorageGraph`
+storage engine. `commit` (default) forces each commit to disk so an 
acknowledged commit survives an operating system
+crash or power loss. `os` only flushes to the operating system, so a commit 
survives a crash of the JVM process but
+may be lost on an operating system crash or power loss. Only meaningful when 
`gremlin.tinkergraph.storage` is set.
+|gremlin.tinkergraph.storage.compactThreshold |The size in bytes at which a 
`TinkerStorageGraph` storage engine
+automatically compacts its append log, bounding the log growth and restart 
time of a long-running graph that is never
+explicitly closed. Defaults to `67108864` (64 MB). A value of `0` disables 
automatic compaction, leaving it to
+`close()` or an explicit `compact()`. Only meaningful when 
`gremlin.tinkergraph.storage` is set.
 |=========================================================
 
 NOTE: To use <<tinkergraph-gremlin-tx, transactions>> and 
<<tinkergraph-gremlin-persistence, persistence>>, configure
@@ -437,6 +445,24 @@ The graph remains the authoritative in-memory copy and is 
mirrored to disk, so a
 memory. The write to the storage log happens before the in-memory commit is 
applied, so a failure to persist aborts the
 transaction and leaves the on-disk data and the in-memory graph consistent.
 
+The durability of each commit is governed by the 
`gremlin.tinkergraph.storage.sync` setting. Under the default
+`commit` mode every committed transaction is forced to disk, so an 
acknowledged commit survives an operating system
+crash or power loss. The `os` mode instead flushes only to the operating 
system, which is faster but leaves a commit
+recoverable only across a crash of the JVM process, not an operating system 
crash or power loss.
+
+A storage engine that appends each commit to a log reclaims space by 
compacting that log into a fresh snapshot of the
+committed state. Compaction runs when the graph is closed and can be requested 
explicitly through
+`TinkerStorageGraph.compact()`. So that a long-running graph which is never 
explicitly closed does not accumulate an
+unbounded log, compaction also runs automatically once the log grows past 
`gremlin.tinkergraph.storage.compactThreshold`
+bytes. Setting that threshold to `0` disables automatic compaction.
+
+A storage location may be opened by only one graph at a time. 
`TinkerStorageGraph` takes an exclusive lock on the
+storage directory when it opens, so a second attempt to open the same 
location, whether from the same JVM or another
+process, fails rather than corrupting the data. The lock is released when the 
graph is closed. A store also records
+the storage format version it was written with. Opening a store written in a 
format this version cannot read fails
+with a clear error rather than misreading the data. There is no in-place 
format migration. To move a graph across an
+incompatible storage format, export it with the `io()` step before upgrading 
and read it back afterward.
+
 Persistence is distinct from interchange. `TinkerMemoryGraph` is purely 
in-memory and does not persist. To move data in
 or out of any TinkerGraph in an interchange format such as GraphML, GraphSON, 
or Gryo, use the `io()` step directly:
 

Reply via email to