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

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

commit 2b308a344c23b19853032ebad40328ac0f379033
Author: Abhishek Balaji Radhakrishnan <[email protected]>
AuthorDate: Thu Jan 29 13:29:56 2026 -0800

    Add new metrics and logging whenever the table schema is updated.
    
    We encountered a schema synchronization bug that sometimes results in
    invalid plans. Will add more details later. But wanted to get some
    observability improvements whenever the broker updates its metadata cache
    similar to the other schema refreshes.
---
 .../org/apache/druid/segment/metadata/Metric.java  |  3 +++
 .../calcite/schema/BrokerSegmentMetadataCache.java | 30 +++++++++++++++++++---
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/server/src/main/java/org/apache/druid/segment/metadata/Metric.java 
b/server/src/main/java/org/apache/druid/segment/metadata/Metric.java
index a29f4a7eaff..358720b98a8 100644
--- a/server/src/main/java/org/apache/druid/segment/metadata/Metric.java
+++ b/server/src/main/java/org/apache/druid/segment/metadata/Metric.java
@@ -53,6 +53,9 @@ public class Metric
   public static final String REFRESH_SKIPPED_TOMBSTONES = PREFIX + 
"refresh/tombstone/count";
   public static final String REFRESH_DURATION_MILLIS = PREFIX + "refresh/time";
   public static final String DATASOURCE_REMOVED = PREFIX + 
"dataSource/removed";
+  public static final String SCHEMA_ROW_SIGNATURE_INITIALIZED = PREFIX + 
"rowSignature/initialized";
+  public static final String SCHEMA_ROW_SIGNATURE_CHANGED = PREFIX + 
"rowSignature/changed";
+  public static final String SCHEMA_ROW_SIGNATURE_COLUMN_COUNT = PREFIX + 
"rowSignature/column/count";
 
   /**
    * Number of used cold segments in the metadata store.
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 084671d25e4..c93a5ea8343 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
@@ -358,10 +358,34 @@ public class BrokerSegmentMetadataCache extends 
AbstractSegmentMetadataCache<Phy
   private void updateDSMetadata(String dataSource, PhysicalDatasourceMetadata 
physicalDatasourceMetadata)
   {
     final PhysicalDatasourceMetadata oldTable = tables.put(dataSource, 
physicalDatasourceMetadata);
-    if (oldTable == null || 
!oldTable.getRowSignature().equals(physicalDatasourceMetadata.getRowSignature()))
 {
-      log.info("[%s] has new signature: %s.", dataSource, 
physicalDatasourceMetadata.getRowSignature());
+    final RowSignature newRowSignature = 
physicalDatasourceMetadata.getRowSignature();
+    final int newRowSignatureColumnCount = 
newRowSignature.getColumnNames().size();
+
+    final ServiceMetricEvent.Builder builder =
+        new ServiceMetricEvent.Builder().setDimension(DruidMetrics.DATASOURCE, 
dataSource);
+
+    if (oldTable == null) {
+      log.info(
+          "Row signature for datasource[%s] initialized with [%d] columns - 
signature[%s]",
+          dataSource, newRowSignatureColumnCount, newRowSignature
+      );
+
+      emitMetric(Metric.SCHEMA_ROW_SIGNATURE_INITIALIZED, 1, builder);
+      emitMetric(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT, 
newRowSignatureColumnCount, builder);
+      return;
+    }
+
+    final RowSignature oldRowSignature = oldTable.getRowSignature();
+    if (!oldRowSignature.equals(newRowSignature)) {
+      log.info(
+          "Row signature for datasource[%s] updated from [%d] columns to [%d] 
columns - new signature[%s]",
+          dataSource, oldRowSignature.getColumnNames().size(), 
newRowSignatureColumnCount, newRowSignature
+      );
+
+      emitMetric(Metric.SCHEMA_ROW_SIGNATURE_CHANGED, 1, builder);
+      emitMetric(Metric.SCHEMA_ROW_SIGNATURE_COLUMN_COUNT, 
newRowSignatureColumnCount, builder);
     } else {
-      log.debug("[%s] signature is unchanged.", dataSource);
+      log.debug("Row signature for datasource[%s] is unchanged.", dataSource);
     }
   }
 }


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

Reply via email to