[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/6aadfe70 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/6aadfe70 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/6aadfe70 Branch: refs/heads/spark-2.3 Commit: 6aadfe70a67bfd13ed5efedfaa368de57403a88f Parents: 5b2b913 Author: xubo245 <xub...@huawei.com> Authored: Thu May 31 09:15:16 2018 +0800 Committer: Jacky Li <jacky.li...@qq.com> Committed: Thu May 31 14:24:35 2018 +0800 ---------------------------------------------------------------------- .../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/6aadfe70/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/6aadfe70/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/6aadfe70/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() + } }