I am a beginner who is learning mongodb source code and I try to build mongodb by myself and use gdb to figure out how mongodb implements multi-document transaction.
In my view, the transaction in relica set follows these phases:
- All the operations in transaction are done in only 1 recovery_unit in primay
- After transation in primary is committed, primary write oplogs.
- Secondaries pulls oplogs and apply.
- After majority of repl members commit the transaction. the transaction commit.
It seems that in primary, you just move all the operations into one recovery_unit as that for a single docuemnt.
However, here is a question that:
Whether a transaction only uses 1 wriedtiger_recovery_unit_of_work
There is a variable names _toplevel
and I want to know the meaning it is, because it I found the wuow.commit(); is called in every insert command, in function void insertDocuments(int src/mongo/db/ops/write_ops_exec.cpp)
I try to figure out it by gdb and I indeed make breakpoint in the mongod. However, bad thing happens: it seems that if I try to debug it for a while, the transaction will abort by itself so I can’t find the trace of it.
I guess it is the time limit for transaction to avoid memory problems, but is there any configurations will help to stop the limit?
Is there any method could help?
As a beginner, I want to know what IDE and debugger you mongodb developers use.
I will apperciate it to your early reply.
Thanks a lot
Young