From 28d6e4c736f3644e56247f89f9d4262ab4bae976 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Thu, 8 Dec 2022 13:16:34 +0200 Subject: [PATCH] Copy queryId when updating query --- .../common/data/kv/BaseReadTsKvQuery.java | 8 +++++ .../server/common/data/kv/BaseTsKvQuery.java | 6 +++- .../dao/timeseries/BaseTimeseriesService.java | 2 +- .../timeseries/BaseTimeseriesServiceTest.java | 32 +++++++++++++++++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java index 29b98d5e83..49c2d60876 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseReadTsKvQuery.java @@ -47,4 +47,12 @@ public class BaseReadTsKvQuery extends BaseTsKvQuery implements ReadTsKvQuery { this(key, startTs, endTs, endTs - startTs, limit, Aggregation.NONE, order); } + public BaseReadTsKvQuery(ReadTsKvQuery query, long startTs, long endTs) { + super(query.getId(), query.getKey(), startTs, endTs); + this.interval = query.getInterval(); + this.limit = query.getLimit(); + this.aggregation = query.getAggregation(); + this.order = query.getOrder(); + } + } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseTsKvQuery.java b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseTsKvQuery.java index 245af53d55..2842ee77c7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseTsKvQuery.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/kv/BaseTsKvQuery.java @@ -28,8 +28,12 @@ public class BaseTsKvQuery implements TsKvQuery { private final long endTs; public BaseTsKvQuery(String key, long startTs, long endTs) { - this.id = idSeq.get(); + this(idSeq.get(), key, startTs, endTs); idSeq.set(id + 1); + } + + protected BaseTsKvQuery(int id, String key, long startTs, long endTs) { + this.id = id; this.key = key; this.startTs = startTs; this.endTs = endTs; diff --git a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java index a2905a7a64..d366d56eba 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/timeseries/BaseTimeseriesService.java @@ -234,7 +234,7 @@ public class BaseTimeseriesService implements TimeseriesService { } else { endTs = query.getEndTs(); } - return new BaseReadTsKvQuery(query.getKey(), startTs, endTs, query.getInterval(), query.getLimit(), query.getAggregation(), query.getOrder()); + return new BaseReadTsKvQuery(query, startTs, endTs); }).collect(Collectors.toList()); } diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java index 4e2fd17846..1eea5d3912 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/timeseries/BaseTimeseriesServiceTest.java @@ -35,6 +35,7 @@ import org.thingsboard.server.common.data.kv.DoubleDataEntry; import org.thingsboard.server.common.data.kv.KvEntry; import org.thingsboard.server.common.data.kv.LongDataEntry; import org.thingsboard.server.common.data.kv.ReadTsKvQuery; +import org.thingsboard.server.common.data.kv.ReadTsKvQueryResult; import org.thingsboard.server.common.data.kv.StringDataEntry; import org.thingsboard.server.common.data.kv.TsKvEntry; import org.thingsboard.server.common.data.objects.TelemetryEntityView; @@ -48,6 +49,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -344,6 +346,36 @@ public abstract class BaseTimeseriesServiceTest extends AbstractServiceTest { Assert.assertEquals(toTsEntry(TS - 3, stringKvEntry), entries.get(2)); } + @Test + public void testFindAllByQueries_verifyQueryId() throws Exception { + DeviceId deviceId = new DeviceId(Uuids.timeBased()); + saveEntries(deviceId, TS); + saveEntries(deviceId, TS - 2); + saveEntries(deviceId, TS - 10); + + BaseReadTsKvQuery query = new BaseReadTsKvQuery(STRING_KEY, TS - 10, TS + 1, 0, 1000, Aggregation.NONE, "DESC"); + findAndVerifyQueryId(deviceId, query); + } + + @Test + public void testFindAllByQueries_verifyQueryId_forEntityView() throws Exception { + DeviceId deviceId = new DeviceId(Uuids.timeBased()); + saveEntries(deviceId, TS); + saveEntries(deviceId, TS - 2); + saveEntries(deviceId, TS - 12); + + EntityView entityView = saveAndCreateEntityView(deviceId, List.of(LONG_KEY)); + + BaseReadTsKvQuery query = new BaseReadTsKvQuery(LONG_KEY, TS - 10, TS + 1, 0, 1000, Aggregation.NONE, "DESC"); + findAndVerifyQueryId(entityView.getId(), query); + } + + private void findAndVerifyQueryId(EntityId entityId, ReadTsKvQuery query) throws InterruptedException, ExecutionException, TimeoutException { + List results = tsService.findAllByQueries(tenantId, entityId, List.of(query)).get(MAX_TIMEOUT, TimeUnit.SECONDS); + assertThat(results).isNotEmpty(); + assertThat(results).extracting(ReadTsKvQueryResult::getQueryId).containsOnly(query.getId()); + } + @Test public void testDeleteDeviceTsDataWithOverwritingLatest() throws Exception { DeviceId deviceId = new DeviceId(Uuids.timeBased());