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 {
propertyHolder.setValue(name, value);
}
public void setProperty(String jobNeedsUpload, boolean b) {
propertyHolder.setValue(jobNeedsUpload, "" + b);
public void setProperty(String name, boolean value) {
propertyHolder.setValue(name, "" + value);
}
public String getProperty(String name) {
......
......@@ -23,7 +23,11 @@ public class PropertyHolder {
public void setValue(String key, String value) {
Properties prop = getProperties();
prop.setProperty(key, value);
if(value != null) {
prop.setProperty(key, value);
} else {
prop.remove(key);
}
try {
storeProperties(prop);
} catch (IOException e) {
......
......@@ -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.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.VERIFIED_STATE_OF_FINISHED_JOB;
import java.io.BufferedReader;
import java.io.Closeable;
......@@ -89,41 +90,45 @@ public class BenchmarkJobManager implements Closeable {
nonTaskSpecificErrors = new LinkedList<>();
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 {
job.uploadFile(Constants.CONFIG_YAML, new ProgressNotifierAdapter(progress));
LoadedYAML yaml = new LoadedYAML(job.openLocalFile(Constants.CONFIG_YAML));
verifiedState = null;
verifiedStateProcessed = false;
running = null;
String message = "Submitting job id #"+getId();
progress.addItem(message);
job.updateInfo();
JobState oldState = updateAndGetState();
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,
yaml.getCommonProperty(FUSION_SWITCH) + "_" + yaml.getCommonProperty(HDF5_XML_FILENAME));
}
public JobState getState() {
return getStateAsync(r -> r.run()).getNow(JobState.Unknown);
public boolean delete() {
return job.delete();
}
public void startUpload() {
job.startUploadData();
public void cancelJob() {
job.cancelJob();
}
public void stopUpload() {
job.stopUploadData();
public JobState getState() {
return getStateAsync(r -> r.run()).getNow(JobState.Unknown);
}
public synchronized CompletableFuture<JobState> getStateAsync(Executor executor) {
if (running != null) {
return running;
......@@ -135,6 +140,34 @@ public class BenchmarkJobManager implements Closeable {
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 {
if (job.getState() == JobState.Finished) {
CompletableFuture<?> result = new CompletableFuture<Void>();
......@@ -147,45 +180,55 @@ public class BenchmarkJobManager implements Closeable {
}
}
public boolean canBeDownloaded() {
return job.canBeDownloaded();
public void stopDownload() {
job.stopDownloadData();
}
public long getId() {
return job.getId();
public boolean needsDownload() {
return job.needsDownload();
}
public String getCreationTime() {
return getStringFromTimeSafely(job.getCreationTime());
public void setDownloadNotifier(Progress progress) {
job.setDownloadNotifier(downloadNotifier =
createDownloadNotifierProcessingResultCSV(convertToProgressNotifier(
progress)));
}
public String getStartTime() {
return getStringFromTimeSafely(job.getStartTime());
public boolean canBeDownloaded() {
return job.canBeDownloaded();
}
public String getEndTime() {
return getStringFromTimeSafely(job.getEndTime());
public void setDownloaded(Boolean val) {
job.setDownloaded(val);
}
public boolean isDownloaded() {
return job.isDownloaded();
}
public void resumeTransfer() {
job.resumeDownload();
job.resumeUpload();
}
public boolean isUseDemoData() {
return job.isUseDemoData();
}
@Override
public int hashCode() {
return Long.hashCode(job.getId());
public long getId() {
return job.getId();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof BenchmarkJob) {
return ((BenchmarkJob) obj).getId() == getId();
}
return false;
public String getCreationTime() {
return getStringFromTimeSafely(job.getCreationTime());
}
public void update() {
job.updateInfo();
public String getStartTime() {
return getStringFromTimeSafely(job.getStartTime());
}
public String getEndTime() {
return getStringFromTimeSafely(job.getEndTime());
}
public Path getDirectory() {
......@@ -222,57 +265,11 @@ public class BenchmarkJobManager implements Closeable {
return computationAccessor.getActualOutput(Arrays.asList(SynchronizableFileType.StandardErrorFile)).get(0);
}
public boolean delete() {
return job.delete();
}
public void cancelJob() {
job.cancelJob();
}
@Override
public List<String> getActualOutput(List<SynchronizableFileType> 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 {
job.storeDataInWorkdirectory(file);
}
......@@ -293,6 +290,24 @@ public class BenchmarkJobManager implements Closeable {
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) {
return progress == null ? null : new ProgressNotifierAdapter(progress);
}
......@@ -300,28 +315,34 @@ public class BenchmarkJobManager implements Closeable {
private synchronized CompletableFuture<JobState> doGetStateAsync(Executor executor) {
JobState state = job.getState();
if (state != JobState.Finished) {
setVerifiedState(null);
return CompletableFuture.completedFuture(state);
} else if (verifiedState != null) {
return CompletableFuture.completedFuture(verifiedState);
}
if (getVerifiedState() != null) {
return CompletableFuture.completedFuture(getVerifiedState());
}
verifiedStateProcessed = true;
return CompletableFuture.supplyAsync(() -> {
try {
verifiedState = Stream.concat(Arrays.asList(state).stream(),
getTasks().stream().filter(task -> !task.getDescription().equals(Constants.DONE_TASK))
.flatMap(task -> task.getComputations().stream()).map(tc -> tc.getState()))
.max(new JobStateComparator()).get();
if (verifiedState != JobState.Finished && verifiedState != JobState.Canceled) {
verifiedState = JobState.Failed;
JobState workVerifiedState = Stream.concat(Arrays.asList(state).stream(),
getTasks().stream().filter(task -> !task.getDescription().equals(
Constants.DONE_TASK)).flatMap(task -> task.getComputations()
.stream()).map(tc -> tc.getState())).max(
new JobStateComparator()).get();
if (workVerifiedState != JobState.Finished && workVerifiedState != JobState.Canceled) {
workVerifiedState = JobState.Failed;
}
synchronized (BenchmarkJob.this) {
// test whether job was restarted - it sets running to null
if (!verifiedStateProcessed) {
verifiedState = null;
workVerifiedState = null;
return doGetStateAsync(r -> r.run()).getNow(null);
}
running = null;
return verifiedState;
setVerifiedState(workVerifiedState);
return workVerifiedState;
}
} finally {
synchronized (BenchmarkJob.this) {
......@@ -541,6 +562,28 @@ public class BenchmarkJobManager implements Closeable {
if (progressNotifier == null) return null;
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) {
......
......@@ -16,6 +16,7 @@ public interface Constants {
int HAAS_TEMPLATE_ID = 4;
String HAAS_PROJECT_ID = "OPEN-12-20";
int HAAS_TIMEOUT = 9600; //Walltime in seconds
long WAIT_FOR_SUBMISSION_TIMEOUT = 100;
String BDS_ADDRESS = "http://julius2.it4i.cz/";
final String NEW_LINE_SEPARATOR = "\n";
......@@ -23,6 +24,7 @@ public interface Constants {
final String FORWARD_SLASH = "/";
String SPIM_OUTPUT_FILENAME_PATTERN = "spim.outputFilenamePattern";
String VERIFIED_STATE_OF_FINISHED_JOB = "job.verifiedStateOfFinished";
String CONFIG_YAML = "config.yaml";
String HDF5_XML_FILENAME = "hdf5_xml_filename";
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