add setting warnAfterReconnectAttempts to FailoverTransport to log a
warning after every N retries.  A value of <= 0 will disable the
warnings.
This commit is contained in:
Timothy Bish 2013-11-13 15:19:16 -05:00
parent 7f639a6047
commit c55a666921
1 changed files with 38 additions and 2 deletions

View File

@ -21,8 +21,19 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
import java.net.*;
import java.util.*;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicReference;
@ -90,6 +101,7 @@ public class FailoverTransport implements CompositeTransport {
private int maxReconnectAttempts = INFINITE;
private int startupMaxReconnectAttempts = INFINITE;
private int connectFailures;
private int warnAfterReconnectAttempts = 10;
private long reconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
private Exception connectionFailure;
private boolean firstConnection = true;
@ -1089,6 +1101,12 @@ public class FailoverTransport implements CompositeTransport {
propagateFailureToExceptionListener(connectionFailure);
return false;
}
int warnInterval = getWarnAfterReconnectAttempts();
if (warnInterval > 0 && (connectFailures % warnInterval) == 0) {
LOG.warn("Failed to connect to {} after: {} attempt(s) continuing to retry.",
uris, connectFailures);
}
}
if (!disposed) {
@ -1411,4 +1429,22 @@ public class FailoverTransport implements CompositeTransport {
this.nestedExtraQueryOptions = nestedExtraQueryOptions;
}
public int getWarnAfterReconnectAttempts() {
return warnAfterReconnectAttempts;
}
/**
* Sets the number of Connect / Reconnect attempts that must occur before a warn message
* is logged indicating that the transport is not connected. This can be useful when the
* client is running inside some container or service as it give an indication of some
* problem with the client connection that might not otherwise be visible. To disable the
* log messages this value should be set to a value @{code attempts <= 0}
*
* @param warnAfterReconnectAttempts
* The number of failed connection attempts that must happen before a warning is logged.
*/
public void setWarnAfterReconnectAttempts(int warnAfterReconnectAttempts) {
this.warnAfterReconnectAttempts = warnAfterReconnectAttempts;
}
}