Skip to content

Commit

Permalink
Adding name to events fired in Timer in order to log more information
Browse files Browse the repository at this point in the history
when the event timeslot is missed.
  • Loading branch information
Robot committed Jul 20, 2015
1 parent 25064e5 commit cfeae1d
Show file tree
Hide file tree
Showing 26 changed files with 571 additions and 381 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class PublisherTask extends Task {
private final TimeTrigger trigger;

public PublisherTask(Scheduler scheduler, KnowledgeDataPublisher publisher, TimeTrigger trigger, String host) {
super(scheduler);
super(scheduler, String.format("publisher_task(%s)", host));

this.trigger = trigger;
this.publisher = publisher;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class RebroadcastTask extends Task {
private final NICType nicType;

public RebroadcastTask(Scheduler scheduler, KnowledgeDataPublisher publisher, int rebroadcastAfter, KnowledgeMetaData metadata, NICType nicType) {
super(scheduler);
super(scheduler, "rebroadcast");
this.dataToRebroadcast = metadata;
this.publisher = publisher;
this.nicType = nicType;
Expand Down
795 changes: 463 additions & 332 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/runtimelog/RuntimeLogger.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ public void at(long time) {
* Update timer to call us at the next queue event
*/
private void updateTimer() {
timer.notifyAt(queue.first().nextExecutionTime, this, node);
timer.notifyAt(queue.first().nextExecutionTime, this, queue.first().executable.getName(), node);
}
}

Expand Down
10 changes: 5 additions & 5 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/CustomStepTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

public class CustomStepTask extends TimerTask {

public CustomStepTask(Scheduler scheduler, TimerTaskListener taskListener) {
this(scheduler, taskListener, 1);
public CustomStepTask(Scheduler scheduler, TimerTaskListener taskListener, String taskName) {
this(scheduler, taskListener, taskName, 1);
}

public CustomStepTask(Scheduler scheduler, TimerTaskListener taskListener, long delay) {
super(scheduler, taskListener, delay);
public CustomStepTask(Scheduler scheduler, TimerTaskListener taskListener, String taskName, long delay) {
super(scheduler, taskListener, taskName, delay);
}

public void scheduleNextExecutionAfter(long delay) {
scheduler.addTask(new CustomStepTask(scheduler, taskListener, delay));
scheduler.addTask(new CustomStepTask(scheduler, taskListener, taskName, delay));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ public EnsembleLogRecord() {

public EnsembleTask(EnsembleController ensembleController, Scheduler scheduler,
KnowledgeManagerContainer kmContainer, RatingsManager ratingsManager) {
super(scheduler);
super(scheduler, ensembleController.getEnsembleDefinition().getName());

this.ensembleController = ensembleController;
this.securityChecker = new LocalSecurityChecker(ensembleController, kmContainer);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void triggered(Trigger trigger) {
KnowledgeManagerTriggerListenerImpl knowledgeManagerTriggerListener = new KnowledgeManagerTriggerListenerImpl();

public ProcessTask(ComponentProcess componentProcess, Scheduler scheduler, Architecture architecture, RatingsManager ratingsManager) {
super(scheduler);
super(scheduler, componentProcess.getName());
this.architecture = architecture;
this.componentProcess = componentProcess;
this.ratingsManager = ratingsManager;
Expand Down
8 changes: 7 additions & 1 deletion jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/Task.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,17 @@
public abstract class Task {
protected TaskTriggerListener listener;
protected Scheduler scheduler;
protected final String taskName;

public Task(Scheduler scheduler) {
public Task(Scheduler scheduler, String taskName) {
this.scheduler = scheduler;
this.taskName = taskName;
}

public String getName(){
return taskName;
}

/**
* Invokes the task.
*
Expand Down
12 changes: 6 additions & 6 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/task/TimerTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public class TimerTask extends Task {
* @param taskListener
* Listener to be executed
*/
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener) {
this(scheduler, taskListener, 1, 0);
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, String taskName) {
this(scheduler, taskListener, taskName, 1, 0);
}

/**
Expand All @@ -35,8 +35,8 @@ public TimerTask(Scheduler scheduler, TimerTaskListener taskListener) {
* @param delay
* Execution delay
*/
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, long delay) {
this(scheduler, taskListener, delay, 0);
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, String taskName, long delay) {
this(scheduler, taskListener, taskName, delay, 0);
}

/**
Expand All @@ -51,8 +51,8 @@ public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, long delay
* @param period
* Execution period
*/
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, long delay, long period) {
super(scheduler);
public TimerTask(Scheduler scheduler, TimerTaskListener taskListener, String taskName, long delay, long period) {
super(scheduler, taskName);

this.trigger = new TimeTriggerExt();
this.trigger.setOffset(delay);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

public class DiscreteEventTimer implements SimulationTimer {

private static final String TERMINATION_EVENT_NAME = "termination_event";

Queue<EventTime> eventTimes;
Map<DEECoContainer, EventTime> containerEvents;
long currentTime;
Expand All @@ -32,7 +34,7 @@ public void start(long duration) {
public void at(long time) {
// termination time reached, do nothing
}
}, true));
}, TERMINATION_EVENT_NAME, true));

while (!tryToTerminate()) {
EventTime eventTime = eventTimes.remove();
Expand All @@ -47,8 +49,8 @@ public void at(long time) {
* NOTE: Only one event per container is registered
*/
@Override
public void notifyAt(long time, TimerEventListener listener, DEECoContainer container) {
EventTime eventTime = new EventTime(time, listener, false);
public void notifyAt(long time, TimerEventListener listener, String eventName, DEECoContainer container) {
EventTime eventTime = new EventTime(time, listener, eventName, false);
if (!eventTimes.contains(eventTime)) {
// Replace old event for container by the new one
eventTimes.add(eventTime);
Expand All @@ -61,7 +63,7 @@ public void notifyAt(long time, TimerEventListener listener, DEECoContainer cont
}

@Override
public void interruptionEvent(TimerEventListener listener, DEECoContainer container){
public void interruptionEvent(TimerEventListener listener, String eventName, DEECoContainer container){
throw new UnsupportedOperationException();
// If you are about to implement this method remember to use synchronization
}
Expand Down
8 changes: 7 additions & 1 deletion jdeeco-core/src/cz/cuni/mff/d3s/deeco/timer/EventTime.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
public class EventTime implements Comparable<EventTime> {
private long timePoint;
private TimerEventListener listener;
private String eventName;
private boolean terminationEvent;

public EventTime(long timePoint, TimerEventListener listener, boolean isTerminationEvent) {
public EventTime(long timePoint, TimerEventListener listener, String eventName, boolean isTerminationEvent) {
this.setTimePoint(timePoint);
this.listener = listener;
this.eventName = eventName;
this.terminationEvent = isTerminationEvent;
}

Expand All @@ -27,6 +29,10 @@ public void setListener(TimerEventListener listener) {
this.listener = listener;
}

public String getEventName(){
return eventName;
}

public boolean isTerminationEvent() {
return terminationEvent;
}
Expand Down
29 changes: 24 additions & 5 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/timer/Timer.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,36 @@ public interface Timer extends CurrentTimeProvider {
/**
* Set next notification time for node
*
* The timer is supposed to provide only one notification time per node. Calling this method twice at the same time
* will result in the discarding of the effect of the first call.
* The timer is supposed to provide only one notification time per node.
* Calling this method twice at the same time will result in the discarding
* of the effect of the first call.
*
* @param time
* Notification time in ms
* @param listener
* Notification listener
* @param eventName
* The name of the event that will be fired by the timer. The
* name should be the name of process represented by the event.
* @param node
* Node to schedule the even at
*/
void notifyAt(long time, TimerEventListener listener, DEECoContainer node);

void interruptionEvent(TimerEventListener listener, DEECoContainer node);
void notifyAt(long time, TimerEventListener listener, String eventName,
DEECoContainer node);

/**
* Add new event that is supposed to be executed immediately (e.g.
* processing of incoming data packet). Calling this method will cause the
* timer to wake if it sleeps or waits.
*
* @param listener
* Notification listener
* @param eventName
* The name of the event that will be fired by the timer. The
* name should be the name of process represented by the event.
* @param node
* Node to schedule the even at
*/
void interruptionEvent(TimerEventListener listener, String eventName,
DEECoContainer node);
}
14 changes: 7 additions & 7 deletions jdeeco-core/src/cz/cuni/mff/d3s/deeco/timer/WallTimeTimer.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,8 @@ public void start() {
}
else if (nextTime != currentTime){
Log.w(String.format(
"An event missed its time slot and was delayed by %d milliseconds.",
currentTime - nextTime));
// TODO: add name of the event/process into the EventTime for more descriptive logging
"An event \"%s\" missed its time slot and was delayed by %d milliseconds.",
nextEvent.getEventName(), currentTime - nextTime));
}
// Take the next event to be executed. Interruption events
// notify the wait before the timeout expires
Expand All @@ -96,10 +95,10 @@ else if (nextTime != currentTime){
}

@Override
public void notifyAt(long time, TimerEventListener listener,
public void notifyAt(long time, TimerEventListener listener, String eventName,
DEECoContainer container) {
synchronized (eventTimes) {
EventTime eventTime = new EventTime(time, listener, false);
EventTime eventTime = new EventTime(time, listener, eventName, false);
if (!eventTimes.contains(eventTime)) {
eventTimes.add(eventTime);
}
Expand All @@ -116,10 +115,11 @@ public void notifyAt(long time, TimerEventListener listener,
* The DEECoContainer is not used in this method.
*/
@Override
public void interruptionEvent(TimerEventListener listener,
public void interruptionEvent(TimerEventListener listener, String eventName,
DEECoContainer node) {
synchronized (eventTimes) {
EventTime event = new EventTime(currentTime, listener, false);
adjustCurrentTime();
EventTime event = new EventTime(currentTime, listener, eventName, false);
eventTimes.add(event);
eventTimes.notify();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,12 @@ public long getCurrentMilliseconds() {
}

@Override
public void notifyAt(long time, TimerEventListener listener, DEECoContainer node) {
public void notifyAt(long time, TimerEventListener listener, String eventName, DEECoContainer node) {
throw new UnsupportedOperationException("Fake timer does not support notifications");
}

@Override
public void interruptionEvent(TimerEventListener listener,
public void interruptionEvent(TimerEventListener listener, String eventName,
DEECoContainer node) {
throw new UnsupportedOperationException("Fake timer does not support interruptionEvent");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public void setUp() throws Exception{
*/
private Task createTriggeredTask() {

Task t = new Task(tested) {
Task t = new Task(tested, "triggered_test_task") {
@Override
public TimeTrigger getTimeTrigger() {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,13 +184,13 @@ public class Timer extends Simulation implements SimulationTimer, MATSimSimulati
private final Map<Integer, Callback> hostIdToCallback = new HashMap<>();

@Override
public void notifyAt(long time, TimerEventListener listener, DEECoContainer node) {
public void notifyAt(long time, TimerEventListener listener, String eventName, DEECoContainer node) {
callAt(time, node.getId());
MATSimSimulation.this.getHost(node.getId()).listener = listener;
}

@Override
public void interruptionEvent(TimerEventListener listener,
public void interruptionEvent(TimerEventListener listener, String eventName,
DEECoContainer node) {
throw new UnsupportedOperationException("The Timer for MATSim simulation does not support interruptionEvent");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private class DeliveryListener implements TimerTaskListener {

public DeliveryListener(PacketWrapper packet, Scheduler scheduler, long delayMs) {
this.packet = packet;
deliveryTask = new TimerTask(scheduler, this, delayMs);
deliveryTask = new TimerTask(scheduler, this, "SimpleBroadcastDevice_delivery", delayMs);
deliveryTask.schedule();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ private class DeliveryListener implements TimerTaskListener {

public DeliveryListener(PacketWrapper packet, Scheduler scheduler) {
this.packet = packet;
deliveryTask = new TimerTask(scheduler, this);
deliveryTask = new TimerTask(scheduler, this, "SimpleInfrastructureDevice_delivery");
deliveryTask.schedule();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void sendDelayed(L1Packet packet) {
// Remove previously set send delayed task as we postpone send deadline by adding to this packet
removeDelayedSendTask();
// Schedule delayed send of packet
delayedTask = new TimerTask(scheduler, delayedListener, timeout);
delayedTask = new TimerTask(scheduler, delayedListener, "DeviceOutputQueue_delayed_send", timeout);
delayedTask.schedule();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public Layer1(byte nodeId, DataIDSource dataIdSource, Scheduler scheduler) {
this.scheduler = scheduler;

// Start collector removal task
new TimerTask(scheduler, new CollectorCleaner(), 0, COLLECTOR_LIFETIME_MS).schedule();
new TimerTask(scheduler, new CollectorCleaner(), "CollectorCleaner_l1", 0, COLLECTOR_LIFETIME_MS).schedule();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ private void makeKnown(L1Packet packet) {
private void scheduleRebroadcast(L1Packet packet, long delayMs) {
// Schedule delayed rebroadcast
makeKnown(packet);
new TimerTask(scheduler, new Rebroadcast(packet), delayMs).schedule();
new TimerTask(scheduler, new Rebroadcast(packet), "delayed_rebroadcast_l1", delayMs).schedule();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ private class Rebroadcast implements TimerTaskListener {

public Rebroadcast(L2Packet packet, long delayMs) {
this.packet = packet;
rebroadcastTask = new TimerTask(scheduler, this, delayMs);
rebroadcastTask = new TimerTask(scheduler, this, "delayed_rebroadcast_l2", delayMs);
rebroadcastTask.schedule();
scheduled.put(packet.getReceivedInfo().dataId, this);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,6 @@ public void init(DEECoContainer container) {
// Start publishing task
Scheduler scheduler = container.getRuntimeFramework().getScheduler();
long offset = new Random(container.getId()).nextInt(publishingPeriod);
new TimerTask(scheduler, this, offset, publishingPeriod).schedule();
new TimerTask(scheduler, this, "DefaultKnowledgePublisher_publish", offset, publishingPeriod).schedule();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ public long getCurrentMilliseconds() {
}

@Override
public void notifyAt(long time, TimerEventListener listener, DEECoContainer node) {
public void notifyAt(long time, TimerEventListener listener, String eventName, DEECoContainer node) {
throw new UnsupportedOperationException();
}

@Override
public void interruptionEvent(TimerEventListener listener,
public void interruptionEvent(TimerEventListener listener, String eventName,
DEECoContainer node) {
throw new UnsupportedOperationException("Fake timer does not support interruptionEvent");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ public void at(long time) {
receive(messageData, new MANETBroadcastAddress(
String.format("%d", message.getSrcSAddr())));
}
}, null);
}, "BeeClickComm_receive", null);
Log.d("BeeClickDevice received data.");
}
});
Expand Down
Loading

0 comments on commit cfeae1d

Please sign in to comment.