Skip to content
This repository has been archived by the owner on Sep 18, 2024. It is now read-only.

Commit

Permalink
fix settimeout bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Ning Shang committed Nov 19, 2020
1 parent 41b6eac commit 23bb387
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 20 deletions.
12 changes: 5 additions & 7 deletions nni/tools/nnictl/launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,11 @@ def launch_experiment(args, experiment_config, mode, experiment_id):

# start a new experiment
print_normal('Starting experiment...')
# save experiment information
nnictl_experiment_config = Experiments()
nnictl_experiment_config.add_experiment(experiment_id, args.port, start_time,
experiment_config['trainingServicePlatform'],
experiment_config['experimentName'], pid=rest_process.pid, logDir=log_dir)
# set debug configuration
if mode != 'view' and experiment_config.get('debug') is None:
experiment_config['debug'] = args.debug
Expand All @@ -516,13 +521,6 @@ def launch_experiment(args, experiment_config, mode, experiment_id):
web_ui_url_list = get_local_urls(args.port)
nni_config.set_config('webuiUrl', web_ui_url_list)

# save experiment information
nnictl_experiment_config = Experiments()
nnictl_experiment_config.add_experiment(experiment_id, args.port, start_time,
experiment_config['trainingServicePlatform'],
experiment_config['experimentName'], pid=rest_process.pid,
webuiUrl=web_ui_url_list, logDir=log_dir)

print_normal(EXPERIMENT_SUCCESS_INFO % (experiment_id, ' '.join(web_ui_url_list)))
if mode != 'view' and args.foreground:
try:
Expand Down
2 changes: 0 additions & 2 deletions ts/nni_manager/common/expmanager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@

'use strict';

import { ExperimentStatus } from './manager';

abstract class ExpManager {
public abstract getExperimentsInfo(): Promise<JSON>;
public abstract setExperimentPath(newPath: string): void;
Expand Down
16 changes: 9 additions & 7 deletions ts/nni_manager/core/experimentsManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,18 +81,18 @@ class ExperimentsManager implements ExpManager {
}
});
} catch (err) {
this.log.error(err.message);
this.log.error(err);
this.log.debug(`Experiment Manager: Retry set key value: ${experimentId} {${key}: ${value}}`);
this.profileUpdateTimer[key] = setTimeout(this.setExperimentInfo, 100, experimentId, key, value);
this.profileUpdateTimer[key] = setTimeout(this.setExperimentInfo.bind(this), 100, experimentId, key, value);
}
}

private async withLock (func: Function, ...args: any): Promise<any> {
return withLock(func, this.experimentsPath, {stale: 2 * 1000, retries: 100, retryWait: 100}, ...args);
return withLock(func.bind(this), this.experimentsPath, {stale: 2 * 1000, retries: 100, retryWait: 100}, ...args);
}

private withLockSync (func: Function, ...args: any): any {
return withLockSync(func, this.experimentsPath, {stale: 2 * 1000}, ...args);
return withLockSync(func.bind(this), this.experimentsPath, {stale: 2 * 1000}, ...args);
}

private async readExperimentsInfo(): Promise<FileInfo> {
Expand All @@ -109,7 +109,7 @@ class ExperimentsManager implements ExpManager {
return {experimentId: expId, isCrashed: !alive}
}

private updateAllStatus(updateList: Array<string>, timestamp: number): {[key: string]: any} | any {
private updateAllStatus(updateList: Array<string>, timestamp: number): {[key: string]: any} | undefined {
if (timestamp !== fs.statSync(this.experimentsPath).mtimeMs) {
return;
} else {
Expand All @@ -135,14 +135,16 @@ class ExperimentsManager implements ExpManager {
private async cleanUp(): Promise<void> {
const deferred = new Deferred<void>();
if (this.isUndone()) {
setTimeout((deferred: Deferred<void>) => {
this.log.info('something undone');
setTimeout(((deferred: Deferred<void>) => {
if (this.isUndone()) {
deferred.reject(new Error('Still has undone after 5s, forced stop.'));
} else {
deferred.resolve();
}
}, 5 * 1000, deferred);
}).bind(this), 5 * 1000, deferred);
} else {
this.log.info('all done');
deferred.resolve();
}
return deferred.promise;
Expand Down
6 changes: 2 additions & 4 deletions ts/nni_manager/core/nnimanager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -795,10 +795,8 @@ class NNIManager implements Manager {
}

private setEndtime(): void {
if (status !== this.status.status) {
this.experimentProfile.endTime = Date.now();
this.experimentManager.setExperimentInfo(this.experimentProfile.id, 'endTime', this.experimentProfile.endTime);
}
this.experimentProfile.endTime = Date.now();
this.experimentManager.setExperimentInfo(this.experimentProfile.id, 'endTime', this.experimentProfile.endTime);
}

private createEmptyExperimentProfile(): ExperimentProfile {
Expand Down

0 comments on commit 23bb387

Please sign in to comment.