Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Michał Kit committed Sep 23, 2013
1 parent 60ae010 commit 00891d8
Show file tree
Hide file tree
Showing 13 changed files with 123 additions and 28 deletions.
7 changes: 7 additions & 0 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/monitoring/Monitor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package cz.cuni.mff.d3s.deeco.monitoring;


public interface Monitor {
boolean getEvaluation();
String getId();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package cz.cuni.mff.d3s.deeco.monitoring;

import java.util.List;


public interface MonitorProvider {
Monitor getMonitor(String monitorId);
void addMonitor(Monitor monitor);
void addAllMonitors(List<? extends Monitor> monitors);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package cz.cuni.mff.d3s.deeco.monitoring;

import java.util.List;

public class StubMonitorProvider implements MonitorProvider {

@Override
public Monitor getMonitor(String monitorId) {
return null;
}

@Override
public void addMonitor(Monitor monitor) {
//Do nothing
}

@Override
public void addAllMonitors(List<? extends Monitor> monitors) {
//Do nothing
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ public static List<ComponentProcess> extractComponentProcesses(Class<?> c) throw
if (schedule == null)
schedule = getTriggeredSchedule(m.getParameterAnnotations(),
parameters);
if (schedule == null)
schedule = new PeriodicSchedule();

if (getAnnotation(StrongLocking.class, m.getAnnotations()) == null) {
if (getAnnotation(WeakLocking.class, m.getAnnotations()) == null)
Expand Down
27 changes: 17 additions & 10 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/runtime/Runtime.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import cz.cuni.mff.d3s.deeco.knowledge.KnowledgeManager;
import cz.cuni.mff.d3s.deeco.knowledge.TimeProvider;
import cz.cuni.mff.d3s.deeco.logging.Log;
import cz.cuni.mff.d3s.deeco.monitoring.MonitorProvider;
import cz.cuni.mff.d3s.deeco.monitoring.StubMonitorProvider;
import cz.cuni.mff.d3s.deeco.runtime.jmx.RuntimeMX;
import cz.cuni.mff.d3s.deeco.runtime.model.ComponentInstance;
import cz.cuni.mff.d3s.deeco.runtime.model.ComponentProcess;
Expand All @@ -28,30 +30,32 @@ public class Runtime implements TimeProvider {
private RuntimeMetadata runtimeMetadata;
private final KnowledgeManager km;
private final Scheduler scheduler;
private final MonitorProvider monitorProvider;
private final List<TriggeredJobProducer> triggeredJobProducers;

// private final Oracle oracle;

public Runtime(Scheduler scheduler, KnowledgeManager km) {
this(scheduler, km, false);
this(scheduler, km, new StubMonitorProvider(), false);
}

public Runtime(Scheduler scheduler, KnowledgeManager km, boolean useMXBeans) {
public Runtime(Scheduler scheduler, KnowledgeManager km,
MonitorProvider monitorProvider, boolean useMXBeans) {
assert (km != null);
assert (scheduler != null);
if (useMXBeans)
RuntimeMX.registerMBeanForRuntime(this);
this.scheduler = scheduler;
this.km = km;
this.triggeredJobProducers = new LinkedList<>();
// this.oracle = new Oracle(new SAT4JSolver());
this.monitorProvider = monitorProvider;
}

@Override
public long getCurrentTime() {
return scheduler.getCurrentTime();
}

public long getKnowledgeTimeStamp(String knowledgePath) {
return km.getKnowledgeTimeStamp(knowledgePath);
}
Expand Down Expand Up @@ -108,9 +112,11 @@ private void deployComponentProcesses() {
for (ComponentProcess cp : ci.getComponent().getProcesses()) {
if (cp.getSchedule() instanceof PeriodicSchedule)
scheduler.schedule(new ComponentProcessJob(cp, ci.getId(),
scheduler, this));
monitorProvider.getMonitor(cp.getId()), scheduler,
this));
else {
cpjp = new ComponentProcessJobProducer(cp, scheduler, this);
cpjp = new ComponentProcessJobProducer(cp, scheduler, this,
monitorProvider);
triggeredJobProducers.add(cpjp);
km.registerListener(cpjp);
}
Expand All @@ -126,12 +132,13 @@ private void deployEnsembles() {
for (ComponentInstance member : runtimeMetadata
.getComponentInstances())
scheduler.schedule(new EnsembleJob(e, coord.getId(),
member.getId(), scheduler, this));

member.getId(), monitorProvider.getMonitor(e
.getId()), scheduler, this));
}
} else {
System.out.println("Triggered ensemble");
ejp = new EnsembleJobProducer(e, scheduler, this);
ejp = new EnsembleJobProducer(e, scheduler, this,
monitorProvider);
triggeredJobProducers.add(ejp);
km.registerListener(ejp);
}
Expand Down
16 changes: 16 additions & 0 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/runtime/model/Invocable.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,22 @@ public Invocable(Method method, LockingMode lockingMode) {
public List<Parameter> getParameters() {
return parameters;
}

public List<Parameter> getInputParameters() {
List<Parameter> result = new LinkedList<Parameter>();
for (Parameter p : parameters)
if (p.getDirection().equals(ParameterDirection.IN))
result.add(p);
return result;
}

public List<Parameter> getOutputParameters() {
List<Parameter> result = new LinkedList<Parameter>();
for (Parameter p : parameters)
if (p.getDirection().equals(ParameterDirection.OUT))
result.add(p);
return result;
}

public Method getMethod() {
return method;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import cz.cuni.mff.d3s.deeco.executor.JobExecutionListener;
import cz.cuni.mff.d3s.deeco.knowledge.ISession;
import cz.cuni.mff.d3s.deeco.logging.Log;
import cz.cuni.mff.d3s.deeco.monitoring.Monitor;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.ComponentProcess;
import cz.cuni.mff.d3s.deeco.runtime.model.LockingMode;
Expand All @@ -16,9 +17,9 @@ public class ComponentProcessJob extends Job {
private final String id;

public ComponentProcessJob(ComponentProcess componentProcess,
String componentId, JobExecutionListener listener,
String componentId, Monitor monitor, JobExecutionListener listener,
Runtime runtime) {
super(runtime, listener);
super(runtime, monitor, listener);
this.componentId = componentId;
this.componentProcess = componentProcess;
this.id = componentId + componentProcess.getId();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cz.cuni.mff.d3s.deeco.scheduling;

import cz.cuni.mff.d3s.deeco.knowledge.TriggerType;
import cz.cuni.mff.d3s.deeco.monitoring.MonitorProvider;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.ComponentProcess;
import cz.cuni.mff.d3s.deeco.runtime.model.TriggeredSchedule;
Expand All @@ -10,15 +11,17 @@ public class ComponentProcessJobProducer extends TriggeredJobProducer {
private ComponentProcess componentProcess;

public ComponentProcessJobProducer(ComponentProcess componentProcess,
Scheduler scheduler, Runtime runtime) {
Scheduler scheduler, Runtime runtime,
MonitorProvider monitorProvider) {
super((TriggeredSchedule) componentProcess.getSchedule(), scheduler,
runtime);
runtime, monitorProvider);
this.componentProcess = componentProcess;
}

@Override
public void knowledgeChanged(String triggerer, TriggerType recMode) {
scheduleJob(new ComponentProcessJob(componentProcess, triggerer, null,
scheduleJob(new ComponentProcessJob(componentProcess, triggerer,
monitorProvider.getMonitor(componentProcess.getId()), null,
runtime));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import java.lang.reflect.Method;

import cz.cuni.mff.d3s.deeco.exceptions.KMNotExistentException;
import cz.cuni.mff.d3s.deeco.executor.JobExecutionListener;
import cz.cuni.mff.d3s.deeco.knowledge.ISession;
import cz.cuni.mff.d3s.deeco.logging.Log;
import cz.cuni.mff.d3s.deeco.monitoring.Monitor;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.BooleanCondition;
import cz.cuni.mff.d3s.deeco.runtime.model.Ensemble;
Expand All @@ -20,15 +22,16 @@ public class EnsembleJob extends Job {
private final String id;

public EnsembleJob(Ensemble ensemble, String coordinator, String member,
JobExecutionListener listener, Runtime runtime) {
super(runtime, listener);
Monitor monitor, JobExecutionListener listener,
Runtime runtime) {
super(runtime, monitor, listener);
this.ensemble = ensemble;
this.coordinator = coordinator;
this.member = member;
this.schedule = ensemble.getSchedule();
this.id = coordinator + member + ensemble.getId();
}

@Override
public String getInstanceId() {
return id;
Expand Down Expand Up @@ -84,6 +87,8 @@ private boolean evaluateMembership(ISession session) {
Object[] parameters = getParameterMethodValues(membership, session);
Method m = membership.getMethod();
return (boolean) m.invoke(null, parameters);
} catch (KMNotExistentException kmne){
return false;
} catch (Exception e) {
Log.e("Ensemble exception while membership evaluation", e);
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import cz.cuni.mff.d3s.deeco.knowledge.KnowledgeManager;
import cz.cuni.mff.d3s.deeco.knowledge.TriggerType;
import cz.cuni.mff.d3s.deeco.logging.Log;
import cz.cuni.mff.d3s.deeco.monitoring.MonitorProvider;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.Ensemble;
import cz.cuni.mff.d3s.deeco.runtime.model.TriggeredSchedule;
Expand All @@ -14,8 +15,9 @@ public class EnsembleJobProducer extends TriggeredJobProducer {
private Ensemble ensemble;

public EnsembleJobProducer(Ensemble ensemble, Scheduler scheduler,
Runtime runtime) {
super((TriggeredSchedule) ensemble.getSchedule(), scheduler, runtime);
Runtime runtime, MonitorProvider monitorProvider) {
super((TriggeredSchedule) ensemble.getSchedule(), scheduler, runtime,
monitorProvider);
this.ensemble = ensemble;
}

Expand All @@ -28,11 +30,13 @@ public void knowledgeChanged(String triggerer, TriggerType recMode) {
if (recMode.equals(TriggerType.COORDINATOR)) {
for (Object id : ids)
scheduleJob(new EnsembleJob(ensemble, triggerer,
(String) id, null, runtime));
(String) id, monitorProvider.getMonitor(ensemble
.getId()), null, runtime));
} else {
for (Object id : ids)
scheduleJob(new EnsembleJob(ensemble, (String) id,
triggerer, null, runtime));
triggerer, monitorProvider.getMonitor(ensemble
.getId()), null, runtime));
}
} catch (KMException kme) {
Log.e("Knowledge Manager access exception", kme);
Expand Down
23 changes: 19 additions & 4 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/scheduling/Job.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,28 @@

import cz.cuni.mff.d3s.deeco.executor.JobExecutionListener;
import cz.cuni.mff.d3s.deeco.knowledge.ISession;
import cz.cuni.mff.d3s.deeco.monitoring.Monitor;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.Invocable;
import cz.cuni.mff.d3s.deeco.runtime.model.Schedule;

public abstract class Job extends ParametrizedInstance implements Runnable {

private static ThreadLocal<Runtime> runtime;
private static ThreadLocal<Runtime> runtime = new ThreadLocal<>();

private JobExecutionListener listener;
private final Monitor monitor;
private final JobExecutionListener listener;
private final Runtime actualRuntime;

public Job(Runtime runtime, JobExecutionListener listener) {
public Job(Runtime runtime, Monitor monitor, JobExecutionListener listener) {
super(runtime.getKnowledgeManager());
this.monitor = monitor;
this.listener = listener;
Job.runtime.set(runtime);
this.actualRuntime = runtime;
}

public Monitor getMonitor() {
return monitor;
}

public static Runtime getRuntime() {
Expand All @@ -30,6 +38,7 @@ public static Runtime getRuntime() {

protected void evaluateMethod(Invocable invocable, ISession session)
throws Exception {
Job.runtime.set(actualRuntime);
Object[] processParameters = getParameterMethodValues(invocable,
session);
Method m = invocable.getMethod();
Expand All @@ -38,16 +47,22 @@ protected void evaluateMethod(Invocable invocable, ISession session)
}

protected void jobExecutionStarted() {
if (monitor != null && monitor instanceof JobExecutionListener)
((JobExecutionListener) monitor).jobExecutionStarted(this);
if (listener != null)
listener.jobExecutionStarted(this);
}

protected void jobExecutionFinished() {
if (monitor != null && monitor instanceof JobExecutionListener)
((JobExecutionListener) monitor).jobExecutionFinished(this);
if (listener != null)
listener.jobExecutionFinished(this);
}

protected void jobExecutionException(Throwable t) {
if (monitor != null && monitor instanceof JobExecutionListener)
((JobExecutionListener) monitor).jobExecutionException(this, t);
if (listener != null)
listener.jobExecutionException(this, t);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.List;

import cz.cuni.mff.d3s.deeco.knowledge.IKnowledgeChangeListener;
import cz.cuni.mff.d3s.deeco.monitoring.MonitorProvider;
import cz.cuni.mff.d3s.deeco.path.grammar.PathGrammar;
import cz.cuni.mff.d3s.deeco.runtime.Runtime;
import cz.cuni.mff.d3s.deeco.runtime.model.KnowledgeChangeTrigger;
Expand All @@ -15,12 +16,14 @@ public abstract class TriggeredJobProducer implements IKnowledgeChangeListener {
private Scheduler scheduler;
private TriggeredSchedule schedule;
protected Runtime runtime;
protected final MonitorProvider monitorProvider;

public TriggeredJobProducer(TriggeredSchedule schedule,
Scheduler scheduler, Runtime runtime) {
Scheduler scheduler, Runtime runtime, MonitorProvider monitorProvider) {
this.scheduler = scheduler;
this.schedule = schedule;
this.runtime = runtime;
this.monitorProvider = monitorProvider;
}

protected void scheduleJob(Job job) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public static void main(String[] args) {
provider.fromComponentInstance(new NodeA());
provider.fromComponentInstance(new NodeC());
provider.fromEnsembleDefinition(MigrationEnsemble.class);
Runtime rt = new Runtime(scheduler, km, true);
Runtime rt = new Runtime(scheduler, km, null, true);
rt.deployRuntimeMetadata(provider.getRuntimeMetadata());
rt.run();
}
Expand Down

0 comments on commit 00891d8

Please sign in to comment.