Skip to content

Commit

Permalink
If a migration task isn't completed but the migration is successful, …
Browse files Browse the repository at this point in the history
…mark task as successful,

Reference: #1305

In case a migraiton task is not marked as finished (i.e. task.phase is
undefined), but its pipeline step is marked as completed succesfully
then mark the task as completed succesfully as well.

Signed-off-by: Sharon Gratch <sgratch@redhat.com>
  • Loading branch information
sgratch committed Sep 12, 2024
1 parent 28eea5e commit 4b93cc1
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { FlexItem, Popover, ProgressStep, ProgressStepper } from '@patternfly/re
import { ResourcesAlmostFullIcon, ResourcesFullIcon } from '@patternfly/react-icons';
import { Table, Tr } from '@patternfly/react-table';

import { isTaskCompletedByItsPipeline } from '../../../utils';
import { PlanVMsCellProps } from '../components';
import { NameCellRenderer } from '../components/NameCellRenderer';
import { VMData } from '../types';
Expand Down Expand Up @@ -222,7 +223,11 @@ const countTasks = (diskTransfer: V1beta1PlanStatusMigrationVmsPipeline) => {
}

const totalTasks = diskTransfer.tasks.length;
const completedTasks = diskTransfer.tasks.filter((task) => task.phase === 'Completed').length;

// search num of completed tasks (either tasks that completed successfully or ones that aren't finished but their pipeline step is).
const completedTasks = diskTransfer.tasks.filter(
(task) => task.phase === 'Completed' || isTaskCompletedByItsPipeline(task.phase, diskTransfer),
).length;

return { totalTasks, completedTasks };
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import {
} from '@patternfly/react-core';
import { TaskIcon } from '@patternfly/react-icons';

import { isTaskCompletedByItsPipeline } from '../../../utils';
import { PipelineTasksModal } from '../modals';
import { VMData } from '../types';

Expand Down Expand Up @@ -352,7 +353,11 @@ const getJobPhase = (job: IoK8sApiBatchV1Job) => {

const getPipelineTasks = (pipeline: V1beta1PlanStatusMigrationVmsPipeline) => {
const tasks = pipeline?.tasks || [];
const tasksCompleted = tasks.filter((c) => c.phase === 'Completed');

// search for all completed tasks (either tasks that completed successfully or ones that aren't finished but their pipeline step is).
const tasksCompleted = tasks.filter(
(c) => c.phase === 'Completed' || isTaskCompletedByItsPipeline(c.phase, pipeline),
);

return { total: tasks.length, completed: tasksCompleted.length, name: pipeline.name };
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { V1beta1PlanStatusMigrationVmsPipeline } from '@kubev2v/types';

/**
* Check if a given migration's pipeline step has completed successfully.
*
* @param {V1beta1PlanStatusMigrationVmsPipeline} pipeline - A given migration's pipeline step
* @returns {boolean} - True if the migration step has completed successfully, false otherwise.
*/
const hasPipelineCompleted = (pipeline: V1beta1PlanStatusMigrationVmsPipeline) => {
if (pipeline?.error) {
return false;
}

switch (pipeline?.phase) {
case 'Completed':
return true;
case 'Pending':
case 'Running':
default:
return false;
}
};

/**
* Check if the task isn't marked as finished, but its contained pipeline step has completed successfully.
*
* @param {string } taskPhase A given task phase
* @param {V1beta1PlanStatusMigrationVmsPipeline} pipeline - A given migration's pipeline step which includes the task
* @returns {boolean} - Returns True if the task isn't marked as finished, but its contained pipeline step has completed successfully.
*/
export const isTaskCompletedByItsPipeline = (
taskPhase: string,
pipeline: V1beta1PlanStatusMigrationVmsPipeline,
) => taskPhase === undefined && hasPipelineCompleted(pipeline);
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export * from './constants';
export * from './getInventoryApiUrl';
export * from './getValueByJsonPath';
export * from './hasObjectChangedInGivenFields';
export * from './hasPipelineCompleted';
export * from './hasPlanEditable';
export * from './hasPlanMappingsChanged';
export * from './mapMappingsIdsToLabels';
Expand Down

0 comments on commit 4b93cc1

Please sign in to comment.