[SERVER-68094] Resharding with custom generated _id fails with projection error Created: 15/Jul/22 Updated: 29/Oct/23 Resolved: 13/Sep/22 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Sharding |
| Affects Version/s: | None |
| Fix Version/s: | 5.0.13, 6.0.2, 6.1.0-rc2, 6.2.0-rc0 |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Rachita Dhawan | Assignee: | Nandini Bhartiya |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | sharding-nyc-subteam1 | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Backwards Compatibility: | Fully Compatible | ||||||||
| Backport Requested: |
v6.1, v6.0, v5.0
|
||||||||
| Sprint: | Sharding 2022-08-08, Sharding 2022-08-22, Sharding 2022-09-05, Sharding 2022-09-19 | ||||||||
| Participants: | |||||||||
| Story Points: | 3 | ||||||||
| Description |
|
Problem: Using a client generated _id instead of using regular objectId and resharding on it generates a projection error. Details: The error seems to be coming from how we create pipeline query(specifically $project) in ReshardingSplitPolicy::createRawPipeline. We hit this code path and append ("_id",0) to the pipeline. It seems like shardKey.hasId() check doesn't work as expected.( I removed this check and resharding worked.)
The pipeline that is created :
Steps to reproduce: 1. Customer created a collection and sharded on :
2. They then inserted a few documents as follows:
3. Issued the following Resharding command and got a failure
Note: Attaching a js test to reproduce.reshard_coll.js
|
| Comments |
| Comment by Githook User [ 14/Sep/22 ] |
|
Author: {'name': 'nandinibhartiyaMDB', 'email': 'nandini.bhartiya@mongodb.com', 'username': 'nandinibhartiyaMDB'}Message: (cherry picked from commit 015dc2badcafc3238845b0eec3d6084fdff2545c) |
| Comment by Githook User [ 14/Sep/22 ] |
|
Author: {'name': 'nandinibhartiyaMDB', 'email': 'nandini.bhartiya@mongodb.com', 'username': 'nandinibhartiyaMDB'}Message: (cherry picked from commit 015dc2badcafc3238845b0eec3d6084fdff2545c) |
| Comment by Githook User [ 08/Sep/22 ] |
|
Author: {'name': 'nandinibhartiyaMDB', 'email': 'nandini.bhartiya@mongodb.com', 'username': 'nandinibhartiyaMDB'}Message: (cherry picked from commit 015dc2badcafc3238845b0eec3d6084fdff2545c) |
| Comment by Githook User [ 06/Sep/22 ] |
|
Author: {'name': 'nandinibhartiyaMDB', 'email': 'nandini.bhartiya@mongodb.com', 'username': 'nandinibhartiyaMDB'}Message: |
| Comment by Nandini Bhartiya [ 29/Aug/22 ] |
| Comment by Max Hirschhorn [ 02/Aug/22 ] |
|
Implementation plan is to switch the $project stage in ReshardingSplitPolicy::createRawPipeline() to $replaceRoot. Note that this will likely mean removing the call to dotted_path_support::extractElementsBasedOnTemplate() from ReshardingSplitPolicy::_appendSplitPointsFromSample() because the newRoot object will have already extracted the fields as dotted paths. The $arrayToObject aggregation expression will likely be useful to building up the newRoot object. We should add C++ test cases to initial_split_policy_test.cpp which exercise dotted paths. |