[SERVER-29396] maxAcceptableLogicalClockDrift of 0 causes spurious op failures Created: 30/May/17 Updated: 30/Oct/23 Resolved: 02/Jun/17 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Sharding |
| Affects Version/s: | 3.5.7 |
| Fix Version/s: | 3.5.9 |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Kevin Pulo | Assignee: | Kevin Pulo |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Attachments: |
|
| Backwards Compatibility: | Fully Compatible |
| Operating System: | ALL |
| Steps To Reproduce: |
|
| Participants: |
| Description |
|
The maxAcceptableLogicalClockDrift startup-only parameter is currently restricted to non-negative values. However, setting it to 0 means that operations will spuriously fail to set the logical clock (due to the rate limiting mechanism) when the wallclock time naturally rolls over to the next second. This is because the wallclocks are on different hosts, and so not in 100% perfect lockstep (i.e. there is no global clock, which is the whole reason for having a logical clock).
When this happens it "appears" (to the rate-limiter) that the time difference between the nodes is 1 sec (apparently unacceptable, since the parameter is 0), but this is actually just an artifact of the per-second resolution — in fact the nodes could be arbitrarily close together in (wallclock) time. This does not occur when maxAcceptableLogicalClockDrift is 1:
The maxAcceptableLogicalClockDrift parameter should instead be limited to only positive values, ie. >= 1 |
| Comments |
| Comment by Githook User [ 02/Jun/17 ] |
|
Author: {u'username': u'devkev', u'name': u'Kevin Pulo', u'email': u'kevin.pulo@mongodb.com'}Message: |
| Comment by Githook User [ 02/Jun/17 ] |
|
Author: {u'username': u'devkev', u'name': u'Kevin Pulo', u'email': u'kevin.pulo@mongodb.com'}Message: Rename parameter to have the "Secs" unit at the end, and prevent it from being 0. |
| Comment by Andy Schwerin [ 30/May/17 ] |
|
We should have put a unit in that argument, too. It should end Secs. |