From 540a7d1b97ef4e882f2be13f79bf14da69817e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Wed, 15 Jul 2020 11:53:33 +0200 Subject: [PATCH 1/3] rdb: add wait function for instance logs --- api/rdb/v1/rdb_utils.go | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/api/rdb/v1/rdb_utils.go b/api/rdb/v1/rdb_utils.go index e0178206..2cb7133e 100644 --- a/api/rdb/v1/rdb_utils.go +++ b/api/rdb/v1/rdb_utils.go @@ -108,3 +108,49 @@ func (s *API) WaitForDatabaseBackup(req *WaitForDatabaseBackupRequest) (*Databas } return backup.(*DatabaseBackup), nil } + +type WaitForInstanceLogsRequest struct { + InstanceLogID string + Region scw.Region + Timeout *time.Duration + RetryInterval *time.Duration +} + +// WaitForInstanceLogs waits for the instance logs to be in a "terminal state" before returning. +// This function can be used to wait for an instance logs to be ready for example. +func (s *API) WaitForInstanceLogs(req *WaitForInstanceLogsRequest) (*InstanceLog, error) { + timeout := defaultTimeout + if req.Timeout != nil { + timeout = *req.Timeout + } + retryInterval := defaultRetryInterval + if req.RetryInterval != nil { + retryInterval = *req.RetryInterval + } + + terminalStatus := map[InstanceLogStatus]struct{}{ + InstanceLogStatusReady: {}, + InstanceLogStatusError: {}, + } + + logs, err := async.WaitSync(&async.WaitSyncConfig{ + Get: func() (interface{}, bool, error) { + res, err := s.GetInstanceLog(&GetInstanceLogRequest{ + Region: req.Region, + }) + + if err != nil { + return nil, false, err + } + _, isTerminal := terminalStatus[res.Status] + + return res, isTerminal, nil + }, + Timeout: timeout, + IntervalStrategy: async.LinearIntervalStrategy(retryInterval), + }) + if err != nil { + return nil, errors.Wrap(err, "waiting for instance logs failed") + } + return logs.(*InstanceLog), nil +} From 8f0bf486644d180833c11438576562ca258a3948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Wed, 15 Jul 2020 11:57:58 +0200 Subject: [PATCH 2/3] Fix --- api/rdb/v1/rdb_utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/rdb/v1/rdb_utils.go b/api/rdb/v1/rdb_utils.go index 2cb7133e..b16ea570 100644 --- a/api/rdb/v1/rdb_utils.go +++ b/api/rdb/v1/rdb_utils.go @@ -109,7 +109,7 @@ func (s *API) WaitForDatabaseBackup(req *WaitForDatabaseBackupRequest) (*Databas return backup.(*DatabaseBackup), nil } -type WaitForInstanceLogsRequest struct { +type WaitForInstanceLogRequest struct { InstanceLogID string Region scw.Region Timeout *time.Duration @@ -118,7 +118,7 @@ type WaitForInstanceLogsRequest struct { // WaitForInstanceLogs waits for the instance logs to be in a "terminal state" before returning. // This function can be used to wait for an instance logs to be ready for example. -func (s *API) WaitForInstanceLogs(req *WaitForInstanceLogsRequest) (*InstanceLog, error) { +func (s *API) WaitForInstanceLogs(req *WaitForInstanceLogRequest) (*InstanceLog, error) { timeout := defaultTimeout if req.Timeout != nil { timeout = *req.Timeout From 24c994d13b8b0d0054105835d876ba83f2accfcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= Date: Wed, 15 Jul 2020 11:58:55 +0200 Subject: [PATCH 3/3] Fix --- api/rdb/v1/rdb_utils.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/rdb/v1/rdb_utils.go b/api/rdb/v1/rdb_utils.go index b16ea570..f30b58af 100644 --- a/api/rdb/v1/rdb_utils.go +++ b/api/rdb/v1/rdb_utils.go @@ -116,9 +116,9 @@ type WaitForInstanceLogRequest struct { RetryInterval *time.Duration } -// WaitForInstanceLogs waits for the instance logs to be in a "terminal state" before returning. +// WaitForInstanceLog waits for the instance logs to be in a "terminal state" before returning. // This function can be used to wait for an instance logs to be ready for example. -func (s *API) WaitForInstanceLogs(req *WaitForInstanceLogRequest) (*InstanceLog, error) { +func (s *API) WaitForInstanceLog(req *WaitForInstanceLogRequest) (*InstanceLog, error) { timeout := defaultTimeout if req.Timeout != nil { timeout = *req.Timeout