Browse Source

fix: fix start long runing schedule rule state (#2199)

Signed-off-by: yisaer <disxiaofei@163.com>
Song Gao 1 year ago
parent
commit
5bd6dcf4ae
2 changed files with 39 additions and 0 deletions
  1. 1 0
      internal/topo/rule/ruleState.go
  2. 38 0
      internal/topo/rule/ruleState_test.go

+ 1 - 0
internal/topo/rule/ruleState.go

@@ -257,6 +257,7 @@ func (rs *RuleState) Start() error {
 		}
 		// When rule is created, we need to check its schedule range before start it.
 		if !isIn {
+			rs.triggered = 2
 			return nil
 		}
 	}

+ 38 - 0
internal/topo/rule/ruleState_test.go

@@ -681,6 +681,44 @@ func TestStartLongRunningScheduleRule(t *testing.T) {
 		require.NoError(t, err)
 		require.Equal(t, state, RuleTerminated)
 	}()
+
+	r.Options.CronDatetimeRange = []api.DatetimeRange{
+		{
+			Begin: after.Format(layout),
+			End:   after.Format(layout),
+		},
+	}
+	func() {
+		rs, err := NewRuleState(r)
+		require.NoError(t, err)
+		require.NoError(t, rs.Start())
+		time.Sleep(500 * time.Millisecond)
+		state, err := rs.GetState()
+		require.NoError(t, err)
+		require.Equal(t, state, RuleWait)
+	}()
+
+	r.Options.CronDatetimeRange = []api.DatetimeRange{
+		{
+			Begin: before.Format(layout),
+			End:   after.Format(layout),
+		},
+	}
+	func() {
+		rs, err := NewRuleState(r)
+		require.NoError(t, err)
+		require.NoError(t, rs.Start())
+		time.Sleep(500 * time.Millisecond)
+		state, err := rs.GetState()
+		require.NoError(t, err)
+		require.Equal(t, state, RuleStarted)
+
+		require.NoError(t, rs.Stop())
+		time.Sleep(500 * time.Millisecond)
+		state, err = rs.GetState()
+		require.NoError(t, err)
+		require.Equal(t, state, RuleStopped)
+	}()
 }
 
 func TestRuleStateInternalStop(t *testing.T) {