This is an automated email from the ASF dual-hosted git repository.

davidlim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new f0b7c27  Broker: Start up DruidSchema immediately if there are no 
segments. (#6765)
f0b7c27 is described below

commit f0b7c272b99e8d54cefe62a0845578be662b9a9c
Author: Gian Merlino <[email protected]>
AuthorDate: Thu Dec 20 10:07:35 2018 -0800

    Broker: Start up DruidSchema immediately if there are no segments. (#6765)
    
    Fixes a bug introduced in #6742, where the broker would delay startup
    indefinitely if there were no segments at all being served by any
    data servers.
---
 .../druid/sql/calcite/schema/DruidSchema.java      |  9 +++
 .../calcite/schema/DruidSchemaNoDataInitTest.java  | 69 ++++++++++++++++++++++
 2 files changed, 78 insertions(+)

diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
index 40dcb56..0e7e973 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/DruidSchema.java
@@ -207,8 +207,17 @@ public class DruidSchema extends AbstractSchema
                           !wasRecentFailure &&
                           (!segmentsNeedingRefresh.isEmpty() || 
!dataSourcesNeedingRebuild.isEmpty()) &&
                           (refreshImmediately || nextRefresh < 
System.currentTimeMillis())) {
+                        // We need to do a refresh. Break out of the waiting 
loop.
                         break;
                       }
+
+                      if (isServerViewInitialized) {
+                        // Server view is initialized, but we don't need to do 
a refresh. Could happen if there are
+                        // no segments in the system yet. Just mark us as 
initialized, then.
+                        initialized.countDown();
+                      }
+
+                      // Wait some more, we'll wake up when it might be time 
to do another refresh.
                       lock.wait(Math.max(1, nextRefresh - 
System.currentTimeMillis()));
                     }
 
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/schema/DruidSchemaNoDataInitTest.java
 
b/sql/src/test/java/org/apache/druid/sql/calcite/schema/DruidSchemaNoDataInitTest.java
new file mode 100644
index 0000000..74ac383
--- /dev/null
+++ 
b/sql/src/test/java/org/apache/druid/sql/calcite/schema/DruidSchemaNoDataInitTest.java
@@ -0,0 +1,69 @@
+/*
+ * 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.druid.sql.calcite.schema;
+
+import com.google.common.collect.ImmutableMap;
+import org.apache.druid.java.util.common.Pair;
+import org.apache.druid.java.util.common.io.Closer;
+import org.apache.druid.query.QueryRunnerFactoryConglomerate;
+import org.apache.druid.server.security.NoopEscalator;
+import org.apache.druid.sql.calcite.planner.PlannerConfig;
+import org.apache.druid.sql.calcite.util.CalciteTestBase;
+import org.apache.druid.sql.calcite.util.CalciteTests;
+import org.apache.druid.sql.calcite.util.SpecificSegmentsQuerySegmentWalker;
+import org.apache.druid.sql.calcite.util.TestServerInventoryView;
+import org.apache.druid.sql.calcite.view.NoopViewManager;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Collections;
+
+public class DruidSchemaNoDataInitTest extends CalciteTestBase
+{
+  private static final PlannerConfig PLANNER_CONFIG_DEFAULT = new 
PlannerConfig();
+
+  @Test
+  public void testInitializationWithNoData() throws Exception
+  {
+    final Pair<QueryRunnerFactoryConglomerate, Closer> conglomerateCloserPair 
= CalciteTests
+        .createQueryRunnerFactoryConglomerate();
+
+    try {
+      final DruidSchema druidSchema = new DruidSchema(
+          CalciteTests.createMockQueryLifecycleFactory(
+              new 
SpecificSegmentsQuerySegmentWalker(conglomerateCloserPair.lhs),
+              conglomerateCloserPair.lhs
+          ),
+          new TestServerInventoryView(Collections.emptyList()),
+          PLANNER_CONFIG_DEFAULT,
+          new NoopViewManager(),
+          new NoopEscalator()
+      );
+
+      druidSchema.start();
+      druidSchema.awaitInitialization();
+
+      Assert.assertEquals(ImmutableMap.of(), druidSchema.getTableMap());
+    }
+    finally {
+      conglomerateCloserPair.rhs.close();
+    }
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to