Skip to content

Commit 5aed632

Browse files
authored
fix(trocket): [125261403] tencentcloud_trocket_rocketmq_topic optmize read function code logic (#3425)
* add * add
1 parent ee6ab47 commit 5aed632

File tree

5 files changed

+174
-86
lines changed

5 files changed

+174
-86
lines changed

.changelog/3425.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_trocket_rocketmq_topic: optmize read function code logic
3+
```

tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic.go

Lines changed: 53 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -26,35 +26,35 @@ func ResourceTencentCloudTrocketRocketmqTopic() *schema.Resource {
2626
},
2727
Schema: map[string]*schema.Schema{
2828
"instance_id": {
29-
Required: true,
3029
Type: schema.TypeString,
30+
Required: true,
3131
ForceNew: true,
3232
Description: "Instance Id.",
3333
},
3434

3535
"topic": {
36-
Required: true,
3736
Type: schema.TypeString,
37+
Required: true,
3838
ForceNew: true,
3939
Description: "topic.",
4040
},
4141

4242
"topic_type": {
43+
Type: schema.TypeString,
4344
Required: true,
4445
ForceNew: true,
45-
Type: schema.TypeString,
4646
Description: "Topic type. `UNSPECIFIED`: not specified, `NORMAL`: normal message, `FIFO`: sequential message, `DELAY`: delayed message.",
4747
},
4848

4949
"queue_num": {
50-
Required: true,
5150
Type: schema.TypeInt,
51+
Required: true,
5252
Description: "Number of queue. Must be greater than or equal to 3.",
5353
},
5454

5555
"remark": {
56-
Optional: true,
5756
Type: schema.TypeString,
57+
Optional: true,
5858
Description: "remark.",
5959
},
6060
},
@@ -65,14 +65,14 @@ func resourceTencentCloudTrocketRocketmqTopicCreate(d *schema.ResourceData, meta
6565
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.create")()
6666
defer tccommon.InconsistentCheck(d, meta)()
6767

68-
logId := tccommon.GetLogId(tccommon.ContextNil)
69-
7068
var (
69+
logId = tccommon.GetLogId(tccommon.ContextNil)
7170
request = trocket.NewCreateTopicRequest()
7271
response = trocket.NewCreateTopicResponse()
7372
instanceId string
7473
topic string
7574
)
75+
7676
if v, ok := d.GetOk("instance_id"); ok {
7777
request.InstanceId = helper.String(v.(string))
7878
}
@@ -100,35 +100,45 @@ func resourceTencentCloudTrocketRocketmqTopicCreate(d *schema.ResourceData, meta
100100
} else {
101101
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
102102
}
103+
104+
if result == nil || result.Response == nil {
105+
return resource.NonRetryableError(fmt.Errorf("Create trocket rocketmqTopic failed, Response is nil."))
106+
}
107+
103108
response = result
104109
return nil
105110
})
111+
106112
if err != nil {
107113
log.Printf("[CRITAL]%s create trocket rocketmqTopic failed, reason:%+v", logId, err)
108114
return err
109115
}
110116

117+
if response.Response.InstanceId == nil || response.Response.Topic == nil {
118+
return fmt.Errorf("InstanceId or Topic is nil.")
119+
}
120+
111121
instanceId = *response.Response.InstanceId
112122
topic = *response.Response.Topic
113-
d.SetId(instanceId + tccommon.FILED_SP + topic)
114-
123+
d.SetId(strings.Join([]string{instanceId, topic}, tccommon.FILED_SP))
115124
return resourceTencentCloudTrocketRocketmqTopicRead(d, meta)
116125
}
117126

118127
func resourceTencentCloudTrocketRocketmqTopicRead(d *schema.ResourceData, meta interface{}) error {
119128
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.read")()
120129
defer tccommon.InconsistentCheck(d, meta)()
121130

122-
logId := tccommon.GetLogId(tccommon.ContextNil)
123-
124-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
125-
126-
service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
131+
var (
132+
logId = tccommon.GetLogId(tccommon.ContextNil)
133+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
134+
service = TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
135+
)
127136

128137
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
129138
if len(idSplit) != 2 {
130139
return fmt.Errorf("id is broken,%s", d.Id())
131140
}
141+
132142
instanceId := idSplit[0]
133143
topic := idSplit[1]
134144

@@ -138,8 +148,8 @@ func resourceTencentCloudTrocketRocketmqTopicRead(d *schema.ResourceData, meta i
138148
}
139149

140150
if rocketmqTopic == nil {
141-
d.SetId("")
142151
log.Printf("[WARN]%s resource `TrocketRocketmqTopic` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
152+
d.SetId("")
143153
return nil
144154
}
145155

@@ -170,44 +180,46 @@ func resourceTencentCloudTrocketRocketmqTopicUpdate(d *schema.ResourceData, meta
170180
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.update")()
171181
defer tccommon.InconsistentCheck(d, meta)()
172182

173-
logId := tccommon.GetLogId(tccommon.ContextNil)
174-
175-
request := trocket.NewModifyTopicRequest()
183+
var (
184+
logId = tccommon.GetLogId(tccommon.ContextNil)
185+
request = trocket.NewModifyTopicRequest()
186+
)
176187

177188
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
178189
if len(idSplit) != 2 {
179190
return fmt.Errorf("id is broken,%s", d.Id())
180191
}
192+
181193
instanceId := idSplit[0]
182194
topic := idSplit[1]
183195

184-
request.InstanceId = &instanceId
185-
request.Topic = &topic
196+
if d.HasChange("queue_num") || d.HasChange("remark") {
197+
request.InstanceId = &instanceId
198+
request.Topic = &topic
186199

187-
if d.HasChange("queue_num") {
188200
if v, ok := d.GetOkExists("queue_num"); ok {
189201
request.QueueNum = helper.IntInt64(v.(int))
190202
}
191-
}
192203

193-
if d.HasChange("remark") {
194204
if v, ok := d.GetOk("remark"); ok {
195205
request.Remark = helper.String(v.(string))
196206
}
197-
}
198207

199-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
200-
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyTopic(request)
201-
if e != nil {
202-
return tccommon.RetryError(e)
203-
} else {
204-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
208+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
209+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyTopic(request)
210+
if e != nil {
211+
return tccommon.RetryError(e)
212+
} else {
213+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
214+
}
215+
216+
return nil
217+
})
218+
219+
if err != nil {
220+
log.Printf("[CRITAL]%s update trocket rocketmqTopic failed, reason:%+v", logId, err)
221+
return err
205222
}
206-
return nil
207-
})
208-
if err != nil {
209-
log.Printf("[CRITAL]%s update trocket rocketmqTopic failed, reason:%+v", logId, err)
210-
return err
211223
}
212224

213225
return resourceTencentCloudTrocketRocketmqTopicRead(d, meta)
@@ -217,14 +229,17 @@ func resourceTencentCloudTrocketRocketmqTopicDelete(d *schema.ResourceData, meta
217229
defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.delete")()
218230
defer tccommon.InconsistentCheck(d, meta)()
219231

220-
logId := tccommon.GetLogId(tccommon.ContextNil)
221-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
232+
var (
233+
logId = tccommon.GetLogId(tccommon.ContextNil)
234+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
235+
service = TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
236+
)
222237

223-
service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
224238
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
225239
if len(idSplit) != 2 {
226240
return fmt.Errorf("id is broken,%s", d.Id())
227241
}
242+
228243
instanceId := idSplit[0]
229244
topic := idSplit[1]
230245

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,55 @@
1-
Provides a resource to create a trocket rocketmq_topic
1+
Provides a resource to create a TROCKET rocketmq topic
22

33
Example Usage
44

55
```hcl
6-
resource "tencentcloud_trocket_rocketmq_instance" "rocketmq_instance" {
7-
instance_type = "EXPERIMENT"
8-
name = "test"
9-
sku_code = "experiment_500"
10-
remark = "test"
11-
vpc_id = "vpc-xxxxx"
12-
subnet_id = "subnet-xxxxx"
13-
tags = {
14-
tag_key = "rocketmq"
15-
tag_value = "5.x"
6+
variable "availability_zone" {
7+
default = "ap-guangzhou-6"
8+
}
9+
10+
// create vpc
11+
resource "tencentcloud_vpc" "vpc" {
12+
cidr_block = "10.0.0.0/16"
13+
name = "vpc"
14+
}
15+
16+
// create subnet
17+
resource "tencentcloud_subnet" "subnet" {
18+
vpc_id = tencentcloud_vpc.vpc.id
19+
availability_zone = var.availability_zone
20+
name = "subnet"
21+
cidr_block = "10.0.1.0/24"
22+
is_multicast = false
23+
}
24+
25+
// create rocketmq instance
26+
resource "tencentcloud_trocket_rocketmq_instance" "example" {
27+
name = "tf-example"
28+
instance_type = "BASIC"
29+
sku_code = "basic_2k"
30+
remark = "remark."
31+
vpc_id = tencentcloud_vpc.vpc.id
32+
subnet_id = tencentcloud_subnet.subnet.id
33+
tags = {
34+
tag_key = "createBy"
35+
tag_value = "Terraform"
1636
}
1737
}
1838
19-
resource "tencentcloud_trocket_rocketmq_topic" "rocketmq_topic" {
20-
instance_id = tencentcloud_trocket_rocketmq_instance.rocketmq_instance.id
21-
topic = "test_topic"
39+
// create topic
40+
resource "tencentcloud_trocket_rocketmq_topic" "example" {
41+
instance_id = tencentcloud_trocket_rocketmq_instance.example.id
42+
topic = "tf-example"
2243
topic_type = "NORMAL"
2344
queue_num = 4
24-
remark = "test for terraform"
45+
remark = "remark."
2546
}
2647
```
2748

2849
Import
2950

30-
trocket rocketmq_topic can be imported using the id, e.g.
51+
TROCKET rocketmq topic can be imported using the id, e.g.
3152

3253
```
33-
terraform import tencentcloud_trocket_rocketmq_topic.rocketmq_topic instanceId#topic
34-
```
54+
terraform import tencentcloud_trocket_rocketmq_topic.example rmq-1zj5vokgn#tf-example
55+
```

tencentcloud/services/trocket/service_tencentcloud_trocket.go

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package trocket
22

33
import (
44
"context"
5+
"fmt"
56
"log"
67

78
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -91,6 +92,7 @@ func (me *TrocketService) DescribeTrocketRocketmqTopicById(ctx context.Context,
9192
logId := tccommon.GetLogId(ctx)
9293

9394
request := trocket.NewDescribeTopicListRequest()
95+
response := trocket.NewDescribeTopicListResponse()
9496
request.InstanceId = &instanceId
9597
filter := &trocket.Filter{
9698
Name: helper.String("TopicName"),
@@ -104,26 +106,41 @@ func (me *TrocketService) DescribeTrocketRocketmqTopicById(ctx context.Context,
104106
}
105107
}()
106108

107-
ratelimit.Check(request.GetAction())
108-
109109
var (
110-
offset int64 = 0
111-
limit int64 = 100
110+
offset int64 = 0
111+
limit int64 = 100
112+
instances = make([]*trocket.TopicItem, 0)
112113
)
113-
instances := make([]*trocket.TopicItem, 0)
114+
114115
for {
115116
request.Offset = &offset
116117
request.Limit = &limit
117-
response, err := me.client.UseTrocketClient().DescribeTopicList(request)
118+
ratelimit.Check(request.GetAction())
119+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
120+
result, e := me.client.UseTrocketClient().DescribeTopicList(request)
121+
if e != nil {
122+
return tccommon.RetryError(e)
123+
} else {
124+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
125+
}
126+
127+
if result == nil || result.Response == nil {
128+
return resource.NonRetryableError(fmt.Errorf("Describe topicList failed, Response is nil."))
129+
}
130+
131+
response = result
132+
return nil
133+
})
134+
118135
if err != nil {
119136
errRet = err
120137
return
121138
}
122-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
123139

124140
if response == nil || len(response.Response.Data) < 1 {
125141
break
126142
}
143+
127144
instances = append(instances, response.Response.Data...)
128145
if len(response.Response.Data) < int(limit) {
129146
break
@@ -132,10 +149,13 @@ func (me *TrocketService) DescribeTrocketRocketmqTopicById(ctx context.Context,
132149
offset += limit
133150
}
134151

135-
if len(instances) < 1 {
136-
return
152+
for _, item := range instances {
153+
if *item.Topic == topic {
154+
rocketmqTopic = item
155+
break
156+
}
137157
}
138-
rocketmqTopic = instances[0]
158+
139159
return
140160
}
141161

@@ -152,14 +172,22 @@ func (me *TrocketService) DeleteTrocketRocketmqTopicById(ctx context.Context, in
152172
}
153173
}()
154174

155-
ratelimit.Check(request.GetAction())
175+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
176+
ratelimit.Check(request.GetAction())
177+
result, e := me.client.UseTrocketClient().DeleteTopic(request)
178+
if e != nil {
179+
return tccommon.RetryError(e)
180+
} else {
181+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
182+
}
183+
184+
return nil
185+
})
156186

157-
response, err := me.client.UseTrocketClient().DeleteTopic(request)
158187
if err != nil {
159188
errRet = err
160189
return
161190
}
162-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
163191

164192
return
165193
}

0 commit comments

Comments
 (0)