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 a471b85ac2 Fix ServiceInstance `in` query. (#11888) a471b85ac2 is described below commit a471b85ac2648d4a93ec4e853e4ee101324cf1bd Author: weixiang1862 <652048...@qq.com> AuthorDate: Mon Feb 19 16:20:45 2024 +0800 Fix ServiceInstance `in` query. (#11888) --- docs/en/changes/changes.md | 1 + .../plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java | 4 +++- .../storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java | 10 ++++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 0cad776e92..fde1695012 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -50,6 +50,7 @@ * Add Service Hierarchy auto matching layer relationships (upper -> lower) as following: - ROCKETMQ -> K8S_SERVICE - VIRTUAL_MQ -> ROCKETMQ +* Fix ServiceInstance `in` query. #### UI diff --git a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java index 957c15ab31..07333538d1 100644 --- a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/measure/BanyanDBMetadataQueryDAO.java @@ -162,7 +162,9 @@ public class BanyanDBMetadataQueryDAO extends AbstractBanyanDBDAO implements IMe List<AbstractCriteria> instanceRelationsQueryConditions = new ArrayList<>(instanceIds.size()); for (final String instanceId : instanceIds) { final IDManager.ServiceInstanceID.InstanceIDDefinition def = IDManager.ServiceInstanceID.analysisId(instanceId); - and(Lists.newArrayList(eq(InstanceTraffic.SERVICE_ID, def.getServiceId()), eq(InstanceTraffic.NAME, def.getName()))); + instanceRelationsQueryConditions.add( + and(Lists.newArrayList(eq(InstanceTraffic.SERVICE_ID, def.getServiceId()), eq(InstanceTraffic.NAME, def.getName()))) + ); } query.criteria(or(instanceRelationsQueryConditions)); } 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/JDBCMetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java index ff163df875..1ed5a6259a 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/common/dao/JDBCMetadataQueryDAO.java @@ -23,6 +23,7 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.linecorp.armeria.common.annotation.Nullable; +import java.util.stream.Collectors; import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.apache.skywalking.oap.server.core.analysis.IDManager; @@ -186,10 +187,11 @@ public class JDBCMetadataQueryDAO implements IMetadataQueryDAO { sql.append("select * from ").append(table).append(" where ") .append(JDBCTableInstaller.TABLE_COLUMN).append(" = ?"); condition.add(InstanceTraffic.INDEX_NAME); - for (String instanceId : instanceIds) { - sql.append(" and ").append(JDBCTableInstaller.ID_COLUMN).append(" = ?"); - condition.add(instanceId); - } + sql.append(" and ").append(JDBCTableInstaller.ID_COLUMN).append(" in ") + .append( + instanceIds.stream().map(instanceId -> "?").collect(Collectors.joining(",", "(", ")")) + ); + condition.addAll(instanceIds); sql.append(" limit ").append(instanceIds.size()); final var result = jdbcClient.executeQuery(sql.toString(), resultSet -> buildInstances(resultSet), condition.toArray(new Object[0]));