You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/01/05 22:05:03 UTC
svn commit: r1555629 [7/7] - in /lucene/dev/branches/lucene5376: ./
dev-tools/ dev-tools/maven/solr/contrib/map-reduce/ lucene/
lucene/analysis/ lucene/analysis/common/
lucene/analysis/common/src/java/org/apache/lucene/analysis/ckb/
lucene/analysis/com...
Modified: lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java?rev=1555629&r1=1555628&r2=1555629&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java (original)
+++ lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ConnectionManager.java Sun Jan 5 21:04:58 2014
@@ -17,6 +17,8 @@ package org.apache.solr.common.cloud;
* limitations under the License.
*/
+import java.util.Timer;
+import java.util.TimerTask;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeoutException;
@@ -27,7 +29,7 @@ import org.apache.zookeeper.Watcher.Even
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class ConnectionManager implements Watcher {
+public class ConnectionManager implements Watcher {
protected static final Logger log = LoggerFactory
.getLogger(ConnectionManager.class);
@@ -35,26 +37,26 @@ class ConnectionManager implements Watch
private CountDownLatch clientConnected;
private KeeperState state;
private boolean connected;
+ private boolean likelyExpired = true;
private final ZkClientConnectionStrategy connectionStrategy;
private final String zkServerAddress;
- private final int zkClientTimeout;
-
private final SolrZkClient client;
private final OnReconnect onReconnect;
private final BeforeReconnect beforeReconnect;
private volatile boolean isClosed = false;
+
+ private volatile Timer disconnectedTimer;
- public ConnectionManager(String name, SolrZkClient client, String zkServerAddress, int zkClientTimeout, ZkClientConnectionStrategy strat, OnReconnect onConnect, BeforeReconnect beforeReconnect) {
+ public ConnectionManager(String name, SolrZkClient client, String zkServerAddress, ZkClientConnectionStrategy strat, OnReconnect onConnect, BeforeReconnect beforeReconnect) {
this.name = name;
this.client = client;
this.connectionStrategy = strat;
this.zkServerAddress = zkServerAddress;
- this.zkClientTimeout = zkClientTimeout;
this.onReconnect = onConnect;
this.beforeReconnect = beforeReconnect;
reset();
@@ -63,6 +65,36 @@ class ConnectionManager implements Watch
private synchronized void reset() {
clientConnected = new CountDownLatch(1);
state = KeeperState.Disconnected;
+ disconnected();
+ }
+
+ private synchronized void connected() {
+ connected = true;
+ if (disconnectedTimer != null) {
+ disconnectedTimer.cancel();
+ disconnectedTimer = null;
+ }
+ likelyExpired = false;
+ }
+
+ private synchronized void disconnected() {
+ if (disconnectedTimer != null) {
+ disconnectedTimer.cancel();
+ disconnectedTimer = null;
+ }
+ if (!isClosed) {
+ disconnectedTimer = new Timer();
+ disconnectedTimer.schedule(new TimerTask() {
+
+ @Override
+ public void run() {
+ synchronized (ConnectionManager.this) {
+ likelyExpired = true;
+ }
+ }
+
+ }, (long) (client.getZkClientTimeout() * 0.90));
+ }
connected = false;
}
@@ -80,17 +112,17 @@ class ConnectionManager implements Watch
state = event.getState();
if (state == KeeperState.SyncConnected) {
- connected = true;
+ connected();
clientConnected.countDown();
connectionStrategy.connected();
} else if (state == KeeperState.Expired) {
- connected = false;
+ disconnected();
log.info("Our previous ZooKeeper session was expired. Attempting to reconnect to recover relationship with ZooKeeper...");
if (beforeReconnect != null) {
beforeReconnect.command();
}
try {
- connectionStrategy.reconnect(zkServerAddress, zkClientTimeout, this,
+ connectionStrategy.reconnect(zkServerAddress, client.getZkClientTimeout(), this,
new ZkClientConnectionStrategy.ZkUpdate() {
@Override
public void update(SolrZooKeeper keeper) {
@@ -118,9 +150,7 @@ class ConnectionManager implements Watch
onReconnect.command();
}
- synchronized (ConnectionManager.this) {
- ConnectionManager.this.connected = true;
- }
+ connected();
}
});
@@ -130,10 +160,10 @@ class ConnectionManager implements Watch
log.info("Connected:" + connected);
} else if (state == KeeperState.Disconnected) {
log.info("zkClient has disconnected");
- connected = false;
+ disconnected();
connectionStrategy.disconnected();
} else {
- connected = false;
+ disconnected();
}
notifyAll();
}
@@ -146,11 +176,23 @@ class ConnectionManager implements Watch
// to avoid deadlock on shutdown
public void close() {
this.isClosed = true;
+ this.likelyExpired = true;
+ try {
+ this.disconnectedTimer.cancel();
+ } catch (NullPointerException e) {
+ // fine
+ } finally {
+ this.disconnectedTimer = null;
+ }
}
public synchronized KeeperState state() {
return state;
}
+
+ public synchronized boolean isLikelyExpired() {
+ return likelyExpired;
+ }
public synchronized void waitForConnected(long waitForConnection)
throws TimeoutException {
Modified: lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java?rev=1555629&r1=1555628&r2=1555629&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java (original)
+++ lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java Sun Jan 5 21:04:58 2014
@@ -105,7 +105,7 @@ public class SolrZkClient {
// we must retry at least as long as the session timeout
zkCmdExecutor = new ZkCmdExecutor(zkClientTimeout);
connManager = new ConnectionManager("ZooKeeperConnection Watcher:"
- + zkServerAddress, this, zkServerAddress, zkClientTimeout, strat, onReconnect, beforeReconnect);
+ + zkServerAddress, this, zkServerAddress, strat, onReconnect, beforeReconnect);
try {
strat.connect(zkServerAddress, zkClientTimeout, connManager,
new ZkUpdate() {
@@ -149,6 +149,10 @@ public class SolrZkClient {
numOpens.incrementAndGet();
}
+ public ConnectionManager getConnectionManager() {
+ return connManager;
+ }
+
public ZkClientConnectionStrategy getZkClientConnectionStrategy() {
return zkClientConnectionStrategy;
}
Modified: lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java?rev=1555629&r1=1555628&r2=1555629&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java (original)
+++ lucene/dev/branches/lucene5376/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java Sun Jan 5 21:04:58 2014
@@ -31,6 +31,14 @@ public class ZkCmdExecutor {
private int retryCount;
private List<ACL> acl = ZooDefs.Ids.OPEN_ACL_UNSAFE;
+ /**
+ * TODO: At this point, this should probably take a SolrZkClient in
+ * it's constructor.
+ *
+ * @param timeoutms
+ * the client timeout for the ZooKeeper clients that will be used
+ * with this class.
+ */
public ZkCmdExecutor(int timeoutms) {
double timeouts = timeoutms / 1000.0;
this.retryCount = Math.round(0.5f * ((float)Math.sqrt(8.0f * timeouts + 1.0f) - 1.0f));
Modified: lucene/dev/branches/lucene5376/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1555629&r1=1555628&r2=1555629&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original)
+++ lucene/dev/branches/lucene5376/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Sun Jan 5 21:04:58 2014
@@ -254,7 +254,7 @@ public abstract class AbstractFullDistri
server.setParallelUpdates(random().nextBoolean());
if (defaultCollection != null) server.setDefaultCollection(defaultCollection);
server.getLbServer().getHttpClient().getParams()
- .setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000);
+ .setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000);
return server;
}