You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ma...@apache.org on 2010/01/25 17:01:39 UTC
svn commit: r902851 - in
/lucene/solr/branches/cloud/src/java/org/apache/solr/cloud:
ShardsWatcher.java ZkController.java
Author: markrmiller
Date: Mon Jan 25 16:01:39 2010
New Revision: 902851
URL: http://svn.apache.org/viewvc?rev=902851&view=rev
Log:
clean up
Modified:
lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ShardsWatcher.java
lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ZkController.java
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ShardsWatcher.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ShardsWatcher.java?rev=902851&r1=902850&r2=902851&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ShardsWatcher.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ShardsWatcher.java Mon Jan 25 16:01:39 2010
@@ -42,7 +42,7 @@
public void process(WatchedEvent event) {
// nocommit : this will be called too often as shards register themselves?
- System.out.println("shard node changed");
+
if (event.getType() == EventType.NodeChildrenChanged) {
try {
Modified: lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ZkController.java?rev=902851&r1=902850&r2=902851&view=diff
==============================================================================
--- lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/solr/branches/cloud/src/java/org/apache/solr/cloud/ZkController.java Mon Jan 25 16:01:39 2010
@@ -46,7 +46,6 @@
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -78,7 +77,8 @@
public static final String ROLE_PROP = "role";
public static final String NODE_NAME = "node_name";
- final ShardsWatcher shardWatcher = new ShardsWatcher(this);
+ // for when we do incremental cloud state updates
+ //final ShardsWatcher shardWatcher = new ShardsWatcher(this);
private SolrZkClient zkClient;
@@ -154,9 +154,9 @@
}
/**
- * nocommit: adds nodes if they don't exist, eg /shards/ node. consider race
- * conditions
- * @param collection2
+ * @param shardId
+ * @param collection
+ * @throws IOException
*/
private void addZkShardsNode(String shardId, String collection) throws IOException {
@@ -227,7 +227,7 @@
private List<String> getCollectionNames() throws KeeperException,
InterruptedException {
- // nocommit : watch for new collections?
+
List<String> collectionNodes = zkClient.getChildren(COLLECTIONS_ZKNODE,
null);
@@ -275,7 +275,7 @@
return zkClient.getData(CONFIGS_ZKNODE + "/" + zkConfigName, null, null);
}
- // nocommit: fooling around
+ // TODO: consider how this is done
private String getHostAddress() throws IOException {
if (localHost == null) {
@@ -345,9 +345,9 @@
// register host
zkClient.makePath(hostName);
} else {
- // nocommit
- throw new IllegalStateException("Unrecognized host:"
- + localHostName);
+ log.error("Unrecognized host:" + localHostName);
+ throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
+ "Unrecognized host:" + localHostName);
}
// makes nodes node
@@ -363,10 +363,8 @@
}
createEphemeralNode();
- // nocommit
setUpCollectionsNode();
-
} catch (IOException e) {
log.error("", e);
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
@@ -409,15 +407,14 @@
public synchronized void updateCloudState() throws KeeperException, InterruptedException,
IOException {
- // nocommit - incremental update rather than reread everything
+ // TODO: - incremental update rather than reread everything
log.info("Updating cloud state from ZooKeeper... :" + zkClient.keeper);
// build immutable CloudInfo
-
List<String> collections = getCollectionNames();
- // nocommit : load all collection info
+
Map<String,Map<String,Slice>> collectionStates = new HashMap<String,Map<String,Slice>>();
for (String collection : collections) {
String shardIdPaths = COLLECTIONS_ZKNODE + "/" + collection + SHARDS_ZKNODE;
@@ -439,7 +436,6 @@
}
private Set<String> getLiveNodes() throws KeeperException, InterruptedException {
- // nocomit : incremental update
List<String> liveNodes = zkClient.getChildren(NODES_ZKNODE, null);
Set<String> liveNodesSet = new HashSet<String>(liveNodes.size());
liveNodesSet.addAll(liveNodes);
@@ -494,8 +490,6 @@
+ collection + " could not be located", e);
}
for (String node : children) {
- // nocommit
- System.out.println("check child:" + node);
// nocommit: do we actually want to handle settings in the node name?
if (node.startsWith("config=")) {
configName = node.substring(node.indexOf("=") + 1);
@@ -597,9 +591,7 @@
String shardZkNodeName = hostName + ":" + localHostPort + "_"+ localHostContext + (coreName.length() == 0 ? "" : "_" + coreName);
-
if(shardZkNodeAlreadyExists && forcePropsUpdate) {
- // nocommit : consider how we watch shards on all collections
zkClient.setData(shardsZkPath + "/" + shardZkNodeName, bytes);
} else {
addZkShardsNode(cloudDesc.getShardId(), collection);
@@ -617,18 +609,13 @@
}
}
- // signal that the shards node has changed
- // nocommit
- zkClient.setData(shardsZkPath, (byte[])null);
-
-
}
/**
* @param core
*/
public void unregister(SolrCore core) {
- // nocommit : perhaps mark the core down in zk?
+ // TODO : perhaps mark the core down in zk?
}
/**
@@ -667,22 +654,20 @@
zkClient.printLayoutToStdOut();
}
- // nocommit
public void watchShards() throws KeeperException, InterruptedException {
- List<String> collections = zkClient.getChildren(COLLECTIONS_ZKNODE, new Watcher() {
-
- public void process(WatchedEvent event) {
- System.out.println("Collections node event:" + event);
- // nocommit : if collections node was signaled, look for new collections
-
- }});
- collections = zkClient.getChildren(COLLECTIONS_ZKNODE, null);
- for(String collection : collections) {
- for(String shardId : zkClient.getChildren(COLLECTIONS_ZKNODE + "/" + collection + SHARDS_ZKNODE, null)) {
- zkClient.getChildren(COLLECTIONS_ZKNODE + "/" + collection + SHARDS_ZKNODE + "/" + shardId, shardWatcher);
- }
- }
+ // TODO: don't reload whole state when anything changes - just reload what's
+ // changed
+ // List<String> collections = zkClient.getChildren(COLLECTIONS_ZKNODE,
+ // null);
+ // collections = zkClient.getChildren(COLLECTIONS_ZKNODE, null);
+ // for(String collection : collections) {
+ // for(String shardId : zkClient.getChildren(COLLECTIONS_ZKNODE + "/" +
+ // collection + SHARDS_ZKNODE, null)) {
+ // zkClient.getChildren(COLLECTIONS_ZKNODE + "/" + collection +
+ // SHARDS_ZKNODE + "/" + shardId, shardWatcher);
+ // }
+ // }
}
private void setUpCollectionsNode() throws KeeperException, InterruptedException {
@@ -713,13 +698,12 @@
zkClient.exists(COLLECTIONS_ZKNODE, new Watcher(){
public void process(WatchedEvent event) {
- // nocommit
- System.out.println("collections node changed: "+ event);
- if(event.getType() == EventType.NodeDataChanged) {
- // no commit - we may have a new collection, watch the shards node for them
-
- // re-watch
try {
+ // TODO: fine grained - just reload what's changed
+
+ // something changed, reload cloud state
+ updateCloudState();
+ // re-watch
zkClient.exists(event.getPath(), this);
} catch (KeeperException e) {
log.error("", e);
@@ -731,8 +715,11 @@
log.error("", e);
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"", e);
+ } catch (IOException e) {
+ log.error("", e);
+ throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
+ "", e);
}
- }
}});
}