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(