From 99bc8fa1c8ae6666996426afc9521e7604a1234c Mon Sep 17 00:00:00 2001 From: Boris Naguet Date: Wed, 8 Mar 2017 18:37:46 +0100 Subject: [PATCH 1/2] SOLR-10250: SolrCloudClient doesn't return 'adds' in Response when 'versions' is requested --- .../client/solrj/impl/CloudSolrClient.java | 16 ++++++- .../solrj/impl/CloudSolrClientTest.java | 43 +++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java index 3147d4e50ef4..67b4e02dec0c 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java @@ -903,10 +903,18 @@ public RouteResponse condenseResponse(NamedList response, int timeMillis) { // TolerantUpdateProcessor List> toleratedErrors = null; int maxToleratedErrors = Integer.MAX_VALUE; - + + NamedList adds = new NamedList(); + for(int i=0; i 0) { @@ -939,6 +947,10 @@ public RouteResponse condenseResponse(NamedList response, int timeMillis) { } } + if(adds != null && adds.size() > 0) { + condensed.add("adds", adds); + } + NamedList cheader = new NamedList(); cheader.add("status", status); cheader.add("QTime", timeMillis); diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java index dd0dd16d2919..9da28ef3eb29 100644 --- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java +++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java @@ -49,6 +49,7 @@ import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.cloud.AbstractDistribZkTestBase; import org.apache.solr.cloud.SolrCloudTestCase; +import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrException; import org.apache.solr.common.SolrInputDocument; @@ -61,6 +62,7 @@ import org.apache.solr.common.params.CommonParams; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.params.ShardParams; +import org.apache.solr.common.params.UpdateParams; import org.apache.solr.common.util.NamedList; import org.apache.solr.common.util.SimpleOrderedMap; import org.apache.solr.handler.admin.CollectionsHandler; @@ -633,6 +635,47 @@ public void customHttpClientTest() throws IOException { } } + @Test + public void testAddsResponse() throws Exception { + + CollectionAdminRequest.createCollection("addscol", "conf", 1, 1) + .processAndWait(cluster.getSolrClient(), TIMEOUT); + AbstractDistribZkTestBase.waitForRecoveriesToFinish("addscol", cluster.getSolrClient().getZkStateReader(), false, true, TIMEOUT); + + UpdateRequest updateRequest = new UpdateRequest() + .add("id", "1", "a_t", "hello1") + .add("id", "2", "a_t", "hello2"); + updateRequest.setParam(UpdateParams.VERSIONS, Boolean.TRUE.toString()); + UpdateResponse updateResponse = updateRequest.commit(cluster.getSolrClient(), "addscol"); + + NamedList response = updateResponse.getResponse(); + Object addsObject = response.get("adds"); + + assertNotNull("There must be a adds parameter", addsObject); + assertTrue("", addsObject instanceof NamedList); + NamedList adds = (NamedList) addsObject; + assertEquals("There must be 2 versions (one per doc)", 2, adds.size()); + + Map versions = new HashMap<>(); + Object object = adds.get("1"); + assertNotNull("There must be a version for id 1", object); + assertTrue("Version for id 1 must be a long", object instanceof Long); + versions.put("1", (Long) object); + + object = adds.get("2"); + assertNotNull("There must be a version for id 2", object); + assertTrue("Version for id 2 must be a long", object instanceof Long); + versions.put("2", (Long) object); + + QueryResponse resp = cluster.getSolrClient().query("addscol", new SolrQuery("*:*")); + assertEquals("There should be one document because overwrite=true", 2, resp.getResults().getNumFound()); + + for (SolrDocument doc : resp.getResults()) { + Long version = versions.get(doc.getFieldValue("id")); + assertEquals("Version on add must match _version_ field", version, doc.getFieldValue("_version_")); + } + } + private static void checkSingleServer(NamedList response) { final CloudSolrClient.RouteResponse rr = (CloudSolrClient.RouteResponse) response; final Map routes = rr.getRoutes(); From feadf725ea9611631830d3f97270e6af3fee94cb Mon Sep 17 00:00:00 2001 From: Boris Naguet Date: Thu, 9 Mar 2017 14:19:24 +0100 Subject: [PATCH 2/2] SOLR-10250: clean formatting --- .../solr/client/solrj/impl/CloudSolrClient.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java index 67b4e02dec0c..fb67a45a0a4a 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java @@ -903,17 +903,17 @@ public RouteResponse condenseResponse(NamedList response, int timeMillis) { // TolerantUpdateProcessor List> toleratedErrors = null; int maxToleratedErrors = Integer.MAX_VALUE; - + NamedList adds = new NamedList(); - + for(int i=0; i 0) { - condensed.add("adds", adds); + condensed.add("adds", adds); } - + NamedList cheader = new NamedList(); cheader.add("status", status); cheader.add("QTime", timeMillis);