Skip to content

Commit d3a7eb4

Browse files
committed
[ResponseOps][Reporting] Fix "failed to decrypt apiKey" error while disabling/enabling scheduled reports (#247236)
## Summary Fixes elastic/response-ops-team#503 This PR adds request options params to `bulkEnable` and `bulkDisable` of scheduled reports tasks. So that it uses SO scoped client to update task. ### Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios (cherry picked from commit f35125f)
1 parent 1fd010e commit d3a7eb4

4 files changed

Lines changed: 115 additions & 31 deletions

File tree

x-pack/platform/plugins/private/reporting/server/services/scheduled_reports/scheduled_reports_service.test.ts

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -753,10 +753,11 @@ describe('ScheduledReportsService', () => {
753753
},
754754
]);
755755
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
756-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
757-
'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca',
758-
'2da1cb75-04c7-4202-a9f0-f8bcce63b0f4',
759-
]);
756+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
757+
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca', '2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
758+
false,
759+
{ request: fakeRawRequest }
760+
);
760761

761762
expect(auditLogger.log).toHaveBeenCalledTimes(2);
762763
expect(auditLogger.log).toHaveBeenNthCalledWith(1, {
@@ -845,9 +846,11 @@ describe('ScheduledReportsService', () => {
845846
},
846847
]);
847848
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
848-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
849-
'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca',
850-
]);
849+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
850+
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca'],
851+
false,
852+
{ request: fakeRawRequest }
853+
);
851854

852855
expect(result).toEqual({
853856
scheduled_report_ids: ['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca'],
@@ -953,9 +956,11 @@ describe('ScheduledReportsService', () => {
953956
},
954957
]);
955958
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
956-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
957-
'2da1cb75-04c7-4202-a9f0-f8bcce63b0f4',
958-
]);
959+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
960+
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
961+
false,
962+
{ request: fakeRawRequest }
963+
);
959964

960965
expect(auditLogger.log).toHaveBeenCalledTimes(1);
961966
expect(auditLogger.log).toHaveBeenNthCalledWith(1, {
@@ -1085,10 +1090,11 @@ describe('ScheduledReportsService', () => {
10851090
);
10861091
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
10871092
// TM still called with both in case the task was not disabled
1088-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
1089-
'2da1cb75-04c7-4202-a9f0-f8bcce63b0f4',
1090-
'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca',
1091-
]);
1093+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
1094+
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4', 'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca'],
1095+
false,
1096+
{ request: fakeRawRequest }
1097+
);
10921098

10931099
expect(auditLogger.log).toHaveBeenCalledTimes(1);
10941100
expect(auditLogger.log).toHaveBeenNthCalledWith(1, {
@@ -1162,9 +1168,11 @@ describe('ScheduledReportsService', () => {
11621168
},
11631169
]);
11641170
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
1165-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
1166-
'2da1cb75-04c7-4202-a9f0-f8bcce63b0f4',
1167-
]);
1171+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
1172+
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1173+
false,
1174+
{ request: fakeRawRequest }
1175+
);
11681176

