From f56d98dc94d211a45d96891fbe1c553598d4df31 Mon Sep 17 00:00:00 2001 From: Daming Date: Mon, 30 Mar 2020 14:49:55 +0800 Subject: [PATCH] [BugFix]Escape '/' on InfluxDB query (#4589) * Escape '/' on InfluxDB * fix checkstyle --- .../plugin/influxdb/query/InfluxMetadataQueryDAO.java | 8 ++++---- .../server/storage/plugin/influxdb/query/TraceQuery.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/InfluxMetadataQueryDAO.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/InfluxMetadataQueryDAO.java index 94611a6801..05cb63efff 100644 --- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/InfluxMetadataQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/InfluxMetadataQueryDAO.java @@ -46,6 +46,8 @@ import static org.influxdb.querybuilder.BuiltQuery.QueryBuilder.select; */ public class InfluxMetadataQueryDAO extends H2MetadataQueryDAO { private InfluxClient client; + // 'name' is InfluxDB keyword, so escapes it + private static final String ENDPOINT_NAME = '\"' + EndpointTraffic.NAME + '\"'; public InfluxMetadataQueryDAO(final InfluxClient client, final JDBCHikariCPClient h2Client, final int metadataQueryMaxSize) { @@ -75,17 +77,15 @@ public class InfluxMetadataQueryDAO extends H2MetadataQueryDAO { public List searchEndpoint(final String keyword, final int serviceId, final int limit) throws IOException { - final String endpointName = '\"' + EndpointTraffic.NAME + '\"'; - WhereQueryImpl endpointQuery = select() .column(EndpointTraffic.SERVICE_ID) - .column(endpointName) + .column(ENDPOINT_NAME) .column(EndpointTraffic.DETECT_POINT) .from(client.getDatabase(), EndpointTraffic.INDEX_NAME) .where(); endpointQuery.where(eq(MetricsDAO.TAG_ENDPOINT_OWNER_SERVICE, String.valueOf(serviceId))); if (!Strings.isNullOrEmpty(keyword)) { - endpointQuery.where(contains(MetricsDAO.TAG_ENDPOINT_NAME, keyword.replaceAll("/", "////"))); + endpointQuery.where(contains(MetricsDAO.TAG_ENDPOINT_NAME, keyword.replaceAll("/", "\\\\/"))); } endpointQuery.limit(limit); diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java index 1e27fb9fe6..2eeae0136c 100644 --- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java +++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/TraceQuery.java @@ -98,7 +98,7 @@ public class TraceQuery implements ITraceQueryDAO { recallQuery.and(lte(SegmentRecord.LATENCY, maxDuration)); } if (!Strings.isNullOrEmpty(endpointName)) { - recallQuery.and(contains(SegmentRecord.ENDPOINT_NAME, endpointName)); + recallQuery.and(contains(SegmentRecord.ENDPOINT_NAME, endpointName.replaceAll("/", "\\\\/"))); } if (serviceId != 0) { recallQuery.and(eq(RecordDAO.TAG_SERVICE_ID, String.valueOf(serviceId))); -- GitLab