Skip to content

Commit be1f12f

Browse files
authored
[Fix-18061] Fix end time is empty when workflow insstance stopped by serial discard (#18076)
1 parent 70ddf72 commit be1f12f

2 files changed

Lines changed: 22 additions & 12 deletions

File tree

dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/engine/workflow/serial/AbstractSerialCommandHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.dolphinscheduler.server.master.engine.workflow.serial;
1919

2020
import org.apache.dolphinscheduler.common.enums.WorkflowExecutionStatus;
21+
import org.apache.dolphinscheduler.common.utils.DateUtils;
2122
import org.apache.dolphinscheduler.dao.entity.Command;
2223
import org.apache.dolphinscheduler.dao.entity.WorkflowInstance;
2324
import org.apache.dolphinscheduler.dao.model.SerialCommandDto;
@@ -82,6 +83,7 @@ public Void doInTransaction(TransactionStatus status) {
8283
// todo: call api to stop the workflow instance
8384
final Integer workflowInstanceId = serialCommand.getWorkflowInstanceId();
8485
final WorkflowInstance workflowInstance = workflowInstanceDao.queryById(workflowInstanceId);
86+
workflowInstance.setEndTime(DateUtils.getCurrentDate());
8587
workflowInstance.setState(WorkflowExecutionStatus.STOP);
8688
workflowInstanceDao.upsertWorkflowInstance(workflowInstance);
8789
return null;

dolphinscheduler-master/src/test/java/org/apache/dolphinscheduler/server/master/integration/cases/WorkflowStartTestCase.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -212,12 +212,16 @@ public void testStartWorkflow_with_serialDiscardStrategy() {
212212
await()
213213
.atMost(Duration.ofMinutes(1))
214214
.untilAsserted(() -> {
215-
assertThat(repository.queryWorkflowInstance(workflowInstanceId1).getState())
216-
.isEqualTo(WorkflowExecutionStatus.SUCCESS);
217-
assertThat(repository.queryWorkflowInstance(workflowInstanceId2).getState())
218-
.isEqualTo(WorkflowExecutionStatus.STOP);
219-
assertThat(repository.queryWorkflowInstance(workflowInstanceId3).getState())
220-
.isEqualTo(WorkflowExecutionStatus.STOP);
215+
final WorkflowInstance workflowInstance1 = repository.queryWorkflowInstance(workflowInstanceId1);
216+
final WorkflowInstance workflowInstance2 = repository.queryWorkflowInstance(workflowInstanceId2);
217+
final WorkflowInstance workflowInstance3 = repository.queryWorkflowInstance(workflowInstanceId3);
218+
assertThat(workflowInstance1.getState()).isEqualTo(WorkflowExecutionStatus.SUCCESS);
219+
assertThat(workflowInstance2.getState()).isEqualTo(WorkflowExecutionStatus.STOP);
220+
assertThat(workflowInstance2.getEndTime()).isNotNull();
221+
assertThat(workflowInstance2.getEndTime()).isAtLeast(workflowInstance2.getStartTime());
222+
assertThat(workflowInstance3.getState()).isEqualTo(WorkflowExecutionStatus.STOP);
223+
assertThat(workflowInstance3.getEndTime()).isNotNull();
224+
assertThat(workflowInstance3.getEndTime()).isAtLeast(workflowInstance3.getStartTime());
221225
});
222226

223227
masterContainer.assertAllResourceReleased();
@@ -241,12 +245,16 @@ public void testStartWorkflow_with_serialPriorityStrategy() {
241245
await()
242246
.atMost(Duration.ofMinutes(1))
243247
.untilAsserted(() -> {
244-
assertThat(repository.queryWorkflowInstance(workflowInstanceId1).getState())
245-
.isEqualTo(WorkflowExecutionStatus.STOP);
246-
assertThat(repository.queryWorkflowInstance(workflowInstanceId2).getState())
247-
.isEqualTo(WorkflowExecutionStatus.STOP);
248-
assertThat(repository.queryWorkflowInstance(workflowInstanceId3).getState())
249-
.isEqualTo(WorkflowExecutionStatus.SUCCESS);
248+
final WorkflowInstance workflowInstance1 = repository.queryWorkflowInstance(workflowInstanceId1);
249+
final WorkflowInstance workflowInstance2 = repository.queryWorkflowInstance(workflowInstanceId2);
250+
final WorkflowInstance workflowInstance3 = repository.queryWorkflowInstance(workflowInstanceId3);
251+
assertThat(workflowInstance1.getState()).isEqualTo(WorkflowExecutionStatus.STOP);
252+
assertThat(workflowInstance1.getEndTime()).isNotNull();
253+
assertThat(workflowInstance1.getEndTime()).isAtLeast(workflowInstance1.getStartTime());
254+
assertThat(workflowInstance2.getState()).isEqualTo(WorkflowExecutionStatus.STOP);
255+
assertThat(workflowInstance2.getEndTime()).isNotNull();
256+
assertThat(workflowInstance2.getEndTime()).isAtLeast(workflowInstance2.getStartTime());
257+
assertThat(workflowInstance3.getState()).isEqualTo(WorkflowExecutionStatus.SUCCESS);
250258
});
251259

252260
masterContainer.assertAllResourceReleased();

0 commit comments

Comments
 (0)