Skip to content

Commit 6a58c6d

Browse files
committed
ServerMonitor now only calls buildInfo once for each established connection.
JAVA-1635
1 parent 8b5e415 commit 6a58c6d

File tree

2 files changed

+16
-16
lines changed

2 files changed

+16
-16
lines changed

src/main/com/mongodb/DBPort.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.util.Collections;
5555
import java.util.HashMap;
5656
import java.util.HashSet;
57+
import java.util.List;
5758
import java.util.Map;
5859
import java.util.Random;
5960
import java.util.Set;
@@ -86,7 +87,7 @@ public class DBPort implements Connection {
8687
*/
8788
@SuppressWarnings("deprecation")
8889
public DBPort( ServerAddress addr ){
89-
this( addr , new MongoOptions());
90+
this( addr , null, new MongoOptions());
9091
}
9192

9293
// Normal usage
@@ -95,8 +96,8 @@ public DBPort( ServerAddress addr ){
9596
}
9697

9798
// Server monitor usage
98-
DBPort( ServerAddress addr, MongoOptions options ) {
99-
this(addr, null, null, options, 0);
99+
DBPort( ServerAddress addr, Mongo mongo, MongoOptions options ) {
100+
this(addr, null, mongo, options, 0);
100101
}
101102

102103
private DBPort( ServerAddress addr, PooledConnectionProvider pool, Mongo mongo, MongoOptions options, int generation ) {
@@ -291,7 +292,7 @@ private synchronized void ensureOpen(final Mongo mongo) throws IOException {
291292
_in = new BufferedInputStream( _socket.getInputStream() );
292293
_out = _socket.getOutputStream();
293294
if (mongo != null) {
294-
_serverVersion = ServerMonitor.getVersion(runCommand(mongo.getDB("admin"), new BasicDBObject("buildinfo", 1)));
295+
_serverVersion = getVersion(runCommand(mongo.getDB("admin"), new BasicDBObject("buildinfo", 1)));
295296
}
296297
successfullyConnected = true;
297298
}
@@ -317,6 +318,11 @@ private synchronized void ensureOpen(final Mongo mongo) throws IOException {
317318
} while (!successfullyConnected);
318319
}
319320

321+
@SuppressWarnings("unchecked")
322+
static ServerVersion getVersion(final CommandResult buildInfoResult) {
323+
return new ServerVersion(((List<Integer>) buildInfoResult.get("versionArray")).subList(0, 3));
324+
}
325+
320326
@Override
321327
public int hashCode(){
322328
return _addr.hashCode();

src/main/com/mongodb/ServerMonitor.java

+6-12
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ServerMonitor {
4141

4242
private static final Logger LOGGER = Loggers.getLogger("cluster");
4343

44-
private ServerAddress serverAddress;
44+
private final ServerAddress serverAddress;
4545
private final ChangeListener<ServerDescription> serverStateListener;
4646
private final SocketSettings socketSettings;
4747
private final ServerSettings settings;
@@ -85,7 +85,7 @@ public void run() {
8585
Throwable previousException = currentException;
8686
try {
8787
if (connection == null) {
88-
connection = new DBPort(serverAddress, getOptions());
88+
connection = new DBPort(serverAddress, mongo, getOptions());
8989
}
9090
try {
9191
currentServerDescription = lookupServerDescription(connection);
@@ -99,7 +99,7 @@ public void run() {
9999
connection = null;
100100
connectionProvider.invalidate();
101101
}
102-
connection = new DBPort(serverAddress, getOptions());
102+
connection = new DBPort(serverAddress, mongo, getOptions());
103103
try {
104104
currentServerDescription = lookupServerDescription(connection);
105105
} catch (IOException e1) {
@@ -234,16 +234,15 @@ private ServerDescription lookupServerDescription(final DBPort connection) throw
234234
count++;
235235
elapsedNanosSum += System.nanoTime() - startNanoTime;
236236

237-
final CommandResult buildInfoResult = connection.runCommand(mongo.getDB("admin"), new BasicDBObject("buildinfo", 1));
238-
return createDescription(isMasterResult, buildInfoResult, elapsedNanosSum / count);
237+
return createDescription(isMasterResult, connection.getServerVersion(), elapsedNanosSum / count);
239238
}
240239

241240
@SuppressWarnings("unchecked")
242-
private ServerDescription createDescription(final CommandResult commandResult, final CommandResult buildInfoResult,
241+
private ServerDescription createDescription(final CommandResult commandResult, final ServerVersion serverVersion,
243242
final long averageLatencyNanos) {
244243
return ServerDescription.builder()
245244
.state(ServerConnectionState.Connected)
246-
.version(getVersion(buildInfoResult))
245+
.version(serverVersion)
247246
.address(commandResult.getServerUsed())
248247
.type(getServerType(commandResult))
249248
.hosts(listToSet((List<String>) commandResult.get("hosts")))
@@ -262,11 +261,6 @@ private ServerDescription createDescription(final CommandResult commandResult, f
262261
.ok(commandResult.ok()).build();
263262
}
264263

265-
@SuppressWarnings("unchecked")
266-
static ServerVersion getVersion(final CommandResult buildInfoResult) {
267-
return new ServerVersion(((List<Integer>) buildInfoResult.get("versionArray")).subList(0, 3));
268-
}
269-
270264
private Set<String> listToSet(final List<String> list) {
271265
if (list == null || list.isEmpty()) {
272266
return Collections.emptySet();

0 commit comments

Comments
 (0)