You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2012/04/24 13:47:25 UTC
svn commit: r1329650 -
/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java
Author: siren
Date: Tue Apr 24 11:47:24 2012
New Revision: 1329650
URL: http://svn.apache.org/viewvc?rev=1329650&view=rev
Log:
SOLR-3354: try to handle reconnects that happens when things are slow
Modified:
lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java?rev=1329650&r1=1329649&r2=1329650&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/LeaderElectionTest.java Tue Apr 24 11:47:24 2012
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
*/
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -28,6 +29,7 @@ import java.util.concurrent.ScheduledExe
import java.util.concurrent.TimeUnit;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.cloud.OnReconnect;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkNodeProps;
@@ -81,43 +83,47 @@ public class LeaderElectionTest extends
private volatile boolean stop;
private volatile boolean electionDone = false;
private final ZkNodeProps props;
- private ZkStateReader zkStateReader;
-
public ClientThread(int nodeNumber) throws Exception {
super("Thread-" + nodeNumber);
- boolean created = false;
- this.zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
- try {
- this.zkStateReader = new ZkStateReader(zkClient);
- this.nodeNumber = nodeNumber;
- props = new ZkNodeProps(ZkStateReader.BASE_URL_PROP, Integer.toString(nodeNumber), ZkStateReader.CORE_NAME_PROP, "");
- created = true;
- } finally {
- if (!created) {
- zkClient.close();
+
+ props = new ZkNodeProps(ZkStateReader.BASE_URL_PROP, Integer.toString(nodeNumber), ZkStateReader.CORE_NAME_PROP, "");
+
+ this.zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT, TIMEOUT, new OnReconnect() {
+
+ @Override
+ public void command() {
+ try {
+ setupOnConnect();
+ } catch (Throwable t) {
+ }
}
- }
+ });
+ this.nodeNumber = nodeNumber;
+ }
+
+ private void setupOnConnect() throws InterruptedException, KeeperException,
+ IOException {
+ ZkStateReader zkStateReader = new ZkStateReader(zkClient);
+ LeaderElector elector = new LeaderElector(zkClient);
+ ShardLeaderElectionContextBase context = new ShardLeaderElectionContextBase(
+ elector, "shard1", "collection1", Integer.toString(nodeNumber),
+ props, zkStateReader);
+ elector.setup(context);
+ seq = elector.joinElection(context);
+ electionDone = true;
+ seqToThread.put(seq, this);
}
@Override
public void run() {
-
- LeaderElector elector = new LeaderElector(ClientThread.this.zkClient);
-
- ElectionContext context = new ShardLeaderElectionContextBase(elector, "shard1",
- "collection1", Integer.toString(nodeNumber), props, this.zkStateReader);
-
- try {
- elector.setup(context);
- seq = elector.joinElection(context);
- electionDone = true;
- seqToThread.put(seq, this);
- } catch (InterruptedException e) {
- return;
- } catch (Throwable e) {
- //e.printStackTrace();
- }
+ try {
+ setupOnConnect();
+ } catch (InterruptedException e) {
+ return;
+ } catch (Throwable e) {
+ // e.printStackTrace();
+ }
while (!stop) {
try {