11691177
expect(auditLogger.log).toHaveBeenCalledTimes(3);
11701178
expect(auditLogger.log).toHaveBeenNthCalledWith(3, {
@@ -1240,10 +1248,11 @@ describe('ScheduledReportsService', () => {
12401248
},
12411249
]);
12421250
expect(taskManager.bulkDisable).toHaveBeenCalledTimes(1);
1243-
expect(taskManager.bulkDisable).toHaveBeenCalledWith([
1244-
'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca',
1245-
'2da1cb75-04c7-4202-a9f0-f8bcce63b0f4',
1246-
]);
1251+
expect(taskManager.bulkDisable).toHaveBeenCalledWith(
1252+
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca', '2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1253+
false,
1254+
{ request: fakeRawRequest }
1255+
);
12471256

12481257
expect(result).toEqual({
12491258
scheduled_report_ids: ['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
@@ -1337,7 +1346,8 @@ describe('ScheduledReportsService', () => {
13371346
expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1);
13381347
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
13391348
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca', '2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1340-
false
1349+
false,
1350+
{ request: fakeRawRequest }
13411351
);
13421352

13431353
expect(auditLogger.log).toHaveBeenCalledTimes(2);
@@ -1429,7 +1439,8 @@ describe('ScheduledReportsService', () => {
14291439
expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1);
14301440
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
14311441
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca'],
1432-
false
1442+
false,
1443+
{ request: fakeRawRequest }
14331444
);
14341445

14351446
expect(result).toEqual({
@@ -1538,7 +1549,8 @@ describe('ScheduledReportsService', () => {
15381549
expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1);
15391550
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
15401551
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1541-
false
1552+
false,
1553+
{ request: fakeRawRequest }
15421554
);
15431555

15441556
expect(auditLogger.log).toHaveBeenCalledTimes(1);
@@ -1671,7 +1683,8 @@ describe('ScheduledReportsService', () => {
16711683
// TM still called with both in case the task was not disabled
16721684
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
16731685
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4', 'aa8b6fb3-cf61-4903-bce3-eec9ddc823ca'],
1674-
false
1686+
false,
1687+
{ request: fakeRawRequest }
16751688
);
16761689

16771690
expect(auditLogger.log).toHaveBeenCalledTimes(1);
@@ -1748,7 +1761,8 @@ describe('ScheduledReportsService', () => {
17481761
expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1);
17491762
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
17501763
['2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1751-
false
1764+
false,
1765+
{ request: fakeRawRequest }
17521766
);
17531767

17541768
expect(auditLogger.log).toHaveBeenCalledTimes(3);
@@ -1827,7 +1841,8 @@ describe('ScheduledReportsService', () => {
18271841
expect(taskManager.bulkEnable).toHaveBeenCalledTimes(1);
18281842
expect(taskManager.bulkEnable).toHaveBeenCalledWith(
18291843
['aa8b6fb3-cf61-4903-bce3-eec9ddc823ca', '2da1cb75-04c7-4202-a9f0-f8bcce63b0f4'],
1830-
false
1844+
false,
1845+
{ request: fakeRawRequest }
18311846
);
18321847

18331848
expect(result).toEqual({

x-pack/platform/plugins/private/reporting/server/services/scheduled_reports/scheduled_reports_service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,8 +682,8 @@ export class ScheduledReportsService {
682682
updatedScheduledReportIds: Set<string>;
683683
}) {
684684
const resultFromUpdatingTasks = shouldEnable
685-
? await this.taskManager.bulkEnable(taskIdsToUpdate, false)
686-
: await this.taskManager.bulkDisable(taskIdsToUpdate);
685+
? await this.taskManager.bulkEnable(taskIdsToUpdate, false, { request: this.request })
686+
: await this.taskManager.bulkDisable(taskIdsToUpdate, false, { request: this.request });
687687

688688
for (const error of resultFromUpdatingTasks.errors) {
689689
bulkErrors.push({

x-pack/platform/plugins/shared/task_manager/server/task_scheduling.test.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,37 @@ describe('TaskScheduling', () => {
507507
5 * 60 * 1000
508508
);
509509
});
510+
test('should call store bulk update with request when provided', async () => {
511+
const task = taskManagerMock.createTask({
512+
id,
513+
enabled: false,
514+
schedule: { interval: '3h' },
515+
});
516+
mockTaskStore.bulkUpdate.mockImplementation(() =>
517+
Promise.resolve([{ tag: 'ok', value: task }])
518+
);
519+
const mockRequest = httpServerMock.createKibanaRequest();
520+
mockTaskStore.bulkGet.mockResolvedValue([asOk(task)]);
521+
522+
const taskScheduling = new TaskScheduling(taskSchedulingOpts);
523+
await taskScheduling.bulkEnable([id], false, { request: mockRequest });
524+
525+
const bulkUpdatePayload = mockTaskStore.bulkUpdate.mock.calls[0];
526+
527+
expect(bulkUpdatePayload).toEqual([
528+
[
529+
{
530+
...task,
531+
enabled: true,
532+
},
533+
],
534+
{
535+
validate: false,
536+
mergeAttributes: undefined,
537+
options: { request: mockRequest },
538+
},
539+
]);
540+
});
510541
});
511542

512543
describe('bulkDisable', () => {
@@ -587,6 +618,38 @@ describe('TaskScheduling', () => {
587618

588619
expect(bulkUpdatePayload).toHaveLength(0);
589620
});
621+
622+
test('should call store bulk update with request when provided', async () => {
623+
const task = taskManagerMock.createTask({
624+
id,
625+
enabled: true,
626+
schedule: { interval: '3h' },
627+
});
628+
mockTaskStore.bulkUpdate.mockImplementation(() =>
629+
Promise.resolve([{ tag: 'ok', value: task }])
630+
);
631+
const mockRequest = httpServerMock.createKibanaRequest();
632+
mockTaskStore.bulkGet.mockResolvedValue([asOk(task)]);
633+
634+
const taskScheduling = new TaskScheduling(taskSchedulingOpts);
635+
await taskScheduling.bulkDisable([id], false, { request: mockRequest });
636+
637+
const bulkUpdatePayload = mockTaskStore.bulkUpdate.mock.calls[0];
638+
639+
expect(bulkUpdatePayload).toEqual([
640+
[
641+
{
642+
...task,
643+
enabled: false,
644+
},
645+
],
646+
{
647+
validate: false,
648+
mergeAttributes: undefined,
649+
options: { request: mockRequest },
650+
},
651+
]);
652+
});
590653
});
591654

592655
describe('bulkUpdateState', () => {

x-pack/platform/plugins/shared/task_manager/server/task_scheduling.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,11 @@ export class TaskScheduling {
156156
);
157157
}
158158

159-
public async bulkDisable(taskIds: string[], clearStateIdsOrBoolean?: string[] | boolean) {
159+
public async bulkDisable(
160+
taskIds: string[],
161+
clearStateIdsOrBoolean?: string[] | boolean,
162+
options?: ApiKeyOptions
163+
) {
160164
return await retryableBulkUpdate({
161165
taskIds,
162166
store: this.store,
@@ -171,10 +175,11 @@ export class TaskScheduling {
171175
: {}),
172176
}),
173177
validate: false,
178+
options,
174179
});
175180
}
176181

177-
public async bulkEnable(taskIds: string[], runSoon: boolean = true) {
182+
public async bulkEnable(taskIds: string[], runSoon: boolean = true, options?: ApiKeyOptions) {
178183
return await retryableBulkUpdate({
179184
taskIds,
180185
store: this.store,
@@ -193,6 +198,7 @@ export class TaskScheduling {
193198
return { ...task, enabled: true };
194199
},
195200
validate: false,
201+
options,
196202
});
197203
}
198204

0 commit comments

Comments
 (0)