You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2011/12/07 05:20:49 UTC
svn commit: r1211292 - in /lucene/dev/branches/solrcloud/solr: core/
core/src/java/org/apache/solr/cloud/ core/src/test/org/apache/solr/cloud/
lib/ solrj/src/java/org/apache/solr/common/cloud/
Author: yonik
Date: Wed Dec 7 04:20:49 2011
New Revision: 1211292
URL: http://svn.apache.org/viewvc?rev=1211292&view=rev
Log:
use interface to support json serialization
Added:
lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-r1211150.jar (with props)
Removed:
lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-r1209632.jar
Modified:
lucene/dev/branches/solrcloud/solr/core/build.xml
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/NodeStateWatcher.java
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/Overseer.java
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/ZkController.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/AbstractZkTestCase.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateTest.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-pom.xml.template
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudState.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudStateUtility.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreAssignment.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreState.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
Modified: lucene/dev/branches/solrcloud/solr/core/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/build.xml?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/build.xml (original)
+++ lucene/dev/branches/solrcloud/solr/core/build.xml Wed Dec 7 04:20:49 2011
@@ -27,6 +27,6 @@
jar.file="${common-solr.dir}/lib/commons-csv-1.0-SNAPSHOT-r966014.jar" />
<m2-deploy-with-pom-template pom.xml="${common-solr.dir}/lib/apache-solr-noggit-pom.xml.template"
- jar.file="${common-solr.dir}/lib/apache-solr-noggit-r1209632.jar" />
+ jar.file="${common-solr.dir}/lib/apache-solr-noggit-r12111502.jar" />
</target>
</project>
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/NodeStateWatcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/NodeStateWatcher.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/NodeStateWatcher.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/NodeStateWatcher.java Wed Dec 7 04:20:49 2011
@@ -89,7 +89,7 @@ public class NodeStateWatcher implements
void processStateChange(byte[] data) {
if (data != null) {
try {
- CoreState[] states = CoreState.fromBytes(data);
+ CoreState[] states = CoreState.load(data);
List<CoreState> stateList = Arrays.asList(states);
// get new cores:
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/Overseer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/Overseer.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/Overseer.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/cloud/Overseer.java Wed Dec 7 04:20:49 2011
@@ -415,7 +415,7 @@ public class Overseer implements NodeSta
}
//serialize
- byte[] content = CoreAssignment.tobytes(assignments.toArray(new CoreAssignment[assignments.size()]));
+ byte[] content = ZkStateReader.toJSON(assignments);
try {
zkClient.setData("/node_assignments/" + node, content);
} catch (InterruptedException e) {
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=1211292&r1=1211291&r2=1211292&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 7 04:20:49 2011
@@ -491,7 +491,7 @@ public final class ZkController {
ZkNodeProps zkProps = new ZkNodeProps(props);
- ElectionContext context = new ShardLeaderElectionContext(shardId, collection, shardZkNodeName, zkProps.store());
+ ElectionContext context = new ShardLeaderElectionContext(shardId, collection, shardZkNodeName, ZkStateReader.toJSON(zkProps));
leaderElector.setup(context);
// leader election
@@ -772,7 +772,7 @@ public final class ZkController {
collectionProps.put("num_shards", Integer.toString(numShards));
ZkNodeProps zkProps = new ZkNodeProps(collectionProps);
- zkClient.makePath(collectionPath, zkProps.store(), CreateMode.PERSISTENT, null, true);
+ zkClient.makePath(collectionPath, ZkStateReader.toJSON(zkProps), CreateMode.PERSISTENT, null, true);
try {
// shards_lock node
if (!zkClient.exists(ZkStateReader.COLLECTIONS_ZKNODE + "/" + collection + "/shards_lock")) {
@@ -829,12 +829,8 @@ public final class ZkController {
log.info("publishing node state:" + coreStates.values());
zkClient.setData(
nodePath,
- CoreState.tobytes(coreStates.values().toArray(
- new CoreState[coreStates.size()])));
- } catch (IOException e) {
- throw new ZooKeeperException(
- SolrException.ErrorCode.SERVER_ERROR,
- "could not publish node state", e);
+ ZkStateReader.toJSON(coreStates.values()));
+
} catch (KeeperException e) {
throw new ZooKeeperException(
SolrException.ErrorCode.SERVER_ERROR,
@@ -879,7 +875,7 @@ public final class ZkController {
}
HashMap<String, CoreAssignment> newAssignments = new HashMap<String, CoreAssignment>();
- CoreAssignment[] assignments2 = CoreAssignment.fromBytes(assignments);
+ CoreAssignment[] assignments2 = CoreAssignment.load(assignments);
for (CoreAssignment assignment : assignments2) {
newAssignments.put(assignment.getCoreName(), assignment);
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/AbstractZkTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/AbstractZkTestCase.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/AbstractZkTestCase.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/AbstractZkTestCase.java Wed Dec 7 04:20:49 2011
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
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.core.SolrConfig;
import org.apache.zookeeper.CreateMode;
import org.junit.AfterClass;
@@ -78,10 +79,10 @@ public abstract class AbstractZkTestCase
Map<String,String> props = new HashMap<String,String>();
props.put("configName", "conf1");
ZkNodeProps zkProps = new ZkNodeProps(props);
- zkClient.makePath("/collections/collection1", zkProps.store(), CreateMode.PERSISTENT);
+ zkClient.makePath("/collections/collection1", ZkStateReader.toJSON(zkProps), CreateMode.PERSISTENT);
zkClient.makePath("/collections/collection1/shards", CreateMode.PERSISTENT);
- zkClient.makePath("/collections/control_collection", zkProps.store(), CreateMode.PERSISTENT);
+ zkClient.makePath("/collections/control_collection", ZkStateReader.toJSON(zkProps), CreateMode.PERSISTENT);
zkClient.makePath("/collections/control_collection/shards", CreateMode.PERSISTENT);
putConfig(zkClient, config);
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateTest.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateTest.java Wed Dec 7 04:20:49 2011
@@ -26,6 +26,7 @@ import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.CloudState;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.cloud.ZkNodeProps;
+import org.apache.solr.common.cloud.ZkStateReader;
import org.junit.Test;
public class CloudStateTest extends SolrTestCaseJ4 {
@@ -52,7 +53,7 @@ public class CloudStateTest extends Solr
collectionStates.put("collection2", slices);
CloudState cloudState = new CloudState(liveNodes, collectionStates);
- byte[] bytes = CloudState.store(cloudState);
+ byte[] bytes = ZkStateReader.toJSON(cloudState);
CloudState loadedCloudState = CloudState.load(bytes, liveNodes);
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java Wed Dec 7 04:20:49 2011
@@ -23,10 +23,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.solr.SolrTestCaseJ4;
-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.*;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreContainer.Initializer;
import org.apache.solr.core.CoreDescriptor;
@@ -143,7 +140,7 @@ public class CloudStateUpdateTest extend
ZkNodeProps zkProps2 = new ZkNodeProps(props2);
SolrZkClient zkClient = new SolrZkClient(zkServer.getZkAddress(), AbstractZkTestCase.TIMEOUT);
- zkClient.makePath("/collections/testcore", zkProps2.store(), CreateMode.PERSISTENT);
+ zkClient.makePath("/collections/testcore", ZkStateReader.toJSON(zkProps2), CreateMode.PERSISTENT);
zkClient.makePath("/collections/testcore/shards", CreateMode.PERSISTENT);
zkClient.close();
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Wed Dec 7 04:20:49 2011
@@ -8,6 +8,7 @@ import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
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.core.CoreDescriptor;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -63,10 +64,10 @@ public class OverseerTest extends SolrTe
props.put("num_shards", "3");
ZkNodeProps zkProps = new ZkNodeProps(props);
- zkClient.makePath("/collections/collection1", zkProps.store());
+ zkClient.makePath("/collections/collection1", ZkStateReader.toJSON(zkProps));
props.put("num_shards", "1");
zkProps = new ZkNodeProps(props);
- zkClient.makePath("/collections/collection2", zkProps.store());
+ zkClient.makePath("/collections/collection2", ZkStateReader.toJSON(zkProps));
ZkNodeProps z = new ZkNodeProps(props);
CoreDescriptor desc = new CoreDescriptor(null, "core1", "");
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java Wed Dec 7 04:20:49 2011
@@ -65,7 +65,7 @@ public class ZkControllerTest extends So
Map<String,String> props = new HashMap<String,String>();
props.put("configName", actualConfigName);
ZkNodeProps zkProps = new ZkNodeProps(props);
- zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/" + COLLECTION_NAME , zkProps.store(), CreateMode.PERSISTENT);
+ zkClient.makePath(ZkStateReader.COLLECTIONS_ZKNODE + "/" + COLLECTION_NAME , ZkStateReader.toJSON(zkProps), CreateMode.PERSISTENT);
if (DEBUG) {
zkClient.printLayoutToStdOut();
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/cloud/ZkNodePropsTest.java Wed Dec 7 04:20:49 2011
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.ZkNodeProps;
+import org.apache.solr.common.cloud.ZkStateReader;
import org.junit.Test;
public class ZkNodePropsTest extends SolrTestCaseJ4 {
@@ -38,7 +39,7 @@ public class ZkNodePropsTest extends Sol
props.put("prop6", "value6");
ZkNodeProps zkProps = new ZkNodeProps(props);
- byte[] bytes = zkProps.store();
+ byte[] bytes = ZkStateReader.toJSON(zkProps);
ZkNodeProps props2 = ZkNodeProps.load(bytes);
assertEquals("value1", props2.get("prop1"));
Modified: lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-pom.xml.template?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-pom.xml.template (original)
+++ lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-pom.xml.template Wed Dec 7 04:20:49 2011
@@ -31,6 +31,6 @@
<artifactId>solr-noggit</artifactId>
<name>Solr Specific Noggit</name>
<version>@version@</version>
- <description>Solr Specific Noggit r1209632</description>
+ <description>Solr Specific Noggit r12111502</description>
<packaging>jar</packaging>
</project>
Added: lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-r1211150.jar
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/lib/apache-solr-noggit-r1211150.jar?rev=1211292&view=auto
==============================================================================
Binary file - no diff available.
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudState.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudState.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudState.java Wed Dec 7 04:20:49 2011
@@ -18,21 +18,15 @@ package org.apache.solr.common.cloud;
*/
import java.io.IOException;
-import java.io.InputStreamReader;
import java.util.*;
-import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
-import org.apache.lucene.util.UnicodeUtil;
import org.apache.noggit.*;
-import org.apache.solr.common.cloud.CoreAssignment;
-import org.apache.solr.common.cloud.CoreState;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// quasi immutable :(
-public class CloudState {
+public class CloudState implements JSONWriter.Writable {
protected static Logger log = LoggerFactory.getLogger(CloudState.class);
private final Map<String, Map<String,Slice>> collectionStates; // Map<collectionName, Map<sliceName,Slice>>
private final Set<String> liveNodes;
@@ -121,7 +115,7 @@ public class CloudState {
return new CloudState(liveNodes, Collections.<String, Map<String,Slice>>emptyMap());
}
- LinkedHashMap<String, Object> stateMap = (LinkedHashMap<String, Object>) fromJSON(bytes);
+ LinkedHashMap<String, Object> stateMap = (LinkedHashMap<String, Object>) ZkStateReader.fromJSON(bytes);
HashMap<String,Map<String, Slice>> state = new HashMap<String,Map<String,Slice>>();
for(String collectionName: stateMap.keySet()){
@@ -141,112 +135,10 @@ public class CloudState {
return new CloudState(liveNodes, state);
}
- private static class CloudJSONWriter extends JSONWriter {
- public CloudJSONWriter(CharArr out, int indent) {
- super(out, indent);
- }
- @Override
- public void handleUnknownClass(Object o) {
- if (o instanceof Slice) {
- setIndentSize(2); // this is big enough, we currently always want indenting
- write( ((Slice)o).getShards() );
- } else if (o instanceof ZkNodeProps) {
- write( ((ZkNodeProps) o).getProperties() );
- } else if (o instanceof CloudState) {
- setIndentSize(2); // this is big enough, we currently always want indenting
- write( ((CloudState)o).getCollectionStates() );
- } else if (o instanceof CoreAssignment) {
- write(((CoreAssignment) o).getProperties());
- } else if (o instanceof CoreState) {
- write(((CoreState) o).getProperties());
- } else {
- super.handleUnknownClass(o);
- }
- }
- }
-
- public static byte[] store(CloudState state)
- throws IOException {
- return toJSON(state);
+ @Override
+ public void write(JSONWriter jsonWriter) {
+ jsonWriter.write(collectionStates);
}
- // convenience methods... should these go somewhere else?
- public static byte[] toJSON(Object o) {
- CharArr out = new CharArr();
- new CloudJSONWriter(out, 2).write(o); // indentation by default
- return toUTF8(out);
- }
-
- public static byte[] toUTF8(CharArr out) {
- BytesRef br = new BytesRef(out);
- return Arrays.copyOf(br.bytes, br.length);
- }
-
- public static Object fromJSON(byte[] utf8) {
- // convert directly from bytes to chars
- // and parse directly from that instead of going through
- // intermediate strings or readers
- CharsRef chars = new CharsRef();
- UnicodeUtil.UTF8toUTF16(utf8, 0, utf8.length, chars); // TODO: this method currently oversizes the array
- JSONParser parser = new JSONParser(chars.chars, chars.offset, chars.length);
- try {
- return ObjectBuilder.getVal(parser);
- } catch (IOException e) {
- throw new RuntimeException(e); // should never happen w/o using real IO
- }
- }
-
- public static byte[] store0(CloudState state)
- throws IOException {
- CharArr out = new CharArr();
- out.append(JSONUtil.OBJECT_START);
- int collCount = state.getCollections().size();
-
- for (String collectionName : state.getCollections()) {
- JSONUtil.writeString(collectionName, 0, collectionName.length(), out);
- out.append(JSONUtil.NAME_SEPARATOR);
- Map<String, Slice> slices = state.getSlices(collectionName);
- out.append(JSONUtil.OBJECT_START);
- int sliceCount = slices.keySet().size();
- for(String sliceName: slices.keySet()) {
- JSONUtil.writeString(sliceName, 0, sliceName.length(), out);
- out.append(JSONUtil.NAME_SEPARATOR);
- Slice slice = slices.get(sliceName);
- Map<String, ZkNodeProps> shards = slice.getShards();
- out.append(JSONUtil.OBJECT_START);
- int shardCount = shards.keySet().size();
- for(String shardName: shards.keySet()) {
- ZkNodeProps props = shards.get(shardName);
- JSONUtil.writeString(shardName, 0, shardName.length(), out);
- out.append(JSONUtil.NAME_SEPARATOR);
- out.append(JSONUtil.OBJECT_START);
- int propCount = props.keySet().size();
- for(String key: props.keySet()) {
- JSONUtil.writeString(key, 0, key.length(), out);
- out.append(JSONUtil.NAME_SEPARATOR);
- JSONUtil.writeString(props.get(key), 0, props.get(key).length(), out);
- if (--propCount != 0) {
- out.append(JSONUtil.VALUE_SEPARATOR);
- }
- }
- out.append(JSONUtil.OBJECT_END);
- if (--shardCount != 0) {
- out.append(JSONUtil.VALUE_SEPARATOR);
- }
- }
- out.append(JSONUtil.OBJECT_END);
- if (--sliceCount != 0) {
- out.append(JSONUtil.VALUE_SEPARATOR);
- }
-
- }
- out.append(JSONUtil.OBJECT_END);
- if (--collCount != 0) {
- out.append(JSONUtil.VALUE_SEPARATOR);
- }
- }
- out.append(JSONUtil.OBJECT_END);
- return new String(out.getArray()).getBytes("utf-8");
- }
}
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudStateUtility.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudStateUtility.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudStateUtility.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CloudStateUtility.java Wed Dec 7 04:20:49 2011
@@ -19,7 +19,7 @@ public class CloudStateUtility {
public static void create(CloudState state, SolrZkClient zkClient) throws UnsupportedEncodingException, KeeperException, InterruptedException, IOException {
zkClient.create(ZkStateReader.CLUSTER_STATE,
- CloudState.store(state), Ids.OPEN_ACL_UNSAFE,
+ ZkStateReader.toJSON(state), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
}
@@ -36,7 +36,7 @@ public class CloudStateUtility {
public static void update(SolrZkClient zkClient, CloudState state, Stat stat) throws KeeperException, InterruptedException, IOException {
zkClient.setData(ZkStateReader.CLUSTER_STATE,
- CloudState.store(state));
+ ZkStateReader.toJSON(state));
}
}
\ No newline at end of file
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreAssignment.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreAssignment.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreAssignment.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreAssignment.java Wed Dec 7 04:20:49 2011
@@ -17,10 +17,12 @@ package org.apache.solr.common.cloud;
* the License.
*/
+import org.apache.noggit.JSONWriter;
+
import java.io.IOException;
import java.util.*;
-public class CoreAssignment {
+public class CoreAssignment implements JSONWriter.Writable {
private static String COLLECTION="_collection";
private static String CORE="_core";
@@ -51,12 +53,13 @@ public class CoreAssignment {
return properties.get(COLLECTION);
}
- public static byte[] tobytes(CoreAssignment... assignments) throws IOException {
- return CloudState.toJSON(assignments);
+ @Override
+ public void write(JSONWriter jsonWriter) {
+ jsonWriter.write(properties);
}
- public static CoreAssignment[] fromBytes(byte[] bytes) throws IOException {
- List<Map<String, String>> stateMaps = (List<Map<String, String>>) CloudState.fromJSON(bytes);
+ public static CoreAssignment[] load(byte[] bytes) throws IOException {
+ List<Map<String, String>> stateMaps = (List<Map<String, String>>) ZkStateReader.fromJSON(bytes);
CoreAssignment[] states = new CoreAssignment[stateMaps.size()];
int i = 0;
@@ -81,5 +84,5 @@ public class CoreAssignment {
public String toString() {
return "coll:" + getCollectionName() + " core:" + getCoreName() + " props:" + properties;
}
-
+
}
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreState.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreState.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/CoreState.java Wed Dec 7 04:20:49 2011
@@ -17,10 +17,12 @@ package org.apache.solr.common.cloud;
* the License.
*/
+import org.apache.noggit.JSONWriter;
+
import java.io.IOException;
import java.util.*;
-public class CoreState {
+public class CoreState implements JSONWriter.Writable {
private static String COLLECTION="_collection";
private static String CORE="_core";
@@ -50,12 +52,14 @@ public class CoreState {
return properties;
}
- public static byte[] tobytes(CoreState... states) throws IOException {
- return CloudState.toJSON(states);
+ @Override
+ public void write(JSONWriter jsonWriter) {
+ jsonWriter.write(properties);
}
-
- public static CoreState[] fromBytes(byte[] bytes) throws IOException {
- List<Map<String, String>> stateMaps = (List<Map<String, String>>) CloudState.fromJSON(bytes);
+
+
+ public static CoreState[] load(byte[] bytes) throws IOException {
+ List<Map<String, String>> stateMaps = (List<Map<String, String>>) ZkStateReader.fromJSON(bytes);
CoreState[] states = new CoreState[stateMaps.size()];
int i = 0;
@@ -80,5 +84,5 @@ public class CoreState {
public String toString() {
return "coll:" + getCollectionName() + " core:" + getCoreName() + " props:" + properties;
}
-
+
}
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java Wed Dec 7 04:20:49 2011
@@ -17,12 +17,14 @@ package org.apache.solr.common.cloud;
* limitations under the License.
*/
+import org.apache.noggit.JSONWriter;
+
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
// immutable
-public class Slice {
+public class Slice implements JSONWriter.Writable {
private final Map<String,ZkNodeProps> shards;
private final String name;
@@ -53,4 +55,8 @@ public class Slice {
return "Slice [shards=" + shards + ", name=" + name + "]";
}
+ @Override
+ public void write(JSONWriter jsonWriter) {
+ jsonWriter.write(shards);
+ }
}
Modified: lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java?rev=1211292&r1=1211291&r2=1211292&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java (original)
+++ lucene/dev/branches/solrcloud/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java Wed Dec 7 04:20:49 2011
@@ -24,11 +24,10 @@ import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
-import org.apache.noggit.JSONUtil;
-import org.apache.noggit.ObjectBuilder;
+import org.apache.noggit.JSONWriter;
// Immutable
-public class ZkNodeProps {
+public class ZkNodeProps implements JSONWriter.Writable {
private final Map<String,String> propMap;
@@ -55,12 +54,13 @@ public class ZkNodeProps {
}
public static ZkNodeProps load(byte[] bytes) throws IOException {
- Map<String, String> props = (Map<String, String>) CloudState.fromJSON(bytes);
+ Map<String, String> props = (Map<String, String>) ZkStateReader.fromJSON(bytes);
return new ZkNodeProps(props);
}
- public byte[] store() throws IOException {
- return CloudState.toJSON(propMap);
+ @Override
+ public void write(JSONWriter jsonWriter) {
+ jsonWriter.write(propMap);
}
public String get(String key) {
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=1211292&r1=1211291&r2=1211292&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 7 04:20:49 2011
@@ -18,6 +18,7 @@ package org.apache.solr.common.cloud;
*/
import java.io.IOException;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -27,6 +28,13 @@ import java.util.concurrent.ThreadFactor
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.CharsRef;
+import org.apache.lucene.util.UnicodeUtil;
+import org.apache.noggit.CharArr;
+import org.apache.noggit.JSONParser;
+import org.apache.noggit.JSONWriter;
+import org.apache.noggit.ObjectBuilder;
import org.apache.solr.common.SolrException;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
@@ -57,6 +65,34 @@ public class ZkStateReader {
public static final String LEADER_ELECT_ZKNODE = "/leader_elect";
+ //
+ // convenience methods... should these go somewhere else?
+ //
+ public static byte[] toJSON(Object o) {
+ CharArr out = new CharArr();
+ new JSONWriter(out, 2).write(o); // indentation by default
+ return toUTF8(out);
+ }
+
+ public static byte[] toUTF8(CharArr out) {
+ BytesRef br = new BytesRef(out);
+ return Arrays.copyOf(br.bytes, br.length);
+ }
+
+ public static Object fromJSON(byte[] utf8) {
+ // convert directly from bytes to chars
+ // and parse directly from that instead of going through
+ // intermediate strings or readers
+ CharsRef chars = new CharsRef();
+ UnicodeUtil.UTF8toUTF16(utf8, 0, utf8.length, chars); // TODO: this method currently oversizes the array
+ JSONParser parser = new JSONParser(chars.chars, chars.offset, chars.length);
+ try {
+ return ObjectBuilder.getVal(parser);
+ } catch (IOException e) {
+ throw new RuntimeException(e); // should never happen w/o using real IO
+ }
+ }
+
private static class ZKTF implements ThreadFactory {
private static ThreadGroup tg = new ThreadGroup("ZkStateReader");