diff --git a/cmd/clickhouse/check_and_finalize.go b/cmd/clickhouse/check_and_finalize.go index 3c9d0cf..665a561 100644 --- a/cmd/clickhouse/check_and_finalize.go +++ b/cmd/clickhouse/check_and_finalize.go @@ -15,8 +15,7 @@ import ( ) const ( - defaultRestoreTimeout = 30 * time.Minute - defaultPollInterval = 10 * time.Second + defaultPollInterval = 10 * time.Second ) // Check-and-finalize command flags @@ -117,7 +116,7 @@ func waitAndFinalize(appCtx *app.Context, chClient clickhouse.Interface, operati } } - if err := restore.WaitForAPIRestore(checkStatusFn, defaultPollInterval, defaultRestoreTimeout, appCtx.Logger); err != nil { + if err := restore.WaitForAPIRestore(checkStatusFn, defaultPollInterval, appCtx.Logger); err != nil { return err } diff --git a/cmd/elasticsearch/check_and_finalize.go b/cmd/elasticsearch/check_and_finalize.go index 9acb5ec..6cd028a 100644 --- a/cmd/elasticsearch/check_and_finalize.go +++ b/cmd/elasticsearch/check_and_finalize.go @@ -105,7 +105,7 @@ func waitAndFinalize(appCtx *app.Context, repository, snapshotName string) error return appCtx.ESClient.GetRestoreStatus(repository, snapshotName) } - if err := restore.WaitForAPIRestore(checkStatusFn, 0, 0, appCtx.Logger); err != nil { + if err := restore.WaitForAPIRestore(checkStatusFn, 0, appCtx.Logger); err != nil { return err } diff --git a/internal/orchestration/restore/apirestore.go b/internal/orchestration/restore/apirestore.go index 8882774..1cd2d7c 100644 --- a/internal/orchestration/restore/apirestore.go +++ b/internal/orchestration/restore/apirestore.go @@ -8,7 +8,6 @@ import ( ) const ( - defaultAPIRestoreTimeout = 30 * time.Minute defaultAPIStatusCheckInterval = 10 * time.Second ) @@ -18,39 +17,30 @@ const ( func WaitForAPIRestore( checkStatusFn func() (string, bool, error), interval time.Duration, - timeout time.Duration, log *logger.Logger, ) error { if interval == 0 { interval = defaultAPIStatusCheckInterval } - if timeout == 0 { - timeout = defaultAPIRestoreTimeout - } - timeoutChan := time.After(timeout) ticker := time.NewTicker(interval) defer ticker.Stop() for { - select { - case <-timeoutChan: - return fmt.Errorf("timeout waiting for restore to complete") - case <-ticker.C: - statusMsg, isComplete, err := checkStatusFn() - if err != nil { - return fmt.Errorf("failed to check restore status: %w", err) - } + <-ticker.C + statusMsg, isComplete, err := checkStatusFn() + if err != nil { + return fmt.Errorf("failed to check restore status: %w", err) + } - log.Debugf("Restore status: %s (complete: %v)", statusMsg, isComplete) + log.Debugf("Restore status: %s (complete: %v)", statusMsg, isComplete) - if isComplete { - if statusMsg == "SUCCESS" || statusMsg == "PARTIAL" { - log.Debugf("Restore completed successfully") - return nil - } - return fmt.Errorf("restore failed with status: %s", statusMsg) + if isComplete { + if statusMsg == "SUCCESS" || statusMsg == "PARTIAL" { + log.Debugf("Restore completed successfully") + return nil } + return fmt.Errorf("restore failed with status: %s", statusMsg) } } } diff --git a/internal/orchestration/restore/job.go b/internal/orchestration/restore/job.go index 023f84b..dab9971 100644 --- a/internal/orchestration/restore/job.go +++ b/internal/orchestration/restore/job.go @@ -9,44 +9,38 @@ import ( ) const ( - defaultJobCompletionTimeout = 30 * time.Minute defaultJobStatusCheckInterval = 10 * time.Second ) // WaitForJobCompletion waits for a Kubernetes job to complete func WaitForJobCompletion(k8sClient *k8s.Client, namespace, jobName string, log *logger.Logger) error { - timeout := time.After(defaultJobCompletionTimeout) ticker := time.NewTicker(defaultJobStatusCheckInterval) defer ticker.Stop() for { - select { - case <-timeout: - return fmt.Errorf("timeout waiting for job to complete") - case <-ticker.C: - job, err := k8sClient.GetJob(namespace, jobName) - if err != nil { - return fmt.Errorf("failed to get job status: %w", err) - } + <-ticker.C + job, err := k8sClient.GetJob(namespace, jobName) + if err != nil { + return fmt.Errorf("failed to get job status: %w", err) + } - if job.Status.Succeeded > 0 { - return nil - } + if job.Status.Succeeded > 0 { + return nil + } - if job.Status.Failed > 0 { - // Get and print logs from failed job - log.Println() - log.Errorf("Job failed. Fetching logs...") - log.Println() - if err := PrintJobLogs(k8sClient, namespace, jobName, log); err != nil { - log.Warningf("Failed to fetch job logs: %v", err) - } - return fmt.Errorf("job failed") + if job.Status.Failed > 0 { + // Get and print logs from failed job + log.Println() + log.Errorf("Job failed. Fetching logs...") + log.Println() + if err := PrintJobLogs(k8sClient, namespace, jobName, log); err != nil { + log.Warningf("Failed to fetch job logs: %v", err) } - - log.Debugf("Job status: Active=%d, Succeeded=%d, Failed=%d", - job.Status.Active, job.Status.Succeeded, job.Status.Failed) + return fmt.Errorf("job failed") } + + log.Debugf("Job status: Active=%d, Succeeded=%d, Failed=%d", + job.Status.Active, job.Status.Succeeded, job.Status.Failed) } }