Skip to content
Snippets Groups Projects
Commit a39e5127 authored by Jan Kožusznik's avatar Jan Kožusznik
Browse files

feat: iss1095

implementation of feature
formating of BenchmarkJob - change order of methods
parent 5c69d7aa
No related branches found
No related tags found
No related merge requests found
...@@ -330,8 +330,8 @@ public class Job { ...@@ -330,8 +330,8 @@ public class Job {
propertyHolder.setValue(name, value); propertyHolder.setValue(name, value);
} }
public void setProperty(String jobNeedsUpload, boolean b) { public void setProperty(String name, boolean value) {
propertyHolder.setValue(jobNeedsUpload, "" + b); propertyHolder.setValue(name, "" + value);
} }
public String getProperty(String name) { public String getProperty(String name) {
......
...@@ -23,7 +23,11 @@ public class PropertyHolder { ...@@ -23,7 +23,11 @@ public class PropertyHolder {
public void setValue(String key, String value) { public void setValue(String key, String value) {
Properties prop = getProperties(); Properties prop = getProperties();
prop.setProperty(key, value); if(value != null) {
prop.setProperty(key, value);
} else {
prop.remove(key);
}
try { try {
storeProperties(prop); storeProperties(prop);
} catch (IOException e) { } catch (IOException e) {
......
...@@ -6,6 +6,7 @@ import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HAAS_UPDATE_TIMEOU ...@@ -6,6 +6,7 @@ import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HAAS_UPDATE_TIMEOU
import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HDF5_XML_FILENAME; import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.HDF5_XML_FILENAME;
import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.SPIM_OUTPUT_FILENAME_PATTERN; import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.SPIM_OUTPUT_FILENAME_PATTERN;
import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO; import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.UI_TO_HAAS_FREQUENCY_UPDATE_RATIO;
import static cz.it4i.fiji.haas_spim_benchmark.core.Constants.VERIFIED_STATE_OF_FINISHED_JOB;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.Closeable; import java.io.Closeable;
...@@ -89,41 +90,45 @@ public class BenchmarkJobManager implements Closeable { ...@@ -89,41 +90,45 @@ public class BenchmarkJobManager implements Closeable {
nonTaskSpecificErrors = new LinkedList<>(); nonTaskSpecificErrors = new LinkedList<>();
computationAccessor = getComputationAccessor(); computationAccessor = getComputationAccessor();
} }
public void setDownloadNotifier(Progress progress) {
job.setDownloadNotifier(downloadNotifier =
createDownloadNotifierProcessingResultCSV(convertToProgressNotifier(
progress)));
}
public void setUploadNotifier(Progress progress) {
job.setUploadNotifier(convertToProgressNotifier(progress));
}
public synchronized void startJob(Progress progress) throws IOException { public synchronized void startJob(Progress progress) throws IOException {
job.uploadFile(Constants.CONFIG_YAML, new ProgressNotifierAdapter(progress)); job.uploadFile(Constants.CONFIG_YAML, new ProgressNotifierAdapter(progress));
LoadedYAML yaml = new LoadedYAML(job.openLocalFile(Constants.CONFIG_YAML)); LoadedYAML yaml = new LoadedYAML(job.openLocalFile(Constants.CONFIG_YAML));
verifiedState = null;
verifiedStateProcessed = false; verifiedStateProcessed = false;
running = null; running = null;
String message = "Submitting job id #"+getId();
progress.addItem(message);
job.updateInfo();
JobState oldState = updateAndGetState();
job.submit(); job.submit();
setVerifiedState(null);
while(oldState == updateAndGetState()){
try {
Thread.sleep(Constants.WAIT_FOR_SUBMISSION_TIMEOUT);
}
catch (InterruptedException exc) {
log.error(exc.getMessage(), exc);
}
}
progress.itemDone(message);
job.setProperty(SPIM_OUTPUT_FILENAME_PATTERN, job.setProperty(SPIM_OUTPUT_FILENAME_PATTERN,
yaml.getCommonProperty(FUSION_SWITCH) + "_" + yaml.getCommonProperty(HDF5_XML_FILENAME)); yaml.getCommonProperty(FUSION_SWITCH) + "_" + yaml.getCommonProperty(HDF5_XML_FILENAME));
} }
public JobState getState() { public boolean delete() {
return getStateAsync(r -> r.run()).getNow(JobState.Unknown); return job.delete();
} }
public void startUpload() { public void cancelJob() {
job.startUploadData(); job.cancelJob();
} }
public void stopUpload() { public JobState getState() {
job.stopUploadData(); return getStateAsync(r -> r.run()).getNow(JobState.Unknown);
} }
public synchronized CompletableFuture<JobState> getStateAsync(Executor executor) { public synchronized CompletableFuture<JobState> getStateAsync(Executor executor) {
if (running != null) { if (running != null) {
return running; return running;
...@@ -135,6 +140,34 @@ public class BenchmarkJobManager implements Closeable { ...@@ -135,6 +140,34 @@ public class BenchmarkJobManager implements Closeable {
return result; return result;
} }
public void update() {
job.updateInfo();
}
public void startUpload() {
job.startUploadData();
}
public void stopUpload() {
job.stopUploadData();
}
public boolean needsUpload() {
return job.needsUpload();
}
public void setUploadNotifier(Progress progress) {
job.setUploadNotifier(convertToProgressNotifier(progress));
}
public void setUploaded(boolean b) {
job.setUploaded(b);
}
public boolean isUploaded() {
return job.isUploaded();
}
public CompletableFuture<?> startDownload() throws IOException { public CompletableFuture<?> startDownload() throws IOException {
if (job.getState() == JobState.Finished) { if (job.getState() == JobState.Finished) {
CompletableFuture<?> result = new CompletableFuture<Void>(); CompletableFuture<?> result = new CompletableFuture<Void>();
...@@ -147,45 +180,55 @@ public class BenchmarkJobManager implements Closeable { ...@@ -147,45 +180,55 @@ public class BenchmarkJobManager implements Closeable {
} }
} }
public boolean canBeDownloaded() { public void stopDownload() {
return job.canBeDownloaded(); job.stopDownloadData();
} }
public long getId() { public boolean needsDownload() {
return job.getId(); return job.needsDownload();
} }
public String getCreationTime() { public void setDownloadNotifier(Progress progress) {
return getStringFromTimeSafely(job.getCreationTime()); job.setDownloadNotifier(downloadNotifier =
createDownloadNotifierProcessingResultCSV(convertToProgressNotifier(
progress)));
} }
public String getStartTime() { public boolean canBeDownloaded() {
return getStringFromTimeSafely(job.getStartTime()); return job.canBeDownloaded();
} }
public String getEndTime() { public void setDownloaded(Boolean val) {
return getStringFromTimeSafely(job.getEndTime()); job.setDownloaded(val);
}
public boolean isDownloaded() {
return job.isDownloaded();
}
public void resumeTransfer() {
job.resumeDownload();
job.resumeUpload();
} }
public boolean isUseDemoData() { public boolean isUseDemoData() {
return job.isUseDemoData(); return job.isUseDemoData();
} }
@Override public long getId() {
public int hashCode() { return job.getId();
return Long.hashCode(job.getId());
} }
@Override public String getCreationTime() {
public boolean equals(Object obj) { return getStringFromTimeSafely(job.getCreationTime());
if (obj instanceof BenchmarkJob) {
return ((BenchmarkJob) obj).getId() == getId();
}
return false;
} }
public void update() { public String getStartTime() {
job.updateInfo(); return getStringFromTimeSafely(job.getStartTime());
}
public String getEndTime() {
return getStringFromTimeSafely(job.getEndTime());
} }
public Path getDirectory() { public Path getDirectory() {
...@@ -222,57 +265,11 @@ public class BenchmarkJobManager implements Closeable { ...@@ -222,57 +265,11 @@ public class BenchmarkJobManager implements Closeable {
return computationAccessor.getActualOutput(Arrays.asList(SynchronizableFileType.StandardErrorFile)).get(0); return computationAccessor.getActualOutput(Arrays.asList(SynchronizableFileType.StandardErrorFile)).get(0);
} }
public boolean delete() {
return job.delete();
}
public void cancelJob() {
job.cancelJob();
}
@Override @Override
public List<String> getActualOutput(List<SynchronizableFileType> content) { public List<String> getActualOutput(List<SynchronizableFileType> content) {
return computationAccessor.getActualOutput(content); return computationAccessor.getActualOutput(content);
} }
public void resumeTransfer() {
job.resumeDownload();
job.resumeUpload();
}
public void setDownloaded(Boolean val) {
job.setDownloaded(val);
}
public void setUploaded(boolean b) {
job.setUploaded(b);
}
public boolean isDownloaded() {
return job.isDownloaded();
}
public boolean isUploaded() {
return job.isUploaded();
}
public void stopDownload() {
job.stopDownloadData();
}
public boolean needsDownload() {
return job.needsDownload();
}
public boolean needsUpload() {
return job.needsUpload();
}
@Override
public String toString() {
return "" + getId();
}
public void storeDataInWorkdirectory(UploadingFile file) throws IOException { public void storeDataInWorkdirectory(UploadingFile file) throws IOException {
job.storeDataInWorkdirectory(file); job.storeDataInWorkdirectory(file);
} }
...@@ -293,6 +290,24 @@ public class BenchmarkJobManager implements Closeable { ...@@ -293,6 +290,24 @@ public class BenchmarkJobManager implements Closeable {
return job.getFileTransferInfo(); return job.getFileTransferInfo();
} }
@Override
public String toString() {
return "" + getId();
}
@Override
public int hashCode() {
return Long.hashCode(job.getId());
}
@Override
public boolean equals(Object obj) {
if (obj instanceof BenchmarkJob) {
return ((BenchmarkJob) obj).getId() == getId();
}
return false;
}
private ProgressNotifier convertToProgressNotifier(Progress progress) { private ProgressNotifier convertToProgressNotifier(Progress progress) {
return progress == null ? null : new ProgressNotifierAdapter(progress); return progress == null ? null : new ProgressNotifierAdapter(progress);
} }
...@@ -300,28 +315,34 @@ public class BenchmarkJobManager implements Closeable { ...@@ -300,28 +315,34 @@ public class BenchmarkJobManager implements Closeable {
private synchronized CompletableFuture<JobState> doGetStateAsync(Executor executor) { private synchronized CompletableFuture<JobState> doGetStateAsync(Executor executor) {
JobState state = job.getState(); JobState state = job.getState();
if (state != JobState.Finished) { if (state != JobState.Finished) {
setVerifiedState(null);
return CompletableFuture.completedFuture(state); return CompletableFuture.completedFuture(state);
} else if (verifiedState != null) {
return CompletableFuture.completedFuture(verifiedState);
} }
if (getVerifiedState() != null) {
return CompletableFuture.completedFuture(getVerifiedState());
}
verifiedStateProcessed = true; verifiedStateProcessed = true;
return CompletableFuture.supplyAsync(() -> { return CompletableFuture.supplyAsync(() -> {
try { try {
verifiedState = Stream.concat(Arrays.asList(state).stream(), JobState workVerifiedState = Stream.concat(Arrays.asList(state).stream(),
getTasks().stream().filter(task -> !task.getDescription().equals(Constants.DONE_TASK)) getTasks().stream().filter(task -> !task.getDescription().equals(
.flatMap(task -> task.getComputations().stream()).map(tc -> tc.getState())) Constants.DONE_TASK)).flatMap(task -> task.getComputations()
.max(new JobStateComparator()).get(); .stream()).map(tc -> tc.getState())).max(
if (verifiedState != JobState.Finished && verifiedState != JobState.Canceled) { new JobStateComparator()).get();
verifiedState = JobState.Failed;
if (workVerifiedState != JobState.Finished && workVerifiedState != JobState.Canceled) {
workVerifiedState = JobState.Failed;
} }
synchronized (BenchmarkJob.this) { synchronized (BenchmarkJob.this) {
// test whether job was restarted - it sets running to null // test whether job was restarted - it sets running to null
if (!verifiedStateProcessed) { if (!verifiedStateProcessed) {
verifiedState = null; workVerifiedState = null;
return doGetStateAsync(r -> r.run()).getNow(null); return doGetStateAsync(r -> r.run()).getNow(null);
} }
running = null; running = null;
return verifiedState; setVerifiedState(workVerifiedState);
return workVerifiedState;
} }
} finally { } finally {
synchronized (BenchmarkJob.this) { synchronized (BenchmarkJob.this) {
...@@ -541,6 +562,28 @@ public class BenchmarkJobManager implements Closeable { ...@@ -541,6 +562,28 @@ public class BenchmarkJobManager implements Closeable {
if (progressNotifier == null) return null; if (progressNotifier == null) return null;
return new DownloadNotifierProcessingResultCSV(progressNotifier, this); return new DownloadNotifierProcessingResultCSV(progressNotifier, this);
} }
private void setVerifiedState(JobState value) {
verifiedState = value;
job.setProperty(VERIFIED_STATE_OF_FINISHED_JOB, value != null ? value
.toString() : null);
}
private JobState getVerifiedState() {
if(verifiedState == null) {
String storedVerifiedState = job.getProperty(VERIFIED_STATE_OF_FINISHED_JOB);
if(storedVerifiedState != null) {
verifiedState = JobState.valueOf(storedVerifiedState);
}
}
return verifiedState;
}
private JobState updateAndGetState() {
job.updateInfo();
return job.getState();
}
} }
public BenchmarkJobManager(BenchmarkSPIMParameters params) { public BenchmarkJobManager(BenchmarkSPIMParameters params) {
......
...@@ -16,6 +16,7 @@ public interface Constants { ...@@ -16,6 +16,7 @@ public interface Constants {
int HAAS_TEMPLATE_ID = 4; int HAAS_TEMPLATE_ID = 4;
String HAAS_PROJECT_ID = "OPEN-12-20"; String HAAS_PROJECT_ID = "OPEN-12-20";
int HAAS_TIMEOUT = 9600; //Walltime in seconds int HAAS_TIMEOUT = 9600; //Walltime in seconds
long WAIT_FOR_SUBMISSION_TIMEOUT = 100;
String BDS_ADDRESS = "http://julius2.it4i.cz/"; String BDS_ADDRESS = "http://julius2.it4i.cz/";
final String NEW_LINE_SEPARATOR = "\n"; final String NEW_LINE_SEPARATOR = "\n";
...@@ -23,6 +24,7 @@ public interface Constants { ...@@ -23,6 +24,7 @@ public interface Constants {
final String FORWARD_SLASH = "/"; final String FORWARD_SLASH = "/";
String SPIM_OUTPUT_FILENAME_PATTERN = "spim.outputFilenamePattern"; String SPIM_OUTPUT_FILENAME_PATTERN = "spim.outputFilenamePattern";
String VERIFIED_STATE_OF_FINISHED_JOB = "job.verifiedStateOfFinished";
String CONFIG_YAML = "config.yaml"; String CONFIG_YAML = "config.yaml";
String HDF5_XML_FILENAME = "hdf5_xml_filename"; String HDF5_XML_FILENAME = "hdf5_xml_filename";
String FUSION_SWITCH = "fusion_switch"; String FUSION_SWITCH = "fusion_switch";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment