diff --git a/src/replication/ng/dao/execution.go b/src/replication/ng/dao/execution.go index b6d641a57..84ac41206 100644 --- a/src/replication/ng/dao/execution.go +++ b/src/replication/ng/dao/execution.go @@ -171,7 +171,18 @@ func updateStatusCount(execution *models.Execution, status string, delta int) er func resetExecutionStatus(execution *models.Execution) error { execution.Status = generateStatus(execution) if executionFinished(execution.Status) { - execution.EndTime = time.Now() + o := dao.GetOrmer() + sql := `select max(end_time) from replication_task where execution_id = ?` + queryParam := make([]interface{}, 1) + queryParam = append(queryParam, execution.ID) + + var et time.Time + err := o.Raw(sql, queryParam).QueryRow(&et) + if err != nil { + log.Errorf("Query end_time from tasks error execution %d: %v", execution.ID, err) + et = time.Now() + } + execution.EndTime = et } return nil } diff --git a/src/replication/ng/dao/execution_test.go b/src/replication/ng/dao/execution_test.go index a3f609445..d8ac8aace 100644 --- a/src/replication/ng/dao/execution_test.go +++ b/src/replication/ng/dao/execution_test.go @@ -179,6 +179,8 @@ func TestExecutionFill(t *testing.T) { StartTime: time.Now(), } executionID, _ := AddExecution(execution) + et1, _ := time.Parse("2016-01-02 15:04:05", "2019-03-21 08:01:01") + et2, _ := time.Parse("2016-01-02 15:04:05", "2019-04-01 10:11:53") task1 := &models.Task{ ID: 20191, ExecutionID: executionID, @@ -188,6 +190,7 @@ func TestExecutionFill(t *testing.T) { JobID: "jobID1", Status: "Succeed", StartTime: time.Now(), + EndTime: et1, } task2 := &models.Task{ ID: 20192, @@ -198,7 +201,7 @@ func TestExecutionFill(t *testing.T) { JobID: "jobID2", Status: "Stopped", StartTime: time.Now(), - EndTime: time.Now(), + EndTime: et2, } AddTask(task1) AddTask(task2) @@ -216,6 +219,7 @@ func TestExecutionFill(t *testing.T) { assert.Equal(t, 1, exe.Stopped) assert.Equal(t, 0, exe.Failed) assert.Equal(t, 1, exe.Succeed) + assert.Equal(t, et2.Second(), exe.EndTime.Second()) } func TestExecutionFill2(t *testing.T) {