[
https://issues.apache.org/jira/browse/SOLR-3369?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13658443#comment-13658443
]
Jabouille jean Charles commented on SOLR-3369:
----------------------------------------------
Hi,
here is a test, you just have to copy it in solr/core/src/test/org/apache/solr/:
{code:title=TestDistributedGroupingWithShardTolerantActivated.java|borderStyle=solid}
package org.apache.solr;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.cloud.ChaosMonkey;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
@Slow
public class TestDistributedGroupingWithShardTolerantActivated extends
BaseDistributedSearchTestCase {
String t1="a_t";
String i1="a_si";
String s1="a_s";
String tlong = "other_tl1";
String tdate_a = "a_n_tdt";
String tdate_b = "b_n_tdt";
String oddField="oddField_s";
@Override
public void doTest() throws Exception {
del("*:*");
commit();
handle.clear();
handle.put("QTime", SKIPVAL);
handle.put("timestamp", SKIPVAL);
handle.put("grouped", UNORDERED); // distrib grouping doesn't guarantee
order of top level group commands
indexr(id,1, i1, 100, tlong, 100,t1,"now is the time for all good men",
tdate_a, "2010-04-20T11:00:00Z",
tdate_b, "2009-08-20T11:00:00Z",
"foo_f", 1.414f, "foo_b", "true", "foo_d", 1.414d);
indexr(id,2, i1, 50 , tlong, 50,t1,"to come to the aid of their country.",
tdate_a, "2010-05-02T11:00:00Z",
tdate_b, "2009-11-02T11:00:00Z");
indexr(id,3, i1, 2, tlong, 2,t1,"how now brown cow",
tdate_a, "2010-05-03T11:00:00Z");
indexr(id,4, i1, -100 ,tlong, 101,
t1,"the quick fox jumped over the lazy dog",
tdate_a, "2010-05-03T11:00:00Z",
tdate_b, "2010-05-03T11:00:00Z");
indexr(id,5, i1, 500, tlong, 500 ,
t1,"the quick fox jumped way over the lazy dog",
tdate_a, "2010-05-05T11:00:00Z");
indexr(id,6, i1, -600, tlong, 600 ,t1,"humpty dumpy sat on a wall");
indexr(id,7, i1, 123, tlong, 123 ,t1,"humpty dumpy had a great fall");
indexr(id,8, i1, 876, tlong, 876,
tdate_b, "2010-01-05T11:00:00Z",
t1,"all the kings horses and all the kings men");
indexr(id,9, i1, 7, tlong, 7,t1,"couldn't put humpty together again");
indexr(id,10, i1, 4321, tlong, 4321,t1,"this too shall pass");
indexr(id,11, i1, -987, tlong, 987,
t1,"An eye for eye only ends up making the whole world blind.");
indexr(id,12, i1, 379, tlong, 379,
t1,"Great works are performed, not by strength, but by
perseverance.");
indexr(id, 14, "SubjectTerms_mfacet", new String[] {"mathematical models",
"mathematical analysis"});
indexr(id, 15, "SubjectTerms_mfacet", new String[] {"test 1", "test 2",
"test3"});
indexr(id, 16, "SubjectTerms_mfacet", new String[] {"test 1", "test 2",
"test3"});
String[] vals = new String[100];
for (int i=0; i<100; i++) {
vals[i] = "test " + i;
}
indexr(id, 17, "SubjectTerms_mfacet", vals);
indexr(
id, 18, i1, 232, tlong, 332,
t1,"no eggs on wall, lesson learned",
oddField, "odd man out"
);
indexr(
id, 19, i1, 232, tlong, 432,
t1, "many eggs on wall",
oddField, "odd man in"
);
indexr(
id, 20, i1, 232, tlong, 532,
t1, "some eggs on wall",
oddField, "odd man between"
);
indexr(
id, 21, i1, 232, tlong, 632,
t1, "a few eggs on wall",
oddField, "odd man under"
);
indexr(
id, 22, i1, 232, tlong, 732,
t1, "any eggs on wall",
oddField, "odd man above"
);
indexr(
id, 23, i1, 233, tlong, 734,
t1, "dirty eggs",
oddField, "odd eggs"
);
for (int i = 100; i < 150; i++) {
indexr(id, i);
}
int[] values = new int[]{9999, 99999, 999999, 9999999};
for (int shard = 0; shard < clients.size(); shard++) {
int groupValue = values[shard];
for (int i = 500; i < 600; i++) {
index_specific(shard, i1, groupValue, s1, "a", id, i * (shard + 1), t1,
shard);
}
}
commit();
// SOLR-3369: shrds.tolreant=true with grouping
for (int numDownServers = 0; numDownServers < jettys.size() - 1;
numDownServers++) {
List<JettySolrRunner> upJettys = new ArrayList<JettySolrRunner>(jettys);
List<SolrServer> upClients = new ArrayList<SolrServer>(clients);
List<JettySolrRunner> downJettys = new ArrayList<JettySolrRunner>();
List<String> upShards = new ArrayList<String>(Arrays.asList(shardsArr));
for (int i = 0; i < numDownServers; i++) {
// shut down some of the jettys
int indexToRemove = r.nextInt(upJettys.size());
JettySolrRunner downJetty = upJettys.remove(indexToRemove);
upClients.remove(indexToRemove);
upShards.remove(indexToRemove);
ChaosMonkey.stop(downJetty);
downJettys.add(downJetty);
}
simpleQuery("q", "*:*", "rows", 100, "fl",
"id," + i1, "group", "true", "group.query", t1 + ":kings OR " + t1
+ ":eggs", "group.limit", 10, "sort", i1 + " asc, id asc",
CommonParams.TIME_ALLOWED, 1, ShardParams.SHARDS_INFO, "true",
ShardParams.SHARDS_TOLERANT, "true");
// restart the jettys
for (JettySolrRunner downJetty : downJettys) {
downJetty.start();
}
}
}
private void simpleQuery(Object... queryParams) throws SolrServerException {
ModifiableSolrParams params = new ModifiableSolrParams();
for (int i = 0; i < queryParams.length; i += 2) {
params.add(queryParams[i].toString(), queryParams[i + 1].toString());
}
params.set("shards", shards);
queryServer(params);
}
}
{code}
Your patch works perfectly in "select" mode. In "browse" mode there in a other
exception:
{noformat}
ERROR org.apache.solr.core.SolrCore:log:85 - java.lang.NullPointerException
at
org.apache.solr.handler.component.SpellCheckComponent.finishStage(SpellCheckComponent.java:297)
at
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:317)
{noformat}
Thank you very much for this patch, *we hope it will be in the next release of
solr*.
> shards.tolerant=true broken on group and facet queries
> ------------------------------------------------------
>
> Key: SOLR-3369
> URL: https://issues.apache.org/jira/browse/SOLR-3369
> Project: Solr
> Issue Type: Bug
> Components: search
> Affects Versions: 4.0-ALPHA
> Environment: Distributed environment (shards)
> Reporter: Russell Black
> Labels: patch
> Attachments: SOLR-3369-shards-tolerant.patch
>
>
> In a distributed environment, shards.tolerant=true allows for partial results
> to be returned when individual shards are down. For group=true and
> facet=true queries, using this feature results in an error when shards are
> down. This patch allows users to use the shard tolerance feature with facet
> and grouping queries.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]