PYTHON-999 - Update SDAM tests and fix related failures.

This commit is contained in:
Luke Lovett 2015-10-06 15:37:00 -07:00
parent b6182d0587
commit 22c79ac0f6
7 changed files with 200 additions and 18 deletions

View File

@ -122,3 +122,9 @@ class IsMaster(object):
@property
def is_readable(self):
return self._is_readable
@property
def me(self):
me = self._doc.get('me')
if me:
return common.clean_node(me)

View File

@ -32,7 +32,7 @@ class ServerDescription(object):
'_address', '_server_type', '_all_hosts', '_tags', '_replica_set_name',
'_primary', '_max_bson_size', '_max_message_size',
'_max_write_batch_size', '_min_wire_version', '_max_wire_version',
'_round_trip_time', '_is_writable', '_is_readable', '_error',
'_round_trip_time', '_me', '_is_writable', '_is_readable', '_error',
'_election_id')
def __init__(
@ -59,6 +59,7 @@ class ServerDescription(object):
self._is_writable = ismaster.is_writable
self._is_readable = ismaster.is_readable
self._round_trip_time = round_trip_time
self._me = ismaster.me
self._error = error
@property
@ -112,6 +113,10 @@ class ServerDescription(object):
def election_id(self):
return self._election_id
@property
def me(self):
return self._me
@property
def round_trip_time(self):
"""The current average latency or None."""

View File

@ -300,6 +300,9 @@ def _update_rs_with_primary_from_member(
if replica_set_name != server_description.replica_set_name:
sds.pop(server_description.address)
elif (server_description.me and
server_description.address != server_description.me):
sds.pop(server_description.address)
# Had this member been the primary?
return _check_has_primary(sds)
@ -330,6 +333,10 @@ def _update_rs_no_primary_from_member(
if address not in sds:
sds[address] = ServerDescription(address)
if (server_description.me and
server_description.address != server_description.me):
sds.pop(server_description.address)
return topology_type, replica_set_name

View File

@ -0,0 +1,37 @@
{
"description": "Primary mismatched me",
"phases": [
{
"outcome": {
"servers": {
"a:27017": {
"setName": null,
"type": "Unknown"
},
"b:27017": {
"setName": null,
"type": "Unknown"
}
},
"setName": "rs",
"topologyType": "ReplicaSetNoPrimary"
},
"responses": [
[
"localhost:27017",
{
"hosts": [
"a:27017",
"b:27017"
],
"ismaster": true,
"me": "a:27017",
"ok": 1,
"setName": "rs"
}
]
]
}
],
"uri": "mongodb://localhost:27017/?replicaSet=rs"
}

View File

@ -0,0 +1,68 @@
{
"description": "Primary to no primary with mismatched me",
"phases": [
{
"outcome": {
"servers": {
"a:27017": {
"setName": "rs",
"type": "RSPrimary"
},
"b:27017": {
"setName": null,
"type": "Unknown"
}
},
"setName": "rs",
"topologyType": "ReplicaSetWithPrimary"
},
"responses": [
[
"a:27017",
{
"hosts": [
"a:27017",
"b:27017"
],
"ismaster": true,
"me": "a:27017",
"ok": 1,
"setName": "rs"
}
]
]
},
{
"outcome": {
"servers": {
"c:27017": {
"setName": null,
"type": "Unknown"
},
"d:27017": {
"setName": null,
"type": "Unknown"
}
},
"setName": "rs",
"topologyType": "ReplicaSetNoPrimary"
},
"responses": [
[
"a:27017",
{
"hosts": [
"c:27017",
"d:27017"
],
"ismaster": true,
"me": "c:27017",
"ok": 1,
"setName": "rs"
}
]
]
}
],
"uri": "mongodb://a/?replicaSet=rs"
}

View File

@ -1,37 +1,59 @@
{
"description": "RSOther discovered",
"description": "RSOther discovered",
"phases": [
{
"outcome": {
"servers": {
"a:27017": {
"setName": null,
"type": "Unknown"
},
"b:27017": {
"setName": "rs",
"setName": "rs",
"type": "RSOther"
},
"b:27017": {
"setName": "rs",
"type": "RSOther"
},
"c:27017": {
"setName": null,
"type": "Unknown"
},
"d:27017": {
"setName": null,
"type": "Unknown"
}
},
"setName": "rs",
},
"setName": "rs",
"topologyType": "ReplicaSetNoPrimary"
},
},
"responses": [
[
"b:27017",
"a:27017",
{
"hidden": true,
"hosts": [
"c:27017",
"d:27017"
],
"ismaster": false,
"ok": 1,
"secondary": true,
"setName": "rs"
}
],
[
"b:27017",
{
"hosts": [
"a:27017",
"b:27017"
],
"ismaster": false,
"ok": 1,
"secondary": false,
"c:27017",
"d:27017"
],
"ismaster": false,
"ok": 1,
"secondary": false,
"setName": "rs"
}
]
]
}
],
],
"uri": "mongodb://a,b/?replicaSet=rs"
}

View File

@ -0,0 +1,37 @@
{
"description": "Secondary mismatched me",
"phases": [
{
"outcome": {
"servers": {
"a:27017": {
"setName": null,
"type": "Unknown"
},
"b:27017": {
"setName": null,
"type": "Unknown"
}
},
"setName": "rs",
"topologyType": "ReplicaSetNoPrimary"
},
"responses": [
[
"localhost:27017",
{
"me": "a:27017",
"hosts": [
"a:27017",
"b:27017"
],
"ismaster": false,
"ok": 1,
"setName": "rs"
}
]
]
}
],
"uri": "mongodb://localhost:27017/?replicaSet=rs"
}