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 2f03a01791 Fix missing `taskId` filter in pprof task log query and its
DB implementations (#13807)
2f03a01791 is described below
commit 2f03a0179157a3b06416221516733825bb452521
Author: mrproliu <[email protected]>
AuthorDate: Thu Apr 9 11:54:56 2026 +0800
Fix missing `taskId` filter in pprof task log query and its DB
implementations (#13807)
---
docs/en/changes/changes.md | 1 +
.../oap/server/core/profiling/pprof/PprofQueryService.java | 12 +++---------
.../core/storage/profiling/pprof/IPprofTaskLogQueryDAO.java | 8 ++++++--
.../plugin/banyandb/stream/BanyanDBPprofTaskLogQueryDAO.java | 8 +++++++-
.../plugin/elasticsearch/query/PprofTaskLogQueryEsDAO.java | 10 ++++++++--
.../plugin/jdbc/common/dao/JDBCPprofTaskLogQueryDAO.java | 12 +++++++++---
6 files changed, 34 insertions(+), 17 deletions(-)
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index edc2abaca9..c0bac9613b 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -13,6 +13,7 @@
* Fix duplicate `TABLE_COLUMN` condition in
`JDBCMetadataQueryDAO.findEndpoint()`, which was binding the same parameter
twice due to a copy-paste error.
* Support MCP (Model Context Protocol) observability for Envoy AI Gateway: MCP
metrics (request CPM/latency, method breakdown, backend breakdown,
initialization latency, capabilities), MCP access log sampling (errors only),
`ai_route_type` searchable log tag, and MCP dashboard tabs.
* Add weighted handler support to `BatchQueue` adaptive partitioning. MAL
metrics use weight 0.05 at L1 (vs 1.0 for OAL), reducing partition count and
memory overhead when many MAL metric types are registered.
+* Fix missing `taskId` filter in pprof task log query and its
JDBC/BanyanDB/Elasticsearch implementations.
#### UI
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/pprof/PprofQueryService.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/pprof/PprofQueryService.java
index 101b5a685f..b84d73fb6e 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/pprof/PprofQueryService.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/profiling/pprof/PprofQueryService.java
@@ -105,15 +105,9 @@ public class PprofQueryService implements Service {
}
public List<PprofTaskLog> queryPprofTaskLogs(String taskId) throws
IOException {
- List<PprofTaskLog> taskLogList = getTaskLogQueryDAO().getTaskLogList();
- return findMatchedLogs(taskId, taskLogList);
- }
-
- private List<PprofTaskLog> findMatchedLogs(final String taskID, final
List<PprofTaskLog> allLogs) {
- return allLogs.stream()
- .filter(l -> Objects.equals(l.getId(), taskID))
- .map(this::extendTaskLog)
- .collect(Collectors.toList());
+ return getTaskLogQueryDAO().getTaskLogList(taskId).stream()
+ .map(this::extendTaskLog)
+ .collect(Collectors.toList());
}
private PprofTaskLog extendTaskLog(PprofTaskLog log) {
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/profiling/pprof/IPprofTaskLogQueryDAO.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/profiling/pprof/IPprofTaskLogQueryDAO.java
index 37b0205d87..d4325914d3 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/profiling/pprof/IPprofTaskLogQueryDAO.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/profiling/pprof/IPprofTaskLogQueryDAO.java
@@ -25,7 +25,11 @@ import org.apache.skywalking.oap.server.core.storage.DAO;
public interface IPprofTaskLogQueryDAO extends DAO {
/**
- * search all task log list in appoint task id
+ * Search task logs by the given task id.
+ *
+ * @param taskId the task id to filter by, must not be null or blank
+ * @return the task logs associated with the given task id
+ * @throws IOException if the query fails
*/
- List<PprofTaskLog> getTaskLogList() throws IOException;
+ List<PprofTaskLog> getTaskLogList(String taskId) throws IOException;
}
diff --git
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBPprofTaskLogQueryDAO.java
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBPprofTaskLogQueryDAO.java
index 38b133d649..5f4054da1c 100644
---
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBPprofTaskLogQueryDAO.java
+++
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/stream/BanyanDBPprofTaskLogQueryDAO.java
@@ -20,6 +20,7 @@ package
org.apache.skywalking.oap.server.storage.plugin.banyandb.stream;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -30,6 +31,7 @@ import
org.apache.skywalking.oap.server.core.profiling.pprof.storage.PprofTaskLo
import org.apache.skywalking.oap.server.core.query.PprofTaskLog;
import
org.apache.skywalking.oap.server.core.query.type.PprofTaskLogOperationType;
import
org.apache.skywalking.oap.server.core.storage.profiling.pprof.IPprofTaskLogQueryDAO;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
import
org.apache.skywalking.oap.server.storage.plugin.banyandb.BanyanDBStorageClient;
/**
@@ -52,12 +54,16 @@ public class BanyanDBPprofTaskLogQueryDAO extends
AbstractBanyanDBDAO implements
}
@Override
- public List<PprofTaskLog> getTaskLogList() throws IOException {
+ public List<PprofTaskLog> getTaskLogList(String taskId) throws IOException
{
+ if (StringUtil.isBlank(taskId)) {
+ return Collections.emptyList();
+ }
StreamQueryResponse resp = query(
false, PprofTaskLogRecord.INDEX_NAME, TAGS,
new QueryBuilder<StreamQuery>() {
@Override
public void apply(StreamQuery query) {
+ query.and(eq(PprofTaskLogRecord.TASK_ID, taskId));
query.setLimit(BanyanDBPprofTaskLogQueryDAO.this.queryMaxSize);
}
}
diff --git
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/PprofTaskLogQueryEsDAO.java
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/PprofTaskLogQueryEsDAO.java
index 36e3f18f18..bc9783a929 100644
---
a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/PprofTaskLogQueryEsDAO.java
+++
b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/PprofTaskLogQueryEsDAO.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.storage.plugin.elasticsearch.query;
import java.io.IOException;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -34,6 +35,7 @@ import
org.apache.skywalking.oap.server.core.query.PprofTaskLog;
import
org.apache.skywalking.oap.server.core.query.type.PprofTaskLogOperationType;
import
org.apache.skywalking.oap.server.core.storage.profiling.pprof.IPprofTaskLogQueryDAO;
import
org.apache.skywalking.oap.server.library.client.elasticsearch.ElasticSearchClient;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
import
org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.EsDAO;
import
org.apache.skywalking.oap.server.storage.plugin.elasticsearch.base.IndexController;
@@ -48,13 +50,17 @@ public class PprofTaskLogQueryEsDAO extends EsDAO
implements IPprofTaskLogQueryD
}
@Override
- public List<PprofTaskLog> getTaskLogList() throws IOException {
+ public List<PprofTaskLog> getTaskLogList(String taskId) throws IOException
{
+ if (StringUtil.isBlank(taskId)) {
+ return Collections.emptyList();
+ }
final String index =
IndexController.LogicIndicesRegister.getPhysicalTableName(PprofTaskLogRecord.INDEX_NAME);
final BoolQueryBuilder query = Query.bool();
if
(IndexController.LogicIndicesRegister.isMergedTable(PprofTaskLogRecord.INDEX_NAME))
{
query.must(Query.term(IndexController.LogicIndicesRegister.RECORD_TABLE_NAME,
PprofTaskLogRecord.INDEX_NAME));
}
-
+ query.must(Query.term(PprofTaskLogRecord.TASK_ID, taskId));
+
final SearchBuilder search =
Search.builder().query(query)
.sort(PprofTaskLogRecord.OPERATION_TIME,
Sort.Order.DESC)
diff --git
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCPprofTaskLogQueryDAO.java
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCPprofTaskLogQueryDAO.java
index 0db85eca50..1a09aff5f4 100644
---
a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCPprofTaskLogQueryDAO.java
+++
b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCPprofTaskLogQueryDAO.java
@@ -30,6 +30,7 @@ import
org.apache.skywalking.oap.server.core.query.PprofTaskLog;
import
org.apache.skywalking.oap.server.core.query.type.PprofTaskLogOperationType;
import
org.apache.skywalking.oap.server.core.storage.profiling.pprof.IPprofTaskLogQueryDAO;
import
org.apache.skywalking.oap.server.library.client.jdbc.hikaricp.JDBCClient;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
import
org.apache.skywalking.oap.server.storage.plugin.jdbc.common.JDBCTableInstaller;
import
org.apache.skywalking.oap.server.storage.plugin.jdbc.common.SQLAndParameters;
import org.apache.skywalking.oap.server.storage.plugin.jdbc.common.TableHelper;
@@ -41,11 +42,14 @@ public class JDBCPprofTaskLogQueryDAO implements
IPprofTaskLogQueryDAO {
@Override
@SneakyThrows
- public List<PprofTaskLog> getTaskLogList() {
+ public List<PprofTaskLog> getTaskLogList(String taskId) {
+ if (StringUtil.isBlank(taskId)) {
+ return new ArrayList<>();
+ }
List<String> tables =
tableHelper.getTablesWithinTTL(PprofTaskLogRecord.INDEX_NAME);
final List<PprofTaskLog> results = new ArrayList<PprofTaskLog>();
for (String table : tables) {
- SQLAndParameters sqlAndParameters = buildSQL(table);
+ SQLAndParameters sqlAndParameters = buildSQL(table, taskId);
List<PprofTaskLog> logs = jdbcClient.executeQuery(
sqlAndParameters.sql(),
resultSet -> {
@@ -62,12 +66,14 @@ public class JDBCPprofTaskLogQueryDAO implements
IPprofTaskLogQueryDAO {
return results;
}
- private SQLAndParameters buildSQL(String table) {
+ private SQLAndParameters buildSQL(String table, String taskId) {
StringBuilder sql = new StringBuilder();
List<Object> parameters = new ArrayList<>(2);
sql.append("select * from ").append(table)
.append(" where ").append(JDBCTableInstaller.TABLE_COLUMN).append("
= ?");
parameters.add(PprofTaskLogRecord.INDEX_NAME);
+ sql.append(" and ").append(PprofTaskLogRecord.TASK_ID).append(" = ?");
+ parameters.add(taskId);
sql.append(" order by
").append(PprofTaskLogRecord.OPERATION_TIME).append(" desc");
return new SQLAndParameters(sql.toString(), parameters);
}