Replies: 3 comments
|
Hi, Your analysis is correct! To reduce the scope to only the issue, what's happening is: application1 do some write operations and then send a message to application2 So
This sounds correct for you, and what would be the best solution for you? |
|
Those are all the solutions I've considered as well.
I can try out the "readAllWrites" solution in our fork and see how the results look. |
|
Hi,
Also as context before introducing the vector clock (in 3.0.x) you could experience irreconcilable inconsistencies for transactions quorum majority based, to keep the system consistent you needed a quorum all or you needed to be lucky enough that you had in fact a quorum all(all nodes online and replying on time) even though you would be running on quorum majority, this was somewhat a known problem and the merge strategies where introduced to try to solve this by delegating to the user what to do when a consistency failure happened. |
Uh oh!
There was an error while loading. Please reload this page.
Hi @tglman
We're working through testing 3.2 with a goal of replacing 3.1 in our production systems, and have run into a bit of a problem.
Background:
writeQuorumofmajority.readYourWritesenabled.readQuorumofmajority, but that's apparently not relevant.What we've observed:
What we've learned from reviewing the code:
readQuorumis not used in the query path - i.e. queries are all done at an effectivereadQuorumof1- it looks like read quorum is used in a limited number of distributed request paths, but not in the general client query requests.writeQuorumis evaluated in two primary placeswriteQuorumis checked against the number of known/configured nodes - i.e. it checks that a quorum of known nodes is available.send2Nodes) thewriteQuorumis checked against theavailable nodes- i.e. it checks that a quorum of the online nodes responds.WRITEtoWRITE_ALL_MASTERSat the distributed request layer.Why we think OrientDB 3.1 passes these tests
writeQuorumofmajorityis upgraded toWRITE_ALL_MASTERSfor all updates, which is effectivelyALLwhen all nodes are online.The problem we observe with OrientDB 3.2
WRITE_ALL_MASTERSis now unnecessary and removed.majorityquorum level.The conundrum
writeQuorumlevel toall, which will make the commit available on all nodes.allquorum level check applies at the distributed transaction commit level as well, which means that if an OrientDB node goes down we lose write availability in the entire system.It's a fairly trivial task to modify the distributed request layer to wait for all nodes on commits (e.g. a
readEveryonesWritesoption), but we're wondering if there's anything we're missing in how OrientDB was intended to be used here, or pitfalls with that approach.Some asides
readQuorumandwriteQuorumconfiguration quite misleading (coming primarily from a background using sharded/replicated databases like Cassandra) and it took us a while to understand what OrientDB was actually meaning by those concepts.writeQuorumis overloaded in the OrientDB architecture to mean both a mechanism to avoid split brain, and a level of immediate consistency to apply, with the associated problems described above.readQuorumisn't applied to reads isn't obvious at first glance - it's not even mentioned in the distributed architecture docs, but is in the default config file.readQuorum, it was still a bit surprising.All reactions