Skip to content

Commit

Permalink
fix(managerclient): improve post-restore repair progress display (#4083)
Browse files Browse the repository at this point in the history
Previously all run/task properties of post-restore repair progress
were taken directly from the restore progress.
This included things like start/end time, properties,
status, cause and others. It resulted in misleading progress display.
This commit fixes that by deliberately leaving out, inheriting,
or setting interesting repair progress fields.

Fixes #4046
  • Loading branch information
Michal-Leszczynski authored Oct 30, 2024
1 parent 07ff683 commit e89a701
Showing 1 changed file with 47 additions and 13 deletions.
60 changes: 47 additions & 13 deletions v3/pkg/managerclient/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -1080,19 +1080,7 @@ func (rp RestoreProgress) Render(w io.Writer) error {
// Check if there is repair progress to display
if rp.Progress.RepairProgress != nil {
fmt.Fprintf(w, "\nPost-restore repair progress\n")

repairRunPr := &models.TaskRunRepairProgress{
Progress: rp.Progress.RepairProgress,
Run: rp.Run,
}
repairPr := RepairProgress{
TaskRunRepairProgress: repairRunPr,
Task: rp.Task,
Detailed: rp.Detailed,
keyspaceFilter: rp.KeyspaceFilter,
}

if err := repairPr.Render(w); err != nil {
if err := rp.postRestoreRepairProgress().Render(w); err != nil {
return err
}
}
Expand All @@ -1101,6 +1089,52 @@ func (rp RestoreProgress) Render(w io.Writer) error {
return nil
}

func (rp RestoreProgress) postRestoreRepairProgress() RepairProgress {
repair := rp.Progress.RepairProgress

repairRun := &models.TaskRun{
ClusterID: rp.Task.ClusterID,
Type: RepairTask,
}
if repair.StartedAt != nil {
repairRun.StartTime = *repair.StartedAt
}
if repair.CompletedAt != nil {
repairRun.EndTime = *repair.CompletedAt
}
if rp.Progress.Stage == RestoreStageRepair {
repairRun.Cause = rp.Run.Cause
repairRun.Status = rp.Run.Status
} else {
switch {
case repair.Success == repair.TokenRanges:
repairRun.Status = TaskStatusDone
case repair.Error > 0:
repairRun.Status = TaskStatusError
}
}

repairTask := &models.Task{
ClusterID: rp.Task.ClusterID,
Enabled: true,
Properties: map[string]any{
"intensity": repair.Intensity,
"parallel": repair.Parallel,
},
Type: RepairTask,
}

return RepairProgress{
TaskRunRepairProgress: &models.TaskRunRepairProgress{
Progress: repair,
Run: repairRun,
},
Task: repairTask,
Detailed: rp.Detailed,
keyspaceFilter: rp.KeyspaceFilter,
}
}

func (rp RestoreProgress) addKeyspaceProgress(t *table.Table) {
t.AddRow("Keyspace", "Progress", "Size", "Success", "Downloaded", "Failed")
t.AddSeparator()
Expand Down

0 comments on commit e89a701

Please sign in to comment.