From 4b35eb0e1a276185c8c481d462dfba1469f212bd Mon Sep 17 00:00:00 2001 From: Ken Hibino Date: Thu, 10 Mar 2022 11:54:47 -0800 Subject: [PATCH] Fix RDB.AggregationCheck when run against an empty group --- internal/rdb/rdb.go | 3 +++ internal/rdb/rdb_test.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/internal/rdb/rdb.go b/internal/rdb/rdb.go index d203e37..25864db 100644 --- a/internal/rdb/rdb.go +++ b/internal/rdb/rdb.go @@ -1009,6 +1009,9 @@ func (r *RDB) ListGroups(qname string) ([]string, error) { // Returns 1 if an aggregation set was created var aggregationCheckCmd = redis.NewScript(` local size = redis.call("ZCARD", KEYS[1]) +if size == 0 then + return 0 +end local maxSize = tonumber(ARGV[1]) if size >= maxSize then local msgs = redis.call("ZRANGE", KEYS[1], 0, maxSize-1) diff --git a/internal/rdb/rdb_test.go b/internal/rdb/rdb_test.go index 38a1fc6..8df2b84 100644 --- a/internal/rdb/rdb_test.go +++ b/internal/rdb/rdb_test.go @@ -3129,6 +3129,26 @@ func TestAggregationCheck(t *testing.T) { wantAggregationSet []*base.TaskMessage wantGroups map[string]map[string][]base.Z }{ + { + desc: "with an empty group", + groups: map[string]map[string][]base.Z{ + "default": { + "mygroup": {}, + }, + }, + qname: "default", + gname: "mygroup", + gracePeriod: 1 * time.Minute, + maxDelay: 10 * time.Minute, + maxSize: 5, + shouldCreateSet: false, + wantAggregationSet: nil, + wantGroups: map[string]map[string][]base.Z{ + "default": { + "mygroup": {}, + }, + }, + }, { desc: "with a group size reaching the max size", groups: map[string]map[string][]base.Z{