Skip to content

Commit f78ce81

Browse files
committed
fix ADD + MADD command result difference from Redis
1 parent 6139677 commit f78ce81

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

src/types/redis_timeseries.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -882,6 +882,7 @@ rocksdb::Status TimeSeries::filterSamplesByIgnorePolicy(engine::Context &ctx, co
882882
if (sample.ts >= latest_sample.ts && sample.ts - latest_sample.ts <= metadata.ignore_max_time_diff &&
883883
std::abs(sample.v - latest_sample.v) <= metadata.ignore_max_val_diff) {
884884
add_results[i].type = TSChunk::AddResultType::kSkip;
885+
add_results[i].sample.ts = latest_sample.ts;
885886
continue;
886887
}
887888

src/types/timeseries.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,9 @@ std::vector<TSChunk::AddResult> TSChunk::SampleBatch::GetFinalResults() const {
165165
res.resize(add_results_.size());
166166
for (size_t idx = 0; idx < add_results_.size(); idx++) {
167167
res[indexes_[idx]] = add_results_[idx];
168-
res[indexes_[idx]].sample.ts = samples_[idx].ts;
168+
if (!(res[indexes_[idx]].type == AddResultType::kSkip && res[indexes_[idx]].sample.ts != 0)) {
169+
res[indexes_[idx]].sample.ts = samples_[idx].ts;
170+
}
169171
}
170172
return res;
171173
}

tests/gocase/unit/type/timeseries/timeseries_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func testTimeSeries(t *testing.T, configs util.KvrocksServerConfigs) {
208208
require.NoError(t, rdb.Do(ctx, "ts.create", ignoreKey, "duplicate_policy", "last", "ignore", "5", "2").Err())
209209

210210
require.Equal(t, int64(1000), rdb.Do(ctx, "ts.add", ignoreKey, "1000", "10").Val())
211-
require.Equal(t, int64(1003), rdb.Do(ctx, "ts.add", ignoreKey, "1003", "11").Val())
211+
require.Equal(t, int64(1000), rdb.Do(ctx, "ts.add", ignoreKey, "1003", "11").Val())
212212

213213
res := rdb.Do(ctx, "ts.range", ignoreKey, "-", "+").Val().([]interface{})
214214
require.Equal(t, 1, len(res))
@@ -257,7 +257,7 @@ func testTimeSeries(t *testing.T, configs util.KvrocksServerConfigs) {
257257
require.Equal(t, int64(1000), rdb.Do(ctx, "ts.add", ignoreKey, "1000", "10").Val())
258258

259259
res := rdb.Do(ctx, "ts.madd", ignoreKey, "1003", "11", ignoreKey, "1004", "13", ignoreKey, "1007", "14").Val().([]interface{})
260-
assert.Equal(t, []interface{}{int64(1003), int64(1004), int64(1007)}, res)
260+
assert.Equal(t, []interface{}{int64(1000), int64(1004), int64(1004)}, res)
261261

262262
samples := rdb.Do(ctx, "ts.range", ignoreKey, "-", "+").Val().([]interface{})
263263
require.Equal(t, 2, len(samples))

0 commit comments

Comments
 (0)