diff --git a/pkg/cmd/scylla-manager/server.go b/pkg/cmd/scylla-manager/server.go index 14d0e9b388..d7d6b82761 100644 --- a/pkg/cmd/scylla-manager/server.go +++ b/pkg/cmd/scylla-manager/server.go @@ -102,6 +102,7 @@ func (s *server) makeServices(ctx context.Context) error { metrics.NewRepairMetrics().MustRegister(), s.clusterSvc.Client, s.clusterSvc.GetSession, + s.configCacheSvc, s.logger.Named("repair"), ) if err != nil { @@ -115,6 +116,7 @@ func (s *server) makeServices(ctx context.Context) error { s.clusterSvc.GetClusterName, s.clusterSvc.Client, s.clusterSvc.GetSession, + s.configCacheSvc, s.logger.Named("backup"), ) if err != nil { @@ -128,6 +130,7 @@ func (s *server) makeServices(ctx context.Context) error { metrics.NewRestoreMetrics().MustRegister(), s.clusterSvc.Client, s.clusterSvc.GetSession, + s.configCacheSvc, s.logger.Named("restore"), ) if err != nil { diff --git a/pkg/service/backup/service.go b/pkg/service/backup/service.go index 4456517106..048fb09275 100644 --- a/pkg/service/backup/service.go +++ b/pkg/service/backup/service.go @@ -22,6 +22,7 @@ import ( "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" . "github.com/scylladb/scylla-manager/v3/pkg/service/backup/backupspec" "github.com/scylladb/scylla-manager/v3/pkg/service/cluster" + "github.com/scylladb/scylla-manager/v3/pkg/service/configcache" "github.com/scylladb/scylla-manager/v3/pkg/service/scheduler" "github.com/scylladb/scylla-manager/v3/pkg/util" "github.com/scylladb/scylla-manager/v3/pkg/util/inexlist/dcfilter" @@ -45,13 +46,15 @@ type Service struct { clusterName cluster.NameFunc scyllaClient scyllaclient.ProviderFunc clusterSession cluster.SessionFunc + configCache configcache.ConfigCacher logger log.Logger dth deduplicateTestHooks } -func NewService(session gocqlx.Session, config Config, metrics metrics.BackupMetrics, - clusterName cluster.NameFunc, scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, logger log.Logger, +func NewService(session gocqlx.Session, config Config, metrics metrics.BackupMetrics, clusterName cluster.NameFunc, + scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, configCache configcache.ConfigCacher, + logger log.Logger, ) (*Service, error) { if session.Session == nil || session.Closed() { return nil, errors.New("invalid session") @@ -76,6 +79,7 @@ func NewService(session gocqlx.Session, config Config, metrics metrics.BackupMet clusterName: clusterName, scyllaClient: scyllaClient, clusterSession: clusterSession, + configCache: configCache, logger: logger, }, nil } diff --git a/pkg/service/backup/service_backup_integration_test.go b/pkg/service/backup/service_backup_integration_test.go index 0b25c39aa1..5ed5d091c7 100644 --- a/pkg/service/backup/service_backup_integration_test.go +++ b/pkg/service/backup/service_backup_integration_test.go @@ -127,6 +127,7 @@ func newTestServiceWithUser(t *testing.T, session gocqlx.Session, client *scylla } return CreateManagedClusterSession(t, false, client, user, pass), nil }, + NewTestConfigCacheSvc(t, client.Config().Hosts), logger.Named("backup"), ) if err != nil { diff --git a/pkg/service/repair/service.go b/pkg/service/repair/service.go index 2ecc1484ba..0dc0c95aea 100644 --- a/pkg/service/repair/service.go +++ b/pkg/service/repair/service.go @@ -18,6 +18,7 @@ import ( "github.com/scylladb/scylla-manager/v3/pkg/schema/table" "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" "github.com/scylladb/scylla-manager/v3/pkg/service/cluster" + "github.com/scylladb/scylla-manager/v3/pkg/service/configcache" "github.com/scylladb/scylla-manager/v3/pkg/util" "github.com/scylladb/scylla-manager/v3/pkg/util/inexlist/dcfilter" "github.com/scylladb/scylla-manager/v3/pkg/util/inexlist/ksfilter" @@ -38,6 +39,7 @@ type Service struct { scyllaClient scyllaclient.ProviderFunc clusterSession cluster.SessionFunc + configCache configcache.ConfigCacher logger log.Logger intensityHandlers map[uuid.UUID]*intensityParallelHandler @@ -45,7 +47,8 @@ type Service struct { } func NewService(session gocqlx.Session, config Config, metrics metrics.RepairMetrics, - scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, logger log.Logger, + scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, configCache configcache.ConfigCacher, + logger log.Logger, ) (*Service, error) { if err := config.Validate(); err != nil { return nil, errors.Wrap(err, "invalid config") @@ -61,6 +64,7 @@ func NewService(session gocqlx.Session, config Config, metrics metrics.RepairMet metrics: metrics, scyllaClient: scyllaClient, clusterSession: clusterSession, + configCache: configCache, logger: logger, intensityHandlers: make(map[uuid.UUID]*intensityParallelHandler), }, nil diff --git a/pkg/service/repair/service_repair_integration_test.go b/pkg/service/repair/service_repair_integration_test.go index 6c8d5c5493..51d20a55e3 100644 --- a/pkg/service/repair/service_repair_integration_test.go +++ b/pkg/service/repair/service_repair_integration_test.go @@ -402,6 +402,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return gocqlx.Session{}, errors.New("not implemented") }, + NewTestConfigCacheSvc(t, client.Config().Hosts), logger.Named("repair"), ) if err != nil { @@ -424,6 +425,7 @@ func newTestServiceWithClusterSession(t *testing.T, session gocqlx.Session, clie func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateSession(t, client), nil }, + NewTestConfigCacheSvc(t, client.Config().Hosts), logger.Named("repair"), ) if err != nil { diff --git a/pkg/service/restore/helper_integration_test.go b/pkg/service/restore/helper_integration_test.go index 517884efcb..c4a7934780 100644 --- a/pkg/service/restore/helper_integration_test.go +++ b/pkg/service/restore/helper_integration_test.go @@ -135,6 +135,7 @@ func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient. func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateSession(t, client), nil }, + NewTestConfigCacheSvc(t, client.Config().Hosts), log.NewDevelopmentWithLevel(zapcore.ErrorLevel).Named("backup"), ) if err != nil { @@ -144,6 +145,8 @@ func newBackupSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient. } func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient.Client, user, pass string) *Service { + configCacheSvc := NewTestConfigCacheSvc(t, client.Config().Hosts) + repairSvc, err := repair.NewService( mgrSession, repair.DefaultConfig(), @@ -154,6 +157,7 @@ func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateSession(t, client), nil }, + configCacheSvc, log.NewDevelopmentWithLevel(zapcore.ErrorLevel).Named("repair"), ) if err != nil { @@ -171,6 +175,7 @@ func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateManagedClusterSession(t, false, client, user, pass), nil }, + configCacheSvc, log.NewDevelopmentWithLevel(zapcore.InfoLevel).Named("restore"), ) if err != nil { diff --git a/pkg/service/restore/service.go b/pkg/service/restore/service.go index 5de6f14a2c..82215a6c4e 100644 --- a/pkg/service/restore/service.go +++ b/pkg/service/restore/service.go @@ -15,6 +15,7 @@ import ( "github.com/scylladb/scylla-manager/v3/pkg/schema/table" "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" "github.com/scylladb/scylla-manager/v3/pkg/service/cluster" + "github.com/scylladb/scylla-manager/v3/pkg/service/configcache" "github.com/scylladb/scylla-manager/v3/pkg/service/repair" "github.com/scylladb/scylla-manager/v3/pkg/util/uuid" ) @@ -29,11 +30,13 @@ type Service struct { scyllaClient scyllaclient.ProviderFunc clusterSession cluster.SessionFunc + configCache configcache.ConfigCacher logger log.Logger } func NewService(repairSvc *repair.Service, session gocqlx.Session, config Config, metrics metrics.RestoreMetrics, - scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, logger log.Logger, + scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, configCache configcache.ConfigCacher, + logger log.Logger, ) (*Service, error) { if session.Session == nil || session.Closed() { return nil, errors.New("invalid session") @@ -53,6 +56,7 @@ func NewService(repairSvc *repair.Service, session gocqlx.Session, config Config metrics: metrics, scyllaClient: scyllaClient, clusterSession: clusterSession, + configCache: configCache, logger: logger, }, nil } diff --git a/pkg/service/restore/service_restore_integration_test.go b/pkg/service/restore/service_restore_integration_test.go index 810edbe934..39f8c0449b 100644 --- a/pkg/service/restore/service_restore_integration_test.go +++ b/pkg/service/restore/service_restore_integration_test.go @@ -109,6 +109,8 @@ func newTestClient(t *testing.T, hrt *HackableRoundTripper, logger log.Logger, c func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.Client, c Config, logger log.Logger, user, pass string) (*Service, *backup.Service) { t.Helper() + configCacheSvc := NewTestConfigCacheSvc(t, client.Config().Hosts) + repairSvc, err := repair.NewService( session, repair.DefaultConfig(), @@ -119,6 +121,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateManagedClusterSession(t, false, client, user, pass), nil }, + configCacheSvc, log.NewDevelopmentWithLevel(zapcore.ErrorLevel).Named("repair"), ) if err != nil { @@ -138,6 +141,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateManagedClusterSession(t, false, client, user, pass), nil }, + configCacheSvc, log.NewDevelopmentWithLevel(zapcore.ErrorLevel).Named("backup"), ) if err != nil { @@ -155,6 +159,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C func(ctx context.Context, clusterID uuid.UUID, _ ...cluster.SessionConfigOption) (gocqlx.Session, error) { return CreateManagedClusterSession(t, false, client, user, pass), nil }, + configCacheSvc, logger.Named("restore"), ) if err != nil { diff --git a/pkg/testutils/testhelper/helper.go b/pkg/testutils/testhelper/helper.go index b7188d7f5e..01a2b115d4 100644 --- a/pkg/testutils/testhelper/helper.go +++ b/pkg/testutils/testhelper/helper.go @@ -5,12 +5,20 @@ package testhelper import ( "context" "testing" + "time" "github.com/scylladb/go-log" "github.com/scylladb/gocqlx/v2" + "github.com/scylladb/scylla-manager/v3/pkg/config/server" + "github.com/scylladb/scylla-manager/v3/pkg/metrics" + "github.com/scylladb/scylla-manager/v3/pkg/schema/table" + "github.com/scylladb/scylla-manager/v3/pkg/service/cluster" + "github.com/scylladb/scylla-manager/v3/pkg/service/configcache" + "github.com/scylladb/scylla-manager/v3/pkg/store" "github.com/scylladb/scylla-manager/v3/pkg/scyllaclient" - "github.com/scylladb/scylla-manager/v3/pkg/testutils" + . "github.com/scylladb/scylla-manager/v3/pkg/testutils" + . "github.com/scylladb/scylla-manager/v3/pkg/testutils/db" "github.com/scylladb/scylla-manager/v3/pkg/util/uuid" ) @@ -18,7 +26,7 @@ import ( type CommonTestHelper struct { Logger log.Logger Session gocqlx.Session - Hrt *testutils.HackableRoundTripper + Hrt *HackableRoundTripper Client *scyllaclient.Client ClusterID uuid.UUID @@ -57,7 +65,7 @@ func (h *CommonTestHelper) RestartAgents() { func execOnAllHosts(h *CommonTestHelper, cmd string) { h.T.Helper() for _, host := range h.GetAllHosts() { - stdout, stderr, err := testutils.ExecOnHost(host, cmd) + stdout, stderr, err := ExecOnHost(host, cmd) if err != nil { h.T.Log("stdout", stdout) h.T.Log("stderr", stderr) @@ -65,3 +73,27 @@ func execOnAllHosts(h *CommonTestHelper, cmd string) { } } } + +// NewTestConfigCacheSvc creates default config cache service which can be used +// for testing other services relaying on it. +func NewTestConfigCacheSvc(t *testing.T, hosts []string) configcache.ConfigCacher { + t.Helper() + + session := CreateScyllaManagerDBSession(t) + secretsStore := store.NewTableStore(session, table.Secrets) + + clusterSvc, err := cluster.NewService(session, metrics.NewClusterMetrics(), secretsStore, + scyllaclient.DefaultTimeoutConfig(), server.DefaultConfig().ClientCacheTimeout, log.NewDevelopment()) + if err != nil { + t.Fatal(err) + } + + scyllaClientProvider := func(context.Context, uuid.UUID) (*scyllaclient.Client, error) { + sc := scyllaclient.TestConfig(hosts, AgentAuthToken()) + sc.Timeout = time.Second + sc.Transport = NewHackableRoundTripper(scyllaclient.DefaultTransport()) + return scyllaclient.NewClient(sc, log.NewDevelopment()) + } + + return configcache.NewService(configcache.DefaultConfig(), clusterSvc, scyllaClientProvider, secretsStore, log.NewDevelopment()) +}