@@ -261,32 +261,40 @@ func (me *PostgresqlService) ModifyPublicService(ctx context.Context, openIntern
261261 errRet = fmt .Errorf ("TencentCloud SDK return nil response, %s" , request .GetAction ())
262262 }
263263
264+ // Retry if status still persist after API invoked.
265+ startProgressRetries := 5
266+
264267 // check open or not
265268 err = resource .Retry (3 * readRetryTimeout , func () * resource.RetryError {
266269 instance , has , err := me .DescribePostgresqlInstanceById (ctx , instanceId )
267270 if err != nil {
268271 return retryError (err )
269- } else if has {
270- if len (instance .DBInstanceNetInfo ) > 0 {
271- for _ , v := range instance .DBInstanceNetInfo {
272- if * v .NetType == "public" {
273- if * v .Status == "opened" || * v .Status == "1" {
274- return nil
275- } else if * v .Status == "opening" || * v .Status == "initing" || * v .Status == "3" || * v .Status == "0" {
276- return resource .RetryableError (fmt .Errorf ("status %s, postgresql instance %s waiting" , * v .Status , instanceId ))
277- } else {
278- return resource .NonRetryableError (fmt .Errorf ("status %s, postgresql instance %s open public service fail" , * v .Status , instanceId ))
279- }
280- }
272+ }
273+ if ! has {
274+ return resource .NonRetryableError (fmt .Errorf ("check postgresql instance %s fail, instance is not exist" , instanceId ))
275+ }
276+ if len (instance .DBInstanceNetInfo ) == 0 {
277+ return resource .NonRetryableError (fmt .Errorf ("illegal net info of postgresql instance %s" , instanceId ))
278+ }
279+ for _ , v := range instance .DBInstanceNetInfo {
280+ if * v .NetType == "public" {
281+ if * v .Status == "opened" || * v .Status == "1" {
282+ return nil
281283 }
282- // there is no public service yet
283- return resource .RetryableError (fmt .Errorf ("cannot find public status, postgresql instance %s watiting" , instanceId ))
284- } else {
285- return resource .NonRetryableError (fmt .Errorf ("illegal net info of postgresql instance %s" , instanceId ))
284+ if * v .Status == "opening" || * v .Status == "initing" || * v .Status == "3" || * v .Status == "0" {
285+ startProgressRetries = 0
286+ return resource .RetryableError (fmt .Errorf ("status %s, postgresql instance %s waiting" , * v .Status , instanceId ))
287+ }
288+ if startProgressRetries > 0 && * v .Status == "closed" {
289+ startProgressRetries -= 1
290+ return resource .RetryableError (fmt .Errorf ("status still closed, retry remaining count: %d" , startProgressRetries ))
291+ }
292+ return resource .NonRetryableError (fmt .Errorf ("status %s, postgresql instance %s open public service fail" , * v .Status , instanceId ))
293+
286294 }
287- } else {
288- return resource .NonRetryableError (fmt .Errorf ("check postgresql instance %s fail, instance is not exist" , instanceId ))
289295 }
296+ // there is no public service yet
297+ return resource .RetryableError (fmt .Errorf ("cannot find public status, postgresql instance %s watiting" , instanceId ))
290298 })
291299 if err != nil {
292300 return err
@@ -313,32 +321,35 @@ func (me *PostgresqlService) ModifyPublicService(ctx context.Context, openIntern
313321 if response == nil || response .Response == nil {
314322 errRet = fmt .Errorf ("TencentCloud SDK return nil response, %s" , request .GetAction ())
315323 }
324+ startProgressRetries := 5
316325 // check close or not
317326 err = resource .Retry (3 * readRetryTimeout , func () * resource.RetryError {
318327 instance , has , err := me .DescribePostgresqlInstanceById (ctx , instanceId )
319328 if err != nil {
320329 return retryError (err )
321- } else if has {
322- if len (instance .DBInstanceNetInfo ) > 0 {
323- for _ , v := range instance .DBInstanceNetInfo {
324- if * v .NetType == "public" {
325- if * v .Status == "closed" || * v .Status == "2" {
326- return nil
327- } else if * v .Status == "closing" || * v .Status == "4" {
328- return resource .RetryableError (fmt .Errorf ("status %s, postgresql instance %s waiting" , * v .Status , instanceId ))
329- } else {
330- return resource .NonRetryableError (fmt .Errorf ("status %s, postgresql instance %s open public service fail" , * v .Status , instanceId ))
331- }
332- }
330+ }
331+ if ! has {
332+ return resource .NonRetryableError (fmt .Errorf ("check postgresql instance %s fail, instance is not exist" , instanceId ))
333+ }
334+ if len (instance .DBInstanceNetInfo ) == 0 {
335+ return resource .NonRetryableError (fmt .Errorf ("illegal net info of postgresql instance %s" , instanceId ))
336+ }
337+ for _ , v := range instance .DBInstanceNetInfo {
338+ if * v .NetType == "public" {
339+ if * v .Status == "closed" || * v .Status == "2" {
340+ return nil
333341 }
334- // there is no public service
335- return nil
336- } else {
337- return resource .NonRetryableError (fmt .Errorf ("illegal net info of postgresql instance %s" , instanceId ))
342+ if * v .Status == "closing" || * v .Status == "4" {
343+ return resource .RetryableError (fmt .Errorf ("status %s, postgresql instance %s waiting" , * v .Status , instanceId ))
344+ }
345+ if startProgressRetries > 0 && * v .Status == "opened" {
346+ startProgressRetries -= 1
347+ return resource .RetryableError (fmt .Errorf ("status still opened, retry remaining count: %d" , startProgressRetries ))
348+ }
349+ return resource .NonRetryableError (fmt .Errorf ("status %s, postgresql instance %s open public service fail" , * v .Status , instanceId ))
338350 }
339- } else {
340- return resource .NonRetryableError (fmt .Errorf ("check postgresql instance %s fail, instance is not exist" , instanceId ))
341351 }
352+ return nil
342353 })
343354 if err != nil {
344355 return err
0 commit comments