@Override public void onReceive(final Object message) throws Exception { if (message instanceof AskParam) { AskParam askParam = (AskParam) message; timeout = askParam.timeout; caller = sender(); targetActor = context().actorOf(askParam.props); context().watch(targetActor); targetActor.forward(askParam.message, context()); final Scheduler scheduler = context().system().scheduler(); timeoutMessage = scheduler.scheduleOnce( askParam.timeout.duration(), self(), new AskTimeout(), context().dispatcher(), null); } else if (message instanceof Terminated) { sendFailureToCaller(new ActorKilledException("Target actor terminated.")); timeoutMessage.cancel(); context().stop(self()); } else if (message instanceof AskTimeout) { sendFailureToCaller( new TimeoutException("Target actor timed out after " + timeout.toString())); context().stop(self()); } else { unhandled(message); } }
public synchronized void kill(@Nullable String explanation) { if (_state == CANCELED || _state == DONE) { return; } if (_cancellable != null) { _cancellable.cancel(explanation); } else { String why = explanation == null ? "Transfer cancelled" : ("Transfer cancelled: " + explanation); _mover.setTransferStatus(CacheException.DEFAULT_ERROR_CODE, why); } _state = CANCELED; }
@Override public void onReceive(Object msg) throws Exception { if (msg.equals(Msg.TICK)) { if (probes.timeout()) { timer.cancel(); // Stop timer getContext().become(SPLITTING); getSelf().tell(Msg.DONE, getSelf()); // Start splitting logger.info("Latency Monitor Start Splitting"); return; } // Send probes to all targets for (Pair<ActorRef, ActorRef> targetPort : targetPorts) { ActorRef target = targetPort.first(); ActorRef port = targetPort.second(); port.tell(probes.newProbe(target), getSelf()); } } else if (msg instanceof Probe) { probes.fill((Probe) msg); long now = System.nanoTime(); // TODO Temporary log here, remove or format this later logger.info( "SubOperator: " + ((Probe) msg).target + " Current latency: " + (now - ((Probe) msg).now) / 1000 + "us"); } else if (msg instanceof Target) { Target target = (Target) msg; if (target.toAdd) { probes.addTarget(target.target); targetPorts.add(new Pair<ActorRef, ActorRef>(target.target, target.port)); } else { probes.removeTarget(target.target); for (Pair<ActorRef, ActorRef> targetPort : targetPorts) { if (targetPort.first().equals(target.target)) { targetPorts.remove(targetPort); break; } } } } else unhandled(msg); }
@Override public void postStop() { registerTask.cancel(); }
@Override public void postStop() { tick.cancel(); }