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

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


The following commit(s) were added to refs/heads/master by this push:
     new edd3a26c80 BanyanDB: fix when setting `@BanyanDB.TimestampColumn`, the 
column should not be indexed. (#13525)
edd3a26c80 is described below

commit edd3a26c802481e93b9cee99b02b6d8d048b27aa
Author: Wan Kai <[email protected]>
AuthorDate: Sun Sep 28 17:44:02 2025 +0800

    BanyanDB: fix when setting `@BanyanDB.TimestampColumn`, the column should 
not be indexed. (#13525)
---
 docs/en/api/query-protocol.md                            | 16 +++++++++++++---
 docs/en/changes/changes.md                               |  1 +
 .../core/analysis/manual/segment/SegmentRecord.java      |  1 -
 .../manual/spanattach/SWSpanAttachedEventRecord.java     |  1 -
 .../manual/spanattach/SpanAttachedEventRecord.java       |  1 -
 .../profiling/ebpf/storage/EBPFProfilingTaskRecord.java  |  1 -
 .../server/core/profiling/trace/ProfileTaskRecord.java   |  1 -
 .../profiling/trace/ProfileThreadSnapshotRecord.java     |  1 -
 .../oap/server/core/storage/annotation/BanyanDB.java     |  7 ++++---
 .../oap/server/core/storage/model/ModelColumn.java       |  1 +
 .../oap/server/core/storage/model/StorageModels.java     |  4 ++--
 .../oap/server/core/zipkin/ZipkinSpanRecord.java         |  1 -
 .../server/storage/plugin/banyandb/MetadataRegistry.java |  8 ++++----
 13 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/docs/en/api/query-protocol.md b/docs/en/api/query-protocol.md
index 8ba94a08a4..1f97e908e3 100644
--- a/docs/en/api/query-protocol.md
+++ b/docs/en/api/query-protocol.md
@@ -169,9 +169,8 @@ extend type Query {
     queryBasicTraces(condition: TraceQueryCondition, debug: Boolean): 
TraceBrief
     queryBasicTracesByName(condition: TraceQueryConditionByName, debug: 
Boolean): TraceBrief
     # Read the specific trace ID with given trace ID
-    queryTrace(traceId: ID!, debug: Boolean): Trace
-    # Only for BanyanDB, can be used to query the trace in the cold stage.
-    queryTraceFromColdStage(traceId: ID!, duration: Duration!, debug: 
Boolean): Trace
+    # duration is optional, and only for BanyanDB. If not provided, means 
search in the last 1 day.
+    queryTrace(traceId: ID!, duration: Duration, debug: Boolean): Trace
     # Read the list of searchable keys
     queryTraceTagAutocompleteKeys(duration: Duration!):[String!]
     # Search the available value options of the given key.
@@ -181,6 +180,17 @@ extend type Query {
 
 Trace query fetches trace segment lists and spans of given trace IDs.
 
+### Trace-v2
+```graphql
+extend type Query {
+    queryTraces(condition: TraceQueryCondition, debug: Boolean): TraceList
+    # Feature detection endpoint: returns true if the backend supports the 
Query Traces V2 API.
+    # Returns false if the backend does not support Query Traces V2.
+    # This field is intended to assist clients in migrating to the new API.
+    hasQueryTracesV2Support: Boolean!
+}
+```
+
 ### Alarm
 ```graphql
 extend type Query {
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 7302de79e0..c2c814cd3b 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -103,6 +103,7 @@
 * Fix potential NPE in the `AlarmStatusQueryHandler`.
 * Aggregate TopN Slow SQL by service dimension.
 * BanyanDB: support add group prefix (namespace) for BanyanDB groups.
+* BanyanDB: fix when setting `@BanyanDB.TimestampColumn`, the column should 
not be indexed.
 
 #### UI
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
index 259eb6ba9f..854a3f7445 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/segment/SegmentRecord.java
@@ -98,7 +98,6 @@ public class SegmentRecord extends Record implements 
BanyanDBTrace {
     @Getter
     @ElasticSearch.EnableDocValues
     @Column(name = START_TIME)
-    @BanyanDB.NoIndexing
     private long startTime;
     @Setter
     @Getter
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SWSpanAttachedEventRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SWSpanAttachedEventRecord.java
index 1482a2e0e5..b10e6b1dc6 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SWSpanAttachedEventRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SWSpanAttachedEventRecord.java
@@ -87,7 +87,6 @@ public class SWSpanAttachedEventRecord extends Record 
implements BanyanDBTrace,
     @Getter
     @ElasticSearch.EnableDocValues
     @Column(name = TIMESTAMP)
-    @BanyanDB.NoIndexing
     private long timestamp;
 
     @Override
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SpanAttachedEventRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SpanAttachedEventRecord.java
index 3ca02befba..9a34456707 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SpanAttachedEventRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/spanattach/SpanAttachedEventRecord.java
@@ -87,7 +87,6 @@ public class SpanAttachedEventRecord extends Record 
implements BanyanDBTrace, Ba
     @Getter
     @ElasticSearch.EnableDocValues
     @Column(name = TIMESTAMP)
-    @BanyanDB.NoIndexing
     private long timestamp;
 
     @Override
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java
index e2fde24bdc..ffb4453d01 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/ebpf/storage/EBPFProfilingTaskRecord.java
@@ -83,7 +83,6 @@ public class EBPFProfilingTaskRecord extends NoneStream {
     private int targetType = EBPFProfilingTargetType.UNKNOWN.value();
     @ElasticSearch.EnableDocValues
     @Column(name = CREATE_TIME)
-    @BanyanDB.NoIndexing
     private long createTime;
     @Column(name = LAST_UPDATE_TIME)
     private long lastUpdateTime;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileTaskRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileTaskRecord.java
index 4f34416b7d..2ef37f475f 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileTaskRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileTaskRecord.java
@@ -70,7 +70,6 @@ public class ProfileTaskRecord extends NoneStream {
     private String taskId;
     @ElasticSearch.EnableDocValues
     @Column(name = START_TIME)
-    @BanyanDB.NoIndexing
     private long startTime;
     @Column(name = DURATION)
     private int duration;
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileThreadSnapshotRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileThreadSnapshotRecord.java
index 15c3489f62..bd04334a1c 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileThreadSnapshotRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/trace/ProfileThreadSnapshotRecord.java
@@ -63,7 +63,6 @@ public class ProfileThreadSnapshotRecord extends Record {
     private String segmentId;
     @ElasticSearch.EnableDocValues
     @Column(name = DUMP_TIME)
-    @BanyanDB.NoIndexing
     private long dumpTime;
     @ElasticSearch.EnableDocValues
     @Column(name = SEQUENCE)
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java
index decdc69e9c..e14980e545 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/BanyanDB.java
@@ -106,7 +106,8 @@ public @interface BanyanDB {
     /**
      * Force disabling indexing declare through {@link Column}.
      * In BanyanDB, some additional conditions could be done in server memory, 
no indexing required in this case.
-     *
+     * In the Trace model, no indexing means no tag would be created in 
BanyanDB.
+     * In the Stream model, no indexing means no index rule would be created 
in BanyanDB.
      * @since 9.1.0
      */
     @Target({ElementType.FIELD})
@@ -148,9 +149,9 @@ public @interface BanyanDB {
     }
 
     /**
-     * timestampColumn is to identify which column in {@link Record} is 
providing the timestamp(millisecond) for
-     * BanyanDB.
+     * timestampColumn is to identify which column in {@link Record} is 
providing the timestamp(millisecond) for BanyanDB.
      * BanyanDB stream requires a timestamp in milliseconds.
+     * Notice, the timestamp column would not create an index rule in BanyanDB.
      *
      * @since 9.3.0
      */
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java
index 876fbe82a7..88484918d7 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java
@@ -112,6 +112,7 @@ public class ModelColumn {
     }
 
     /**
+     * Notice, for BanyanDB, should use {@link 
BanyanDBExtension#shouldIndex()} instead.
      * @return true means this column should be indexed, as it would be a 
query condition.
      */
     public boolean shouldIndex() {
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
index 717402c1d6..7e7e38a157 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java
@@ -100,7 +100,7 @@ public class StorageModels implements IModelManager, 
ModelCreator, ModelManipula
             String timestampColumn = 
aClass.getAnnotation(BanyanDB.TimestampColumn.class).value();
             if (StringUtil.isBlank(timestampColumn)) {
                 throw new IllegalStateException(
-                    "Model[trace." + storage.getModelName() + "] missing 
defined @BanyanDB.TimestampColumn");
+                    "Model[" + storage.getModelName() + "] missing defined 
@BanyanDB.TimestampColumn");
             }
             banyanDBModelExtension.setTimestampColumn(timestampColumn);
         }
@@ -109,7 +109,7 @@ public class StorageModels implements IModelManager, 
ModelCreator, ModelManipula
             String traceIdColumn = 
aClass.getAnnotation(BanyanDB.Trace.TraceIdColumn.class).value();
             if (StringUtil.isBlank(traceIdColumn)) {
                 throw new IllegalStateException(
-                    "Model[trace." + storage.getModelName() + "] missing 
defined @BanyanDB.TimestampColumn");
+                    "Model[trace." + storage.getModelName() + "] missing 
defined @BanyanDB.TraceIdColumn");
             }
             banyanDBModelExtension.setTraceIdColumn(traceIdColumn);
         }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinSpanRecord.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinSpanRecord.java
index 8bb11be353..152db0cbb3 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinSpanRecord.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/zipkin/ZipkinSpanRecord.java
@@ -118,7 +118,6 @@ public class ZipkinSpanRecord extends Record implements 
BanyanDBTrace {
     @Getter
     @ElasticSearch.EnableDocValues
     @Column(name = TIMESTAMP_MILLIS)
-    @BanyanDB.NoIndexing
     private long timestampMillis;
     @Setter
     @Getter
diff --git 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
index 2c65b3e418..9ee4e52b2f 100644
--- 
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
+++ 
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/MetadataRegistry.java
@@ -231,8 +231,8 @@ public enum MetadataRegistry {
         builder.setTimestampTagName(timestampColumn);
         for (final ModelColumn col : model.getColumns()) {
             final String columnStorageName = 
col.getColumnName().getStorageName();
-            // skip storage only column, since they are not supposed to be 
queried
-            if (col.isStorageOnly()) {
+            // skip no index column, since they are not supposed to be queried
+            if (!col.getBanyanDBExtension().shouldIndex()) {
                 continue;
             }
             if (columnStorageName.equals(Record.TIME_BUCKET)) {
@@ -538,7 +538,7 @@ public enum MetadataRegistry {
             final TagSpec tagSpec = parseTagSpec(col);
             builder.spec(columnStorageName, new ColumnSpec(ColumnType.TAG, 
col.getType()));
             String colName = col.getColumnName().getStorageName();
-            if (col.getBanyanDBExtension().shouldIndex()) {
+            if (col.getBanyanDBExtension().shouldIndex() && 
!colName.equals(model.getBanyanDBModelExtension().getTimestampColumn())) {
                 if (!seriesIDColumns.contains(colName) || null != 
col.getBanyanDBExtension().getAnalyzer()) {
                     tagMetadataList.add(new TagMetadata(
                         indexRule(
@@ -593,7 +593,7 @@ public enum MetadataRegistry {
             builder.spec(columnStorageName, new ColumnSpec(ColumnType.TAG, 
col.getType()));
             String colName = col.getColumnName().getStorageName();
 
-            if (col.getBanyanDBExtension().shouldIndex()) {
+            if (col.getBanyanDBExtension().shouldIndex() && 
!colName.equals(model.getBanyanDBModelExtension().getTimestampColumn())) {
                 if (!seriesIDColumns.contains(colName) || null != 
col.getBanyanDBExtension().getAnalyzer()) {
                     result.tag(new TagMetadata(
                         indexRule(

Reply via email to