Skip to content

Commit 8ad4fc6

Browse files
feat(tablet_repair): plug tablet repair into scheduler and api
Since it also changes svc interfaces, it also runs `make generate`.
1 parent b1e43f1 commit 8ad4fc6

File tree

10 files changed

+71
-2
lines changed

10 files changed

+71
-2
lines changed

pkg/cmd/scylla-manager/server.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ func (s *server) makeServices(ctx context.Context) error {
102102
s.session,
103103
s.config.Repair,
104104
metrics.NewRepairMetrics().MustRegister(),
105+
metrics.NewTabletRepairMetrics().MustRegister(),
105106
s.clusterSvc.Client,
106107
s.clusterSvc.GetSession,
107108
s.configCacheSvc,
@@ -177,6 +178,8 @@ func (s *server) makeServices(ctx context.Context) error {
177178
s.schedSvc.SetRunner(scheduler.HealthCheckTask, s.healthSvc.Runner())
178179
s.schedSvc.SetRunner(scheduler.RepairTask,
179180
scheduler.PolicyRunner{Policy: restoreExclusiveLock, Runner: s.repairSvc.Runner(), TaskType: scheduler.RepairTask})
181+
s.schedSvc.SetRunner(scheduler.TabletRepairTask,
182+
scheduler.PolicyRunner{Policy: restoreExclusiveLock, Runner: s.repairSvc.TabletService, TaskType: scheduler.TabletRepairTask})
180183
s.schedSvc.SetRunner(scheduler.ValidateBackupTask, s.backupSvc.ValidationRunner())
181184

182185
// Add additional properties on task run.

pkg/restapi/mock_repairservice_test.go

Lines changed: 31 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/restapi/services.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/scylladb/scylla-manager/v3/pkg/service/healthcheck"
1313
"github.com/scylladb/scylla-manager/v3/pkg/service/one2onerestore"
1414
"github.com/scylladb/scylla-manager/v3/pkg/service/repair"
15+
"github.com/scylladb/scylla-manager/v3/pkg/service/repair/tablet"
1516
"github.com/scylladb/scylla-manager/v3/pkg/service/restore"
1617
"github.com/scylladb/scylla-manager/v3/pkg/service/scheduler"
1718
"github.com/scylladb/scylla-manager/v3/pkg/util/query"
@@ -57,6 +58,9 @@ type RepairService interface {
5758
GetTarget(ctx context.Context, clusterID uuid.UUID, properties json.RawMessage) (repair.Target, error)
5859
SetIntensity(ctx context.Context, runID uuid.UUID, intensity float64) error
5960
SetParallel(ctx context.Context, runID uuid.UUID, parallel int) error
61+
62+
GetTabletTarget(ctx context.Context, clusterID uuid.UUID, properties json.RawMessage) (tablet.Target, error)
63+
GetTabletProgress(ctx context.Context, clusterID, taskID, runID uuid.UUID) (tablet.Progress, error)
6064
}
6165

6266
// BackupService service interface for the REST API handlers.

pkg/restapi/task.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/scylladb/scylla-manager/v3/pkg/service/backup"
1818
"github.com/scylladb/scylla-manager/v3/pkg/service/one2onerestore"
1919
"github.com/scylladb/scylla-manager/v3/pkg/service/repair"
20+
"github.com/scylladb/scylla-manager/v3/pkg/service/repair/tablet"
2021
"github.com/scylladb/scylla-manager/v3/pkg/service/restore"
2122
"github.com/scylladb/scylla-manager/v3/pkg/service/scheduler"
2223
"github.com/scylladb/scylla-manager/v3/pkg/util"
@@ -263,6 +264,10 @@ func (h *taskHandler) validateTask(ctx context.Context, newTask *scheduler.Task,
263264
if _, err := h.Repair.GetTarget(ctx, newTask.ClusterID, p); err != nil {
264265
return errors.Wrap(err, "create repair target")
265266
}
267+
case scheduler.TabletRepairTask:
268+
if _, err := h.Repair.GetTabletTarget(ctx, newTask.ClusterID, p); err != nil {
269+
return errors.Wrap(err, "create tablet repair target")
270+
}
266271
case scheduler.ValidateBackupTask:
267272
if _, err := h.Backup.GetValidationTarget(ctx, newTask.ClusterID, p); err != nil {
268273
return errors.Wrap(err, "create backup validation target")
@@ -469,6 +474,8 @@ func (h *taskHandler) taskRunProgress(w http.ResponseWriter, r *http.Request) {
469474
switch t.Type {
470475
case scheduler.RepairTask:
471476
prog.Progress = repair.Progress{}
477+
case scheduler.TabletRepairTask:
478+
prog.Progress = tablet.Progress{}
472479
case scheduler.BackupTask:
473480
prog.Progress = backup.Progress{}
474481
case scheduler.RestoreTask:
@@ -505,6 +512,8 @@ func (h *taskHandler) taskRunProgress(w http.ResponseWriter, r *http.Request) {
505512
switch t.Type {
506513
case scheduler.RepairTask:
507514
pr, err = h.Repair.GetProgress(r.Context(), t.ClusterID, t.ID, prog.Run.ID)
515+
case scheduler.TabletRepairTask:
516+
pr, err = h.Repair.GetTabletProgress(r.Context(), t.ClusterID, t.ID, prog.Run.ID)
508517
case scheduler.BackupTask:
509518
pr, err = h.Backup.GetProgress(r.Context(), t.ClusterID, t.ID, prog.Run.ID)
510519
case scheduler.RestoreTask:

pkg/service/one2onerestore/helpers_integration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient
154154
mgrSession,
155155
repair.DefaultConfig(),
156156
metrics.NewRepairMetrics(),
157+
metrics.NewTabletRepairMetrics(),
157158
func(context.Context, uuid.UUID) (*scyllaclient.Client, error) {
158159
return client, nil
159160
},

pkg/service/repair/service.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/scylladb/scylla-manager/v3/pkg/scyllaclient"
2222
"github.com/scylladb/scylla-manager/v3/pkg/service/cluster"
2323
"github.com/scylladb/scylla-manager/v3/pkg/service/configcache"
24+
"github.com/scylladb/scylla-manager/v3/pkg/service/repair/tablet"
2425
"github.com/scylladb/scylla-manager/v3/pkg/util"
2526
"github.com/scylladb/scylla-manager/v3/pkg/util/inexlist/dcfilter"
2627
"github.com/scylladb/scylla-manager/v3/pkg/util/inexlist/ksfilter"
@@ -35,6 +36,8 @@ import (
3536

3637
// Service orchestrates cluster repairs.
3738
type Service struct {
39+
TabletService *tablet.Service
40+
3841
session gocqlx.Session
3942
config Config
4043
metrics metrics.RepairMetrics
@@ -48,7 +51,7 @@ type Service struct {
4851
mu sync.Mutex
4952
}
5053

51-
func NewService(session gocqlx.Session, config Config, metrics metrics.RepairMetrics,
54+
func NewService(session gocqlx.Session, config Config, m metrics.RepairMetrics, tm metrics.TabletRepairMetrics,
5255
scyllaClient scyllaclient.ProviderFunc, clusterSession cluster.SessionFunc, configCache configcache.ConfigCacher,
5356
logger log.Logger,
5457
) (*Service, error) {
@@ -61,9 +64,10 @@ func NewService(session gocqlx.Session, config Config, metrics metrics.RepairMet
6164
}
6265

6366
return &Service{
67+
TabletService: tablet.NewService(session, tm, scyllaClient, logger),
6468
session: session,
6569
config: config,
66-
metrics: metrics,
70+
metrics: m,
6771
scyllaClient: scyllaClient,
6872
clusterSession: clusterSession,
6973
configCache: configCache,
@@ -613,3 +617,13 @@ func getAllPrevRunIDs(session gocqlx.Session, clusterID, taskID, runID uuid.UUID
613617
runID = prevID
614618
}
615619
}
620+
621+
// GetTabletTarget returns tablet repair target.
622+
func (s *Service) GetTabletTarget(ctx context.Context, clusterID uuid.UUID, properties json.RawMessage) (tablet.Target, error) {
623+
return s.TabletService.GetTarget(ctx, clusterID, properties)
624+
}
625+
626+
// GetTabletProgress returns tablet repair progress.
627+
func (s *Service) GetTabletProgress(ctx context.Context, clusterID, taskID, runID uuid.UUID) (tablet.Progress, error) {
628+
return s.TabletService.GetProgress(ctx, clusterID, taskID, runID)
629+
}

pkg/service/repair/service_repair_integration_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C
311311
session,
312312
c,
313313
metrics.NewRepairMetrics(),
314+
metrics.NewTabletRepairMetrics(),
314315
func(context.Context, uuid.UUID) (*scyllaclient.Client, error) {
315316
return client, nil
316317
},
@@ -334,6 +335,7 @@ func newTestServiceWithClusterSession(t *testing.T, session gocqlx.Session, clie
334335
session,
335336
c,
336337
metrics.NewRepairMetrics(),
338+
metrics.NewTabletRepairMetrics(),
337339
func(context.Context, uuid.UUID) (*scyllaclient.Client, error) {
338340
return client, nil
339341
},

pkg/service/restore/helper_integration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ func newRestoreSvc(t *testing.T, mgrSession gocqlx.Session, client *scyllaclient
165165
mgrSession,
166166
repair.DefaultConfig(),
167167
metrics.NewRepairMetrics(),
168+
metrics.NewTabletRepairMetrics(),
168169
func(context.Context, uuid.UUID) (*scyllaclient.Client, error) {
169170
return client, nil
170171
},

pkg/service/restore/service_restore_integration_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ func newTestService(t *testing.T, session gocqlx.Session, client *scyllaclient.C
119119
session,
120120
repair.DefaultConfig(),
121121
metrics.NewRepairMetrics(),
122+
metrics.NewTabletRepairMetrics(),
122123
func(context.Context, uuid.UUID) (*scyllaclient.Client, error) {
123124
return client, nil
124125
},

pkg/service/scheduler/model.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const (
3030
One2OneRestoreTask TaskType = "1_1_restore"
3131
HealthCheckTask TaskType = "healthcheck"
3232
RepairTask TaskType = "repair"
33+
TabletRepairTask TaskType = "tablet_repair"
3334
SuspendTask TaskType = "suspend"
3435
ValidateBackupTask TaskType = "validate_backup"
3536

@@ -58,6 +59,8 @@ func (t *TaskType) UnmarshalText(text []byte) error {
5859
*t = HealthCheckTask
5960
case RepairTask:
6061
*t = RepairTask
62+
case TabletRepairTask:
63+
*t = TabletRepairTask
6164
case SuspendTask:
6265
*t = SuspendTask
6366
case ValidateBackupTask:

0 commit comments

Comments
 (0)