Skip to content

GraphBatch close() restores default WAL flush instead of the configured value: durability silently downgraded after any bulk load (txWalFlush=2 -> async, 79 -> 4,120 tx/s) #5378

Description

@tae898

Summary

GraphBatch temporarily relaxes the WAL flush policy for bulk speed (documented, sensible) — but on close() it restores the engine default rather than the value the user configured. After any GraphBatch bulk load, every subsequent transaction on that database silently stops honoring arcadedb.txWalFlush=2 (fsync-per-commit): the durability contract is downgraded with no error, log line, or signal.

Reproduction (embedded, 26.8.1.dev2 line; measured on idle i9-12900HK, NVMe)

// JVM started with -Darcadedb.txWalFlush=2 (YES_FULL)
// 1) per-commit inserts BEFORE any GraphBatch:
//      ~79 tx/s   <- fsync honored (disk floor)
// 2) run any GraphBatch bulk load (500 vertices is enough), close it
// 3) same per-commit inserts AFTER:
//      ~4,120 tx/s <- fsync silently gone

Python-bindings script that shows exactly this (same engine calls) available on request; the effect reproduces deterministically. The pre/post asymmetry isolates it to GraphBatch's save/restore of WAL settings ("Saved state for restore after close" block): it appears to restore a captured-too-late or default value instead of the configured one.

Why it matters

Any application that (a) sets full durability and (b) ever bulk-loads via GraphBatch runs the rest of its life at relaxed durability without knowing. We found it while building a matched-durability benchmark ablation: graph cells (bulk-loaded via GraphBatch) refused to show fsync-bound throughput while document cells (plain INSERT ingest) behaved correctly — the discrepancy only made sense once the post-GraphBatch downgrade was isolated.

Suggested fix

Capture the configured value (GlobalConfiguration or database-level override) before relaxing, and restore exactly that on close(), including on exceptional exit; a log line on relax/restore would also make the temporary window visible.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions