Skip to content

Commit ed0eab7

Browse files
committed
CSHARP-2094: Only consider data bearing nodes when calculating LogicalSessionTimeout for the cluster.
1 parent 6590086 commit ed0eab7

File tree

3 files changed

+373
-33
lines changed

3 files changed

+373
-33
lines changed

src/MongoDB.Driver.Core/Core/Clusters/ClusterDescription.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,36 @@ public ClusterDescription WithType(ClusterType value)
248248

249249
foreach (var server in servers)
250250
{
251-
if (server.LogicalSessionTimeout == null)
251+
if (IsDataBearingServer(server))
252252
{
253-
return null;
254-
}
253+
if (server.LogicalSessionTimeout == null)
254+
{
255+
return null;
256+
}
255257

256-
if (logicalSessionTimeout == null || server.LogicalSessionTimeout.Value < logicalSessionTimeout.Value)
257-
{
258-
logicalSessionTimeout = server.LogicalSessionTimeout;
258+
if (logicalSessionTimeout == null || server.LogicalSessionTimeout.Value < logicalSessionTimeout.Value)
259+
{
260+
logicalSessionTimeout = server.LogicalSessionTimeout;
261+
}
259262
}
260263
}
261264

262265
return logicalSessionTimeout;
263266
}
267+
268+
private bool IsDataBearingServer(ServerDescription server)
269+
{
270+
switch (server.Type)
271+
{
272+
case ServerType.Standalone:
273+
case ServerType.ReplicaSetPrimary:
274+
case ServerType.ReplicaSetSecondary:
275+
case ServerType.ShardRouter:
276+
return true;
277+
278+
default:
279+
return false;
280+
}
281+
}
264282
}
265283
}

tests/MongoDB.Driver.Core.Tests/Specifications/server-discovery-and-monitoring/tests/rs/ls_timeout.json

