This is an automated email from the ASF dual-hosted git repository. kezhenxu94 pushed a commit to branch event/pagination in repository https://gitbox.apache.org/repos/asf/skywalking.git
commit 54d95487d96c288b718a93cfe376d7e9bc27ce4b Author: kezhenxu94 <[email protected]> AuthorDate: Fri Jul 9 15:27:48 2021 +0800 Add pagination to event query --- .github/workflows/e2e.jdk-versions.yaml | 3 --- .../oap/server/core/query/PaginationUtils.java | 23 +++++++--------------- .../oap/server/core/query/type/Pagination.java | 4 ++++ .../core/query/type/event/EventQueryCondition.java | 10 ++-------- .../server/core/storage/query/IEventQueryDAO.java | 1 - .../oap/query/graphql/resolver/AlarmQuery.java | 4 +++- .../elasticsearch/query/ESEventQueryDAO.java | 11 +++++++++-- .../plugin/influxdb/query/EventQueryDAO.java | 5 ++++- .../plugin/jdbc/h2/dao/H2EventQueryDAO.java | 10 ++++++++-- 9 files changed, 37 insertions(+), 34 deletions(-) diff --git a/.github/workflows/e2e.jdk-versions.yaml b/.github/workflows/e2e.jdk-versions.yaml index 705516f..0765945 100644 --- a/.github/workflows/e2e.jdk-versions.yaml +++ b/.github/workflows/e2e.jdk-versions.yaml @@ -20,9 +20,6 @@ on: pull_request: schedule: - cron: '0 18 * * *' - push: - branches: - - test/* concurrency: group: e2e-jdk-versions-${{ github.event.pull_request.number || github.ref }} diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/PaginationUtils.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/PaginationUtils.java index 125e93a..0e6a6fc 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/PaginationUtils.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/PaginationUtils.java @@ -18,6 +18,8 @@ package org.apache.skywalking.oap.server.core.query; +import lombok.Data; +import lombok.RequiredArgsConstructor; import org.apache.skywalking.oap.server.core.query.type.Pagination; public enum PaginationUtils { @@ -30,21 +32,10 @@ public enum PaginationUtils { return new Page(from, limit); } - public class Page { - private int from; - private int limit; - - Page(int from, int limit) { - this.from = from; - this.limit = limit; - } - - public int getFrom() { - return from; - } - - public int getLimit() { - return limit; - } + @Data + @RequiredArgsConstructor + public static class Page { + private final int from; + private final int limit; } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/Pagination.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/Pagination.java index 2210122..899edf5 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/Pagination.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/Pagination.java @@ -18,11 +18,15 @@ package org.apache.skywalking.oap.server.core.query.type; +import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor public class Pagination { private int pageNum; private int pageSize; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/EventQueryCondition.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/EventQueryCondition.java index a90e08b..be886a7 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/EventQueryCondition.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/type/event/EventQueryCondition.java @@ -24,9 +24,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.apache.skywalking.oap.server.core.query.enumeration.Order; import org.apache.skywalking.oap.server.core.query.input.Duration; - -import static org.apache.skywalking.oap.server.core.storage.query.IEventQueryDAO.DEFAULT_SIZE; -import static org.apache.skywalking.oap.server.core.storage.query.IEventQueryDAO.MAX_SIZE; +import org.apache.skywalking.oap.server.core.query.type.Pagination; @Data @AllArgsConstructor @@ -45,9 +43,5 @@ public class EventQueryCondition { private Order order; - private int size; - - public int getSize() { - return size > 0 ? Math.min(size, MAX_SIZE) : DEFAULT_SIZE; - } + private Pagination paging; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IEventQueryDAO.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IEventQueryDAO.java index ea09a4d..9cdfc49 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IEventQueryDAO.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/query/IEventQueryDAO.java @@ -25,7 +25,6 @@ import org.apache.skywalking.oap.server.core.storage.DAO; import java.util.List; public interface IEventQueryDAO extends DAO { - int DEFAULT_SIZE = 20; int MAX_SIZE = 100; Events queryEvents(final EventQueryCondition condition) throws Exception; diff --git a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java index dd531f7..4a917c5 100644 --- a/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java +++ b/oap-server/server-query-plugin/query-graphql-plugin/src/main/java/org/apache/skywalking/oap/query/graphql/resolver/AlarmQuery.java @@ -88,7 +88,9 @@ public class AlarmQuery implements GraphQLQueryResolver { } long startSecondTB = 0; long endSecondTB = 0; - final EventQueryCondition.EventQueryConditionBuilder conditionPrototype = EventQueryCondition.builder().size(IEventQueryDAO.MAX_SIZE); + final EventQueryCondition.EventQueryConditionBuilder conditionPrototype = + EventQueryCondition.builder() + .paging(new Pagination(1, IEventQueryDAO.MAX_SIZE, false)); if (nonNull(duration)) { startSecondTB = duration.getStartTimeBucketInSec(); endSecondTB = duration.getEndTimeBucketInSec(); diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java index 7aee3e7..fb7c865 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/ESEventQueryDAO.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.skywalking.oap.server.core.query.PaginationUtils; import org.apache.skywalking.oap.server.core.source.Event; import org.apache.skywalking.oap.server.core.query.enumeration.Order; import org.apache.skywalking.oap.server.core.query.input.Duration; @@ -129,7 +130,10 @@ public class ESEventQueryDAO extends EsDAO implements IEventQueryDAO { EventQueryCondition condition = conditionList.get(0); final Order queryOrder = isNull(condition.getOrder()) ? Order.DES : condition.getOrder(); sourceBuilder.sort(Event.START_TIME, Order.DES.equals(queryOrder) ? SortOrder.DESC : SortOrder.ASC); - sourceBuilder.size(condition.getSize()); + + final PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging()); + sourceBuilder.from(page.getFrom()); + sourceBuilder.size(page.getLimit()); return sourceBuilder; } @@ -144,7 +148,10 @@ public class ESEventQueryDAO extends EsDAO implements IEventQueryDAO { final Order queryOrder = isNull(condition.getOrder()) ? Order.DES : condition.getOrder(); sourceBuilder.sort(Event.START_TIME, Order.DES.equals(queryOrder) ? SortOrder.DESC : SortOrder.ASC); - sourceBuilder.size(condition.getSize()); + + final PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging()); + sourceBuilder.from(page.getFrom()); + sourceBuilder.size(page.getLimit()); return sourceBuilder; } diff --git a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java index 1d36892..3879b71 100644 --- a/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-influxdb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/influxdb/query/EventQueryDAO.java @@ -26,6 +26,7 @@ import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.skywalking.oap.server.core.query.PaginationUtils; import org.apache.skywalking.oap.server.core.source.Event; import org.apache.skywalking.oap.server.core.query.enumeration.Order; import org.apache.skywalking.oap.server.core.query.input.Duration; @@ -110,10 +111,12 @@ public class EventQueryDAO implements IEventQueryDAO { protected List<WhereQueryImpl<SelectQueryImpl>> buildWhereQueries(final EventQueryCondition condition) { List<WhereQueryImpl<SelectQueryImpl>> queries = new ArrayList<>(2); + + final PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging()); final String topFunc = Order.DES.equals(condition.getOrder()) ? InfluxConstants.SORT_DES : InfluxConstants.SORT_ASC; final WhereQueryImpl<SelectQueryImpl> recallWhereQuery = select().raw(ALL_FIELDS) - .function(topFunc, Event.START_TIME, condition.getSize()) + .function(topFunc, Event.START_TIME, page.getLimit() + page.getFrom()) .from(client.getDatabase(), Event.INDEX_NAME) .where(); final SelectQueryImpl countQuery = select().count(Event.UUID).from(client.getDatabase(), Event.INDEX_NAME); diff --git a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java index c29dfc9..3444268 100644 --- a/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java +++ b/oap-server/server-storage-plugin/storage-jdbc-hikaricp-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/jdbc/h2/dao/H2EventQueryDAO.java @@ -28,6 +28,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.skywalking.oap.server.core.query.PaginationUtils; +import org.apache.skywalking.oap.server.core.query.type.Pagination; import org.apache.skywalking.oap.server.core.source.Event; import org.apache.skywalking.oap.server.core.query.input.Duration; import org.apache.skywalking.oap.server.core.query.type.event.EventQueryCondition; @@ -65,7 +67,10 @@ public class H2EventQueryDAO implements IEventQueryDAO { result.setTotal(resultSet.getInt("total")); } - sql = "select * from " + Event.INDEX_NAME + whereClause + " limit " + condition.getSize(); + PaginationUtils.Page page = PaginationUtils.INSTANCE.exchange(condition.getPaging()); + + sql = "select * from " + Event.INDEX_NAME + whereClause + + " limit " + page.getLimit() + " offset " + page.getFrom(); if (log.isDebugEnabled()) { log.debug("Query SQL: {}, parameters: {}", sql, parameters); } @@ -92,7 +97,8 @@ public class H2EventQueryDAO implements IEventQueryDAO { .map(Tuple2::_1) .map(it -> it.collect(Collectors.joining(" and "))) .collect(Collectors.joining(" or ", " where ", "")); - final int size = conditions.stream().mapToInt(EventQueryCondition::getSize).sum(); + final int size = conditions.stream().map(EventQueryCondition::getPaging) + .mapToInt(Pagination::getPageSize).sum(); final Events result = new Events(); try (final Connection connection = client.getConnection()) {
