summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/rsm_horizon_change.js
blob: f8a5e389f1ae14b18b5ba10df4f3bcc586bc658f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 * Tests that split horizon reconfig results in unknown ServerDescription in
 * StreamableReplicaSetMonitor.
 */
(function() {
'use strict';

const st = new ShardingTest(
    {mongos: [{setParameter: {replicaSetMonitorProtocol: "streamable"}}], config: 1, shards: 0});
const configRSPrimary = st.configRS.getPrimary();

const unknownTopologyChangeRegex = new RegExp(
    `Topology Change.*${st.configRS.name}.*topologyType":.*ReplicaSetNoPrimary.*type":.*Unknown`);
const knownTopologyChangeRegex = new RegExp(`Topology Change.*${
    st.configRS.name}.*topologyType":.*ReplicaSetWithPrimary.*type":.*RSPrimary`);
const expeditedMonitoringAfterNetworkErrorRegex =
    new RegExp(`RSM monitoring host in expedited mode until we detect a primary`);
const droppingAllPooledConnections = new RegExp('Dropping all pooled connections');

const unknownServerDescriptionRegex = new RegExp("(" + unknownTopologyChangeRegex.source + ")|(" +
                                                 expeditedMonitoringAfterNetworkErrorRegex.source +
                                                 ")|(" + droppingAllPooledConnections.source + ")");

jsTest.log("Wait until the RSM on the mongos finds out about the config server primary");
checkLog.contains(st.s, knownTopologyChangeRegex);

jsTest.log("Run split horizon reconfig and verify that it results in unknown server description");
const rsConfig = configRSPrimary.getDB("local").system.replset.findOne();
for (let i = 0; i < rsConfig.members.length; i++) {
    rsConfig.members[i].horizons = {specialHorizon: 'horizon.com:100' + i};
}
rsConfig.version++;

assert.commandWorked(st.s.adminCommand({clearLog: 'global'}));
assert.commandWorked(configRSPrimary.adminCommand({replSetReconfig: rsConfig}));

checkLog.contains(st.s, unknownServerDescriptionRegex);

jsTest.log("Verify that the RSM eventually has the right topology description again");
checkLog.contains(st.s, knownTopologyChangeRegex);
st.stop();
})();