diff --git a/pymongo/topology_description.py b/pymongo/topology_description.py index 5af5bffdf..f691036c3 100644 --- a/pymongo/topology_description.py +++ b/pymongo/topology_description.py @@ -166,7 +166,7 @@ def updated_topology_description(topology_description, server_description): topology_type = _SERVER_TYPE_TO_TOPOLOGY_TYPE[server_type] if topology_type == TOPOLOGY_TYPE.Sharded: - if server_type != SERVER_TYPE.Mongos: + if server_type not in (SERVER_TYPE.Mongos, SERVER_TYPE.Unknown): sds.pop(address) elif topology_type == TOPOLOGY_TYPE.ReplicaSetNoPrimary: diff --git a/test/discovery_and_monitoring/sharded/mongos_disconnect.json b/test/discovery_and_monitoring/sharded/mongos_disconnect.json new file mode 100644 index 000000000..f3beb558e --- /dev/null +++ b/test/discovery_and_monitoring/sharded/mongos_disconnect.json @@ -0,0 +1,88 @@ +{ + "description": "Mongos disconnect", + "phases": [ + { + "outcome": { + "servers": { + "a:27017": { + "setName": null, + "type": "Mongos" + }, + "b:27017": { + "setName": null, + "type": "Mongos" + } + }, + "setName": null, + "topologyType": "Sharded" + }, + "responses": [ + [ + "a:27017", + { + "ismaster": true, + "msg": "isdbgrid", + "ok": 1 + } + ], + [ + "b:27017", + { + "ismaster": true, + "msg": "isdbgrid", + "ok": 1 + } + ] + ] + }, + { + "outcome": { + "servers": { + "a:27017": { + "setName": null, + "type": "Unknown" + }, + "b:27017": { + "setName": null, + "type": "Mongos" + } + }, + "setName": null, + "topologyType": "Sharded" + }, + "responses": [ + [ + "a:27017", + {} + ] + ] + }, + { + "outcome": { + "servers": { + "a:27017": { + "setName": null, + "type": "Mongos" + }, + "b:27017": { + "setName": null, + "type": "Mongos" + } + }, + "setName": null, + "topologyType": "Sharded" + }, + "responses": [ + [ + "a:27017", + { + "ismaster": true, + "msg": "isdbgrid", + "ok": 1 + } + ] + ] + } + ], + "uri": "mongodb://a,b" +}