From 8818cb65d88cdd893ac5b29bef2e3f548e9f6d5b Mon Sep 17 00:00:00 2001 From: chicm-ms <38930155+chicm-ms@users.noreply.github.com> Date: Wed, 15 May 2019 10:49:41 +0800 Subject: [PATCH] Handle string type error (#1064) --- src/nni_manager/common/errors.ts | 17 +++++++++++++++++ src/nni_manager/core/ipcInterface.ts | 2 +- src/nni_manager/core/nniDataStore.ts | 6 +++--- src/nni_manager/core/nnimanager.ts | 10 +++++----- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/nni_manager/common/errors.ts b/src/nni_manager/common/errors.ts index 3cc453752c..221e40e2f1 100644 --- a/src/nni_manager/common/errors.ts +++ b/src/nni_manager/common/errors.ts @@ -35,6 +35,23 @@ export class NNIError extends Error { } this.cause = err; } + + public static FromError(err: NNIError | Error | string, messagePrefix?: string): NNIError { + const msgPrefix: string = messagePrefix === undefined ? '' : messagePrefix; + if (err instanceof NNIError) { + if (err.message !== undefined) { + err.message = msgPrefix + err.message; + } + + return err; + } else if (typeof(err) === 'string') { + return new NNIError('', msgPrefix + err); + } else if (err instanceof Error) { + return new NNIError('', msgPrefix + err.message, err); + } else { + throw new Error(`Wrong instance type: ${typeof(err)}`); + } + } } export class MethodNotImplementedError extends Error { diff --git a/src/nni_manager/core/ipcInterface.ts b/src/nni_manager/core/ipcInterface.ts index 597c6c5a51..a2e83d2f26 100644 --- a/src/nni_manager/core/ipcInterface.ts +++ b/src/nni_manager/core/ipcInterface.ts @@ -106,7 +106,7 @@ class IpcInterface { this.logger.warning('Commands jammed in buffer!'); } } catch (err) { - throw new NNIError('Dispatcher Error', `Dispatcher Error: ${err.message}`, err); + throw NNIError.FromError(err, 'Dispatcher Error: '); } } diff --git a/src/nni_manager/core/nniDataStore.ts b/src/nni_manager/core/nniDataStore.ts index 62ba05dea5..4f9f84d4b6 100644 --- a/src/nni_manager/core/nniDataStore.ts +++ b/src/nni_manager/core/nniDataStore.ts @@ -77,7 +77,7 @@ class NNIDataStore implements DataStore { try { await this.db.storeExperimentProfile(experimentProfile); } catch (err) { - throw new NNIError('Datastore error', `Datastore error: ${err.message}`, err); + throw NNIError.FromError(err, 'Datastore error: '); } } @@ -105,7 +105,7 @@ class NNIDataStore implements DataStore { return this.db.storeTrialJobEvent(event, trialJobId, timestamp, hyperParameter, jobDetail).catch( (err: Error) => { - throw new NNIError('Datastore error', `Datastore error: ${err.message}`, err); + throw NNIError.FromError(err, 'Datastore error: '); } ); } @@ -163,7 +163,7 @@ class NNIDataStore implements DataStore { timestamp: Date.now() })); } catch (err) { - throw new NNIError('Datastore error', `Datastore error: ${err.message}`, err); + throw NNIError.FromError(err, 'Datastore error'); } } diff --git a/src/nni_manager/core/nnimanager.ts b/src/nni_manager/core/nnimanager.ts index 0970be2394..53bd21ab3a 100644 --- a/src/nni_manager/core/nnimanager.ts +++ b/src/nni_manager/core/nnimanager.ts @@ -573,13 +573,13 @@ class NNIManager implements Manager { await Promise.all([ this.periodicallyUpdateExecDuration(), this.pingDispatcher().catch((err: Error) => { - throw new NNIError('Dispatcher error', `Dispatcher error: ${err.message}`, err); + throw NNIError.FromError(err, 'Dispatcher error: '); }), this.trainingService.run().catch((err: Error) => { - throw new NNIError('Training service error', `Training service error: ${err.message}`, err); + throw NNIError.FromError(err, 'Training service error: '); }), this.manageTrials().catch((err: Error) => { - throw new NNIError('Job management error', `Job management error: ${err.message}`, err); + throw NNIError.FromError(err, 'Job management error: '); })]); } @@ -591,13 +591,13 @@ class NNIManager implements Manager { } this.trainingService.addTrialJobMetricListener((metric: TrialJobMetric) => { this.onTrialJobMetrics(metric).catch((err: Error) => { - this.criticalError(new NNIError('Job metrics error', `Job metrics error: ${err.message}`, err)); + this.criticalError(NNIError.FromError(err, 'Job metrics error: ')); }); }); this.dispatcher.onCommand((commandType: string, content: string) => { this.onTunerCommand(commandType, content).catch((err: Error) => { - this.criticalError(new NNIError('Tuner command event error', `Tuner command event error: ${err.message}`, err)); + this.criticalError(NNIError.FromError(err, 'Tuner command event error: ')); }); }); }