Skip to content

Commit cd83059

Browse files
committed
Added ServerDescription to ConnectionSource and AsyncConnectionSource
1 parent 096e8b5 commit cd83059

8 files changed

Lines changed: 64 additions & 8 deletions

File tree

driver-core/src/main/com/mongodb/binding/AsyncClusterBinding.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.mongodb.connection.Connection;
2323
import com.mongodb.connection.Server;
2424
import com.mongodb.async.SingleResultFuture;
25+
import com.mongodb.connection.ServerDescription;
2526
import com.mongodb.selector.PrimaryServerSelector;
2627
import com.mongodb.selector.ReadPreferenceServerSelector;
2728
import com.mongodb.selector.ServerSelector;
@@ -78,6 +79,11 @@ private MyConnectionSource(final ServerSelector serverSelector) {
7879
AsyncClusterBinding.this.retain();
7980
}
8081

82+
@Override
83+
public ServerDescription getServerDescription() {
84+
return server.getDescription();
85+
}
86+
8187
@Override
8288
public MongoFuture<Connection> getConnection() {
8389
return new SingleResultFuture<Connection>(server.getConnection());

driver-core/src/main/com/mongodb/binding/AsyncConnectionSource.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,20 @@
1818

1919
import com.mongodb.async.MongoFuture;
2020
import com.mongodb.connection.Connection;
21+
import com.mongodb.connection.ServerDescription;
2122

2223
/**
2324
* A source of connections to a single MongoDB server.
2425
*
2526
* @since 3.0
2627
*/
2728
public interface AsyncConnectionSource extends ReferenceCounted {
29+
30+
/**
31+
* Gets the current description of this source.
32+
*/
33+
ServerDescription getServerDescription();
34+
2835
/**
2936
* Gets a connection from this source.
3037
* @return the connection

driver-core/src/main/com/mongodb/binding/AsyncSingleConnectionBinding.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.mongodb.connection.Connection;
2323
import com.mongodb.connection.Server;
2424
import com.mongodb.async.SingleResultFuture;
25+
import com.mongodb.connection.ServerDescription;
2526
import com.mongodb.selector.ReadPreferenceServerSelector;
2627

2728
import java.util.concurrent.TimeUnit;
@@ -91,6 +92,11 @@ private MyConnectionSource(final Connection connection) {
9192
this.connection = connection.retain();
9293
}
9394

95+
@Override
96+
public ServerDescription getServerDescription() {
97+
return connection.getServerDescription();
98+
}
99+
94100
@Override
95101
public MongoFuture<Connection> getConnection() {
96102
isTrue("open", getCount() > 0);

driver-core/src/main/com/mongodb/binding/ClusterBinding.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.mongodb.connection.Cluster;
2121
import com.mongodb.connection.Connection;
2222
import com.mongodb.connection.Server;
23+
import com.mongodb.connection.ServerDescription;
2324
import com.mongodb.selector.PrimaryServerSelector;
2425
import com.mongodb.selector.ReadPreferenceServerSelector;
2526
import com.mongodb.selector.ServerSelector;
@@ -74,6 +75,11 @@ private MyConnectionSource(final ServerSelector serverSelector) {
7475
ClusterBinding.this.retain();
7576
}
7677

78+
@Override
79+
public ServerDescription getServerDescription() {
80+
return server.getDescription();
81+
}
82+
7783
@Override
7884
public Connection getConnection() {
7985
return server.getConnection();

driver-core/src/main/com/mongodb/binding/ConnectionSource.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,20 @@
1717
package com.mongodb.binding;
1818

1919
import com.mongodb.connection.Connection;
20+
import com.mongodb.connection.ServerDescription;
2021

2122
/**
2223
* A source of connections to a single MongoDB server.
2324
*
2425
* @since 3.0
2526
*/
2627
public interface ConnectionSource extends ReferenceCounted {
28+
29+
/**
30+
* Gets the current description of this source.
31+
*/
32+
ServerDescription getServerDescription();
33+
2734
/**
2835
* Gets a connection from this source.
2936
* @return the connection

driver-core/src/main/com/mongodb/binding/PinnedBinding.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.mongodb.connection.Cluster;
2222
import com.mongodb.connection.Connection;
2323
import com.mongodb.connection.Server;
24+
import com.mongodb.connection.ServerDescription;
2425
import com.mongodb.selector.PrimaryServerSelector;
2526
import com.mongodb.selector.ReadPreferenceServerSelector;
2627

@@ -97,13 +98,11 @@ public ConnectionSource getReadConnectionSource() {
9798
serverForReads = cluster.selectServer(new ReadPreferenceServerSelector(readPreference), maxWaitTimeMS, MILLISECONDS);
9899
connectionForReads = serverForReads.getConnection();
99100
}
100-
Connection connectionToUse;
101101
if (serverForWrites != null && serverForReads.getDescription().getAddress().equals(serverForWrites.getDescription().getAddress())) {
102-
connectionToUse = connectionForWrites;
102+
return new MyConnectionSource(serverForWrites, connectionForWrites);
103103
} else {
104-
connectionToUse = connectionForReads;
104+
return new MyConnectionSource(serverForReads, connectionForReads);
105105
}
106-
return new MyConnectionSource(connectionToUse);
107106
}
108107

109108
@Override
@@ -113,16 +112,23 @@ public ConnectionSource getWriteConnectionSource() {
113112
serverForWrites = cluster.selectServer(new PrimaryServerSelector(), maxWaitTimeMS, MILLISECONDS);
114113
connectionForWrites = serverForWrites.getConnection();
115114
}
116-
return new MyConnectionSource(connectionForWrites);
115+
return new MyConnectionSource(serverForWrites, connectionForWrites);
117116
}
118117

119118
private static final class MyConnectionSource extends AbstractReferenceCounted implements ConnectionSource {
120119
private final Connection connection;
120+
private final Server server;
121121

122-
public MyConnectionSource(final Connection connection) {
122+
public MyConnectionSource(final Server server, final Connection connection) {
123+
this.server = server;
123124
this.connection = connection.retain();
124125
}
125126

127+
@Override
128+
public ServerDescription getServerDescription() {
129+
return server.getDescription();
130+
}
131+
126132
@Override
127133
public Connection getConnection() {
128134
isTrue("open", getCount() > 0);

driver-core/src/main/com/mongodb/binding/SingleServerBinding.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.mongodb.ServerAddress;
2121
import com.mongodb.connection.Cluster;
2222
import com.mongodb.connection.Connection;
23+
import com.mongodb.connection.Server;
24+
import com.mongodb.connection.ServerDescription;
2325
import com.mongodb.selector.ServerAddressSelector;
2426

2527
import java.util.concurrent.TimeUnit;
@@ -71,8 +73,16 @@ public SingleServerBinding retain() {
7173
}
7274

7375
private final class MyConnectionSource extends AbstractReferenceCounted implements ConnectionSource {
76+
private final Server server;
77+
7478
private MyConnectionSource() {
7579
SingleServerBinding.this.retain();
80+
server = cluster.selectServer(new ServerAddressSelector(serverAddress), maxWaitTimeMS, MILLISECONDS);
81+
}
82+
83+
@Override
84+
public ServerDescription getServerDescription() {
85+
return server.getDescription();
7686
}
7787

7888
@Override

driver-core/src/test/functional/com/mongodb/operation/MongoQueryCursorExhaustTest.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.mongodb.binding.ReadBinding;
2323
import com.mongodb.codecs.DocumentCodec;
2424
import com.mongodb.connection.Connection;
25+
import com.mongodb.connection.ServerDescription;
2526
import com.mongodb.protocol.QueryProtocol;
2627
import com.mongodb.protocol.QueryResult;
2728
import org.bson.BsonDocument;
@@ -92,7 +93,7 @@ public void testExhaustReadAllDocuments() {
9293

9394
@Test
9495
public void testExhaustCloseBeforeReadingAllDocuments() {
95-
SingleConnectionBinding singleConnectionBinding = new SingleConnectionBinding(exhaustConnection);
96+
SingleConnectionBinding singleConnectionBinding = new SingleConnectionBinding(readConnectionSource, exhaustConnection);
9697
ConnectionSource source = singleConnectionBinding.getReadConnectionSource();
9798
Connection connection = source.getConnection();
9899
try {
@@ -116,9 +117,11 @@ public void testExhaustCloseBeforeReadingAllDocuments() {
116117

117118
private static class SingleConnectionBinding implements ReadBinding {
118119
private final Connection connection;
120+
private final ConnectionSource readConnectionSource;
119121
private int referenceCount = 1;
120122

121-
public SingleConnectionBinding(final Connection connection) {
123+
public SingleConnectionBinding(final ConnectionSource readConnectionSource, final Connection connection) {
124+
this.readConnectionSource = readConnectionSource;
122125
this.connection = connection.retain();
123126
}
124127

@@ -135,6 +138,11 @@ public ReadPreference getReadPreference() {
135138
@Override
136139
public ConnectionSource getReadConnectionSource() {
137140
return new ConnectionSource() {
141+
@Override
142+
public ServerDescription getServerDescription() {
143+
return readConnectionSource.getServerDescription();
144+
}
145+
138146
@Override
139147
public Connection getConnection() {
140148
return connection.retain();

0 commit comments

Comments
 (0)