You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2011/12/14 19:06:46 UTC
svn commit: r1214387 - in /lucene/dev/branches/solrcloud/solr:
core/src/java/org/apache/solr/cloud/
core/src/java/org/apache/solr/update/processor/
solrj/src/java/org/apache/solr/common/cloud/
Author: markrmiller
Date: Wed Dec 14 18:06:46 2011
New Revision: 1214387
URL: http://svn.apache.org/viewvc?rev=1214387&view=rev
Log:
clean up
Modified:
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1214387&r1=1214386&r2=1214387&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java Wed Dec 14 18:06:46 2011
@@ -400,7 +400,7 @@ public final class ZkController {
}
public String getNodeName() {
- return hostName + ":" + localHostPort + "_"+ localHostContext;
+ return hostName + ":" + localHostPort + "_" + localHostContext;
}
/**
@@ -505,7 +505,7 @@ public final class ZkController {
leaderElector.joinElection(context);
// should be fine if we do this rather than read from cloud state since it's rare?
- String leaderUrl = zkStateReader.getLeader(collection, cloudDesc.getShardId());
+ String leaderUrl = zkStateReader.getLeaderUrl(collection, cloudDesc.getShardId());
final boolean iamleader;
SolrCore core = null;
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1214387&r1=1214386&r2=1214387&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Wed Dec 14 18:06:46 2011
@@ -36,7 +36,6 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.cloud.CloudState;
import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.cloud.ZooKeeperException;
@@ -79,23 +78,22 @@ public class DistributedUpdateProcessor
private NamedList addsResponse = null;
private NamedList deleteResponse = null;
private CharsRef scratch;
- private boolean isLeader = true;
- private boolean forwardToLeader = false;
-
+
private final SchemaField idField;
private final SolrCmdDistributor cmdDistrib;
-
private HashPartitioner hp;
-
- private List<String> shards;
-
private boolean zkEnabled = false;
private String collection;
private ZkController zkController;
-
+ // these are setup at the start of each request processing
+ // method in this update processor
+ private boolean isLeader = true;
+ private boolean forwardToLeader = false;
+ private List<String> shards;
+
public DistributedUpdateProcessor(SolrQueryRequest req,
SolrQueryResponse rsp, UpdateRequestProcessor next) {
@@ -146,49 +144,31 @@ public class DistributedUpdateProcessor
// this and watch for changes?? Just pull it from ZkController cluster state probably?
String shardId = getShard(hash, collection, zkController.getCloudState()); // get the right shard based on the hash...
-
- ModifiableSolrParams params = new ModifiableSolrParams(req.getParams());
-
- String leaderNode = ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection
- + ZkStateReader.LEADER_ELECT_ZKNODE + "/" + shardId + "/leader";
- SolrZkClient zkClient = zkController.getZkClient();
try {
- List<String> leaderChildren = zkClient.getChildren(leaderNode, null);
- if (leaderChildren.size() > 0) {
- String leader = leaderChildren.get(0);
-
- byte[] bytes = zkClient
- .getData(leaderNode + "/" + leader, null, null);
- ZkNodeProps zkNodeProps = ZkNodeProps.load(bytes);
-
- String leaderUrl = zkNodeProps.get("url");
-
- String nodeName = req.getCore().getCoreDescriptor()
- .getCoreContainer().getZkController().getNodeName();
- String shardZkNodeName = nodeName + "_" + req.getCore().getName();
-
- if (params.getBool(SEEN_LEADER, false)) {
- // we got a version, just go local - set no shardStr
-
- // still mark if i am the leader though
- if (!shardZkNodeName.equals(leader)) {
- isLeader = false;
- }
- } else if (shardZkNodeName.equals(leader)) {
- isLeader = true;
- // that means I want to forward onto my replicas...
- // so get the replicas...
- shards = getReplicaUrls(req, collection, shardId,
- shardZkNodeName);
- } else {
- // I need to forward onto the leader...
- shards = new ArrayList<String>(1);
- shards.add(leaderUrl);
- forwardToLeader = true;
- isLeader = false;
- }
+ ZkNodeProps leaderProps = zkController.getZkStateReader().getLeaderProps(
+ collection, shardId);
+
+ String leaderUrl = leaderProps.get(ZkStateReader.URL_PROP);
+ String leaderNodeName = leaderProps.get(ZkStateReader.NODE_NAME_PROP);
+
+ String nodeName = zkController.getNodeName();
+
+ isLeader = nodeName.equals(leaderNodeName);
+
+ if (req.getParams().getBool(SEEN_LEADER, false)) {
+ // we are coming from the leader, just go local - set no shardStr
+ } else if (isLeader) {
+ // that means I want to forward onto my replicas...
+ // so get the replicas...
+ shards = getReplicaUrls(req, collection, shardId, nodeName);
+ } else {
+ // I need to forward onto the leader...
+ shards = new ArrayList<String>(1);
+ shards.add(leaderUrl);
+ forwardToLeader = true;
}
+
} catch (KeeperException e) {
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "",
e);
@@ -196,7 +176,7 @@ public class DistributedUpdateProcessor
Thread.currentThread().interrupt();
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "",
e);
- }
+ }
}
return shards;
@@ -213,7 +193,7 @@ public class DistributedUpdateProcessor
}
Set<String> shards = slices.keySet();
- List<String> shardList = new ArrayList<String>();
+ List<String> shardList = new ArrayList<String>(shards.size());
shardList.addAll(shards);
Collections.sort(shardList);
hp = new HashPartitioner();
@@ -645,7 +625,7 @@ public class DistributedUpdateProcessor
}
Map<String,ZkNodeProps> shardMap = replicas.getShards();
- List<String> urls = new ArrayList<String>();
+ List<String> urls = new ArrayList<String>(shardMap.size());
for (Entry<String,ZkNodeProps> entry : shardMap.entrySet()) {
if (cloudState.liveNodesContain(entry.getValue().get(
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java?rev=1214387&r1=1214386&r2=1214387&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java Wed Dec 14 18:06:46 2011
@@ -369,13 +369,13 @@ public class ZkStateReader {
// nocommit TODO: do this with cloud state or something along those lines
// and if we find out we cannot talk to zk anymore, we should probably realize we are not
// a leader anymore - we shouldn't accept updates at all??
- public String getLeader(String collection, String shard) throws Exception {
+ public String getLeaderUrl(String collection, String shard) throws InterruptedException, KeeperException {
ZkNodeProps props = getLeaderProps(collection,shard);
return props.get(ZkStateReader.URL_PROP);
}
- public ZkNodeProps getLeaderProps(String collection, String shard) throws Exception {
+ public ZkNodeProps getLeaderProps(String collection, String shard) throws InterruptedException, KeeperException {
int tries = 30;
ZkNodeProps props;
while (true) {