-
Notifications
You must be signed in to change notification settings - Fork 245
DRIVERS-1408 - Add guidance on adding _id fields to documents to CRUD spec #1688
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
2955d19
925cd95
1afe0c0
48ce014
e57594a
549ef56
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -737,3 +737,15 @@ that `firstEvent.operationId` is equal to `secondEvent.operationId`. Assert both | |
To force completion of the `w:0` writes, execute `coll.countDocuments` and expect the returned count is | ||
`maxMessageSizeBytes / maxBsonObjectSize + 1`. This is intended to avoid incomplete writes interfering with other tests | ||
that may use this collection. | ||
|
||
### 16. Generated document identifiers are the first field in their document | ||
alcaeus marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Construct a `MongoClient` (referred to as `client`) with | ||
[command monitoring](../../command-logging-and-monitoring/command-logging-and-monitoring.md) enabled to observe | ||
CommandStartedEvents. For each of `insertOne`, client `bulkWrite`, and collection `bulkWrite`, do the following: | ||
|
||
- Execute the command with a document that does not contain an `_id` field. | ||
- If possible, capture the wire protocol message (referred to as `request`) of the command. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this only necessary in languages where the ordering is still not deterministic in the CommandStartedEvent's There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is the preferred way to verify the ordering of the document, as drivers may modify the document between emitting the CommandStartedEvent and the actual wire transfer of the command. For example, the Python driver re-orders Verifying the order of the actual transmitted payload document ensures that the server receives exactly what we expect it to. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it could potentially be rephrased if wire protocol parsing is difficult for drivers to achieve, but I agree it would be easy to assert I think perhaps for this test; we can encourage drivers to just use command monitoring as the "main path" set of assertions to implement. But we should encourage drivers to check that their wire message key order either matches their command events or that reordering is done when the wire message is built. So for Node, I would write a test that asserts the JS object that is inspectable on the event (for any command) matches key order in BSON. Python may check that their wire messages are ordered correctly. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If drivers are able to check wire messages directly, they should take that path. Otherwise, they should fall back to using command monitoring, ideally verifying that they don't modify field ordering before sending data over the wire. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree, after all the point here is that the bytes are in an order that the server benefits from, if your command monitoring is a source of truth for such a thing you could/should use it but the real goal is in the wire message. |
||
- Assert that the first field of `request.documents[0]` is `_id` | ||
- Otherwise, capture the CommandStartedEvent (referred to as `event`) emitted by the command. | ||
- Assert that the first field of `event.command.documents[0]` is `_id`. | ||
NoahStapp marked this conversation as resolved.
Show resolved
Hide resolved
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Noted that this is already discussed in the client bulk write spec.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Having this behavior discussed here for general CRUD operations makes sense to me, as the client bulk write spec follows from this broader context.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The client bulk write spec stands on its own, except for a reference back to CRUD for modeling unacknowledged write results.
With my last comment, I just meant to acknowledge that no changes were needed to the client bulk write spec since it already addressed
_id
ordering. This was in the vein of previous PRs like #1644 that required updates to both specs.