-
Notifications
You must be signed in to change notification settings - Fork 100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HMAC keys thread hits Invariant failure !_committedSnapshot || *_committedSnapshot < nameU64 during replset startup #112
Comments
Hey @IanWhalen, thanks for reporting. This failure is most likely related to the change in how Mongo manages oplog snapshots (same as #106 and #102). I would expect many more failures until we adapt to the new mongo's storage engine API. I have spent some time researching https://jira.mongodb.org/browse/SERVER-28620 and unfortunately adapting to the new behavior will most likely require changes in RocksDB itself. There are two behaviors that are currently unsupported in RocksDB:
I originally thought that the changes are small, but it appears this project might have a bigger scope unfortunately. |
Hi Igor, |
Awesome! Makes things much easier on our side.
Hm, if I understand correctly, this would enable the oplog to be fully independent of the storage engine, right? Can we share oplog implementation across engines? ;)
Would be great if we could get there easily. RocksDB is planning a feature that would enable us to slice transactions, but it won't be ready soon. |
That is something we have considered doing in the future, but today's code still requires oplog writes to be transactional with everything else. That is, one transaction needs to atomically commit writes to both the oplog table and other data tables. Slicing transactions today only occurs on secondaries as an optimization for batching together multiple insert ops; disabling this optimization is easy, but we'd need to thread in a new function call into the storage engine API in order to know if slicing is supported. |
Can I just commit the previous transaction when a timestamp changes? Is there a possibility of rollback even on the secondaries? |
Secondaries will not call rollback_transaction() for replication. I'm not sure how you could commit a transaction in the middle, though; you'd have to begin a new transaction at that moment as well, so that the subsequent call of commit_transaction() would work. |
Yup, exactly -- commit all writes and transparently start a new transaction. That'll work! |
https://jira.mongodb.org/browse/SERVER-31598
Also, @igorcanadi, please let me know if this is still the best way to communicate these kinds of failures to your team?
The text was updated successfully, but these errors were encountered: