diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac635b7..878ba89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: ports: - 6379:6379 redisearch: - image: redislabs/redisearch:latest + image: redislabs/redisearch:2.0.9 options: >- --health-cmd "redis-cli ping" --health-interval 10s @@ -41,7 +41,7 @@ jobs: ports: - 6381:6379 redisai: - image: redislabs/redisai:edge-cpu + image: redislabs/redisai:edge-cpu-bionic options: >- --health-cmd "redis-cli ping" --health-interval 10s diff --git a/redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/protocol/decoder/TimeSeriesDecoder.java b/redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/protocol/decoder/TimeSeriesDecoder.java index 502b676..5e60fd6 100644 --- a/redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/protocol/decoder/TimeSeriesDecoder.java +++ b/redistimeseries/src/main/java/io/github/dengliming/redismodule/redistimeseries/protocol/decoder/TimeSeriesDecoder.java @@ -58,11 +58,14 @@ public List decode(List parts, State state) { List values = new ArrayList<>(); List objects = (List) o.get(2); // all samples - if (objects.get(0) instanceof List) { + if (objects.size() > 0 && (objects.get(0) instanceof List)) { ((List>) o.get(2)).forEach(valueObject -> values.add(valueDecoder.decode(valueObject, state))); } else { // the last sample - values.add(valueDecoder.decode((List) o.get(2), state)); + Value decoded = valueDecoder.decode(objects, state); + if (decoded != null) { + values.add(decoded); + } } series.values(values); timeSeries.add(series); diff --git a/redistimeseries/src/test/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeriesTest.java b/redistimeseries/src/test/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeriesTest.java index 75c50cf..60183ca 100644 --- a/redistimeseries/src/test/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeriesTest.java +++ b/redistimeseries/src/test/java/io/github/dengliming/redismodule/redistimeseries/RedisTimeSeriesTest.java @@ -141,6 +141,12 @@ public void testRange() { assertThat(timeSeries).hasSize(1); assertThat(timeSeries.get(0).getKey()).isEqualTo("temperature:2:33"); + // Sensor exists, but no data in range + timeSeries = redisTimeSeries.mrange(0, 100, new RangeOptions() + .max(3).withLabels(), "sensor_id=2"); + assertThat(timeSeries).hasSize(1); + assertThat(timeSeries.get(0).getValues()).isEmpty(); + timeSeries = redisTimeSeries.mrange(timestamp, timestamp + 1, new RangeOptions() .max(3).withLabels(), "sensor_id=1"); assertThat(timeSeries).isEmpty();