You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mu...@apache.org on 2019/07/29 04:37:45 UTC
[lucene-solr] branch branch_8x updated (ca4cd3c -> 64357bc)
This is an automated email from the ASF dual-hosted git repository.
munendrasn pushed a change to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.
from ca4cd3c SOLR-13629: Cleanup whitespace in analytics contrib
new 691b095 SOLR-13633: fix typos in analytics documentation
new 68ec328 SOLR-13656: fix bad mergePolicyFactory test in SolrIndexConfigTest
new 64357bc SOLR-13643:add Getter/Setter in ResponseBuilder to handle analytic res
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
solr/CHANGES.txt | 2 +
.../solr/handler/component/AnalyticsComponent.java | 55 +++++++++++++---------
.../solr/handler/component/ResponseBuilder.java | 42 +++++++++++++----
.../solr/collection1/conf/bad-mpf-solrconfig.xml | 2 +-
.../handler/component/ResponseBuilderTest.java | 31 ++++++++++--
.../org/apache/solr/update/DummyMergePolicy.java | 33 -------------
.../apache/solr/update/SolrIndexConfigTest.java | 21 ++++-----
solr/solr-ref-guide/src/analytics.adoc | 4 +-
8 files changed, 108 insertions(+), 82 deletions(-)
delete mode 100644 solr/core/src/test/org/apache/solr/update/DummyMergePolicy.java
[lucene-solr] 02/03: SOLR-13656: fix bad mergePolicyFactory test in
SolrIndexConfigTest
Posted by mu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
munendrasn pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 68ec32880775523c91a3484cdfb719b71a8d5c61
Author: Munendra S N <mu...@apache.org>
AuthorDate: Mon Jul 29 09:30:25 2019 +0530
SOLR-13656: fix bad mergePolicyFactory test in SolrIndexConfigTest
* use expectThrows to verify the exception and ex message
* remove unused DummyMergePolicy
---
.../solr/collection1/conf/bad-mpf-solrconfig.xml | 2 +-
.../org/apache/solr/update/DummyMergePolicy.java | 33 ----------------------
.../apache/solr/update/SolrIndexConfigTest.java | 21 +++++++-------
3 files changed, 11 insertions(+), 45 deletions(-)
diff --git a/solr/core/src/test-files/solr/collection1/conf/bad-mpf-solrconfig.xml b/solr/core/src/test-files/solr/collection1/conf/bad-mpf-solrconfig.xml
index 189d449..19d7860 100644
--- a/solr/core/src/test-files/solr/collection1/conf/bad-mpf-solrconfig.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/bad-mpf-solrconfig.xml
@@ -24,7 +24,7 @@
<luceneMatchVersion>${tests.luceneMatchVersion:LATEST}</luceneMatchVersion>
<indexConfig>
- <mergePolicyFactory class="org.apache.solr.update.DummyMergePolicyFactory">
+ <mergePolicyFactory class="org.apache.solr.index.DummyMergePolicyFactory">
<int name="mergeFactor">8</int>
</mergePolicyFactory>
</indexConfig>
diff --git a/solr/core/src/test/org/apache/solr/update/DummyMergePolicy.java b/solr/core/src/test/org/apache/solr/update/DummyMergePolicy.java
deleted file mode 100644
index ed1b3ff..0000000
--- a/solr/core/src/test/org/apache/solr/update/DummyMergePolicy.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.update;
-
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.LogByteSizeMergePolicy;
-
-/**
- * Dummy implementation of {@link org.apache.lucene.index.MergePolicy} which doesn't have an empty constructor and
- * is expected to fail if used within Solr
- */
-class DummyMergePolicy extends LogByteSizeMergePolicy {
-
- private DummyMergePolicy() {}
-
- public DummyMergePolicy(IndexWriter writer) {
- super();
- }
-}
diff --git a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
index de5944e..b314293 100644
--- a/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
+++ b/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
@@ -29,6 +29,7 @@ import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.MapSerializable;
+import org.apache.solr.common.SolrException;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.TestMergePolicyConfig;
@@ -60,17 +61,15 @@ public class SolrIndexConfigTest extends SolrTestCaseJ4 {
private final Path instanceDir = TEST_PATH().resolve("collection1");
@Test
- public void testFailingSolrIndexConfigCreation() {
- try {
- SolrConfig solrConfig = new SolrConfig("bad-mpf-solrconfig.xml");
- SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
- IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
- h.getCore().setLatestSchema(indexSchema);
- solrIndexConfig.toIndexWriterConfig(h.getCore());
- fail("a mergePolicy should have an empty constructor in order to be instantiated in Solr thus this should fail ");
- } catch (Exception e) {
- // it failed as expected
- }
+ public void testFailingSolrIndexConfigCreation() throws Exception {
+ SolrConfig solrConfig = new SolrConfig(instanceDir,"bad-mpf-solrconfig.xml", null);
+ SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null);
+ IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema(schemaFileName, solrConfig);
+ h.getCore().setLatestSchema(indexSchema);
+
+ // this should fail as mergePolicy doesn't have any public constructor
+ SolrException ex = expectThrows(SolrException.class, () -> solrIndexConfig.toIndexWriterConfig(h.getCore()));
+ assertTrue(ex.getMessage().contains("Error instantiating class: 'org.apache.solr.index.DummyMergePolicyFactory'"));
}
@Test
[lucene-solr] 01/03: SOLR-13633: fix typos in analytics
documentation
Posted by mu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
munendrasn pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 691b095066d3e5d423c1d34951ba1b21d7d3094a
Author: Munendra S N <mu...@apache.org>
AuthorDate: Mon Jul 29 09:28:28 2019 +0530
SOLR-13633: fix typos in analytics documentation
---
solr/solr-ref-guide/src/analytics.adoc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/solr/solr-ref-guide/src/analytics.adoc b/solr/solr-ref-guide/src/analytics.adoc
index d7407d1..748ee88 100644
--- a/solr/solr-ref-guide/src/analytics.adoc
+++ b/solr/solr-ref-guide/src/analytics.adoc
@@ -47,7 +47,7 @@ Next you need to enable the request handler and search component. Add the follow
<searchComponent name="analytics" class="org.apache.solr.handler.component.AnalyticsComponent" />
<requestHandler name="/select" class="solr.SearchHandler">
- <arr name="last_components">
+ <arr name="last-components">
<str>analytics</str>
</arr>
</requestHandler>
@@ -68,7 +68,7 @@ For example, this curl command encodes and POSTs a simple analytics request to t
[source,bash]
----
-curl --data-urlencode 'analytics={
+curl --data-binary 'analytics={
"expressions" : {
"revenue" : "sum(mult(price,quantity))"
}
[lucene-solr] 03/03: SOLR-13643:add Getter/Setter in
ResponseBuilder to handle analytic res
Posted by mu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
munendrasn pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit 64357bc913f6dfe2475294accced833a83b44340
Author: Munendra S N <mu...@apache.org>
AuthorDate: Mon Jul 29 09:40:29 2019 +0530
SOLR-13643:add Getter/Setter in ResponseBuilder to handle analytic res
---
solr/CHANGES.txt | 2 +
.../solr/handler/component/AnalyticsComponent.java | 55 +++++++++++++---------
.../solr/handler/component/ResponseBuilder.java | 42 +++++++++++++----
.../handler/component/ResponseBuilderTest.java | 31 ++++++++++--
4 files changed, 95 insertions(+), 35 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 3dca1b6..dbaa013 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -71,6 +71,8 @@ Other Changes
* SOLR-13629: Clean trailing whitespace from 'analytics' contrib (Neal Sidhwaney via Jason Gerlowski)
+* SOLR-13643: Add Getters/Setters in ResponseBuilder for analytics response handling (Neal Sidhwaney via Munendra S N)
+
================== 8.2.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java b/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
index d48fe78..6c69623 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/handler/component/AnalyticsComponent.java
@@ -23,10 +23,10 @@ import org.apache.solr.analytics.AnalyticsRequestManager;
import org.apache.solr.analytics.AnalyticsRequestParser;
import org.apache.solr.analytics.ExpressionFactory;
import org.apache.solr.analytics.stream.AnalyticsShardRequestManager;
+import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
import org.apache.solr.analytics.util.OldAnalyticsParams;
import org.apache.solr.analytics.util.OldAnalyticsRequestConverter;
import org.apache.solr.common.util.NamedList;
-import org.apache.solr.analytics.util.AnalyticsResponseHeadings;
/**
* Computes analytics requests.
@@ -43,23 +43,31 @@ public class AnalyticsComponent extends SearchComponent {
public void prepare(ResponseBuilder rb) throws IOException {
// First check to see if there is an analytics request using the current format
String analyticsRequest = rb.req.getParams().get(AnalyticsRequestParser.analyticsParamName);
- rb._isOlapAnalytics = false;
- rb.doAnalytics = false;
+ rb.setOlapAnalytics(false);
+ rb.setAnalytics(false);
+ boolean isDistributed = rb.isDistributed();
if (analyticsRequest != null) {
- rb.doAnalytics = true;
- rb._analyticsRequestManager = AnalyticsRequestParser.parse(analyticsRequest, new ExpressionFactory(rb.req.getSchema()), rb.isDistrib);
+ rb.setAnalytics(true);
+ rb.setAnalyticsRequestManager(
+ AnalyticsRequestParser.parse(
+ analyticsRequest,
+ new ExpressionFactory(rb.req.getSchema()), isDistributed));
}
// If there is no request in the current format, check for the old olap-style format
else if (rb.req.getParams().getBool(OldAnalyticsParams.OLD_ANALYTICS,false)) {
- rb._analyticsRequestManager = AnalyticsRequestParser.parse(OldAnalyticsRequestConverter.convert(rb.req.getParams()), new ExpressionFactory(rb.req.getSchema()), rb.isDistrib);
- rb._isOlapAnalytics = true;
- rb.doAnalytics = true;
+ rb.setAnalyticsRequestManager(
+ AnalyticsRequestParser.parse(
+ OldAnalyticsRequestConverter.convert(rb.req.getParams()),
+ new ExpressionFactory(rb.req.getSchema()), isDistributed));
+ rb.setOlapAnalytics(true);
+ rb.setAnalytics(true);
}
- if (rb.doAnalytics) {
- AnalyticsRequestManager reqManager = (AnalyticsRequestManager)rb._analyticsRequestManager;
+ if (rb.isAnalytics()) {
+ AnalyticsRequestManager reqManager = getAnalyticsRequestManager(rb);
+
// Check to see if the request is distributed
- if (rb.isDistrib) {
+ if (isDistributed) {
reqManager.sendShards = true;
reqManager.shardStream = new AnalyticsShardRequestManager(rb.req.getParams(), reqManager);
} else {
@@ -71,29 +79,29 @@ public class AnalyticsComponent extends SearchComponent {
@Override
public void process(ResponseBuilder rb) throws IOException {
- if (!rb.doAnalytics) {
+ if (!rb.isAnalytics()) {
return;
}
- AnalyticsRequestManager reqManager = (AnalyticsRequestManager)rb._analyticsRequestManager;
+ AnalyticsRequestManager reqManager = getAnalyticsRequestManager(rb);
// Collect the data and generate a response
AnalyticsDriver.drive(reqManager, rb.req.getSearcher(), rb.getResults().docSet.getTopFilter(), rb.req);
- if (rb._isOlapAnalytics) {
+ if (rb.isOlapAnalytics()) {
rb.rsp.add(AnalyticsResponseHeadings.COMPLETED_OLD_HEADER, reqManager.createOldResponse());
} else {
rb.rsp.add(AnalyticsResponseHeadings.COMPLETED_HEADER, reqManager.createResponse());
}
- rb.doAnalytics = false;
+ rb.setAnalytics(false);
+ rb.setOlapAnalytics(false);
}
-
@Override
public int distributedProcess(ResponseBuilder rb) throws IOException {
- if (!rb.doAnalytics || rb.stage != ResponseBuilder.STAGE_EXECUTE_QUERY) {
+ if (!rb.isAnalytics() || rb.stage != ResponseBuilder.STAGE_EXECUTE_QUERY) {
return ResponseBuilder.STAGE_DONE;
}
- AnalyticsRequestManager reqManager = (AnalyticsRequestManager)rb._analyticsRequestManager;
+ AnalyticsRequestManager reqManager = getAnalyticsRequestManager(rb);
if (!reqManager.sendShards){
return ResponseBuilder.STAGE_DONE;
}
@@ -127,10 +135,10 @@ public class AnalyticsComponent extends SearchComponent {
@Override
public void finishStage(ResponseBuilder rb) {
- if (rb.doAnalytics && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
- AnalyticsRequestManager reqManager = (AnalyticsRequestManager)rb._analyticsRequestManager;
+ if (rb.isAnalytics() && rb.stage == ResponseBuilder.STAGE_GET_FIELDS) {
+ AnalyticsRequestManager reqManager = getAnalyticsRequestManager(rb);
// Generate responses from the merged shard data
- if (rb._isOlapAnalytics) {
+ if (rb.isOlapAnalytics()) {
rb.rsp.add(AnalyticsResponseHeadings.COMPLETED_OLD_HEADER, reqManager.createOldResponse());
} else {
rb.rsp.add(AnalyticsResponseHeadings.COMPLETED_HEADER, reqManager.createResponse());
@@ -140,7 +148,6 @@ public class AnalyticsComponent extends SearchComponent {
super.finishStage(rb);
}
-
@Override
public String getName() {
return COMPONENT_NAME;
@@ -151,6 +158,10 @@ public class AnalyticsComponent extends SearchComponent {
return "Perform analytics";
}
+ private AnalyticsRequestManager getAnalyticsRequestManager(ResponseBuilder rb) {
+ return (AnalyticsRequestManager)rb.getAnalyticsRequestManager();
+ }
+
/*@Override
public NamedList getStatistics() {
return analyticsCollector.getStatistics();
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
index 913c710..61b1013 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
@@ -16,6 +16,13 @@
*/
package org.apache.solr.handler.component;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import org.apache.lucene.search.Query;
import org.apache.lucene.search.grouping.SearchGroup;
import org.apache.lucene.search.grouping.TopGroups;
@@ -23,7 +30,6 @@ import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.NamedList;
-import org.apache.solr.util.RTimer;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestInfo;
@@ -34,17 +40,11 @@ import org.apache.solr.search.DocSlice;
import org.apache.solr.search.QParser;
import org.apache.solr.search.QueryCommand;
import org.apache.solr.search.QueryResult;
-import org.apache.solr.search.SortSpec;
import org.apache.solr.search.RankQuery;
+import org.apache.solr.search.SortSpec;
import org.apache.solr.search.grouping.GroupingSpecification;
import org.apache.solr.search.grouping.distributed.command.QueryCommandResult;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Set;
+import org.apache.solr.util.RTimer;
/**
* This class is experimental and will be changing in the future.
@@ -497,4 +497,28 @@ public class ResponseBuilder
public void setNextCursorMark(CursorMark nextCursorMark) {
this.nextCursorMark = nextCursorMark;
}
+
+ public void setAnalytics(boolean doAnalytics) {
+ this.doAnalytics = doAnalytics;
+ }
+
+ public boolean isAnalytics() {
+ return this.doAnalytics;
+ }
+
+ public void setAnalyticsRequestManager(Object analyticsRequestManager) {
+ this._analyticsRequestManager = analyticsRequestManager;
+ }
+
+ public Object getAnalyticsRequestManager() {
+ return this._analyticsRequestManager;
+ }
+
+ public void setOlapAnalytics(boolean isOlapAnalytics) {
+ this._isOlapAnalytics = isOlapAnalytics;
+ }
+
+ public boolean isOlapAnalytics() {
+ return this._isOlapAnalytics;
+ }
}
diff --git a/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java b/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
index 8445054..28bad7a 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/ResponseBuilderTest.java
@@ -26,6 +26,9 @@ import org.junit.BeforeClass;
public class ResponseBuilderTest extends SolrTestCaseJ4 {
+ SolrQueryRequest req = req("q", "title:test");
+ SolrQueryResponse rsp = new SolrQueryResponse();
+
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema.xml");
@@ -33,13 +36,33 @@ public class ResponseBuilderTest extends SolrTestCaseJ4 {
//This test is being added to verify responseBuilder.isDistributed() exists and is visible.
public void testIsDistrib(){
-
- SolrQueryRequest req = req("q", "title:test");
- SolrQueryResponse rsp = new SolrQueryResponse();
-
ResponseBuilder responseBuilder = new ResponseBuilder(req, rsp, new ArrayList<>(0));
assertFalse(responseBuilder.isDistributed());
+ }
+ public void testDoAnalyticsAccessors() {
+ ResponseBuilder rb = new ResponseBuilder(req, rsp, new ArrayList<>(0));
+ assertFalse(rb.isAnalytics());
+ rb.setAnalytics(true);
+ assertTrue(rb.isAnalytics());
+ rb.setAnalytics(false);
+ assertFalse(rb.isAnalytics());
}
+ public void testIsOlapAnalyticsAccessors() {
+ ResponseBuilder rb = new ResponseBuilder(req, rsp, new ArrayList<>(0));
+ assertFalse(rb.isOlapAnalytics());
+ rb.setOlapAnalytics(true);
+ assertTrue(rb.isOlapAnalytics());
+ rb.setOlapAnalytics(false);
+ assertFalse(rb.isOlapAnalytics());
+ }
+
+ public void testAnalyticsRequestManagerAccessors() {
+ ResponseBuilder rb = new ResponseBuilder(req, rsp, new ArrayList<>(0));
+ assertNull(rb.getAnalyticsRequestManager());
+ rb.setAnalyticsRequestManager(this);
+ assertNotNull(rb.getAnalyticsRequestManager());
+ assertEquals(rb.getAnalyticsRequestManager(), this);
+ }
}