Skip to content

Commit a0a6f5a

Browse files
authored
fix: pg - network switching polling status check (#1338)
* fix: pg - network switching polling status check * changelog 1338
1 parent 043af92 commit a0a6f5a

File tree

2 files changed

+50
-36
lines changed

2 files changed

+50
-36
lines changed

.changelog/1338.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
resource/tencentcloud_postgresql_instance: network switching polling status check
3+
```

tencentcloud/service_tencentcloud_postgresql.go

Lines changed: 47 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)