Skip to content

Commit 89396df

Browse files
committed
fix(rule): trigger should not change rule string (#3867)
Signed-off-by: Jiyong Huang <huangjy@emqx.io> Signed-off-by: Song Gao <disxiaofei@163.com>
1 parent 4d94450 commit 89396df

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

internal/processor/rule.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,25 +96,30 @@ func (p *RuleProcessor) ExecUpsert(id, ruleJson string) error {
9696
return nil
9797
}
9898

99-
func (p *RuleProcessor) ExecReplaceRuleState(name string, triggered bool) (*def.Rule, error) {
100-
rule, err := p.GetRuleById(name)
99+
func (p *RuleProcessor) ExecReplaceRuleState(name string, triggered bool) error {
100+
ruleStr, err := p.GetRuleJson(name)
101101
if err != nil {
102-
return nil, err
102+
return err
103103
}
104104

105-
rule.Triggered = triggered
106-
ruleJson, err := json.Marshal(rule)
105+
ruleMap := map[string]interface{}{}
106+
err = json.Unmarshal([]byte(ruleStr), &ruleMap)
107+
if err != nil {
108+
return fmt.Errorf("Unmarshal rule %s error : %s.", name, err)
109+
}
110+
ruleMap["triggered"] = triggered
111+
ruleJson, err := json.Marshal(ruleMap)
107112
if err != nil {
108-
return nil, fmt.Errorf("Marshal rule %s error : %s.", name, err)
113+
return fmt.Errorf("Marshal rule %s error : %s.", name, err)
109114
}
110115

111116
err = p.db.Set(name, string(ruleJson))
112117
if err != nil {
113-
return nil, err
118+
return err
114119
} else {
115120
log.Infof("Rule %s is replaced.", name)
116121
}
117-
return rule, err
122+
return err
118123
}
119124

120125
func (p *RuleProcessor) GetRuleJson(id string) (string, error) {

internal/server/rest_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ func (suite *RestTestSuite) Test_rulesManageHandler() {
498498
w1 = httptest.NewRecorder()
499499
suite.r.ServeHTTP(w1, req1)
500500
returnVal, _ = io.ReadAll(w1.Result().Body)
501-
expect = `{"triggered":true,"id":"rule321","sql":"select * from alert","actions":[{"nop":{}}],"options":{"debug":false,"isEventTime":false,"lateTolerance":"1s","concurrency":1,"bufferLength":1024,"sendMetaToSink":false,"sendNilField":false,"sendError":false,"checkpointInterval":"5m0s","restartStrategy":{"delay":"1s","multiplier":2,"maxDelay":"30s","jitterFactor":0.1}}}`
501+
expect = "{\"actions\":[{\"nop\":{}}],\"id\":\"rule321\",\"sql\":\"select * from alert\",\"triggered\":true}"
502502
assert.Equal(suite.T(), expect, string(returnVal))
503503

504504
// delete rule

internal/server/rule_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (rr *RuleRegistry) upsert(id string, ruleJson string) error {
8989
func (rr *RuleRegistry) updateTrigger(id string, trigger bool) error {
9090
rr.Lock()
9191
defer rr.Unlock()
92-
_, err := ruleProcessor.ExecReplaceRuleState(id, trigger)
92+
err := ruleProcessor.ExecReplaceRuleState(id, trigger)
9393
return err
9494
}
9595

0 commit comments

Comments
 (0)