[CARBONDATA-2508] Fix the exception that can't get executorService when start search mode twice
This closes #2355 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/dc0ec1e2 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/dc0ec1e2 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/dc0ec1e2 Branch: refs/heads/branch-1.4 Commit: dc0ec1e270f12f80fca60ae825e2ea91237e3787 Parents: 43e0c59 Author: xubo245 <xub...@huawei.com> Authored: Thu May 31 09:15:16 2018 +0800 Committer: ravipesala <ravi.pes...@gmail.com> Committed: Tue Jun 5 16:04:20 2018 +0530 ---------------------------------------------------------------------- .../executor/impl/SearchModeDetailQueryExecutor.java | 6 ++++-- .../impl/SearchModeVectorDetailQueryExecutor.java | 6 ++++-- .../testsuite/detailquery/SearchModeTestCase.scala | 13 +++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/dc0ec1e2/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeDetailQueryExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeDetailQueryExecutor.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeDetailQueryExecutor.java index aed472c..ae14327 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeDetailQueryExecutor.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeDetailQueryExecutor.java @@ -37,8 +37,10 @@ public class SearchModeDetailQueryExecutor extends AbstractQueryExecutor<Object> LogServiceFactory.getLogService(SearchModeDetailQueryExecutor.class.getName()); private static ExecutorService executorService = null; - static { - initThreadPool(); + public SearchModeDetailQueryExecutor() { + if (executorService == null) { + initThreadPool(); + } } private static synchronized void initThreadPool() { http://git-wip-us.apache.org/repos/asf/carbondata/blob/dc0ec1e2/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeVectorDetailQueryExecutor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeVectorDetailQueryExecutor.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeVectorDetailQueryExecutor.java index 00fd511..705c451 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeVectorDetailQueryExecutor.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/impl/SearchModeVectorDetailQueryExecutor.java @@ -40,8 +40,10 @@ public class SearchModeVectorDetailQueryExecutor extends AbstractQueryExecutor<O LogServiceFactory.getLogService(SearchModeVectorDetailQueryExecutor.class.getName()); private static ExecutorService executorService = null; - static { - initThreadPool(); + public SearchModeVectorDetailQueryExecutor() { + if (executorService == null) { + initThreadPool(); + } } private static synchronized void initThreadPool() { http://git-wip-us.apache.org/repos/asf/carbondata/blob/dc0ec1e2/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/detailquery/SearchModeTestCase.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/detailquery/SearchModeTestCase.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/detailquery/SearchModeTestCase.scala index d278fc5..3e6adaf 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/detailquery/SearchModeTestCase.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/detailquery/SearchModeTestCase.scala @@ -136,4 +136,17 @@ class SearchModeTestCase extends QueryTest with BeforeAndAfterAll { sql("DROP DATAMAP if exists dm3 ON TABLE main") } + test("start search mode twice") { + sqlContext.sparkSession.asInstanceOf[CarbonSession].startSearchMode() + assert(sqlContext.sparkSession.asInstanceOf[CarbonSession].isSearchModeEnabled) + checkSearchAnswer("select id from main where id = '3' limit 10") + sqlContext.sparkSession.asInstanceOf[CarbonSession].stopSearchMode() + assert(!sqlContext.sparkSession.asInstanceOf[CarbonSession].isSearchModeEnabled) + + // start twice + sqlContext.sparkSession.asInstanceOf[CarbonSession].startSearchMode() + assert(sqlContext.sparkSession.asInstanceOf[CarbonSession].isSearchModeEnabled) + checkSearchAnswer("select id from main where id = '3' limit 10") + sqlContext.sparkSession.asInstanceOf[CarbonSession].stopSearchMode() + } }