-
Type: Task
-
Resolution: Unresolved
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Connection Layer
Use Case
The Node driver's operation execution flow looks roughly like the following:
- check if connected, auto connect if needed
- select server
- obtain session
- build the command
- checkout a connection
- execute the command
Some operations require information about the selected server (maxWireVersion, maxBSONSize, etc) when constructing the command. This data is usually obtained from the server's server description, which is populated after the monitor connects during SDAM.
In load balanced mode, we don't perform SDAM. This means that any command that relies on data from the server description might not have accurate information.
There are two solutions to this problem that I can think of:
- propagate handshake information from connection establishment up into the topology and store it in a fake server description for LB mode specifically.
- build commands after connection checkout, obtaining server information from the connection's `StreamDescription`
Of these options, 2 seems like a better solution.
User Experience
Dependencies
n/a
Risks/Unknowns
n/a
Acceptance Criteria
Implementation Requirements
- functional reqs, potential snafus to avoid, performance targets, etc
Testing Requirements
- unit test, spec test sync, etc
Documentation Requirements
- DOCSP ticket, API docs, etc
Follow Up Requirements
- additional tickets to file, required releases, etc
- if node behavior differs/will differ from other drivers, confirm with dbx devs what standard to aim for and what plan, if any, exists to reconcile the diverging behavior moving forward