-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Optimization
-
Fully Compatible
-
ALL
-
200
-
None
-
None
-
None
-
None
-
None
-
None
-
None
jstests/sharding/query/lookup/lookup_view_field_match_order.js fails in the no_passthrough_disagg_override_sharded suite with 2 failing mocha tests:
errmsg: "received command without explicit readConcern on an internalClient connection ..."
code: 4569200 (Location4569200)
The failing cases are the two "on a standalone mongod" cases that simulate the router -> shard wire protocol: they flag their connection as an internal client (hello with internalClient: {...}) and send a raw aggregate containing $_internalFromIsAView / $_internalFieldMatchPipelineIdx. The command carries an explicit writeConcern but no explicit readConcern.
Root cause. The server enforces (uassert 4569200 in src/mongo/db/service_entry_point_shard_role.cpp) that commands arriving on an internalClient connection must explicitly specify a readConcern (even an empty readConcern: {}). The check is gated on ReplicationCoordinator::getSettings().isReplSet():
- In ordinary suites the test's control section runs against a true standalone, so isReplSet() is false, the check is skipped, and the missing readConcern is tolerated.
- Under the disagg override, disagg_storage_override.js replaces MongoRunner.runMongod() with a single-node DisaggReplSetTest replica set (disagg has no local durable dbpath). The same node is now a replica-set member, isReplSet() is true, and the check fires.
Sequence of events.
- Override intercepts MongoRunner.runMongod({}) -> DisaggReplSetTest lookup_view_field_match_order_standalone_1 (1 node).
- The 3 plain $lookup cases pass (normal shell connection, defaults applied).
- Test opens a second connection and marks it internal via hello + internalClient.
- runInternalClientAggregate sends the aggregate without readConcern -> uassert 4569200.
- Both internal-client cases fail -> "Error: 2 failing tests detected" -> task fails.
Fix. Add readConcern: {} to runInternalClientAggregate, mirroring the explicit writeConcern the test already sends. An empty readConcern satisfies the internal-client contract on replica-set-backed nodes and is a no-op on a true standalone.