You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2014/10/22 07:44:21 UTC
svn commit: r1633538 [5/5] - in /lucene/dev/branches/lucene5969: ./ lucene/
lucene/analysis/ lucene/analysis/common/ lucene/analysis/icu/
lucene/analysis/kuromoji/ lucene/analysis/morfologik/
lucene/analysis/phonetic/ lucene/analysis/smartcn/ lucene/an...
Modified: lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Wed Oct 22 05:44:17 2014
@@ -26,6 +26,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -34,6 +35,8 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
@@ -847,10 +850,12 @@ public class DistributedUpdateProcessor
List<ZkCoreNodeProps> myReplicas = zkController.getZkStateReader().getReplicaProps(collection,
cloudDesc.getShardId(), cloudDesc.getCoreNodeName());
boolean foundErrorNodeInReplicaList = false;
- for (ZkCoreNodeProps replicaProp : myReplicas) {
- if (((Replica) replicaProp.getNodeProps()).getName().equals(((Replica)stdNode.getNodeProps().getNodeProps()).getName())) {
- foundErrorNodeInReplicaList = true;
- break;
+ if (myReplicas != null) {
+ for (ZkCoreNodeProps replicaProp : myReplicas) {
+ if (((Replica) replicaProp.getNodeProps()).getName().equals(((Replica)stdNode.getNodeProps().getNodeProps()).getName())) {
+ foundErrorNodeInReplicaList = true;
+ break;
+ }
}
}
@@ -1146,6 +1151,10 @@ public class DistributedUpdateProcessor
updateField = true;
doRemove(oldDoc, sif, fieldVal, schema);
break;
+ case "removeregex":
+ updateField = true;
+ doRemoveRegex(oldDoc, sif, fieldVal);
+ break;
case "inc":
updateField = true;
doInc(oldDoc, schema, sif, fieldVal);
@@ -1225,6 +1234,38 @@ public class DistributedUpdateProcessor
return oldSize > existingField.getValueCount();
}
+ private void doRemoveRegex(SolrInputDocument oldDoc, SolrInputField sif, Object valuePatterns) {
+ final String name = sif.getName();
+ final SolrInputField existingField = oldDoc.get(name);
+ if (existingField != null) {
+ final Collection<Object> valueToRemove = new HashSet<>();
+ final Collection<Object> original = existingField.getValues();
+ final Collection<Pattern> patterns = preparePatterns(valuePatterns);
+ for (Object value : original) {
+ for(Pattern pattern : patterns) {
+ final Matcher m = pattern.matcher(value.toString());
+ if (m.matches()) {
+ valueToRemove.add(value);
+ }
+ }
+ }
+ original.removeAll(valueToRemove);
+ oldDoc.setField(name, original);
+ }
+ }
+
+ private Collection<Pattern> preparePatterns(Object fieldVal) {
+ final Collection<Pattern> patterns = new LinkedHashSet<>(1);
+ if (fieldVal instanceof Collection) {
+ Collection<String> patternVals = (Collection<String>) fieldVal;
+ for (String patternVal : patternVals) {
+ patterns.add(Pattern.compile(patternVal));
+ }
+ } else {
+ patterns.add(Pattern.compile(fieldVal.toString()));
+ }
+ return patterns;
+ }
@Override
public void processDelete(DeleteUpdateCommand cmd) throws IOException {
Modified: lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/util/CommandOperation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/util/CommandOperation.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/util/CommandOperation.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/java/org/apache/solr/util/CommandOperation.java Wed Oct 22 05:44:17 2014
@@ -92,7 +92,7 @@ public class CommandOperation {
return val;
}
- static final String REQD = "'{0}' is a required field";
+ static final String REQD = "''{0}'' is a required field";
/**Get collection of values for a key. If only one val is present a
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/OverseerRolesTest.java Wed Oct 22 05:44:17 2014
@@ -197,7 +197,9 @@ public class OverseerRolesTest extends
assertNotNull("Could not find a jetty2 kill", leaderJetty);
log.info("leader node {}", leaderJetty.getBaseUrl());
- log.info ("current election Queue", OverseerCollectionProcessor.getSortedElectionNodes(client.getZkStateReader().getZkClient()));
+ log.info ("current election Queue",
+ OverseerCollectionProcessor.getSortedElectionNodes(client.getZkStateReader().getZkClient(),
+ OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE));
ChaosMonkey.stop(leaderJetty);
timeout = System.currentTimeMillis() + 10000;
leaderchanged = false;
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/RollingRestartTest.java Wed Oct 22 05:44:17 2014
@@ -106,7 +106,9 @@ public class RollingRestartTest extends
if (!success) {
leader = OverseerCollectionProcessor.getLeaderNode(cloudClient.getZkStateReader().getZkClient());
if (leader == null)
- log.error("NOOVERSEER election queue is :" + OverseerCollectionProcessor.getSortedElectionNodes(cloudClient.getZkStateReader().getZkClient()));
+ log.error("NOOVERSEER election queue is :" +
+ OverseerCollectionProcessor.getSortedElectionNodes(cloudClient.getZkStateReader().getZkClient(),
+ OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE));
fail("No overseer designate as leader found after restart #" + (i + 1) + ": " + leader);
}
}
@@ -115,7 +117,9 @@ public class RollingRestartTest extends
if (!success) {
leader = OverseerCollectionProcessor.getLeaderNode(cloudClient.getZkStateReader().getZkClient());
if (leader == null)
- log.error("NOOVERSEER election queue is :" + OverseerCollectionProcessor.getSortedElectionNodes(cloudClient.getZkStateReader().getZkClient()));
+ log.error("NOOVERSEER election queue is :" +
+ OverseerCollectionProcessor.getSortedElectionNodes(cloudClient.getZkStateReader().getZkClient(),
+ OverseerElectionContext.PATH + LeaderElector.ELECTION_NODE));
fail("No overseer leader found after restart #" + (i + 1) + ": " + leader);
}
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/TestReplicaProperties.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/TestReplicaProperties.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/TestReplicaProperties.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/cloud/TestReplicaProperties.java Wed Oct 22 05:44:17 2014
@@ -29,10 +29,13 @@ import org.apache.solr.client.solrj.Solr
import org.apache.solr.client.solrj.impl.CloudSolrServer;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.cloud.ClusterState;
+import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.zookeeper.KeeperException;
import org.junit.Before;
@Slow
@@ -61,7 +64,7 @@ public class TestReplicaProperties exten
// shards, replicationfactor, maxreplicaspernode
int shards = random().nextInt(7);
if (shards < 2) shards = 2;
- int rFactor = random().nextInt(3);
+ int rFactor = random().nextInt(4);
if (rFactor < 2) rFactor = 2;
createCollection(null, COLLECTION_NAME, shards, rFactor, shards * rFactor + 1, client, null, "conf1");
} finally {
@@ -186,11 +189,56 @@ public class TestReplicaProperties exten
verifyPropertyVal(client, COLLECTION_NAME,
c1_s1_r2, "property.bogus1", "whatever");
+ // At this point we've assigned a preferred leader. Make it happen and check that all the nodes that are
+ // leaders _also_ have the preferredLeader property set.
+
+
+ doPropertyAction(client,
+ "action", CollectionParams.CollectionAction.REBALANCELEADERS.toString(),
+ "collection", COLLECTION_NAME);
+
+ verifyLeaderAssignment(client, COLLECTION_NAME);
+
} finally {
client.shutdown();
}
}
+ private void verifyLeaderAssignment(CloudSolrServer client, String collectionName)
+ throws InterruptedException, KeeperException {
+ String lastFailMsg = "";
+ for (int idx = 0; idx < 300; ++idx) { // Keep trying while Overseer writes the ZK state for up to 30 seconds.
+ lastFailMsg = "";
+ client.getZkStateReader().updateClusterState(true);
+ ClusterState clusterState = client.getZkStateReader().getClusterState();
+ for (Slice slice : clusterState.getSlices(collectionName)) {
+ Boolean foundLeader = false;
+ Boolean foundPreferred = false;
+ for (Replica replica : slice.getReplicas()) {
+ Boolean isLeader = replica.getBool("leader", false);
+ Boolean isPreferred = replica.getBool("property.preferredleader", false);
+ if (isLeader != isPreferred) {
+ lastFailMsg = "Replica should NOT have preferredLeader != leader. Preferred: " + isPreferred.toString() +
+ " leader is " + isLeader.toString();
+ }
+ if (foundLeader && isLeader) {
+ lastFailMsg = "There should only be a single leader in _any_ shard! Replica " + replica.getName() +
+ " is the second leader in slice " + slice.getName();
+ }
+ if (foundPreferred && isPreferred) {
+ lastFailMsg = "There should only be a single preferredLeader in _any_ shard! Replica " + replica.getName() +
+ " is the second preferredLeader in slice " + slice.getName();
+ }
+ foundLeader = foundLeader ? foundLeader : isLeader;
+ foundPreferred = foundPreferred ? foundPreferred : isPreferred;
+ }
+ }
+ if (lastFailMsg.length() == 0) return;
+ Thread.sleep(100);
+ }
+ fail(lastFailMsg);
+ }
+
private void addProperty(CloudSolrServer client, String... paramsIn) throws IOException, SolrServerException {
assertTrue("paramsIn must be an even multiple of 2, it is: " + paramsIn.length, (paramsIn.length % 2) == 0);
ModifiableSolrParams params = new ModifiableSolrParams();
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Wed Oct 22 05:44:17 2014
@@ -31,6 +31,7 @@ import org.apache.solr.update.DeleteUpda
import org.apache.solr.update.processor.BufferingRequestProcessor;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.noggit.ObjectBuilder;
import org.xml.sax.SAXException;
import java.math.BigDecimal;
@@ -276,7 +277,8 @@ public class JsonLoaderTest extends Solr
" \"f1\": \"v2\",\n" +
" \"f2\": null\n" +
" }\n";
- SolrQueryRequest req = req("json.command","false");
+ SolrQueryRequest req = req("srcField","_src");
+ req.getContext().put("path","/update/json/docs");
SolrQueryResponse rsp = new SolrQueryResponse();
BufferingRequestProcessor p = new BufferingRequestProcessor(null);
JsonLoader loader = new JsonLoader();
@@ -284,25 +286,26 @@ public class JsonLoaderTest extends Solr
assertEquals( 2, p.addCommands.size() );
doc = "\n" +
"\n" +
- "{bool: true,\n" +
- " f0: \"v0\",\n" +
- " f2: {\n" +
+ "{\"bool\": true,\n" +
+ " \"f0\": \"v0\",\n" +
+ " \"f2\": {\n" +
" \t \"boost\": 2.3,\n" +
" \t \"value\": \"test\"\n" +
" \t },\n" +
- "array: [ \"aaa\", \"bbb\" ],\n" +
- "boosted: {\n" +
+ "\"array\": [ \"aaa\", \"bbb\" ],\n" +
+ "\"boosted\": {\n" +
" \t \"boost\": 6.7,\n" +
" \t \"value\": [ \"aaa\", \"bbb\" ]\n" +
" \t }\n" +
" }\n" +
"\n" +
"\n" +
- " {f1: \"v1\",\n" +
- " f1: \"v2\",\n" +
- " f2: null\n" +
+ " {\"f1\": \"v1\",\n" +
+ " \"f2\": \"v2\",\n" +
+ " \"f3\": null\n" +
" }\n";
- req = req("json.command","false");
+ req = req("srcField","_src");
+ req.getContext().put("path","/update/json/docs");
rsp = new SolrQueryResponse();
p = new BufferingRequestProcessor(null);
loader = new JsonLoader();
@@ -310,15 +313,40 @@ public class JsonLoaderTest extends Solr
assertEquals( 2, p.addCommands.size() );
+ String content = (String) p.addCommands.get(0).solrDoc.getFieldValue("_src");
+ assertNotNull(content);
+ Map obj = (Map) ObjectBuilder.fromJSON(content);
+ assertEquals(Boolean.TRUE, obj.get("bool"));
+ assertEquals("v0", obj.get("f0"));
+ assertNotNull(obj.get("f0"));
+ assertNotNull(obj.get("array"));
+ assertNotNull(obj.get("boosted"));
+
+ content = (String) p.addCommands.get(1).solrDoc.getFieldValue("_src");
+ assertNotNull(content);
+ obj = (Map) ObjectBuilder.fromJSON(content);
+ assertEquals("v1", obj.get("f1"));
+ assertEquals("v2", obj.get("f2"));
+ assertTrue(obj.containsKey("f3"));
doc = "[{'id':'1'},{'id':'2'}]".replace('\'', '"');
- req = req("json.command","false");
+ req = req("srcField","_src");
+ req.getContext().put("path","/update/json/docs");
rsp = new SolrQueryResponse();
p = new BufferingRequestProcessor(null);
loader = new JsonLoader();
loader.load(req, rsp, new ContentStreamBase.StringStream(doc), p);
assertEquals( 2, p.addCommands.size() );
+ content = (String) p.addCommands.get(0).solrDoc.getFieldValue("_src");
+ assertNotNull(content);
+ obj = (Map) ObjectBuilder.fromJSON(content);
+ assertEquals("1", obj.get("id"));
+ content = (String) p.addCommands.get(1).solrDoc.getFieldValue("_src");
+ assertNotNull(content);
+ obj = (Map) ObjectBuilder.fromJSON(content);
+ assertEquals("2", obj.get("id"));
+
}
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java Wed Oct 22 05:44:17 2014
@@ -17,6 +17,15 @@ package org.apache.solr.handler;
* limitations under the License.
*/
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.Path;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.apache.commons.io.IOUtils;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
@@ -36,16 +45,6 @@ import org.apache.solr.util.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.nio.file.Path;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
@SolrTestCaseJ4.SuppressSSL // Currently unknown why SSL does not work with this test
public class TestReplicationHandlerBackup extends SolrJettyTestBase {
@@ -109,12 +108,12 @@ public class TestReplicationHandlerBacku
@After
public void tearDown() throws Exception {
super.tearDown();
+ masterClient.shutdown();
+ masterClient = null;
masterJetty.stop();
master.tearDown();
masterJetty = null;
master = null;
- masterClient.shutdown();
- masterClient = null;
}
@@ -142,15 +141,15 @@ public class TestReplicationHandlerBacku
backupNames = new String[2];
}
for (int i = 0; i < 2; i++) {
- BackupThread backupThread;
+ BackupCommand backupCommand;
final String backupName = TestUtil.randomSimpleString(random(), 1, 20);
if (!namedBackup) {
- backupThread = new BackupThread(addNumberToKeepInRequest, backupKeepParamName, ReplicationHandler.CMD_BACKUP);
+ backupCommand = new BackupCommand(addNumberToKeepInRequest, backupKeepParamName, ReplicationHandler.CMD_BACKUP);
} else {
- backupThread = new BackupThread(backupName, ReplicationHandler.CMD_BACKUP);
+ backupCommand = new BackupCommand(backupName, ReplicationHandler.CMD_BACKUP);
backupNames[i] = backupName;
}
- backupThread.start();
+ backupCommand.runCommand();
File dataDir = new File(master.getDataDir());
@@ -167,8 +166,8 @@ public class TestReplicationHandlerBacku
Thread.sleep(200);
}
- if (backupThread.fail != null) {
- fail(backupThread.fail);
+ if (backupCommand.fail != null) {
+ fail(backupCommand.fail);
}
File[] files = null;
if (!namedBackup) {
@@ -225,20 +224,25 @@ public class TestReplicationHandlerBacku
}
private void testDeleteNamedBackup(String backupNames[]) throws InterruptedException, IOException {
+ String lastTimestamp = null;
for (int i = 0; i < 2; i++) {
- BackupThread deleteBackupThread = new BackupThread(backupNames[i], ReplicationHandler.CMD_DELETE_BACKUP);
- deleteBackupThread.start();
- CheckDeleteBackupStatus checkDeleteBackupStatus = new CheckDeleteBackupStatus(backupNames[i]);
+ BackupCommand deleteBackupCommand = new BackupCommand(backupNames[i], ReplicationHandler.CMD_DELETE_BACKUP);
+ deleteBackupCommand.runCommand();
+ CheckDeleteBackupStatus checkDeleteBackupStatus = new CheckDeleteBackupStatus(backupNames[i], lastTimestamp);
while (true) {
boolean success = checkDeleteBackupStatus.fetchStatus();
if (success) {
+ lastTimestamp = checkDeleteBackupStatus.lastTimestamp;
+ if (i == 0) {
+ Thread.sleep(1000); //make the timestamp change
+ }
break;
}
Thread.sleep(200);
}
- if (deleteBackupThread.fail != null) {
- fail(deleteBackupThread.fail);
+ if (deleteBackupCommand.fail != null) {
+ fail(deleteBackupCommand.fail);
}
}
}
@@ -284,24 +288,25 @@ public class TestReplicationHandlerBacku
};
}
- private class BackupThread extends Thread {
- volatile String fail = null;
+ private class BackupCommand {
+ String fail = null;
final boolean addNumberToKeepInRequest;
String backupKeepParamName;
String backupName;
String cmd;
- BackupThread(boolean addNumberToKeepInRequest, String backupKeepParamName, String command) {
+
+ BackupCommand(boolean addNumberToKeepInRequest, String backupKeepParamName, String command) {
this.addNumberToKeepInRequest = addNumberToKeepInRequest;
this.backupKeepParamName = backupKeepParamName;
this.cmd = command;
}
- BackupThread(String backupName, String command) {
+ BackupCommand(String backupName, String command) {
this.backupName = backupName;
addNumberToKeepInRequest = false;
this.cmd = command;
}
- @Override
- public void run() {
+
+ public void runCommand() {
String masterUrl = null;
if(backupName != null) {
masterUrl = buildUrl(masterJetty.getLocalPort(), context) + "/replication?command=" + cmd +
@@ -330,9 +335,11 @@ public class TestReplicationHandlerBacku
String response = null;
private String backupName;
final Pattern p = Pattern.compile("<str name=\"snapshotDeletedAt\">(.*?)</str>");
-
- private CheckDeleteBackupStatus(String backupName) {
+ String lastTimestamp;
+
+ private CheckDeleteBackupStatus(String backupName, String lastTimestamp) {
this.backupName = backupName;
+ this.lastTimestamp = lastTimestamp;
}
public boolean fetchStatus() throws IOException {
@@ -345,7 +352,8 @@ public class TestReplicationHandlerBacku
response = IOUtils.toString(stream, "UTF-8");
if(response.contains("<str name=\"status\">success</str>")) {
Matcher m = p.matcher(response);
- if(m.find()) {
+ if(m.find() && (lastTimestamp == null || !lastTimestamp.equals(m.group(1)))) {
+ lastTimestamp = m.group(1);
return true;
}
} else if(response.contains("<str name=\"status\">Unable to delete snapshot: " + backupName + "</str>" )) {
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java Wed Oct 22 05:44:17 2014
@@ -725,4 +725,36 @@ public class QueryElevationComponentTest
delete();
}
}
+
+ @Test
+ public void testWithLocalParam() throws Exception {
+ try {
+ init("schema11.xml");
+ clearIndex();
+ assertU(commit());
+ assertU(adoc("id", "7", "text", "AAAA", "str_s", "a"));
+ assertU(commit());
+
+ assertQ("", req(CommonParams.Q, "AAAA", CommonParams.QT, "/elevate",
+ CommonParams.FL, "id, score, [elevated]")
+ , "//*[@numFound='1']"
+ , "//result/doc[1]/float[@name='id'][.='7.0']"
+ , "//result/doc[1]/bool[@name='[elevated]'][.='true']"
+ );
+ assertQ("", req(CommonParams.Q, "{!q.op=AND}AAAA", CommonParams.QT, "/elevate",
+ CommonParams.FL, "id, score, [elevated]")
+ , "//*[@numFound='1']"
+ , "//result/doc[1]/float[@name='id'][.='7.0']"
+ , "//result/doc[1]/bool[@name='[elevated]'][.='true']"
+ );
+ assertQ("", req(CommonParams.Q, "{!q.op=AND v='AAAA'}", CommonParams.QT, "/elevate",
+ CommonParams.FL, "id, score, [elevated]")
+ , "//*[@numFound='1']"
+ , "//result/doc[1]/float[@name='id'][.='7.0']"
+ , "//result/doc[1]/bool[@name='[elevated]'][.='true']"
+ );
+ } finally {
+ delete();
+ }
+ }
}
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java Wed Oct 22 05:44:17 2014
@@ -469,10 +469,9 @@ public class StatsComponentTest extends
"{!type=func key="+key+" ex=key_ex_tag}field("+f+")",
"{!type=func key="+key+" ex=key_ex_tag v=field("+f+")}",
"{!type=func key="+key+" ex=key_ex_tag v='field("+f+")'}",
-
- // identity math functions don't work as expected due to LUCENE-5961
- // "{!type=func key="+key+" ex=key_ex_tag v='sum(0,"+f+")'}",
- // "{!type=func key="+key+" ex=key_ex_tag v='product(1,"+f+")'}",
+ // identity math functions
+ "{!type=func key="+key+" ex=key_ex_tag v='sum(0,"+f+")'}",
+ "{!type=func key="+key+" ex=key_ex_tag v='product(1,"+f+")'}",
}) {
assertQ("test statistics over field specified as a function: " + param,
@@ -555,10 +554,9 @@ public class StatsComponentTest extends
"{!type=func key="+f+" ex=key_ex_tag}field("+f+")",
"{!type=func key="+f+" ex=key_ex_tag v=field("+f+")}",
"{!type=func key="+f+" ex=key_ex_tag v='field("+f+")'}",
-
- // identity math functions don't work as expected due to LUCENE-5961
- // "{!type=func key="+f+" ex=key_ex_tag v='sum(0,"+f+")'}",
- // "{!type=func key="+f+" ex=key_ex_tag v='product(1,"+f+")'}",
+ // identity math functions
+ "{!type=func key="+f+" ex=key_ex_tag v='sum(0,"+f+")'}",
+ "{!type=func key="+f+" ex=key_ex_tag v='product(1,"+f+")'}",
}) {
assertQ("test statis & stats.facet over field specified as a function: " + param,
req("q", "*:*", "stats", "true", "stats.calcdistinct", "true",
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/TestStressLucene.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/TestStressLucene.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/TestStressLucene.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/TestStressLucene.java Wed Oct 22 05:44:17 2014
@@ -83,14 +83,12 @@ public class TestStressLucene extends Te
final FieldType idFt = new FieldType();
- idFt.setIndexed(true);
idFt.setStored(true);
idFt.setOmitNorms(true);
idFt.setTokenized(false);
idFt.setIndexOptions(FieldInfo.IndexOptions.DOCS_ONLY);
final FieldType ft2 = new FieldType();
- ft2.setIndexed(false);
ft2.setStored(true);
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/search/function/TestFunctionQuery.java Wed Oct 22 05:44:17 2014
@@ -731,12 +731,17 @@ public class TestFunctionQuery extends S
@Test
public void testPseudoFieldFunctions() throws Exception {
- assertU(adoc("id", "1", "text", "hello", "foo_s","A"));
+ assertU(adoc("id", "1", "text", "hello", "foo_s","A", "yak_i", "32"));
assertU(adoc("id", "2"));
assertU(commit());
- assertJQ(req("q", "id:1", "fl", "a:1,b:2.0,c:'X',d:{!func}foo_s,e:{!func}bar_s") // if exists() is false, no pseudo-field should be added
- , "/response/docs/[0]=={'a':1, 'b':2.0,'c':'X','d':'A'}");
+ // if exists() is false, no pseudo-field should be added
+ assertJQ(req("q", "id:1", "fl", "a:1,b:2.0,c:'X',d:{!func}foo_s,e:{!func}bar_s")
+ , "/response/docs/[0]=={'a':1, 'b':2.0,'c':'X','d':'A'}");
+ assertJQ(req("q", "id:1", "fl", "a:sum(yak_i,bog_i),b:mul(yak_i,bog_i),c:min(yak_i,bog_i)")
+ , "/response/docs/[0]=={ 'c':32.0 }");
+ assertJQ(req("q", "id:1", "fl", "a:sum(yak_i,def(bog_i,42)), b:max(yak_i,bog_i)")
+ , "/response/docs/[0]=={ 'a': 74.0, 'b':32.0 }");
}
public void testMissingFieldFunctionBehavior() throws Exception {
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/TestExceedMaxTermLength.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/TestExceedMaxTermLength.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/TestExceedMaxTermLength.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/TestExceedMaxTermLength.java Wed Oct 22 05:44:17 2014
@@ -34,7 +34,7 @@ public class TestExceedMaxTermLength ext
public final static String TEST_SCHEMAXML_NAME = "schema11.xml";
private final static int minTestTermLength = IndexWriter.MAX_TERM_LENGTH + 1;
- private final static int maxTestTermLegnth = IndexWriter.MAX_TERM_LENGTH * 2;
+ private final static int maxTestTermLength = IndexWriter.MAX_TERM_LENGTH * 2;
@BeforeClass
public static void beforeTests() throws Exception {
@@ -54,12 +54,12 @@ public class TestExceedMaxTermLength ext
final String longFieldName = "cat";
final String longFieldValue = TestUtil.randomSimpleString(random(),
minTestTermLength,
- maxTestTermLegnth);
+ maxTestTermLength);
final String okayFieldName = TestUtil.randomSimpleString(random(), 1, 50) + "_sS" ; //Dynamic field
final String okayFieldValue = TestUtil.randomSimpleString(random(),
minTestTermLength,
- maxTestTermLegnth);
+ maxTestTermLength);
boolean includeOkayFields = random().nextBoolean();
@@ -105,12 +105,12 @@ public class TestExceedMaxTermLength ext
final String longFieldName = "cat_length";
final String longFieldValue = TestUtil.randomSimpleString(random(),
minTestTermLength,
- maxTestTermLegnth);
+ maxTestTermLength);
final String okayFieldName = TestUtil.randomSimpleString(random(), 1, 50) + "_sS" ; //Dynamic field
final String okayFieldValue = TestUtil.randomSimpleString(random(),
minTestTermLength,
- maxTestTermLegnth);
+ maxTestTermLength);
boolean includeOkayFields = random().nextBoolean();
@@ -138,7 +138,6 @@ public class TestExceedMaxTermLength ext
updateJ(json(jsonStr), null);
}
} catch (Exception e) {
- //expected
fail("Should not have failed adding doc " + jsonStr);
String msg= e.getCause().getMessage();
assertTrue(msg.contains("one immense term in field=\"cat\""));
Modified: lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdatesTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdatesTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdatesTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/core/src/test/org/apache/solr/update/processor/AtomicUpdatesTest.java Wed Oct 22 05:44:17 2014
@@ -815,6 +815,73 @@ public class AtomicUpdatesTest extends S
assertQ(req("q", "floatRemove:\"111.111\"", "indent", "true"), "//result[@numFound = '3']");
}
+ @Test
+ public void testRemoveregex() throws Exception {
+ SolrInputDocument doc;
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "1");
+ doc.setField("cat", new String[]{"aaa", "bbb", "ccc", "ccc", "ddd"});
+ assertU(adoc(doc));
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "2");
+ doc.setField("cat", new String[]{"aaa", "bbb", "bbb", "ccc", "ddd"});
+ assertU(adoc(doc));
+
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "20");
+ doc.setField("cat", new String[]{"aaa", "ccc", "ddd"});
+ assertU(adoc(doc));
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "21");
+ doc.setField("cat", new String[]{"aaa", "bbb", "ddd"});
+ assertU(adoc(doc));
+
+
+ assertU(commit());
+
+ assertQ(req("q", "cat:*", "indent", "true"), "//result[@numFound = '4']");
+ assertQ(req("q", "cat:bbb", "indent", "true"), "//result[@numFound = '3']");
+
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "1");
+ List<String> removeList = new ArrayList<>();
+ removeList.add(".b.");
+ removeList.add("c+c");
+ doc.setField("cat", ImmutableMap.of("removeregex", removeList)); //behavior when hitting Solr through ZK
+ assertU(adoc(doc));
+ assertU(commit());
+
+ assertQ(req("q", "cat:*", "indent", "true"), "//result[@numFound = '4']");
+ assertQ(req("q", "cat:bbb", "indent", "true"), "//result[@numFound = '2']");
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "21");
+ removeList = new ArrayList<>();
+ removeList.add("bb*");
+ removeList.add("cc+");
+ doc.setField("cat", ImmutableMap.of("removeregex", removeList)); //behavior when hitting Solr through ZK
+ assertU(adoc(doc));
+ assertU(commit());
+
+ assertQ(req("q", "cat:*", "indent", "true"), "//result[@numFound = '4']");
+ assertQ(req("q", "cat:bbb", "indent", "true"), "//result[@numFound = '1']");
+
+ doc = new SolrInputDocument();
+ doc.setField("id", "1");
+ doc.setField("cat", ImmutableMap.of("removeregex", "a.a")); //behavior when hitting Solr directly
+
+ assertU(adoc(doc));
+ assertU(commit());
+
+ assertQ(req("q", "cat:*", "indent", "true"), "//result[@numFound = '4']");
+ assertQ(req("q", "cat:aaa", "indent", "true"), "//result[@numFound = '3']");
+ }
+
@Test
public void testAdd() throws Exception {
SolrInputDocument doc = new SolrInputDocument();
Modified: lucene/dev/branches/lucene5969/solr/example/example-DIH/ivy.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/example/example-DIH/ivy.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/example/example-DIH/ivy.xml (original)
+++ lucene/dev/branches/lucene5969/solr/example/example-DIH/ivy.xml Wed Oct 22 05:44:17 2014
@@ -18,10 +18,12 @@
-->
<ivy-module version="2.0">
<info organisation="org.apache.solr" module="example-DIH"/>
-
+ <configurations defaultconfmapping="compile->master">
+ <conf name="compile" transitive="false"/>
+ </configurations>
<dependencies>
- <dependency org="hsqldb" name="hsqldb" rev="${/hsqldb/hsqldb}" transitive="false"/>
- <dependency org="org.apache.derby" name="derby" rev="${/org.apache.derby/derby}" transitive="false"/>
+ <dependency org="hsqldb" name="hsqldb" rev="${/hsqldb/hsqldb}" conf="compile"/>
+ <dependency org="org.apache.derby" name="derby" rev="${/org.apache.derby/derby}" conf="compile"/>
<exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
</dependencies>
</ivy-module>
Modified: lucene/dev/branches/lucene5969/solr/example/ivy.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/example/ivy.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/example/ivy.xml (original)
+++ lucene/dev/branches/lucene5969/solr/example/ivy.xml Wed Oct 22 05:44:17 2014
@@ -17,36 +17,39 @@
under the License.
-->
<ivy-module version="2.0">
- <info organisation="org.apache.solr" module="example"/>
- <configurations>
- <conf name="jetty" description="jetty jars"/>
- <conf name="start" description="jetty start jar"/>
- <conf name="servlet" description="servlet-api jar"/>
- <conf name="logging" description="logging setup"/>
- </configurations>
+ <info organisation="org.apache.solr" module="example"/>
+ <configurations defaultconfmapping="jetty->master;start->master;servlet->master;logging->master">
+ <conf name="jetty" description="jetty jars" transitive="false"/>
+ <conf name="start" description="jetty start jar" transitive="false"/>
+ <conf name="servlet" description="servlet-api jar" transitive="false"/>
+ <conf name="logging" description="logging setup" transitive="false"/>
+ </configurations>
- <dependencies>
-
- <dependency org="log4j" name="log4j" rev="${/log4j/log4j}" transitive="false" conf="logging->default"/>
- <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" transitive="false" conf="logging->default"/>
- <dependency org="org.slf4j" name="jcl-over-slf4j" rev="${/org.slf4j/jcl-over-slf4j}" transitive="false" conf="logging->default"/>
- <dependency org="org.slf4j" name="jul-to-slf4j" rev="${/org.slf4j/jul-to-slf4j}" transitive="false" conf="logging->default"/>
- <dependency org="org.slf4j" name="slf4j-log4j12" rev="${/org.slf4j/slf4j-log4j12}" transitive="false" conf="logging->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-continuation" rev="${/org.eclipse.jetty/jetty-continuation}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-deploy" rev="${/org.eclipse.jetty/jetty-deploy}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-http" rev="${/org.eclipse.jetty/jetty-http}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-io" rev="${/org.eclipse.jetty/jetty-io}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-jmx" rev="${/org.eclipse.jetty/jetty-jmx}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-security" rev="${/org.eclipse.jetty/jetty-security}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-server" rev="${/org.eclipse.jetty/jetty-server}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-servlet" rev="${/org.eclipse.jetty/jetty-servlet}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-util" rev="${/org.eclipse.jetty/jetty-util}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-webapp" rev="${/org.eclipse.jetty/jetty-webapp}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-xml" rev="${/org.eclipse.jetty/jetty-xml}" transitive="false" conf="jetty->default"/>
- <dependency org="org.eclipse.jetty" name="jetty-start" rev="${/org.eclipse.jetty/jetty-start}" transitive="false" conf="start->default"/>
- <dependency org="org.eclipse.jetty.orbit" name="javax.servlet" rev="${/org.eclipse.jetty.orbit/javax.servlet}" transitive="false" conf="servlet->default">
- <artifact name="javax.servlet" type="orbit" ext="jar"/>
- </dependency>
- <exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
- </dependencies>
+ <dependencies>
+ <dependency org="log4j" name="log4j" rev="${/log4j/log4j}" conf="logging"/>
+ <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" conf="logging"/>
+ <dependency org="org.slf4j" name="jcl-over-slf4j" rev="${/org.slf4j/jcl-over-slf4j}" conf="logging"/>
+ <dependency org="org.slf4j" name="jul-to-slf4j" rev="${/org.slf4j/jul-to-slf4j}" conf="logging"/>
+ <dependency org="org.slf4j" name="slf4j-log4j12" rev="${/org.slf4j/slf4j-log4j12}" conf="logging"/>
+
+ <dependency org="org.eclipse.jetty" name="jetty-continuation" rev="${/org.eclipse.jetty/jetty-continuation}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-deploy" rev="${/org.eclipse.jetty/jetty-deploy}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-http" rev="${/org.eclipse.jetty/jetty-http}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-io" rev="${/org.eclipse.jetty/jetty-io}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-jmx" rev="${/org.eclipse.jetty/jetty-jmx}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-security" rev="${/org.eclipse.jetty/jetty-security}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-server" rev="${/org.eclipse.jetty/jetty-server}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-servlet" rev="${/org.eclipse.jetty/jetty-servlet}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-util" rev="${/org.eclipse.jetty/jetty-util}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-webapp" rev="${/org.eclipse.jetty/jetty-webapp}" conf="jetty"/>
+ <dependency org="org.eclipse.jetty" name="jetty-xml" rev="${/org.eclipse.jetty/jetty-xml}" conf="jetty"/>
+
+ <dependency org="org.eclipse.jetty" name="jetty-start" rev="${/org.eclipse.jetty/jetty-start}" conf="start"/>
+
+ <dependency org="org.eclipse.jetty.orbit" name="javax.servlet" rev="${/org.eclipse.jetty.orbit/javax.servlet}" conf="servlet">
+ <artifact name="javax.servlet" type="orbit" ext="jar"/>
+ </dependency>
+
+ <exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
+ </dependencies>
</ivy-module>
Modified: lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/schema.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/schema.xml (original)
+++ lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/schema.xml Wed Oct 22 05:44:17 2014
@@ -156,6 +156,7 @@
<field name="content_type" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="last_modified" type="date" indexed="true" stored="true"/>
<field name="links" type="string" indexed="true" stored="true" multiValued="true"/>
+ <field name="_src" type="string" indexed="false" stored="true"/>
<!-- Main body of document extracted by SolrCell.
NOTE: This field is not indexed by default, since it is also copied to "text"
Modified: lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/solrconfig.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene5969/solr/example/solr/collection1/conf/solrconfig.xml Wed Oct 22 05:44:17 2014
@@ -1057,6 +1057,19 @@
<str name="df">text</str>
</lst>
</initParams>
+
+ <initParams path="/update/json/docs">
+ <lst name="defaults">
+ <!--this ensures that the entire json doc will be stored verbatim into one field-->
+ <str name="srcField">_src</str>
+ <!--This means a the uniqueKeyField will be extracted from the fields and
+ all fields go into the 'df' field. In this config df is already configured to be 'text'
+ -->
+ <str name="mapUniqueKeyOnly">true</str>
+ </lst>
+
+ </initParams>
+
<!-- The following are implicitly added
<requestHandler name="/update/json" class="solr.UpdateRequestHandler">
<lst name="defaults">
Modified: lucene/dev/branches/lucene5969/solr/solrj/ivy.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/solrj/ivy.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/solrj/ivy.xml (original)
+++ lucene/dev/branches/lucene5969/solr/solrj/ivy.xml Wed Oct 22 05:44:17 2014
@@ -19,7 +19,7 @@
<ivy-module version="2.0">
<info organisation="org.apache.solr" module="solrj"/>
- <configurations>
+ <configurations defaultconfmapping="compile->master;test->master">
<!-- artifacts in the "compile" configuration will go into solr/solrj/lib/ -->
<conf name="compile" transitive="false"/>
<!-- artifacts in the "test" configuration will go into solr/solrj/test-lib/ -->
@@ -27,17 +27,17 @@
</configurations>
<dependencies>
- <dependency org="org.apache.zookeeper" name="zookeeper" rev="${/org.apache.zookeeper/zookeeper}" conf="compile->*"/>
- <dependency org="org.apache.httpcomponents" name="httpclient" rev="${/org.apache.httpcomponents/httpclient}" conf="compile->*"/>
- <dependency org="org.apache.httpcomponents" name="httpmime" rev="${/org.apache.httpcomponents/httpmime}" conf="compile->*"/>
- <dependency org="org.apache.httpcomponents" name="httpcore" rev="${/org.apache.httpcomponents/httpcore}" conf="compile->*"/>
- <dependency org="commons-io" name="commons-io" rev="${/commons-io/commons-io}" conf="compile->*"/>
- <dependency org="org.codehaus.woodstox" name="wstx-asl" rev="${/org.codehaus.woodstox/wstx-asl}" conf="compile->*"/>
- <dependency org="org.noggit" name="noggit" rev="${/org.noggit/noggit}" conf="compile->*"/>
- <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" conf="compile->*"/>
+ <dependency org="org.apache.zookeeper" name="zookeeper" rev="${/org.apache.zookeeper/zookeeper}" conf="compile"/>
+ <dependency org="org.apache.httpcomponents" name="httpclient" rev="${/org.apache.httpcomponents/httpclient}" conf="compile"/>
+ <dependency org="org.apache.httpcomponents" name="httpmime" rev="${/org.apache.httpcomponents/httpmime}" conf="compile"/>
+ <dependency org="org.apache.httpcomponents" name="httpcore" rev="${/org.apache.httpcomponents/httpcore}" conf="compile"/>
+ <dependency org="commons-io" name="commons-io" rev="${/commons-io/commons-io}" conf="compile"/>
+ <dependency org="org.codehaus.woodstox" name="wstx-asl" rev="${/org.codehaus.woodstox/wstx-asl}" conf="compile"/>
+ <dependency org="org.noggit" name="noggit" rev="${/org.noggit/noggit}" conf="compile"/>
+ <dependency org="org.slf4j" name="slf4j-api" rev="${/org.slf4j/slf4j-api}" conf="compile"/>
- <dependency org="org.slf4j" name="jcl-over-slf4j" rev="${/org.slf4j/jcl-over-slf4j}" conf="test->*"/>
- <dependency org="org.slf4j" name="slf4j-log4j12" rev="${/org.slf4j/slf4j-log4j12}" conf="test->*"/>
+ <dependency org="org.slf4j" name="jcl-over-slf4j" rev="${/org.slf4j/jcl-over-slf4j}" conf="test"/>
+ <dependency org="org.slf4j" name="slf4j-log4j12" rev="${/org.slf4j/slf4j-log4j12}" conf="test"/>
<exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
</dependencies>
Modified: lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java (original)
+++ lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java Wed Oct 22 05:44:17 2014
@@ -205,8 +205,10 @@ public class ClusterState implements JSO
if (c != null) states = Collections.singletonList( c );
}
- for (CollectionRef coll : states) {
- for (Slice slice : coll.get().getSlices()) {
+ for (CollectionRef ref : states) {
+ DocCollection coll = ref.get();
+ if(coll == null) continue;// this collection go tremoved in between, skip
+ for (Slice slice : coll.getSlices()) {
for (Replica replica : slice.getReplicas()) {
// TODO: for really large clusters, we could 'index' on this
String rnodeName = replica.getStr(ZkStateReader.NODE_NAME_PROP);
@@ -220,25 +222,6 @@ public class ClusterState implements JSO
return null;
}
- /*public String getShardIdByCoreNodeName(String collectionName, String coreNodeName) {
- Collection<DocCollection> states = collectionStates.values();
- if (collectionName != null) {
- CollectionRef c = collectionStates.get(collectionName);
- if (c != null) states = Collections.singletonList(c);
- }
-
- for (DocCollection coll : states) {
- for (Slice slice : coll.getSlices()) {
- for (Replica replica : slice.getReplicas()) {
- if (coreNodeName.equals(replica.getName())) {
- return slice.getName();
- }
- }
- }
- }
- return null;
- }*/
-
/**
* Check if node is alive.
*/
Modified: lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java (original)
+++ lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java Wed Oct 22 05:44:17 2014
@@ -71,7 +71,8 @@ public class ZkStateReader implements Cl
public static final String LEADER_PROP = "leader";
public static final String PROPERTY_PROP = "property";
public static final String PROPERTY_VALUE_PROP = "property.value";
-
+ public static final String MAX_AT_ONCE_PROP = "maxAtOnce";
+ public static final String MAX_WAIT_SECONDS_PROP = "maxWaitSeconds";
public static final String COLLECTIONS_ZKNODE = "/collections";
public static final String LIVE_NODES_ZKNODE = "/live_nodes";
public static final String ALIASES = "/aliases.json";
Modified: lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java (original)
+++ lucene/dev/branches/lucene5969/solr/solrj/src/java/org/apache/solr/common/params/CollectionParams.java Wed Oct 22 05:44:17 2014
@@ -49,7 +49,8 @@ public interface CollectionParams
CLUSTERSTATUS,
ADDREPLICAPROP,
DELETEREPLICAPROP,
- BALANCESLICEUNIQUE;
+ BALANCESLICEUNIQUE,
+ REBALANCELEADERS;
public static CollectionAction get( String p )
{
Modified: lucene/dev/branches/lucene5969/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleJettyTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleJettyTest.java?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleJettyTest.java (original)
+++ lucene/dev/branches/lucene5969/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/SolrExampleJettyTest.java Wed Oct 22 05:44:17 2014
@@ -17,13 +17,24 @@
package org.apache.solr.client.solrj.embedded;
+import java.io.ByteArrayInputStream;
+import java.util.Map;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.InputStreamEntity;
import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
import org.apache.solr.client.solrj.SolrExampleTests;
+import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.SolrDocument;
import org.apache.solr.util.ExternalPaths;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.noggit.ObjectBuilder;
/**
* TODO? perhaps use:
@@ -52,4 +63,36 @@ public class SolrExampleJettyTest extend
// expected
}
}
+
+ @Test
+ public void testArbitraryJsonIndexing() throws Exception {
+ HttpSolrServer server = (HttpSolrServer) getSolrServer();
+ server.deleteByQuery("*:*");
+ server.commit();
+ assertNumFound("*:*", 0); // make sure it got in
+
+ // two docs, one with uniqueKey, another without it
+ String json = "{\"id\":\"abc1\", \"name\": \"name1\"} {\"name\" : \"name2\"}";
+ HttpClient httpClient = server.getHttpClient();
+ HttpPost post = new HttpPost(server.getBaseURL() + "/update/json/docs");
+ post.setHeader("Content-Type", "application/json");
+ post.setEntity(new InputStreamEntity(new ByteArrayInputStream(json.getBytes("UTF-8")), -1));
+ HttpResponse response = httpClient.execute(post);
+ assertEquals(200, response.getStatusLine().getStatusCode());
+ server.commit();
+ QueryResponse rsp = getSolrServer().query(new SolrQuery("*:*"));
+ assertEquals(2,rsp.getResults().getNumFound());
+
+ SolrDocument doc = rsp.getResults().get(0);
+ String src = (String) doc.getFieldValue("_src");
+ Map m = (Map) ObjectBuilder.fromJSON(src);
+ assertEquals("abc1",m.get("id"));
+ assertEquals("name1",m.get("name"));
+
+ doc = rsp.getResults().get(1);
+ src = (String) doc.getFieldValue("_src");
+ m = (Map) ObjectBuilder.fromJSON(src);
+ assertEquals("name2",m.get("name"));
+
+ }
}
Modified: lucene/dev/branches/lucene5969/solr/test-framework/ivy.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5969/solr/test-framework/ivy.xml?rev=1633538&r1=1633537&r2=1633538&view=diff
==============================================================================
--- lucene/dev/branches/lucene5969/solr/test-framework/ivy.xml (original)
+++ lucene/dev/branches/lucene5969/solr/test-framework/ivy.xml Wed Oct 22 05:44:17 2014
@@ -17,26 +17,26 @@
under the License.
-->
<ivy-module version="2.0">
- <info organisation="org.apache.solr" module="solr-test-framework"/>
+ <info organisation="org.apache.solr" module="solr-test-framework"/>
- <configurations>
- <conf name="default" />
- <!--
- JUnit4 ANT task only, no ANT.
- This is used from build scripts for taskdefs.
- -->
- <conf name="junit4-stdalone" />
- </configurations>
+ <configurations defaultconfmapping="compile->master;junit4-stdalone->master">
+ <conf name="compile" transitive="false" />
+ <!--
+ JUnit4 ANT task only, no ANT.
+ This is used from build scripts for taskdefs.
+ -->
+ <conf name="junit4-stdalone" transitive="false" />
+ </configurations>
- <dependencies defaultconf="default">
- <dependency org="org.apache.ant" name="ant" rev="${/org.apache.ant/ant}" transitive="false" />
+ <dependencies>
+ <dependency org="org.apache.ant" name="ant" rev="${/org.apache.ant/ant}" conf="compile" />
+
+ <dependency org="junit" name="junit" rev="${/junit/junit}" conf="compile;junit4-stdalone">
+ <exclude org="org.hamcrest" module="hamcrest-core" />
+ </dependency>
+ <dependency org="com.carrotsearch.randomizedtesting" name="junit4-ant" rev="${/com.carrotsearch.randomizedtesting/junit4-ant}" conf="compile;junit4-stdalone" />
+ <dependency org="com.carrotsearch.randomizedtesting" name="randomizedtesting-runner" rev="${/com.carrotsearch.randomizedtesting/randomizedtesting-runner}" conf="compile;junit4-stdalone" />
- <dependency org="junit" name="junit" rev="${/junit/junit}" transitive="false" conf="default->*;junit4-stdalone->*">
- <exclude org="org.hamcrest" module="hamcrest-core"/>
- </dependency>
- <dependency org="com.carrotsearch.randomizedtesting" name="junit4-ant" rev="${/com.carrotsearch.randomizedtesting/junit4-ant}" transitive="false" conf="default->*;junit4-stdalone->*" />
- <dependency org="com.carrotsearch.randomizedtesting" name="randomizedtesting-runner" rev="${/com.carrotsearch.randomizedtesting/randomizedtesting-runner}" transitive="false" conf="default->*;junit4-stdalone->*" />
-
- <exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
- </dependencies>
+ <exclude org="*" ext="*" matcher="regexp" type="${ivy.exclude.types}"/>
+ </dependencies>
</ivy-module>