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

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


The following commit(s) were added to refs/heads/master by this push:
     new b9c7664ac34 Fix empty datasource schema on the Broker when metadata 
query is disabled (#16645)
b9c7664ac34 is described below

commit b9c7664ac34f695e78e9fbbcd54e729df93a6668
Author: Rishabh Singh <[email protected]>
AuthorDate: Fri Jun 28 11:06:56 2024 +0530

    Fix empty datasource schema on the Broker when metadata query is disabled 
(#16645)
    
    * Fix build
    
    * Fix empty datasource schema on the broker
    
    * review comment
    
    * Remove unused import
---
 ...ocker-compose.centralized-datasource-schema.yml |  2 +-
 .../druid/testing/utils/DataLoaderHelper.java      |  4 ++++
 .../druid/testing/utils/SqlTestQueryHelper.java    | 23 +++++++++++++++++++++
 .../calcite/schema/BrokerSegmentMetadataCache.java | 10 +++++++++
 .../schema/BrokerSegmentMetadataCacheTest.java     | 24 ++++++++++++++++++++++
 5 files changed, 62 insertions(+), 1 deletion(-)

diff --git 
a/integration-tests/docker/docker-compose.centralized-datasource-schema.yml 
b/integration-tests/docker/docker-compose.centralized-datasource-schema.yml
index 39ce98b1302..e89e49bc132 100644
--- a/integration-tests/docker/docker-compose.centralized-datasource-schema.yml
+++ b/integration-tests/docker/docker-compose.centralized-datasource-schema.yml
@@ -81,7 +81,7 @@ services:
       service: druid-broker
     environment:
       - DRUID_INTEGRATION_TEST_GROUP=${DRUID_INTEGRATION_TEST_GROUP}
-      - druid_sql_planner_metadataRefreshPeriod=PT20S
+      - druid_sql_planner_metadataRefreshPeriod=PT30S
       - druid_sql_planner_disableSegmentMetadataQueries=true
     depends_on:
       - druid-coordinator
diff --git 
a/integration-tests/src/main/java/org/apache/druid/testing/utils/DataLoaderHelper.java
 
b/integration-tests/src/main/java/org/apache/druid/testing/utils/DataLoaderHelper.java
index 692ab962e62..67317f3e911 100644
--- 
a/integration-tests/src/main/java/org/apache/druid/testing/utils/DataLoaderHelper.java
+++ 
b/integration-tests/src/main/java/org/apache/druid/testing/utils/DataLoaderHelper.java
@@ -23,6 +23,7 @@ import com.google.inject.Inject;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.logger.Logger;
 import org.apache.druid.testing.clients.CoordinatorResourceTestClient;
+import org.testng.Assert;
 
 public final class DataLoaderHelper
 {
@@ -50,6 +51,9 @@ public final class DataLoaderHelper
         () -> sqlTestQueryHelper.isDatasourceLoadedInSQL(datasource),
         StringUtils.format("Waiting for [%s] to be ready for SQL queries", 
datasource)
     );
+
+    
Assert.assertTrue(sqlTestQueryHelper.verifyTimeColumnIsPresent(datasource));
+
     LOG.info("Datasource [%s] ready for SQL queries", datasource);
   }
 }
diff --git 
a/integration-tests/src/main/java/org/apache/druid/testing/utils/SqlTestQueryHelper.java
 
b/integration-tests/src/main/java/org/apache/druid/testing/utils/SqlTestQueryHelper.java
index 962b4a103d0..06a1f680b70 100644
--- 
a/integration-tests/src/main/java/org/apache/druid/testing/utils/SqlTestQueryHelper.java
+++ 
b/integration-tests/src/main/java/org/apache/druid/testing/utils/SqlTestQueryHelper.java
@@ -69,4 +69,27 @@ public class SqlTestQueryHelper extends 
AbstractTestQueryHelper<SqlQueryWithResu
       return false;
     }
   }
+
+  public boolean verifyTimeColumnIsPresent(String datasource)
+  {
+    final SqlQuery query = new SqlQuery(
+        "SELECT __time FROM \"" + datasource + "\" LIMIT 1",
+        null,
+        false,
+        false,
+        false,
+        null,
+        null
+    );
+
+    try {
+      //noinspection unchecked
+      queryClient.query(getQueryURL(broker), query);
+      return true;
+    }
+    catch (Exception e) {
+      LOG.debug(e, "Check query failed");
+      return false;
+    }
+  }
 }
diff --git 
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java
 
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java
index 0573d8d49ee..7974ed460eb 100644
--- 
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java
+++ 
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCache.java
@@ -246,6 +246,16 @@ public class BrokerSegmentMetadataCache extends 
AbstractSegmentMetadataCache<Phy
         continue;
       }
 
+      if (rowSignature.getColumnNames().isEmpty()) {
+        // this case could arise when metadata refresh is disabled on broker
+        // and a new datasource is added
+        log.info("datasource [%s] schema has not been initialized yet, "
+                 + "check coordinator logs if this message is persistent.", 
dataSource);
+        // this is a harmless call
+        tables.remove(dataSource);
+        continue;
+      }
+
       final PhysicalDatasourceMetadata physicalDatasourceMetadata = 
dataSourceMetadataFactory.build(dataSource, rowSignature);
       updateDSMetadata(dataSource, physicalDatasourceMetadata);
     }
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCacheTest.java
 
b/sql/src/test/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCacheTest.java
index f8660b63494..23b2759286c 100644
--- 
a/sql/src/test/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCacheTest.java
+++ 
b/sql/src/test/java/org/apache/druid/sql/calcite/schema/BrokerSegmentMetadataCacheTest.java
@@ -1027,4 +1027,28 @@ public class BrokerSegmentMetadataCacheTest extends 
BrokerSegmentMetadataCacheTe
     buildSchemaMarkAndTableLatch();
     serverView.invokeSegmentSchemasAnnouncedDummy();
   }
+
+  @Test
+  public void testNoDatasourceSchemaWhenNoSegmentMetadata() throws 
InterruptedException, IOException
+  {
+    BrokerSegmentMetadataCacheConfig config = new 
BrokerSegmentMetadataCacheConfig();
+    config.setDisableSegmentMetadataQueries(true);
+
+    BrokerSegmentMetadataCache schema = buildSchemaMarkAndTableLatch(
+        config,
+        new NoopCoordinatorClient()
+    );
+
+    schema.start();
+    schema.awaitInitialization();
+
+    List<DataSegment> segments = schema.getSegmentMetadataSnapshot().values()
+                                .stream()
+                                .map(AvailableSegmentMetadata::getSegment)
+                                .collect(Collectors.toList());
+
+    
schema.refresh(segments.stream().map(DataSegment::getId).collect(Collectors.toSet()),
 Collections.singleton("foo"));
+
+    Assert.assertNull(schema.getDatasource("foo"));
+  }
 }


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

Reply via email to