@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;
    }
Example #3
0
 @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();
 }
Example #5
0
 @Override
 public void postStop() {
   tick.cancel();
 }