From b00fe2a4e7b4725f2de35a48c9e5696ca9718815 Mon Sep 17 00:00:00 2001 From: James Gowdy Date: Tue, 19 Jan 2021 11:27:19 +0000 Subject: [PATCH] [ML] Fix rare page crash when deleting anomaly detection job (#88622) --- .../components/job_details/format_values.js | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js index eff407a41fb0..27569b5a0173 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/format_values.js @@ -15,7 +15,15 @@ function formatData(txt) { return numeral(txt).format(DATA_FORMAT); } -export function formatValues([key, value]) { +export function formatValues(obj) { + if (!obj) { + // catch case that formatValues is called without a value. + // caused by very rare race condition when loading jobs list after deleting a job. + return ['', '']; + } + + const [key, value] = obj; + // time switch (key) { case 'finished_time': @@ -28,8 +36,7 @@ export function formatValues([key, value]) { case 'latest_empty_bucket_timestamp': case 'latest_sparse_bucket_timestamp': case 'latest_bucket_timestamp': - value = timeFormatter(value); - break; + return [key, timeFormatter(value)]; // data case 'established_model_memory': @@ -38,8 +45,7 @@ export function formatValues([key, value]) { case 'model_bytes_exceeded': case 'model_bytes_memory_limit': case 'peak_model_bytes': - value = formatData(value); - break; + return [key, formatData(value)]; // numbers case 'processed_record_count': @@ -57,8 +63,7 @@ export function formatValues([key, value]) { case 'total_partition_field_count': case 'bucket_allocation_failures_count': case 'search_count': - value = toLocaleString(value); - break; + return [key, toLocaleString(value)]; // numbers rounded to 3 decimal places case 'average_search_time_per_bucket_ms': @@ -69,13 +74,14 @@ export function formatValues([key, value]) { case 'average_bucket_processing_time_ms': case 'exponential_average_bucket_processing_time_ms': case 'exponential_average_bucket_processing_time_per_hour_ms': - value = typeof value === 'number' ? roundToDecimalPlace(value, 3).toLocaleString() : value; - break; + return [ + key, + typeof value === 'number' ? roundToDecimalPlace(value, 3).toLocaleString() : value, + ]; default: - break; + return [key, value]; } - return [key, value]; } // utility function to filter child object and arrays out of the supplied object.