[SERVER-38468] Only create coordinator in memory on coordinateCommit Created: 07/Dec/18 Updated: 10/Dec/18 Resolved: 10/Dec/18 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Sharding |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Matthew Saltz (Inactive) | Assignee: | Matthew Saltz (Inactive) |
| Resolution: | Won't Fix | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Operating System: | ALL |
| Sprint: | Sharding 2018-12-17 |
| Participants: |
| Description |
|
Previously with the old commit protocol we would create a transaction coordinator in memory on the coordinator shard when the first statement of the transaction arrived with a coordinator: true flag. Now that we're using an RPC based protocol this isn't necessary. We can instead create the coordinator when the coordinator shard receives coordinateCommit with a participant list. |
| Comments |
| Comment by Matthew Saltz (Inactive) [ 10/Dec/18 ] |
|
Turns out this makes recovering the decision/making coordinateCommit calls idempotent much more complicated, to the point that it isn't worth it. This is because when a coordinateCommit command arrives, if a coordinator does not exist in memory, we don't know if that means that commit has completed or that it hasn't started. |