[SERVER-42047] Windows 4.2 mongo shell cannot connect to a 4.2 Cluster Created: 02/Jul/19 Updated: 29/Oct/23 Resolved: 17/Jul/19 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | 4.2.0-rc3 |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Alex Bevilacqua | Assignee: | Backlog - Storage Engines Team |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||||||||||||||
| Assigned Teams: |
Storage Engines
|
||||||||||||||||||||||||
| Backwards Compatibility: | Major Change | ||||||||||||||||||||||||
| Operating System: | ALL | ||||||||||||||||||||||||
| Sprint: | Storage Engines 2019-07-29 | ||||||||||||||||||||||||
| Participants: | |||||||||||||||||||||||||
| Case: | (copied to CRM) | ||||||||||||||||||||||||
| Description |
|
Currently cannot connect from a 4.2.0-rc2 Windows shell to a 4.2 Atlas cluster. When testing from a 4.0.10 Windows shell to a 4.2.0-rc1 Atlas cluster:
When testing from a 4.2.0-rc2 Windows shell to a 4.2.0-rc1 Atlas cluster:
The above will loop indefinitely. To verify the 4.2.0-rc2 shell could still connect to non-4.2 servers I also tested connecting to a 3.6.13 Atlas cluster:
My OS Details are as follows:
|
| Comments |
| Comment by Kelsey Schubert [ 21/Jul/19 ] | |||||||||
|
Yes, this was fully resolved by | |||||||||
| Comment by Alexander Gorrod [ 15/Jul/19 ] | |||||||||
|
mark.benvenuto Can we close this ticket as a duplicate of | |||||||||
| Comment by Mark Benvenuto [ 04/Jul/19 ] | |||||||||
|
I can confirm this repros with 4.2.0-rc2 Windows and the provided Atlas URI. I can also repro this locally without SSL (checksums are disabled when running with SSL post 4.2.0-rc2) between a 4.2.0-rc2 Windows shell and Linux server. The server is killing the connection because of the client and server disagree on the message CRC.
If we examine the last loop (the following explanation is also true of the first loop which is skipped when computing the CRC in the op_msg CRC case), we can see that different Intel CRC instructions are called. I have provided the raw hex of the assembly. On GCC/Linux, GDB decoded, AT&T style,
On MSVC, as decoded by llvm-ojdump, AT&T style,
As a result of this code generation, we compute different CRCs for anything that is not 8-byte aligned and not a multiple of 8 bytes. For C code, the MSVC compiler mis-compile the intrinsic as taking a 32-bit value if the header is missing but does not error (even under /Wall). GCC and Clang warn about it undefined. For C++ code, the MSVC compiler will not compile the code since the intrinsic is not defined. The fix to the code is to add an include for nmmintrin.h. |