Skip to content

Commit 68566d8

Browse files
committed
fix(scf): add trigger key for delete
1 parent af345f7 commit 68566d8

File tree

2 files changed

+61
-20
lines changed

2 files changed

+61
-20
lines changed

src/modules/scf/index.js

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { sleep } = require('@ygkit/request');
22
const { Capi } = require('@tencent-sdk/capi');
33
const { TypeError, ApiError } = require('../../utils/error');
4-
const { strip } = require('../../utils');
4+
const { deepClone, strip } = require('../../utils');
55
const TagsUtils = require('../tag/index');
66
const ApigwUtils = require('../apigw/index');
77
const Cam = require('../cam/index');
@@ -182,6 +182,34 @@ class Scf {
182182
return Triggers;
183183
}
184184

185+
filterTriggers(funcInfo, events, oldList) {
186+
const deleteList = deepClone(oldList);
187+
const createList = deepClone(events);
188+
const updateList = [];
189+
events.forEach((event, index) => {
190+
const Type = Object.keys(event)[0];
191+
const triggerClass = TRIGGERS[Type];
192+
if (Type !== 'apigw') {
193+
const { triggerKey } = triggerClass.formatInputs(this.region, funcInfo, event[Type]);
194+
for (let i = 0; i < oldList.length; i++) {
195+
const curOld = oldList[i];
196+
const oldTriggerClass = TRIGGERS[curOld.Type];
197+
const oldKey = oldTriggerClass.getKey(curOld);
198+
if (oldKey === triggerKey) {
199+
deleteList[i] = null;
200+
createList[index] = null;
201+
updateList.push(createList[index]);
202+
}
203+
}
204+
}
205+
});
206+
return {
207+
updateList,
208+
deleteList: deleteList.filter((item) => item),
209+
createList: createList.filter((item) => item),
210+
};
211+
}
212+
185213
// deploy SCF triggers
186214
async deployTrigger(funcInfo, inputs) {
187215
console.log(`Deploying ${inputs.name}'s triggers in ${this.region}.`);
@@ -192,9 +220,11 @@ class Scf {
192220
// get all triggers
193221
const triggerList = await this.getTriggerList(funcInfo.FunctionName, funcInfo.Namespace);
194222

223+
const { deleteList, createList } = this.filterTriggers(funcInfo, inputs.events, triggerList);
224+
195225
// remove all old triggers
196-
for (let i = 0, len = triggerList.length; i < len; i++) {
197-
const curTrigger = triggerList[i];
226+
for (let i = 0, len = deleteList.length; i < len; i++) {
227+
const curTrigger = deleteList[i];
198228
const { Type } = curTrigger;
199229
const triggerClass = TRIGGERS[Type];
200230
if (triggerClass) {
@@ -209,8 +239,8 @@ class Scf {
209239

210240
// create all new triggers
211241
const triggerResult = [];
212-
for (let i = 0; i < inputs.events.length; i++) {
213-
const event = inputs.events[i];
242+
for (let i = 0; i < createList.length; i++) {
243+
const event = createList[i];
214244
const Type = Object.keys(event)[0];
215245
const triggerClass = TRIGGERS[Type];
216246
if (!triggerClass) {

src/modules/scf/triggers.js

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const BaseTrigger = {
22
async create(scf, region, funcInfo, inputs) {
3-
const { triggerInputs } = this.formatInputs(funcInfo, inputs);
3+
const { triggerInputs } = this.formatInputs(region, funcInfo, inputs);
44
console.log(`Creating ${triggerInputs.Type} trigger ${triggerInputs.TriggerName}`);
55
const { TriggerInfo } = await scf.request(triggerInputs);
66
return TriggerInfo;
@@ -26,8 +26,10 @@ const BaseTrigger = {
2626
};
2727

2828
const TimerTrigger = {
29-
type: 'timer',
30-
formatInputs(funcInfo, inputs) {
29+
getKey(triggerInputs) {
30+
return `${triggerInputs.Type}-${triggerInputs.TriggerName}-${triggerInputs.Qualifier}`;
31+
},
32+
formatInputs(region, funcInfo, inputs) {
3133
const { parameters, name } = inputs;
3234
const triggerInputs = {
3335
Action: 'CreateTrigger',
@@ -44,7 +46,7 @@ const TimerTrigger = {
4446
if (parameters.argument) {
4547
triggerInputs.CustomArgument = parameters.argument;
4648
}
47-
const triggerKey = `${triggerInputs.Type}-${triggerInputs.TriggerName}`;
49+
const triggerKey = this.getKey(triggerInputs);
4850

4951
return {
5052
triggerInputs,
@@ -60,7 +62,15 @@ const TimerTrigger = {
6062
};
6163

6264
const CosTrigger = {
63-
formatInputs(funcInfo, inputs) {
65+
getKey(triggerInputs) {
66+
const tempDest = JSON.stringify({
67+
bucketUrl: triggerInputs.TriggerName,
68+
event: JSON.parse(triggerInputs.TriggerDesc).event,
69+
filter: JSON.parse(triggerInputs.TriggerDesc).filter,
70+
});
71+
return `cos-${triggerInputs.TriggerName}-${tempDest}-${triggerInputs.Qualifier}`;
72+
},
73+
formatInputs(region, funcInfo, inputs) {
6474
const { parameters } = inputs;
6575
const triggerInputs = {
6676
Action: 'CreateTrigger',
@@ -79,12 +89,7 @@ const CosTrigger = {
7989
},
8090
});
8191
triggerInputs.Enable = parameters.enable ? 'OPEN' : 'CLOSE';
82-
const tempDest = JSON.stringify({
83-
bucketUrl: triggerInputs.TriggerName,
84-
event: JSON.parse(triggerInputs.TriggerDesc).event,
85-
filter: JSON.parse(triggerInputs.TriggerDesc).filter,
86-
});
87-
const triggerKey = `cos-${triggerInputs.TriggerName}-${tempDest}`;
92+
const triggerKey = this.getKey(triggerInputs);
8893

8994
return {
9095
triggerInputs,
@@ -100,7 +105,10 @@ const CosTrigger = {
100105
};
101106

102107
const CkafkaTrigger = {
103-
formatInputs(funcInfo, inputs) {
108+
getKey(triggerInputs) {
109+
return `${triggerInputs.Type}-${triggerInputs.TriggerName}-${triggerInputs.Qualifier}`;
110+
},
111+
formatInputs(region, funcInfo, inputs) {
104112
const { parameters } = inputs;
105113
const triggerInputs = {
106114
Action: 'CreateTrigger',
@@ -117,7 +125,7 @@ const CkafkaTrigger = {
117125
retry: parameters.retry,
118126
});
119127
triggerInputs.Enable = parameters.enable ? 'OPEN' : 'CLOSE';
120-
const triggerKey = `${triggerInputs.Type}-${triggerInputs.TriggerName}`;
128+
const triggerKey = this.getKey(triggerInputs);
121129

122130
return {
123131
triggerInputs,
@@ -133,7 +141,10 @@ const CkafkaTrigger = {
133141
};
134142

135143
const CmqTrigger = {
136-
formatInputs(funcInfo, inputs) {
144+
getKey(triggerInputs) {
145+
return `${triggerInputs.Type}-${triggerInputs.TriggerName}-${triggerInputs.Qualifier}`;
146+
},
147+
formatInputs(region, funcInfo, inputs) {
137148
const { parameters } = inputs;
138149
const triggerInputs = {
139150
Action: 'CreateTrigger',
@@ -150,7 +161,7 @@ const CmqTrigger = {
150161
});
151162

152163
triggerInputs.Enable = parameters.enable ? 'OPEN' : 'CLOSE';
153-
const triggerKey = `${triggerInputs.Type}-${triggerInputs.TriggerName}`;
164+
const triggerKey = this.getKey(triggerInputs);
154165

155166
return {
156167
triggerInputs,

0 commit comments

Comments
 (0)