Fix arangorestore API to create _rev on shard leader [BTS-1232]. #18191
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Scope & Purpose
This is about https://arangodb.atlassian.net/browse/BTS-1232 .
Short description:
arangorestore uses the (undocumented) API /_api/replication/restore-data
implemented in the RestReplicationHandler. Since ArangoDB 3.8, we
create new _rev values during the restore operation. Unfortunately,
this creation of _rev values was done on the coordinator(s) and since
these are hybrid logical clock (HLC) values, it can happen that the
generated _rev values on two different coordinators are the same for
two different documents. This will clash on the leader of the OneShard
database, since there, the newly generated _rev values are used as
internal document IDs, which directly translate into a RocksDB key in
the DocumentsColumnFamily. This leads to a collision and this manifests
itself as a lock timeout, since two different RocksDB transactions try
to touch the same key. However, even if no lock timeout would have
happened, the consequences would have been dire: Namely, there would
have been a corruption between primary index and data in the Documents
column family. We would have had two primary index entries pointing to
the same document.
Checklist
Related Information