From: Tiago Melo Date: Mon, 5 Nov 2018 11:39:29 +0000 (+0000) Subject: mgr/dashboard: Fix duplicate tasks X-Git-Tag: v14.1.0~970^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d6b057bdcd6481b0babd5c5747bb86f9778fcedb;p=ceph-ci.git mgr/dashboard: Fix duplicate tasks In certain situations a new task is already in the current summary before we manually push it to the running task list. Since we were not checking that, at the end of the operation we would have 2 entries for the same task and that would be displayed in the UI. Signed-off-by: Tiago Melo --- diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.spec.ts index 4dd03110c13..1c31f414c40 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.spec.ts @@ -95,5 +95,22 @@ describe('SummaryService', () => { name: 'rbd/delete' }); }); + + it('should call addRunningTask with duplicate task', () => { + let result = summaryService.getCurrentSummary(); + const exec_task = new ExecutingTask('rbd/delete', { + pool_name: 'somePool', + image_name: 'someImage' + }); + + result.executing_tasks = [exec_task]; + summaryService['summaryDataSource'].next(result); + result = summaryService.getCurrentSummary(); + expect(result.executing_tasks.length).toBe(1); + + summaryService.addRunningTask(exec_task); + result = summaryService.getCurrentSummary(); + expect(result.executing_tasks.length).toBe(1); + }); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.ts index fad4dd9435a..d90c16f74c7 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/services/summary.service.ts @@ -76,7 +76,12 @@ export class SummaryService { } if (_.isArray(current.executing_tasks)) { - current.executing_tasks.push(task); + const exists = current.executing_tasks.find((element) => { + return element.name === task.name && _.isEqual(element.metadata, task.metadata); + }); + if (!exists) { + current.executing_tasks.push(task); + } } else { current.executing_tasks = [task]; }