Unverified Commit e3332641 authored by SparkSnail's avatar SparkSnail Committed by GitHub
Browse files

Fix remote TrainingService bug, change forEach to "for of" (#564)

trial job could not be stopped in remote machine when experiment is stopped, because awit/async does not work normally in forEach, refer https://codeburst.io/javascript-async-await-with-foreach-b6ba62bbf404.
parent 949aacbd
......@@ -81,19 +81,19 @@ abstract class KubernetesTrainingService {
}
}
public listTrialJobs(): Promise<TrialJobDetail[]> {
public async listTrialJobs(): Promise<TrialJobDetail[]> {
const jobs: TrialJobDetail[] = [];
this.trialJobsMap.forEach(async (value: KubernetesTrialJobDetail, key: string) => {
for (const [key, value] of this.trialJobsMap) {
if (value.form.jobType === 'TRIAL') {
jobs.push(await this.getTrialJob(key));
}
});
};
return Promise.resolve(jobs);
}
public getTrialJob(trialJobId: string): Promise<TrialJobDetail> {
public async getTrialJob(trialJobId: string): Promise<TrialJobDetail> {
const kubernetesTrialJob: TrialJobDetail | undefined = this.trialJobsMap.get(trialJobId);
......
......@@ -104,16 +104,16 @@ class PAITrainingService implements TrainingService {
public async listTrialJobs(): Promise<TrialJobDetail[]> {
const jobs: TrialJobDetail[] = [];
this.trialJobsMap.forEach(async (value: PAITrialJobDetail, key: string) => {
for (const [key, value] of this.trialJobsMap) {
if (value.form.jobType === 'TRIAL') {
jobs.push(await this.getTrialJob(key));
}
});
};
return Promise.resolve(jobs);
}
public getTrialJob(trialJobId: string): Promise<TrialJobDetail> {
public async getTrialJob(trialJobId: string): Promise<TrialJobDetail> {
if(!this.paiClusterConfig) {
throw new Error('PAI Cluster config is not initialized');
}
......
......@@ -110,15 +110,15 @@ class RemoteMachineTrainingService implements TrainingService {
/**
* List submitted trial jobs
*/
public listTrialJobs(): Promise<TrialJobDetail[]> {
public async listTrialJobs(): Promise<TrialJobDetail[]> {
const jobs: TrialJobDetail[] = [];
const deferred: Deferred<TrialJobDetail[]> = new Deferred<TrialJobDetail[]>();
this.trialJobsMap.forEach(async (value: RemoteMachineTrialJobDetail, key: string) => {
for (const [key, value] of this.trialJobsMap) {
if (value.form.jobType === 'TRIAL') {
jobs.push(await this.getTrialJob(key));
}
});
};
deferred.resolve(jobs);
return deferred.promise;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment