mirror of https://github.com/apache/druid.git
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.
This commit is contained in:
parent
9bbd992885
commit
f0b7c272b9
|
@ -207,8 +207,17 @@ public class DruidSchema extends AbstractSchema
|
||||||
!wasRecentFailure &&
|
!wasRecentFailure &&
|
||||||
(!segmentsNeedingRefresh.isEmpty() || !dataSourcesNeedingRebuild.isEmpty()) &&
|
(!segmentsNeedingRefresh.isEmpty() || !dataSourcesNeedingRebuild.isEmpty()) &&
|
||||||
(refreshImmediately || nextRefresh < System.currentTimeMillis())) {
|
(refreshImmediately || nextRefresh < System.currentTimeMillis())) {
|
||||||
|
// We need to do a refresh. Break out of the waiting loop.
|
||||||
break;
|
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()));
|
lock.wait(Math.max(1, nextRefresh - System.currentTimeMillis()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue