Skip to content

Commit

Permalink
Merge pull request #127 from openworm/development
Browse files Browse the repository at this point in the history
Release 0.3.6
  • Loading branch information
tarelli authored Jun 6, 2017
2 parents c61606a + 4a5bf60 commit be5e543
Show file tree
Hide file tree
Showing 54 changed files with 16,286 additions and 69 deletions.
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<groupId>org.geppetto</groupId>
<artifactId>simulation</artifactId>
<name>Geppetto Simulation Bundle</name>
<version>0.3.5</version>
<version>0.3.6</version>
<packaging>bundle</packaging>
<properties>
<spring.version>3.1.3.RELEASE</spring.version>
Expand Down Expand Up @@ -57,6 +57,11 @@
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>uk.com.robust-it</groupId>
<artifactId>cloning</artifactId>
<version>1.9.3</version>
</dependency>
</dependencies>
<repositories>
<repository>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,5 @@ public interface IExperimentListener
void experimentRunDone(ExperimentRunThread experimentRun, IExperiment experiment, RuntimeProject project) throws GeppettoExecutionException;

void experimentError(String titleMessage, String errorMessage, Exception exception, IExperiment experiment);

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@

import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ArrayBlockingQueue;
Expand Down Expand Up @@ -76,6 +78,10 @@ public class ExperimentRunManager implements IExperimentListener

private IGeppettoManagerCallbackListener geppettoManagerCallbackListener;

private Map<IGeppettoProject, Integer> experimentsCounter = new ConcurrentHashMap<>();

private Set<IGeppettoProject> projectsRunning = new HashSet<IGeppettoProject>();

private static ExperimentRunManager instance = null;

/**
Expand Down Expand Up @@ -127,10 +133,41 @@ public synchronized void queueExperiment(IUser user, IExperiment experiment)
/**
* @param experiment
* @return
* @throws GeppettoInitializationException
*/
public boolean checkExperiment(IExperiment experiment) throws GeppettoInitializationException
{
boolean experimentCanRun = experiment.getStatus().equals(ExperimentStatus.QUEUED);
if(experimentCanRun)
{
IGeppettoProject project = experiment.getParentProject();
if(projectsRunning.contains(project))
{
return false;
}
}
return experimentCanRun;
}

/**
* @param experiment
*/
public boolean checkExperiment(IExperiment experiment)
private void decreaseExperimentCounter(IExperiment experiment)
{
return experiment.getStatus().equals(ExperimentStatus.QUEUED);
experimentsCounter.put(experiment.getParentProject(), experimentsCounter.get(experiment.getParentProject()) - 1);
}

/**
* @param experimentAboutToRun
*/
private void increaseExperimentCounter(IExperiment experimentAboutToRun)
{
IGeppettoProject project = experimentAboutToRun.getParentProject();
if(!experimentsCounter.containsKey(project))
{
experimentsCounter.put(project, 0);
}
experimentsCounter.put(project, experimentsCounter.get(project) + 1);
}

/*
Expand All @@ -143,7 +180,9 @@ void runExperiment(IExperiment experiment) throws GeppettoExecutionException
try
{
IGeppettoProject project = experiment.getParentProject();
if(!geppettoManager.isProjectOpen(project)){
projectsRunning.add(project);
if(!geppettoManager.isProjectOpen(project))
{
geppettoManager.loadProject(String.valueOf(this.getReqId()), project);
}
RuntimeProject runtimeProject = geppettoManager.getRuntimeProject(project);
Expand All @@ -161,7 +200,7 @@ void runExperiment(IExperiment experiment) throws GeppettoExecutionException
simulationError(experiment);
experiment.updateEndDate();
String errorMessage = "Error running experiment with name: " + experiment.getName() + " and id: " + experiment.getId();
this.experimentError(errorMessage,e.getMessage(), e, experiment);
this.experimentError(errorMessage, e.getMessage(), e, experiment);
throw new GeppettoExecutionException(e);
}
}
Expand Down Expand Up @@ -216,6 +255,7 @@ private void loadExperiments() throws GeppettoInitializationException, Malformed
*/
private synchronized void addExperimentToQueue(IUser user, IExperiment experiment, ExperimentStatus status)
{
increaseExperimentCounter(experiment);
BlockingQueue<IExperiment> userExperiments = queue.get(user);
if(userExperiments == null)
{
Expand Down Expand Up @@ -245,9 +285,12 @@ public void experimentRunDone(ExperimentRunThread experimentRun, IExperiment exp
// we can use them to check that the simulation was properly executed.
// This is not ideal or particularly elegant but harmless at the same time until we
// can think of a better way.
if(!DataManagerHelper.getDataManager().isDefault())
experimentRun.release();
decreaseExperimentCounter(experiment);
projectsRunning.remove(experiment.getParentProject());
if(!DataManagerHelper.getDataManager().isDefault() && experimentsCounter.get(experiment.getParentProject()) == 0)
{
experimentRun.release();
experimentsCounter.remove(experiment.getParentProject());
geppettoManager.closeProject("ERM" + getReqId(), project.getGeppettoProject());
}
}
Expand Down Expand Up @@ -290,14 +333,16 @@ public void cancelExperimentRun(IUser user, IExperiment experiment) throws Geppe
}

}

@Override
public void experimentError(String titleMessage, String errorMessage, Exception exception, IExperiment experiment) {
public void experimentError(String titleMessage, String errorMessage, Exception exception, IExperiment experiment)
{
this.geppettoManagerCallbackListener.experimentError(titleMessage, errorMessage, exception, experiment);
}

public void setExperimentListener(IGeppettoManagerCallbackListener listener) {
this.geppettoManagerCallbackListener = listener;

public void setExperimentListener(IGeppettoManagerCallbackListener listener)
{
this.geppettoManagerCallbackListener = listener;
}

}
Expand All @@ -322,15 +367,14 @@ public synchronized void run()
ExperimentRunManager.getInstance().runExperiment(e);
ran.add(e);
}

}
for(IExperiment ranExperiment : ran)
{
queuedExperiments.get(user).remove(ranExperiment);
}
}
}
catch(GeppettoExecutionException e)
catch(GeppettoExecutionException | GeppettoInitializationException e)
{
logger.error(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import org.geppetto.core.simulation.ISimulatorCallbackListener;
import org.geppetto.core.simulator.ASimulator;
import org.geppetto.core.simulator.ISimulator;
import org.geppetto.core.utilities.URLReader;
import org.geppetto.core.utilities.Zipper;
import org.geppetto.model.DomainModel;
import org.geppetto.model.ExperimentState;
Expand Down Expand Up @@ -147,10 +148,12 @@ private void init(IExperiment experiment) throws GeppettoInitializationException
AConversion conversionService = (AConversion) ServiceCreator.getNewServiceInstance(simConfig.getConversionServiceId());
conversionService.setScope(Scope.RUN);
conversionService.setProjectId(experiment.getParentProject().getId());
conversionService.setExperiment(experiment);
conversionServices.put(instancePath, conversionService);
}
ASimulator simulator = (ASimulator) ServiceCreator.getNewServiceInstance(simulatorId);
simulator.setProjectId(experiment.getParentProject().getId());
simulator.setExperiment(experiment);
simulatorServices.put(instancePath, simulator);
simulatorRuntimes.put(instancePath, new SimulatorRuntime());

Expand Down Expand Up @@ -227,6 +230,7 @@ private void init(IExperiment experiment) throws GeppettoInitializationException
{
((AConversion) entry.getValue().get(0)).setScope(Scope.RUN);
((AConversion) entry.getValue().get(0)).setProjectId(experiment.getParentProject().getId());
((AConversion) entry.getValue().get(0)).setExperiment(experiment);
iConvertedModel = entry.getValue().get(0).convert(model, conversionServiceKey.getOutputModelFormat(), aspectConfig, modelAccess);
break;
}
Expand Down Expand Up @@ -317,7 +321,7 @@ public synchronized void run()
catch(GeppettoInitializationException | GeppettoModelException e)
{
// TODO How to make the error surface in some description?
externalProcessFailed("",e);
externalProcessFailed("", e);
logger.error(e);
}
try
Expand All @@ -327,7 +331,7 @@ public synchronized void run()
catch(InterruptedException e)
{
String errorMessage = "Error running experiment with name: (" + experiment.getName() + ") and id: " + experiment.getId();
externalProcessFailed(errorMessage,e);
externalProcessFailed(errorMessage, e);
throw new RuntimeException(e);

}
Expand All @@ -341,7 +345,7 @@ public synchronized void run()
catch(GeppettoExecutionException e)
{
String errorMessage = "Error running experiment with name: (" + experiment.getName() + ") and id: " + experiment.getId();
externalProcessFailed(errorMessage,e);
externalProcessFailed(errorMessage, e);
throw new RuntimeException("Post run experiment error", e);
}

Expand Down Expand Up @@ -401,7 +405,7 @@ public void release()
simulatorServices.clear();
conversionServices.clear();
simulatorRuntimes.clear();
//listener = null;
// listener = null;
}

/*
Expand All @@ -426,8 +430,8 @@ public void endOfSteps(IAspectConfiguration aspectConfiguration, Map<File, Resul
{
case GEPPETTO_RECORDING:
{
String fileName = result.getPath().substring(result.getPath().lastIndexOf("/") + 1);
String newPath = PathConfiguration.getExperimentPath(Scope.RUN, runtimeProject.getGeppettoProject().getId(), experiment.getId(), instancePath, fileName);
String fileName = URLReader.getFileName(result.toURI().toURL());
String newPath = "projects/" + Long.toString(runtimeProject.getGeppettoProject().getId()) + "/experiment/" + experiment.getId() + "/" + fileName;
IPersistedData recording;
if(!DataManagerHelper.getDataManager().isDefault())
{
Expand Down Expand Up @@ -458,7 +462,7 @@ public void endOfSteps(IAspectConfiguration aspectConfiguration, Map<File, Resul
zipper.addToZip(raw.toURI().toURL());
}
Path zipped = zipper.processAddedFilesAndZip();
String newPath = PathConfiguration.getExperimentPath(Scope.RUN, runtimeProject.getGeppettoProject().getId(), experiment.getId(), instancePath, fileName);
String newPath = "projects/" + Long.toString(runtimeProject.getGeppettoProject().getId()) + "/experiment/" + experiment.getId() + "/" + fileName;
if(!DataManagerHelper.getDataManager().isDefault())
{
S3Manager.getInstance().saveFileToS3(zipped.toFile(), newPath);
Expand All @@ -478,12 +482,12 @@ public void endOfSteps(IAspectConfiguration aspectConfiguration, Map<File, Resul
}

@Override
public void externalProcessFailed(String message, Exception e) {
String errorMessage ="Experiment with name: " + experiment.getName() +
" and id: " + experiment.getId() + " has failed." + '\n';
public void externalProcessFailed(String message, Exception e)
{
String errorMessage = "Experiment with name: " + experiment.getName() + " and id: " + experiment.getId() + " has failed." + '\n';

experiment.setStatus(ExperimentStatus.ERROR);
this.listener.experimentError(errorMessage, message+e.getMessage(), e, experiment);
this.listener.experimentError(errorMessage, message + e.getMessage(), e, experiment);
DataManagerHelper.getDataManager().saveEntity(experiment);
}
}
Loading

0 comments on commit be5e543

Please sign in to comment.