Skip to content

Commit d7d2c90

Browse files
committed
JAVA-1252: Invalidate connection pool if server monitor encounters a connection error
1 parent 768bf3c commit d7d2c90

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

src/main/com/mongodb/DefaultServer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ public DefaultServer(final ServerAddress serverAddress,
4141
this.serverAddress = notNull("serverAddress", serverAddress);
4242
this.description = ServerDescription.builder().state(Connecting).address(serverAddress).build();
4343
serverStateListener = new DefaultServerStateListener();
44+
this.connectionProvider = connectionProvider;
4445
this.serverMonitor = new ServerMonitor(serverAddress, serverStateListener,
45-
settings.getHeartbeatSocketSettings(), settings, clusterId, mongo);
46+
settings.getHeartbeatSocketSettings(), settings, clusterId, mongo,
47+
connectionProvider);
4648
this.serverMonitor.start();
47-
this.connectionProvider = connectionProvider;
4849
}
4950

5051

src/main/com/mongodb/ServerMonitor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class ServerMonitor {
4545
private final SocketSettings socketSettings;
4646
private final ServerSettings settings;
4747
private final Mongo mongo;
48+
private final PooledConnectionProvider connectionProvider;
4849
private int count;
4950
private long elapsedNanosSum;
5051
private volatile ServerDescription serverDescription;
@@ -56,12 +57,14 @@ class ServerMonitor {
5657

5758

5859
ServerMonitor(final ServerAddress serverAddress, final ChangeListener<ServerDescription> serverStateListener,
59-
final SocketSettings socketSettings, final ServerSettings settings, final String clusterId, Mongo mongo) {
60+
final SocketSettings socketSettings, final ServerSettings settings, final String clusterId, Mongo mongo,
61+
final PooledConnectionProvider connectionProvider) {
6062
this.serverAddress = serverAddress;
6163
this.serverStateListener = serverStateListener;
6264
this.socketSettings = socketSettings;
6365
this.settings = settings;
6466
this.mongo = mongo;
67+
this.connectionProvider = connectionProvider;
6568
serverDescription = getConnectingServerDescription();
6669
monitorThread = new Thread(new ServerMonitorRunnable(), "cluster-" + clusterId + "-" + serverAddress);
6770
monitorThread.setDaemon(true);
@@ -93,6 +96,7 @@ public void run() {
9396
if (connection != null) {
9497
connection.close();
9598
connection = null;
99+
connectionProvider.invalidate();
96100
}
97101
connection = new DBPort(serverAddress, null, getOptions(), 0);
98102
try {

src/test/com/mongodb/ServerMonitorSpecification.groovy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ class ServerMonitorSpecification extends FunctionalSpecification {
1313
CountDownLatch latch = new CountDownLatch(1)
1414

1515
def setup() {
16+
def connectionProvider = new PooledConnectionProvider('cluster-1', new ServerAddress(), new DBPortFactory(new MongoOptions()),
17+
ConnectionPoolSettings.builder().maxSize(1).build(),
18+
new JMXConnectionPoolListener());
1619
serverStateNotifier = new ServerMonitor(new ServerAddress(),
1720
new ChangeListener<ServerDescription>() {
1821
@Override
@@ -22,7 +25,7 @@ class ServerMonitorSpecification extends FunctionalSpecification {
2225
}
2326
},
2427
SocketSettings.builder().build(), ServerSettings.builder().build(),
25-
'cluster-1', getMongoClient())
28+
'cluster-1', getMongoClient(), connectionProvider)
2629
serverStateNotifier.start()
2730
}
2831

0 commit comments

Comments
 (0)