mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[Cloud Security] Restarting transform on failure (#161192)
This commit is contained in:
parent
b641a22438
commit
9c8b63a878
2 changed files with 28 additions and 8 deletions
|
@ -82,7 +82,7 @@ describe('startTransformIfNotStarted', () => {
|
|||
jest.resetAllMocks();
|
||||
});
|
||||
|
||||
['failed', 'stopping', 'started', 'aborting', 'indexing'].forEach((state) =>
|
||||
['stopping', 'started', 'aborting', 'indexing'].forEach((state) =>
|
||||
it(`expect not to start if state is ${state}`, async () => {
|
||||
mockEsClient.transform.getTransformStats.mockResolvedValue({
|
||||
transforms: [getTransformWithState(state)],
|
||||
|
@ -125,4 +125,20 @@ describe('startTransformIfNotStarted', () => {
|
|||
transform_id: latestFindingsTransform.transform_id,
|
||||
});
|
||||
});
|
||||
|
||||
it('expect to attempt restart if state is failed', async () => {
|
||||
mockEsClient.transform.getTransformStats.mockResolvedValue({
|
||||
transforms: [getTransformWithState('failed')],
|
||||
count: 1,
|
||||
});
|
||||
await startTransformIfNotStarted(mockEsClient, latestFindingsTransform.transform_id, logger);
|
||||
expect(mockEsClient.transform.getTransformStats).toHaveBeenCalledTimes(1);
|
||||
expect(mockEsClient.transform.getTransformStats).toHaveBeenCalledWith({
|
||||
transform_id: latestFindingsTransform.transform_id,
|
||||
});
|
||||
expect(mockEsClient.transform.startTransform).toHaveBeenCalledTimes(1);
|
||||
expect(mockEsClient.transform.startTransform).toHaveBeenCalledWith({
|
||||
transform_id: latestFindingsTransform.transform_id,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -85,23 +85,27 @@ export const startTransformIfNotStarted = async (
|
|||
const transformStats = await esClient.transform.getTransformStats({
|
||||
transform_id: transformId,
|
||||
});
|
||||
|
||||
if (transformStats.count <= 0) {
|
||||
logger.error(`Failed starting transform ${transformId}: couldn't find transform`);
|
||||
return;
|
||||
}
|
||||
|
||||
const fetchedTransformStats = transformStats.transforms[0];
|
||||
if (fetchedTransformStats.state === 'stopped') {
|
||||
|
||||
// trying to restart the transform in case it comes to a full stop or failure
|
||||
if (fetchedTransformStats.state === 'stopped' || fetchedTransformStats.state === 'failed') {
|
||||
try {
|
||||
return await esClient.transform.startTransform({ transform_id: transformId });
|
||||
} catch (startErr) {
|
||||
const startError = transformError(startErr);
|
||||
logger.error(`Failed starting transform ${transformId}: ${startError.message}`);
|
||||
logger.error(
|
||||
`Failed to start transform ${transformId}. Transform State: Transform State: ${fetchedTransformStats.state}. Error: ${startError.message}`
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
fetchedTransformStats.state === 'stopping' ||
|
||||
fetchedTransformStats.state === 'aborting' ||
|
||||
fetchedTransformStats.state === 'failed'
|
||||
) {
|
||||
}
|
||||
|
||||
if (fetchedTransformStats.state === 'stopping' || fetchedTransformStats.state === 'aborting') {
|
||||
logger.error(
|
||||
`Not starting transform ${transformId} since it's state is: ${fetchedTransformStats.state}`
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue