Skip to content

Commit ee7543a

Browse files
committed
JAVA-334: too much exception logging from updater thread when a server is down
JAVA-347: in case all servers are down do not retry reads
1 parent 4338530 commit ee7543a

File tree

2 files changed

+29
-15
lines changed

2 files changed

+29
-15
lines changed

src/main/com/mongodb/DBTCPConnector.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,11 @@ public String getConnectPoint(){
277277

278278
boolean _error( Throwable t, boolean slaveOk )
279279
throws MongoException {
280-
if ( _allHosts != null ){
281-
_logger.log( Level.WARNING , "replica set mode, switching master" , t );
280+
if ( _rsStatus.hasServerUp() ){
281+
// the replset has at least 1 server up, try to see if should switch master
282282
checkMaster( true , !slaveOk );
283283
}
284-
return true;
284+
return _rsStatus.hasServerUp();
285285
}
286286

287287
class MyPort {
@@ -346,7 +346,7 @@ void done( DBPort p ){
346346
void error( DBPort p , Exception e ){
347347
p.close();
348348
_requestPort = null;
349-
_logger.log( Level.SEVERE , "MyPort.error called" , e );
349+
// _logger.log( Level.SEVERE , "MyPort.error called" , e );
350350
}
351351

352352
void requestEnsureConnection(){
@@ -437,7 +437,12 @@ void testMaster()
437437
}
438438

439439
private boolean _set( ServerAddress addr ){
440-
_masterPortPool = _portHolder.get( addr );
440+
DBPortPool newPool = _portHolder.get( addr );
441+
if (newPool == _masterPortPool)
442+
return false;
443+
444+
_logger.log(Level.WARNING, "Master switching from " + (_masterPortPool != null ? _masterPortPool.getServerAddress() : "null") + " to " + addr);
445+
_masterPortPool = newPool;
441446
return true;
442447
}
443448

src/main/com/mongodb/ReplicaSetStatus.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ ServerAddress getASecondary(){
118118
return best._addr;
119119
}
120120

121+
boolean hasServerUp() {
122+
for (int i = 0; i < _all.size(); i++) {
123+
Node n = _all.get(i);
124+
if (n._ok) {
125+
return true;
126+
}
127+
}
128+
return false;
129+
}
130+
121131
class Node {
122132

123133
Node( ServerAddress addr ){
@@ -151,10 +161,12 @@ synchronized void update(Set<Node> seenNodes){
151161
_pingTime = _lastCheck - start;
152162

153163
if ( res == null ){
154-
_ok = false;
155-
return;
164+
throw new MongoInternalException("Invalid null value returned from isMaster");
156165
}
157166

167+
if (!_ok) {
168+
_logger.log( Level.WARNING , "Server seen up: " + _addr );
169+
}
158170
_ok = true;
159171
_isMaster = res.getBoolean( "ismaster" , false );
160172
_isSecondary = res.getBoolean( "secondary" , false );
@@ -199,15 +211,12 @@ else if ( !_setName.equals( setName ) ){
199211
}
200212

201213
}
202-
catch ( MongoException e ){
203-
Throwable root = e;
204-
if ( e.getCause() != null )
205-
root = e.getCause();
206-
_logger.log( Level.FINE , "node down: " + _addr + " " + root );
207-
_ok = false;
208-
}
209214
catch ( Exception e ){
210-
_logger.log( Level.SEVERE , "can't update node: " + _addr , e );
215+
if (_ok == true) {
216+
_logger.log( Level.WARNING , "Server seen down: " + _addr, e );
217+
} else if (Math.random() < 0.1) {
218+
_logger.log( Level.WARNING , "Server seen down: " + _addr );
219+
}
211220
_ok = false;
212221
}
213222

0 commit comments

Comments
 (0)