You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Concurrent UPDATE of multi-page records (large embeddings) with LSM_VECTOR index causes "Invalid pointer to a chunk" and "Concurrent modification on page" errors. #3135
Our ingestion pipeline corrupts our database consistently when concurrency is high enough.
the corrupted records cannot be retrieved and also not deleted. Also sometime the previous or next records throw class cast exceptions (probably because the record borders got messed up)
edit
sorry I was too quick with the test case. this doesn't reproduce the corruption consistently. I will get back when I have a proper testcase
thank you so much for your support. We havent so far used arcade directly from source (we will try that soon)
Changing the isolation level helped with the test case. Unfortunately in production it didn't really help. also it resulted in lots of those
com.arcadedb.exception.TransactionException: Transaction error on commit
at com.arcadedb.database.TransactionContext.commit1stPhase(TransactionContext.java:653) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.TransactionContext.commit(TransactionContext.java:128) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.LocalDatabase.lambda$commit$5(LocalDatabase.java:431) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.LocalDatabase.executeInReadLock(LocalDatabase.java:1467) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.LocalDatabase.commit(LocalDatabase.java:426) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.LocalDatabase.transaction(LocalDatabase.java:1110) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.LocalDatabase.transaction(LocalDatabase.java:1082) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.server.ServerDatabase.transaction(ServerDatabase.java:359) ~[arcadedb-server-25.12.1.jar!/:na]
at io.syntact.index.repository.GraphRepository.storeEntitiesAndRelationshipsForTextChunk(GraphRepository.java:747) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.processors.TextProcessor.process(TextProcessor.java:73) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.ContentProcessingDispatcher.dispatchToProcessor(ContentProcessingDispatcher.java:160) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.ContentProcessingDispatcher.lambda$processContent$0(ContentProcessingDispatcher.java:70) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.ContentProcessingDispatcher.processWithRetry(ContentProcessingDispatcher.java:177) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.ContentProcessingDispatcher.processContent(ContentProcessingDispatcher.java:70) ~[!/:0.0.1-SNAPSHOT]
at io.syntact.index.service.processing.ContentProcessingDispatcher.lambda$processContentBatch$0(ContentProcessingDispatcher.java:104) ~[!/:0.0.1-SNAPSHOT]
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: com.arcadedb.exception.TimeoutException: Timeout on locking file 1 (EntityV_0.1.65536.v0.bucket) during commit (fileIds=[1, 2, 3, 16, 17, 22, 23, 34, 103, 105, 122, 124, 126], timeout=5000ms
at com.arcadedb.engine.TransactionManager.tryLockFiles(TransactionManager.java:496) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.TransactionContext.lockFilesInOrder(TransactionContext.java:828) ~[arcadedb-engine-25.12.1.jar!/:na]
at com.arcadedb.database.TransactionContext.commit1stPhase(TransactionContext.java:587) ~[arcadedb-engine-25.12.1.jar!/:na]
... 18 common frames omitted
finaly the application crashed.
What was also weird was that the ingestion status kept flashing back to an old state showing 17%, 18% then again 7% for a long time flashing back to 19% over 5 Minutes. No transaction is open that long.
i was thinking if i should extract the embedding in a dedicated node. we have many status update during ingestions on our nodes and i feel like that in combination with the large embeddings (even written once) have something to do with this.
Ok, REPEATABLE_READ can cause such timeouts. Is there any chance you try the latest main branch with the fix? Remove REPEATABLE_READ, keep it the default settings.
Thank you for the fix, I've tried now with the latest main branch and it seems to work. We no longer have errors regarding broken multi page records.
We see now a new error
"Multi-page record #13:X was modified during read (page version changed from X to Y). Please retry the operation"
but this seems to me like an expected one and it only occurs when listing content during ingestion.
What is still there are errors about deleted nodes and invalid pointes, even though we don't delete anything during ingestion. But it doesn't seem to have any impact.
just as a heads up: The new ArcadeDB version (26.1.1-SNAPSHOT built from GitHub main) returns "record" instead of "vertex" as the key. I don't know if this is intentional.
Activity
lvca commentedon Jan 14, 2026
Ok, let me know, checking your other issue #3115
syntact-io-office-user commentedon Jan 15, 2026
it is a bit clearer now, but still not 100%. What we know so far is that under heavy concurrency there are 2 types of errors arising.
we cannot reproduce problem number 2 in a self contained testfile, but problem number one can be reproduced with the following test :
lvca commentedon Jan 15, 2026
Can you please try with
REPEATABLE_READtransaction isolation? Set it at database level:db.setTransactionIsolationLevel(REPEATABLE_READ).fix: attempt to fix error with concurrent updates
lvca commentedon Jan 16, 2026
I've also update a part of code that should be helpful for this use case, let me know if you can also retest against the latest main branch.
syntact-io-office-user commentedon Jan 16, 2026
thank you so much for your support. We havent so far used arcade directly from source (we will try that soon)
Changing the isolation level helped with the test case. Unfortunately in production it didn't really help. also it resulted in lots of those
finaly the application crashed.
What was also weird was that the ingestion status kept flashing back to an old state showing 17%, 18% then again 7% for a long time flashing back to 19% over 5 Minutes. No transaction is open that long.
i was thinking if i should extract the embedding in a dedicated node. we have many status update during ingestions on our nodes and i feel like that in combination with the large embeddings (even written once) have something to do with this.
lvca commentedon Jan 17, 2026
Ok, REPEATABLE_READ can cause such timeouts. Is there any chance you try the latest main branch with the fix? Remove REPEATABLE_READ, keep it the default settings.
syntact-io-office-user commentedon Jan 19, 2026
Thank you for the fix, I've tried now with the latest main branch and it seems to work. We no longer have errors regarding broken multi page records.
We see now a new error
"Multi-page record #13:X was modified during read (page version changed from X to Y). Please retry the operation"
but this seems to me like an expected one and it only occurs when listing content during ingestion.
What is still there are errors about deleted nodes and invalid pointes, even though we don't delete anything during ingestion. But it doesn't seem to have any impact.
I will investigate further and get back to you.
syntact-io-office-user commentedon Jan 19, 2026
just as a heads up: The new ArcadeDB version (26.1.1-SNAPSHOT built from GitHub main) returns "record" instead of "vertex" as the key. I don't know if this is intentional.
12 remaining items
lvca commentedon Jan 21, 2026
New test Cases Created
fix: concurrent updates to lsm vector index
lvca commentedon Jan 21, 2026
It should be fixed. I've created a couple of test cases to reproduce the issue and avoid regression.
chore(deps-dev): bump cucumber.version from 7.22.1 to 7.34.2 [skip ci]
fix: attempt to fix error with concurrent updates
fix: concurrent updates to lsm vector index
test: add exists() guard to migrated @nested DB setups + tag #3135 as…
fix: attempt to fix error with concurrent updates
fix: concurrent updates to lsm vector index
chore(deps-dev): bump cucumber.version from 7.22.1 to 7.34.2 [skip ci]
fix: the PQ guard checks the graph's id space, not its node count
Reuse the persisted vector graph after a delete instead of rebuilding…