Lines changed: 180 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,127 @@
1111
"ismaster": true,
1212
"hosts": [
1313
"a:27017",
14-
"b:27017"
14+
"b:27017",
15+
"c:27017",
16+
"d:27017",
17+
"e:27017"
1518
],
1619
"setName": "rs",
17-
"logicalSessionTimeoutMinutes": 1,
20+
"logicalSessionTimeoutMinutes": 3,
21+
"minWireVersion": 0,
22+
"maxWireVersion": 6
23+
}
24+
]
25+
],
26+
"outcome": {
27+
"servers": {
28+
"a:27017": {
29+
"type": "RSPrimary",
30+
"setName": "rs"
31+
},
32+
"b:27017": {
33+
"type": "Unknown"
34+
},
35+
"c:27017": {
36+
"type": "Unknown"
37+
},
38+
"d:27017": {
39+
"type": "Unknown"
40+
},
41+
"e:27017": {
42+
"type": "Unknown"
43+
}
44+
},
45+
"topologyType": "ReplicaSetWithPrimary",
46+
"logicalSessionTimeoutMinutes": 3,
47+
"setName": "rs"
48+
}
49+
},
50+
{
51+
"responses": [
52+
[
53+
"d:27017",
54+
{
55+
"ok": 1,
56+
"ismaster": false,
57+
"isreplicaset": true,
1858
"minWireVersion": 0,
1959
"maxWireVersion": 6
2060
}
21-
],
61+
]
62+
],
63+
"outcome": {
64+
"servers": {
65+
"a:27017": {
66+
"type": "RSPrimary",
67+
"setName": "rs"
68+
},
69+
"b:27017": {
70+
"type": "Unknown"
71+
},
72+
"c:27017": {
73+
"type": "Unknown"
74+
},
75+
"d:27017": {
76+
"type": "RSGhost"
77+
},
78+
"e:27017": {
79+
"type": "Unknown"
80+
}
81+
},
82+
"topologyType": "ReplicaSetWithPrimary",
83+
"logicalSessionTimeoutMinutes": 3,
84+
"setName": "rs"
85+
}
86+
},
87+
{
88+
"responses": [
89+
[
90+
"e:27017",
91+
{
92+
"ok": 1,
93+
"ismaster": false,
94+
"hosts": [
95+
"a:27017",
96+
"b:27017",
97+
"c:27017",
98+
"d:27017",
99+
"e:27017"
100+
],
101+
"setName": "rs",
102+
"arbiterOnly": true,
103+
"minWireVersion": 0,
104+
"maxWireVersion": 6
105+
}
106+
]
107+
],
108+
"outcome": {
109+
"servers": {
110+
"a:27017": {
111+
"type": "RSPrimary",
112+
"setName": "rs"
113+
},
114+
"b:27017": {
115+
"type": "Unknown"
116+
},
117+
"c:27017": {
118+
"type": "Unknown"
119+
},
120+
"d:27017": {
121+
"type": "RSGhost"
122+
},
123+
"e:27017": {
124+
"type": "RSArbiter",
125+
"setName": "rs"
126+
}
127+
},
128+
"topologyType": "ReplicaSetWithPrimary",
129+
"logicalSessionTimeoutMinutes": 3,
130+
"setName": "rs"
131+
}
132+
},
133+
{
134+
"responses": [
22135
[
23136
"b:27017",
24137
{
@@ -27,7 +140,10 @@
27140
"secondary": true,
28141
"hosts": [
29142
"a:27017",
30-
"b:27017"
143+
"b:27017",
144+
"c:27017",
145+
"d:27017",
146+
"e:27017"
31147
],
32148
"setName": "rs",
33149
"logicalSessionTimeoutMinutes": 2,
@@ -45,30 +161,67 @@
45161
"b:27017": {
46162
"type": "RSSecondary",
47163
"setName": "rs"
164+
},
165+
"c:27017": {
166+
"type": "Unknown"
167+
},
168+
"d:27017": {
169+
"type": "RSGhost"
170+
},
171+
"e:27017": {
172+
"type": "RSArbiter",
173+
"setName": "rs"
48174
}
49175
},
50176
"topologyType": "ReplicaSetWithPrimary",
51-
"logicalSessionTimeoutMinutes": 1,
177+
"logicalSessionTimeoutMinutes": 2,
52178
"setName": "rs"
53179
}
54180
},
55181
{
56182
"responses": [
57183
[
58-
"a:27017",
184+
"c:27017",
59185
{
60186
"ok": 1,
61-
"ismaster": true,
62-
"hosts": [
63-
"a:27017",
64-
"b:27017"
65-
],
187+
"ismaster": false,
66188
"setName": "rs",
189+
"hidden": true,
67190
"logicalSessionTimeoutMinutes": 1,
68191
"minWireVersion": 0,
69192
"maxWireVersion": 6
70193
}
71-
],
194+
]
195+
],
196+
"outcome": {
197+
"servers": {
198+
"a:27017": {
199+
"type": "RSPrimary",
200+
"setName": "rs"
201+
},
202+
"b:27017": {
203+
"type": "RSSecondary",
204+
"setName": "rs"
205+
},
206+
"c:27017": {
207+
"type": "RSOther",
208+
"setName": "rs"
209+
},
210+
"d:27017": {
211+
"type": "RSGhost"
212+
},
213+
"e:27017": {
214+
"type": "RSArbiter",
215+
"setName": "rs"
216+
}
217+
},
218+
"topologyType": "ReplicaSetWithPrimary",
219+
"logicalSessionTimeoutMinutes": 2,
220+
"setName": "rs"
221+
}
222+
},
223+
{
224+
"responses": [
72225
[
73226
"b:27017",
74227
{
@@ -77,7 +230,10 @@
77230
"secondary": true,
78231
"hosts": [
79232
"a:27017",
80-
"b:27017"
233+
"b:27017",
234+
"c:27017",
235+
"d:27017",
236+
"e:27017"
81237
],
82238
"setName": "rs",
83239
"logicalSessionTimeoutMinutes": null,
@@ -95,6 +251,17 @@
95251
"b:27017": {
96252
"type": "RSSecondary",
97253
"setName": "rs"
254+
},
255+
"c:27017": {
256+
"type": "RSOther",
257+
"setName": "rs"
258+
},
259+
"d:27017": {
260+
"type": "RSGhost"
261+
},
262+
"e:27017": {
263+
"type": "RSArbiter",
264+
"setName": "rs"
98265
}
99266
},
100267
"topologyType": "ReplicaSetWithPrimary",

0 commit comments

Comments
 (0)