Skip to content

Commit 282a092

Browse files
authored
Refactor rulerstore packages (#3887)
* Moved bucketclient implementation to pkg/ruler/rulestore/bucketclient Signed-off-by: Marco Pracucci <marco@pracucci.com> * Moved local and objectclient rule store under pkg/ruler/rulestore/... Signed-off-by: Marco Pracucci <marco@pracucci.com> * Renamed NewRuleStorage() to NewLegacyRuleStore() Signed-off-by: Marco Pracucci <marco@pracucci.com> * Renamed pkg/ruler/rules to pkg/ruler/rulespb Signed-off-by: Marco Pracucci <marco@pracucci.com> * Rebuilt pkg/ruler/ruler.proto Signed-off-by: Marco Pracucci <marco@pracucci.com> * Fixed comment Signed-off-by: Marco Pracucci <marco@pracucci.com> * Fixed comment Signed-off-by: Marco Pracucci <marco@pracucci.com> * Fixed import Signed-off-by: Marco Pracucci <marco@pracucci.com>
1 parent 35fbe42 commit 282a092

30 files changed

+532
-514
lines changed

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ pkg/querier/queryrange/queryrange.pb.go: pkg/querier/queryrange/queryrange.proto
8282
pkg/querier/stats/stats.pb.go: pkg/querier/stats/stats.proto
8383
pkg/chunk/storage/caching_index_client.pb.go: pkg/chunk/storage/caching_index_client.proto
8484
pkg/distributor/ha_tracker.pb.go: pkg/distributor/ha_tracker.proto
85-
pkg/ruler/rules/rules.pb.go: pkg/ruler/rules/rules.proto
86-
pkg/ruler/ruler.pb.go: pkg/ruler/rules/rules.proto
85+
pkg/ruler/rulespb/rules.pb.go: pkg/ruler/rulespb/rules.proto
86+
pkg/ruler/ruler.pb.go: pkg/ruler/ruler.proto
8787
pkg/ring/kv/memberlist/kv.pb.go: pkg/ring/kv/memberlist/kv.proto
8888
pkg/scheduler/schedulerpb/scheduler.pb.go: pkg/scheduler/schedulerpb/scheduler.proto
8989
pkg/storegateway/storegatewaypb/gateway.pb.go: pkg/storegateway/storegatewaypb/gateway.proto
@@ -176,6 +176,7 @@ lint:
176176
faillint -paths "github.com/cortexproject/cortex/pkg/querier/..." ./pkg/scheduler/...
177177
faillint -paths "github.com/cortexproject/cortex/pkg/storage/tsdb/..." ./pkg/storage/bucket/...
178178
faillint -paths "github.com/cortexproject/cortex/pkg/..." ./pkg/alertmanager/alertspb/...
179+
faillint -paths "github.com/cortexproject/cortex/pkg/..." ./pkg/ruler/rulespb/...
179180

180181
# Ensure the query path is supporting multiple tenants
181182
faillint -paths "\

integration/chunks_storage_backends_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
"github.com/cortexproject/cortex/pkg/chunk/storage"
2626
"github.com/cortexproject/cortex/pkg/ingester/client"
2727
"github.com/cortexproject/cortex/pkg/ruler"
28-
"github.com/cortexproject/cortex/pkg/ruler/rules"
28+
"github.com/cortexproject/cortex/pkg/ruler/rulespb"
2929
cortex_swift "github.com/cortexproject/cortex/pkg/storage/bucket/swift"
3030
"github.com/cortexproject/cortex/pkg/util/flagext"
3131
"github.com/cortexproject/cortex/pkg/util/validation"
@@ -243,7 +243,7 @@ func TestSwiftRuleStorage(t *testing.T) {
243243

244244
require.NoError(t, s.StartAndWaitReady(swift))
245245

246-
store, err := ruler.NewRuleStorage(ruler.RuleStoreConfig{
246+
store, err := ruler.NewLegacyRuleStore(ruler.RuleStoreConfig{
247247
Type: "swift",
248248
Swift: swiftConfig(swift),
249249
}, nil, log.NewNopLogger())
@@ -282,12 +282,12 @@ func TestSwiftRuleStorage(t *testing.T) {
282282
require.Equal(t, r2, rls[userID][0])
283283
}
284284

285-
func newRuleGroup(userID, namespace, group string) *rules.RuleGroupDesc {
286-
return &rules.RuleGroupDesc{
285+
func newRuleGroup(userID, namespace, group string) *rulespb.RuleGroupDesc {
286+
return &rulespb.RuleGroupDesc{
287287
Name: group,
288288
Interval: time.Minute,
289289
Namespace: namespace,
290-
Rules: []*rules.RuleDesc{
290+
Rules: []*rulespb.RuleDesc{
291291
{
292292
Expr: fmt.Sprintf(`{%s="bar"}`, group),
293293
Record: group + ":bar",

pkg/chunk/purger/tenant_deletion_api.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/prometheus/client_golang/prometheus"
1414
"github.com/thanos-io/thanos/pkg/objstore"
1515

16-
"github.com/cortexproject/cortex/pkg/ruler/rules"
16+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
1717
"github.com/cortexproject/cortex/pkg/storage/bucket"
1818
cortex_tsdb "github.com/cortexproject/cortex/pkg/storage/tsdb"
1919
"github.com/cortexproject/cortex/pkg/tenant"
@@ -22,12 +22,12 @@ import (
2222

2323
type TenantDeletionAPI struct {
2424
bucketClient objstore.Bucket
25-
ruleStore rules.RuleStore
25+
ruleStore rulestore.RuleStore
2626
logger log.Logger
2727
cfgProvider bucket.TenantConfigProvider
2828
}
2929

30-
func NewTenantDeletionAPI(storageCfg cortex_tsdb.BlocksStorageConfig, cfgProvider bucket.TenantConfigProvider, ruleStore rules.RuleStore, logger log.Logger, reg prometheus.Registerer) (*TenantDeletionAPI, error) {
30+
func NewTenantDeletionAPI(storageCfg cortex_tsdb.BlocksStorageConfig, cfgProvider bucket.TenantConfigProvider, ruleStore rulestore.RuleStore, logger log.Logger, reg prometheus.Registerer) (*TenantDeletionAPI, error) {
3131
bucketClient, err := createBucketClient(storageCfg, logger, reg)
3232
if err != nil {
3333
return nil, err
@@ -36,7 +36,7 @@ func NewTenantDeletionAPI(storageCfg cortex_tsdb.BlocksStorageConfig, cfgProvide
3636
return newTenantDeletionAPI(bucketClient, cfgProvider, ruleStore, logger), nil
3737
}
3838

39-
func newTenantDeletionAPI(bkt objstore.Bucket, cfgProvider bucket.TenantConfigProvider, ruleStore rules.RuleStore, logger log.Logger) *TenantDeletionAPI {
39+
func newTenantDeletionAPI(bkt objstore.Bucket, cfgProvider bucket.TenantConfigProvider, ruleStore rulestore.RuleStore, logger log.Logger) *TenantDeletionAPI {
4040
return &TenantDeletionAPI{
4141
bucketClient: bkt,
4242
ruleStore: ruleStore,
@@ -82,7 +82,7 @@ func (api *TenantDeletionAPI) deleteRules(ctx context.Context, userID string) er
8282
}
8383

8484
err := api.ruleStore.DeleteNamespace(ctx, userID, "") // Empty namespace = delete all rule groups.
85-
if err != nil && !errors.Is(err, rules.ErrGroupNamespaceNotFound) {
85+
if err != nil && !errors.Is(err, rulestore.ErrGroupNamespaceNotFound) {
8686
return err
8787
}
8888

pkg/chunk/purger/tenant_deletion_api_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import (
1616
"github.com/weaveworks/common/user"
1717

1818
"github.com/cortexproject/cortex/pkg/chunk"
19-
"github.com/cortexproject/cortex/pkg/ruler/rules"
20-
"github.com/cortexproject/cortex/pkg/ruler/rules/objectclient"
19+
"github.com/cortexproject/cortex/pkg/ruler/rulespb"
20+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
21+
"github.com/cortexproject/cortex/pkg/ruler/rulestore/objectclient"
2122
"github.com/cortexproject/cortex/pkg/storage/tsdb"
2223
)
2324

@@ -180,13 +181,13 @@ func verifyExpectedDeletedRuleGroupsForUser(t *testing.T, api *TenantDeletionAPI
180181
require.Equal(t, expected, deleteResp.RuleGroupsDeleted)
181182
}
182183

183-
func setupRuleGroupsStore(t *testing.T, ruleGroups []ruleGroupKey) (*chunk.MockStorage, rules.RuleStore) {
184+
func setupRuleGroupsStore(t *testing.T, ruleGroups []ruleGroupKey) (*chunk.MockStorage, rulestore.RuleStore) {
184185
obj := chunk.NewMockStorage()
185186
rs := objectclient.NewRuleStore(obj, 5, log.NewNopLogger())
186187

187188
// "upload" rule groups
188189
for _, key := range ruleGroups {
189-
desc := rules.ToProto(key.user, key.namespace, rulefmt.RuleGroup{Name: key.group})
190+
desc := rulespb.ToProto(key.user, key.namespace, rulefmt.RuleGroup{Name: key.group})
190191
require.NoError(t, rs.SetRuleGroup(context.Background(), key.user, key.namespace, desc))
191192
}
192193

@@ -198,7 +199,7 @@ type ruleGroupKey struct {
198199
}
199200

200201
type readOnlyRuleStore struct {
201-
rules.RuleStore
202+
rulestore.RuleStore
202203
}
203204

204205
func (r *readOnlyRuleStore) SupportsModifications() bool {

pkg/cortex/cortex.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
"github.com/cortexproject/cortex/pkg/ring"
4747
"github.com/cortexproject/cortex/pkg/ring/kv/memberlist"
4848
"github.com/cortexproject/cortex/pkg/ruler"
49-
"github.com/cortexproject/cortex/pkg/ruler/rules"
5049
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
5150
"github.com/cortexproject/cortex/pkg/scheduler"
5251
"github.com/cortexproject/cortex/pkg/storage/tsdb"
@@ -304,7 +303,7 @@ type Cortex struct {
304303
QueryFrontendTripperware queryrange.Tripperware
305304

306305
Ruler *ruler.Ruler
307-
RulerStorage rules.RuleStore
306+
RulerStorage rulestore.RuleStore
308307
ConfigAPI *configAPI.API
309308
ConfigDB db.DB
310309
Alertmanager *alertmanager.MultitenantAlertmanager

pkg/cortex/modules.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import (
3838
"github.com/cortexproject/cortex/pkg/ring/kv/codec"
3939
"github.com/cortexproject/cortex/pkg/ring/kv/memberlist"
4040
"github.com/cortexproject/cortex/pkg/ruler"
41-
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
4241
"github.com/cortexproject/cortex/pkg/scheduler"
4342
"github.com/cortexproject/cortex/pkg/storegateway"
4443
util_log "github.com/cortexproject/cortex/pkg/util/log"
@@ -646,9 +645,9 @@ func (t *Cortex) initRulerStorage() (serv services.Service, err error) {
646645
}
647646

648647
if !t.Cfg.Ruler.StoreConfig.IsDefaults() {
649-
t.RulerStorage, err = ruler.NewRuleStorage(t.Cfg.Ruler.StoreConfig, rules.FileLoader{}, util_log.Logger)
648+
t.RulerStorage, err = ruler.NewLegacyRuleStore(t.Cfg.Ruler.StoreConfig, rules.FileLoader{}, util_log.Logger)
650649
} else {
651-
t.RulerStorage, err = rulestore.NewRuleStore(context.Background(), t.Cfg.RulerStorage, t.Overrides, util_log.Logger, prometheus.DefaultRegisterer)
650+
t.RulerStorage, err = ruler.NewRuleStore(context.Background(), t.Cfg.RulerStorage, t.Overrides, util_log.Logger, prometheus.DefaultRegisterer)
652651
}
653652
return
654653
}

pkg/ruler/api.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import (
2121
"gopkg.in/yaml.v3"
2222

2323
"github.com/cortexproject/cortex/pkg/ingester/client"
24-
"github.com/cortexproject/cortex/pkg/ruler/rules"
25-
store "github.com/cortexproject/cortex/pkg/ruler/rules"
24+
store "github.com/cortexproject/cortex/pkg/ruler/rulespb"
25+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
2626
"github.com/cortexproject/cortex/pkg/tenant"
2727
util_log "github.com/cortexproject/cortex/pkg/util/log"
2828
)
@@ -122,13 +122,13 @@ func respondError(logger log.Logger, w http.ResponseWriter, msg string) {
122122
// API is used to handle HTTP requests for the ruler service
123123
type API struct {
124124
ruler *Ruler
125-
store rules.RuleStore
125+
store rulestore.RuleStore
126126

127127
logger log.Logger
128128
}
129129

130130
// NewAPI returns a new API struct with the provided ruler and rule store
131-
func NewAPI(r *Ruler, s rules.RuleStore, logger log.Logger) *API {
131+
func NewAPI(r *Ruler, s rulestore.RuleStore, logger log.Logger) *API {
132132
return &API{
133133
ruler: r,
134134
store: s,
@@ -405,7 +405,7 @@ func (a *API) ListRules(w http.ResponseWriter, req *http.Request) {
405405
return
406406
}
407407

408-
err = a.store.LoadRuleGroups(req.Context(), map[string]rules.RuleGroupList{userID: rgs})
408+
err = a.store.LoadRuleGroups(req.Context(), map[string]rulestore.RuleGroupList{userID: rgs})
409409
if err != nil {
410410
http.Error(w, err.Error(), http.StatusBadRequest)
411411
return
@@ -427,7 +427,7 @@ func (a *API) GetRuleGroup(w http.ResponseWriter, req *http.Request) {
427427

428428
rg, err := a.store.GetRuleGroup(req.Context(), userID, namespace, groupName)
429429
if err != nil {
430-
if err == store.ErrGroupNotFound {
430+
if err == rulestore.ErrGroupNotFound {
431431
http.Error(w, err.Error(), http.StatusNotFound)
432432
return
433433
}
@@ -519,7 +519,7 @@ func (a *API) DeleteNamespace(w http.ResponseWriter, req *http.Request) {
519519

520520
err = a.store.DeleteNamespace(req.Context(), userID, namespace)
521521
if err != nil {
522-
if err == rules.ErrGroupNamespaceNotFound {
522+
if err == rulestore.ErrGroupNamespaceNotFound {
523523
http.Error(w, err.Error(), http.StatusNotFound)
524524
return
525525
}
@@ -541,7 +541,7 @@ func (a *API) DeleteRuleGroup(w http.ResponseWriter, req *http.Request) {
541541

542542
err = a.store.DeleteRuleGroup(req.Context(), userID, namespace, groupName)
543543
if err != nil {
544-
if err == rules.ErrGroupNotFound {
544+
if err == rulestore.ErrGroupNotFound {
545545
http.Error(w, err.Error(), http.StatusNotFound)
546546
return
547547
}

pkg/ruler/api_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"github.com/stretchr/testify/require"
1717
"github.com/weaveworks/common/user"
1818

19-
"github.com/cortexproject/cortex/pkg/ruler/rules"
19+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
2020
"github.com/cortexproject/cortex/pkg/util/services"
2121
)
2222

@@ -171,7 +171,7 @@ func TestRuler_alerts(t *testing.T) {
171171
}
172172

173173
func TestRuler_Create(t *testing.T) {
174-
cfg, cleanup := defaultRulerConfig(newMockRuleStore(make(map[string]rules.RuleGroupList)))
174+
cfg, cleanup := defaultRulerConfig(newMockRuleStore(make(map[string]rulestore.RuleGroupList)))
175175
defer cleanup()
176176

177177
r, rcleanup := newTestRuler(t, cfg)
@@ -301,7 +301,7 @@ func TestRuler_DeleteNamespace(t *testing.T) {
301301
}
302302

303303
func TestRuler_Limits(t *testing.T) {
304-
cfg, cleanup := defaultRulerConfig(newMockRuleStore(make(map[string]rules.RuleGroupList)))
304+
cfg, cleanup := defaultRulerConfig(newMockRuleStore(make(map[string]rulestore.RuleGroupList)))
305305
defer cleanup()
306306

307307
r, rcleanup := newTestRuler(t, cfg)

pkg/ruler/manager.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"github.com/weaveworks/common/user"
2020
"golang.org/x/net/context/ctxhttp"
2121

22-
store "github.com/cortexproject/cortex/pkg/ruler/rules"
22+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
2323
)
2424

2525
type DefaultMultiTenantManager struct {
@@ -91,7 +91,7 @@ func NewDefaultMultiTenantManager(cfg Config, managerFactory ManagerFactory, reg
9191
}, nil
9292
}
9393

94-
func (r *DefaultMultiTenantManager) SyncRuleGroups(ctx context.Context, ruleGroups map[string]store.RuleGroupList) {
94+
func (r *DefaultMultiTenantManager) SyncRuleGroups(ctx context.Context, ruleGroups map[string]rulestore.RuleGroupList) {
9595
// A lock is taken to ensure if this function is called concurrently, then each call
9696
// returns after the call map files and check for updates
9797
r.userManagerMtx.Lock()
@@ -121,7 +121,7 @@ func (r *DefaultMultiTenantManager) SyncRuleGroups(ctx context.Context, ruleGrou
121121

122122
// syncRulesToManager maps the rule files to disk, detects any changes and will create/update the
123123
// the users Prometheus Rules Manager.
124-
func (r *DefaultMultiTenantManager) syncRulesToManager(ctx context.Context, user string, groups store.RuleGroupList) {
124+
func (r *DefaultMultiTenantManager) syncRulesToManager(ctx context.Context, user string, groups rulestore.RuleGroupList) {
125125
// Map the files to disk and return the file names to be passed to the users manager if they
126126
// have been updated
127127
update, files, err := r.mapper.MapRules(user, groups.Formatted())

pkg/ruler/manager_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ import (
1515
"github.com/stretchr/testify/require"
1616
"go.uber.org/atomic"
1717

18-
"github.com/cortexproject/cortex/pkg/ruler/rules"
18+
"github.com/cortexproject/cortex/pkg/ruler/rulespb"
19+
"github.com/cortexproject/cortex/pkg/ruler/rulestore"
1920
"github.com/cortexproject/cortex/pkg/util/test"
2021
)
2122

@@ -31,9 +32,9 @@ func TestSyncRuleGroups(t *testing.T) {
3132

3233
const user = "testUser"
3334

34-
userRules := map[string]rules.RuleGroupList{
35+
userRules := map[string]rulestore.RuleGroupList{
3536
user: {
36-
&rules.RuleGroupDesc{
37+
&rulespb.RuleGroupDesc{
3738
Name: "group1",
3839
Namespace: "ns",
3940
Interval: 1 * time.Minute,

0 commit comments

Comments
 (0)