diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 9a496b0c61a9..e4b027e898f5 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -19,6 +19,7 @@ * Replace BanyanDB Java client with native implementation. * Remove `bydb.dependencies.properties` and set the compatible BanyanDB API version number in `${SW_STORAGE_BANYANDB_COMPATIBLE_SERVER_API_VERSIONS}` * Fix trace profiling query time range condition. +* Fix BanyanDB time range overflow in profile thread snapshot query. #### UI * Fix the missing icon in new native trace view. diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBProfileThreadSnapshotQueryDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBProfileThreadSnapshotQueryDAO.java index 491bf2b6154d..9cb6ed049e01 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBProfileThreadSnapshotQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBProfileThreadSnapshotQueryDAO.java @@ -77,7 +77,7 @@ public BanyanDBProfileThreadSnapshotQueryDAO(BanyanDBStorageClient client, int p } @Override - public List queryRecords(String taskId) throws IOException { + public List queryRecords(String taskId) throws IOException { StreamQueryResponse resp = query(false, ProfileThreadSnapshotRecord.INDEX_NAME, TAGS_BASIC, new QueryBuilder() { @@ -97,7 +97,7 @@ public void apply(StreamQuery query) { List result = new ArrayList<>(); for (final RowEntity rowEntity : resp.getElements()) { ProfileThreadSnapshotRecord record = this.builder.storage2Entity( - new BanyanDBConverter.StorageToStream(ProfileThreadSnapshotRecord.INDEX_NAME, rowEntity)); + new BanyanDBConverter.StorageToStream(ProfileThreadSnapshotRecord.INDEX_NAME, rowEntity)); result.add(record); } return result; @@ -136,8 +136,11 @@ public void apply(StreamQuery query) { } private int querySequenceWithAgg(AggType aggType, String segmentId, long start, long end) throws IOException { + // Clamp the time range to safe bounds for BanyanDB + long safeStart = Math.max(start, LOWER_BOUND_TIME); + long safeEnd = Math.min(end, UPPER_BOUND_TIME); StreamQueryResponse resp = query(false, ProfileThreadSnapshotRecord.INDEX_NAME, - TAGS_ALL, new TimestampRange(start, end), + TAGS_ALL, new TimestampRange(safeStart, safeEnd), new QueryBuilder() { @Override public void apply(StreamQuery query) {