Sahina Bose has uploaded a new change for review. Change subject: engine: Wait before clearing gluster tasks ......................................................................
engine: Wait before clearing gluster tasks Introduced a wait time before clearing any orphan gluster tasks to take care of possible race condition in returning task list from gluster CLI Change-Id: I3a8a4878abb7ef46adedfdb099404884419f89de Bug-Url: https://bugzilla.redhat.com/1065227 Signed-off-by: Sahina Bose <sab...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJob.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJobTest.java 2 files changed, 24 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/24712/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJob.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJob.java index 5042472..13766a1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJob.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJob.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.Backend; @@ -353,6 +354,10 @@ values.put(GlusterConstants.JOB_INFO, " "); for (Step step: steps) { + if (TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - step.getStartTime().getTime()) < 10) { + //This task has been recently created. We will give it 10 mins before clearing it. + continue; + } step.markStepEnded(JobExecutionStatus.UNKNOWN); step.setStatus(JobExecutionStatus.UNKNOWN); step.setDescription(ExecutionMessageDirector.resolveStepMessage(step.getStepType(), values)); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJobTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJobTest.java index 5bfdbe3..b6510b0 100755 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJobTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GlusterTasksSyncJobTest.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -57,7 +58,8 @@ private static final Guid[] TASK_GUIDS = {new Guid("EE111111-1111-1111-1111-111111111111"), new Guid("EE222222-2222-2222-2222-222222222222"), - new Guid("EE333333-3333-3333-3333-333333333333")}; + new Guid("EE333333-3333-3333-3333-333333333333"), + new Guid("EE444444-4444-4444-4444-444444444444")}; private static final Guid[] VOL_GUIDS = {new Guid("AA111111-1111-1111-1111-111111111111"), new Guid("AA222222-2222-2222-2222-222222222222"), @@ -144,11 +146,12 @@ @Test public void cleanOrphanTasks() { doReturn(getTasks()).when(provider).getTaskListForCluster(CLUSTER_GUIDS[1]); - doReturn(Arrays.asList(TASK_GUIDS[2])).when(provider).getMonitoredTaskIDsInDB(); + doReturn(Arrays.asList(TASK_GUIDS[2],TASK_GUIDS[3])).when(provider).getMonitoredTaskIDsInDB(); prepareMocks(); tasksSyncJob.updateGlusterAsyncTasks(); Mockito.verify(jobRepository, times(1)).updateStep(any(Step.class)); + //endStepJob will not be called for TASK_GUIDS[3], so times is = 2 Mockito.verify(taskUtils, times(2)).endStepJob(any(Step.class)); } @@ -157,7 +160,7 @@ doReturn(new HashMap<>()).when(provider).getTaskListForCluster(CLUSTER_GUIDS[1]); doReturn(Arrays.asList(TASK_GUIDS[2])).when(provider).getMonitoredTaskIDsInDB(); doReturn(null).when(volumeDao).getVolumeByGlusterTask(TASK_GUIDS[2]); - doReturn(getSteps()).when(stepDao).getStepsByExternalId(TASK_GUIDS[2]); + doReturn(getSteps(TASK_GUIDS[2])).when(stepDao).getStepsByExternalId(TASK_GUIDS[2]); tasksSyncJob.updateGlusterAsyncTasks(); Mockito.verify(taskUtils, times(1)).endStepJob(any(Step.class)); @@ -212,7 +215,7 @@ doReturn(getTasks(JobExecutionStatus.ABORTED)).when(provider).getTaskListForCluster(CLUSTER_GUIDS[1]); prepareMocks(); tasksSyncJob.updateGlusterAsyncTasks(); - Mockito.verify(jobRepository, times(0)).updateStep(any(Step.class)); + Mockito.verify(jobRepository, times(0)).updateStep(any(Step.class)); Mockito.verify(taskUtils, times(2)).endStepJob(any(Step.class)); } @@ -220,9 +223,9 @@ doReturn(getVolume(0)).when(volumeDao).getVolumeByGlusterTask(TASK_GUIDS[0]); doReturn(getVolume(1)).when(volumeDao).getVolumeByGlusterTask(TASK_GUIDS[1]); doReturn(getVolume(1)).when(volumeDao).getVolumeByGlusterTask(TASK_GUIDS[2]); - doReturn(getSteps()).when(stepDao).getStepsByExternalId(TASK_GUIDS[0]); - doReturn(getSteps()).when(stepDao).getStepsByExternalId(TASK_GUIDS[1]); - doReturn(getSteps()).when(stepDao).getStepsByExternalId(TASK_GUIDS[2]); + doReturn(getSteps(TASK_GUIDS[0])).when(stepDao).getStepsByExternalId(TASK_GUIDS[0]); + doReturn(getSteps(TASK_GUIDS[1])).when(stepDao).getStepsByExternalId(TASK_GUIDS[1]); + doReturn(getSteps(TASK_GUIDS[2])).when(stepDao).getStepsByExternalId(TASK_GUIDS[2]); } private void prepareMocksForTasksFromCLI() { @@ -232,15 +235,21 @@ doReturn(new ArrayList<Step>()).when(stepDao).getStepsByExternalId(TASK_GUIDS[1]); } - private List<Step> getSteps() { + private List<Step> getSteps(Guid taskGuid) { List<Step> steps = new ArrayList<>(); - steps.add(createStep()); + steps.add(createStep(taskGuid)); return steps; } - private Step createStep() { + private Step createStep(Guid taskGuid) { Step step = new Step(); step.setStepType(StepEnum.REBALANCING_VOLUME); + Calendar stepTime = Calendar.getInstance(); + if (taskGuid.equals(TASK_GUIDS[2])) { + //only create TASK_GUIDS[2] as older job + stepTime.set(Calendar.HOUR, stepTime.get(Calendar.HOUR) -1); + } + step.setStartTime(stepTime.getTime()); return step; } -- To view, visit http://gerrit.ovirt.org/24712 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3a8a4878abb7ef46adedfdb099404884419f89de Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sahina Bose <sab...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches