Exemplo n.º 1
0
  public Object up(Message msg) {
    ExecutorHeader hdr = msg.getHeader(id);
    if (hdr == null) return up_prot.up(msg);

    Request req = msg.getObject();
    if (log.isTraceEnabled()) log.trace("[" + local_addr + "] <-- [" + msg.getSrc() + "] " + req);
    switch (req.type) {
      case RUN_REQUEST:
        handleTaskRequest(req.request, (Address) req.object);
        break;
      case CONSUMER_READY:
        handleConsumerReadyRequest(req.request, (Address) req.object);
        break;
      case CONSUMER_UNREADY:
        handleConsumerUnreadyRequest(req.request, (Address) req.object);
        break;
      case CONSUMER_FOUND:
        handleConsumerFoundResponse(req.request, (Address) req.object);
        break;
      case RUN_SUBMITTED:
        RequestWithThread reqWT = (RequestWithThread) req;
        Object objectToRun = reqWT.object;
        Runnable runnable;
        if (objectToRun instanceof Runnable) {
          runnable = (Runnable) objectToRun;
        } else if (objectToRun instanceof Callable) {
          @SuppressWarnings("unchecked")
          Callable<Object> callable = (Callable<Object>) objectToRun;
          runnable = new FutureTask<>(callable);
        } else {
          log.error(
              Util.getMessage("RequestOfType")
                  + req.type
                  + " sent an object of "
                  + objectToRun
                  + " which is invalid");
          break;
        }

        handleTaskSubmittedRequest(runnable, msg.getSrc(), req.request, reqWT.threadId);
        break;
      case RUN_REJECTED:
        // We could make requests local for this, but is it really worth it
        handleTaskRejectedResponse(msg.getSrc(), req.request);
        break;
      case RESULT_SUCCESS:
        handleValueResponse(msg.getSrc(), req.request, req.object);
        break;
      case RESULT_EXCEPTION:
        handleExceptionResponse(msg.getSrc(), req.request, (Throwable) req.object);
        break;
      case INTERRUPT_RUN:
        // We could make requests local for this, but is it really worth it
        handleInterruptRequest(msg.getSrc(), req.request);
        break;
      case CREATE_CONSUMER_READY:
        Owner owner = new Owner((Address) req.object, req.request);
        handleNewConsumer(owner);
        break;
      case CREATE_RUN_REQUEST:
        owner = new Owner((Address) req.object, req.request);
        handleNewRunRequest(owner);
        break;
      case DELETE_CONSUMER_READY:
        owner = new Owner((Address) req.object, req.request);
        handleRemoveConsumer(owner);
        break;
      case DELETE_RUN_REQUEST:
        owner = new Owner((Address) req.object, req.request);
        handleRemoveRunRequest(owner);
        break;
      default:
        log.error(Util.getMessage("RequestOfType") + req.type + " not known");
        break;
    }
    return null;
  }