Skip to content

Commit 8b3f7bc

Browse files
authored
refactor: remove obsolete migration of state files to per-tenant directories (#7513)
Signed-off-by: SungJin1212 <tjdwls1201@gmail.com>
1 parent 587e4b4 commit 8b3f7bc

2 files changed

Lines changed: 0 additions & 153 deletions

File tree

pkg/alertmanager/multitenant.go

Lines changed: 0 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"flag"
66
"fmt"
7-
87
"net/http"
98
"net/url"
109
"os"
@@ -21,7 +20,6 @@ import (
2120
amconfig "github.com/prometheus/alertmanager/config"
2221
"github.com/prometheus/client_golang/prometheus"
2322
"github.com/prometheus/client_golang/prometheus/promauto"
24-
tsdb_errors "github.com/prometheus/prometheus/tsdb/errors"
2523
"github.com/weaveworks/common/httpgrpc"
2624
"github.com/weaveworks/common/httpgrpc/server"
2725
"github.com/weaveworks/common/user"
@@ -469,10 +467,6 @@ func (h *handlerForGRPCServer) ServeHTTP(w http.ResponseWriter, req *http.Reques
469467
}
470468

471469
func (am *MultitenantAlertmanager) starting(ctx context.Context) (err error) {
472-
err = am.migrateStateFilesToPerTenantDirectories()
473-
if err != nil {
474-
return err
475-
}
476470

477471
defer func() {
478472
if err == nil || am.subservices == nil {
@@ -546,119 +540,6 @@ func (am *MultitenantAlertmanager) starting(ctx context.Context) (err error) {
546540
return nil
547541
}
548542

549-
// migrateStateFilesToPerTenantDirectories migrates any existing configuration from old place to new hierarchy.
550-
// TODO: Remove in Cortex 1.11.
551-
func (am *MultitenantAlertmanager) migrateStateFilesToPerTenantDirectories() error {
552-
migrate := func(from, to string) error {
553-
level.Info(am.logger).Log("msg", "migrating alertmanager state", "from", from, "to", to)
554-
err := os.Rename(from, to)
555-
return errors.Wrapf(err, "failed to migrate alertmanager state from %v to %v", from, to)
556-
}
557-
558-
st, err := am.getObsoleteFilesPerUser()
559-
if err != nil {
560-
return errors.Wrap(err, "failed to migrate alertmanager state files")
561-
}
562-
563-
for userID, files := range st {
564-
tenantDir := am.getTenantDirectory(userID)
565-
err := os.MkdirAll(tenantDir, 0777)
566-
if err != nil {
567-
return errors.Wrapf(err, "failed to create per-tenant directory %v", tenantDir)
568-
}
569-
570-
errs := tsdb_errors.NewMulti()
571-
572-
if files.notificationLogSnapshot != "" {
573-
errs.Add(migrate(files.notificationLogSnapshot, filepath.Join(tenantDir, notificationLogSnapshot)))
574-
}
575-
576-
if files.silencesSnapshot != "" {
577-
errs.Add(migrate(files.silencesSnapshot, filepath.Join(tenantDir, silencesSnapshot)))
578-
}
579-
580-
if files.templatesDir != "" {
581-
errs.Add(migrate(files.templatesDir, filepath.Join(tenantDir, templatesDir)))
582-
}
583-
584-
if err := errs.Err(); err != nil {
585-
return err
586-
}
587-
}
588-
return nil
589-
}
590-
591-
type obsoleteStateFiles struct {
592-
notificationLogSnapshot string
593-
silencesSnapshot string
594-
templatesDir string
595-
}
596-
597-
// getObsoleteFilesPerUser returns per-user set of files that should be migrated from old structure to new structure.
598-
func (am *MultitenantAlertmanager) getObsoleteFilesPerUser() (map[string]obsoleteStateFiles, error) {
599-
files, err := os.ReadDir(am.cfg.DataDir)
600-
if err != nil {
601-
return nil, errors.Wrapf(err, "failed to list dir %v", am.cfg.DataDir)
602-
}
603-
604-
// old names
605-
const (
606-
notificationLogPrefix = "nflog:"
607-
silencesPrefix = "silences:"
608-
templates = "templates"
609-
)
610-
611-
result := map[string]obsoleteStateFiles{}
612-
613-
for _, f := range files {
614-
fullPath := filepath.Join(am.cfg.DataDir, f.Name())
615-
616-
if f.IsDir() {
617-
// Process templates dir.
618-
if f.Name() != templates {
619-
// Ignore other files -- those are likely per tenant directories.
620-
continue
621-
}
622-
623-
templateDirs, err := os.ReadDir(fullPath)
624-
if err != nil {
625-
return nil, errors.Wrapf(err, "failed to list dir %v", fullPath)
626-
}
627-
628-
// Previously templates directory contained per-tenant subdirectory.
629-
for _, d := range templateDirs {
630-
if d.IsDir() {
631-
v := result[d.Name()]
632-
v.templatesDir = filepath.Join(fullPath, d.Name())
633-
result[d.Name()] = v
634-
} else {
635-
level.Warn(am.logger).Log("msg", "ignoring unknown local file while migrating local alertmanager state files", "file", filepath.Join(fullPath, d.Name()))
636-
}
637-
}
638-
continue
639-
}
640-
641-
switch {
642-
case strings.HasPrefix(f.Name(), notificationLogPrefix):
643-
userID := strings.TrimPrefix(f.Name(), notificationLogPrefix)
644-
v := result[userID]
645-
v.notificationLogSnapshot = fullPath
646-
result[userID] = v
647-
648-
case strings.HasPrefix(f.Name(), silencesPrefix):
649-
userID := strings.TrimPrefix(f.Name(), silencesPrefix)
650-
v := result[userID]
651-
v.silencesSnapshot = fullPath
652-
result[userID] = v
653-
654-
default:
655-
level.Warn(am.logger).Log("msg", "ignoring unknown local data file while migrating local alertmanager state files", "file", fullPath)
656-
}
657-
}
658-
659-
return result, nil
660-
}
661-
662543
func (am *MultitenantAlertmanager) run(ctx context.Context) error {
663544
tick := time.NewTicker(am.cfg.PollInterval)
664545
defer tick.Stop()

pkg/alertmanager/multitenant_test.go

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -757,40 +757,6 @@ receivers:
757757
}
758758
}
759759

760-
func TestMultitenantAlertmanager_migrateStateFilesToPerTenantDirectories(t *testing.T) {
761-
ctx := context.Background()
762-
763-
const (
764-
user1 = "user1"
765-
user2 = "user2"
766-
)
767-
768-
store, err := prepareInMemoryAlertStore()
769-
require.NoError(t, err)
770-
require.NoError(t, store.SetAlertConfig(ctx, alertspb.AlertConfigDesc{
771-
User: user2,
772-
RawConfig: simpleConfigOne,
773-
Templates: []*alertspb.TemplateDesc{},
774-
}))
775-
776-
reg := prometheus.NewPedanticRegistry()
777-
cfg := mockAlertmanagerConfig(t)
778-
am, err := createMultitenantAlertmanager(cfg, nil, nil, store, nil, nil, log.NewNopLogger(), reg)
779-
require.NoError(t, err)
780-
781-
createFile(t, filepath.Join(cfg.DataDir, "nflog:"+user1))
782-
createFile(t, filepath.Join(cfg.DataDir, "silences:"+user1))
783-
createFile(t, filepath.Join(cfg.DataDir, "nflog:"+user2))
784-
createFile(t, filepath.Join(cfg.DataDir, "templates", user2, "template.tpl"))
785-
786-
require.NoError(t, am.migrateStateFilesToPerTenantDirectories())
787-
require.True(t, fileExists(t, filepath.Join(cfg.DataDir, user1, notificationLogSnapshot)))
788-
require.True(t, fileExists(t, filepath.Join(cfg.DataDir, user1, silencesSnapshot)))
789-
require.True(t, fileExists(t, filepath.Join(cfg.DataDir, user2, notificationLogSnapshot)))
790-
require.True(t, dirExists(t, filepath.Join(cfg.DataDir, user2, templatesDir)))
791-
require.True(t, fileExists(t, filepath.Join(cfg.DataDir, user2, templatesDir, "template.tpl")))
792-
}
793-
794760
func fileExists(t *testing.T, path string) bool {
795761
return checkExists(t, path, false)
796762
}

0 commit comments

Comments
 (0)