Пример #1
0
 public NginxUnhandledExceptionResponse(NginxRequest r, Throwable e) {
   this.err = e;
   this.r = r;
   if (r.isReleased()) {
     this.type = TYPE_FATAL;
   } else {
     this.type = TYPE_ERROR;
   }
 }
Пример #2
0
  @Override
  public int execute(final long r, final long c) {

    if (r == 0) { // by worker init process
      NginxResponse resp = handleRequest(makeRequest(0, 0));
      if (resp != null
          && resp.type() == NginxResponse.TYPE_FAKE_ASYNC_TAG
          && resp.fetchStatus(200) != 200) {
        log.error("initialize error %s", resp);
        return NGX_HTTP_INTERNAL_SERVER_ERROR;
      }
      return NGX_HTTP_OK;
    }

    final NginxRequest req = makeRequest(r, c);
    int phase = req.phase();

    if (workers == null) {
      NginxResponse resp = handleRequest(req);
      if (resp.type() == NginxResponse.TYPE_FAKE_ASYNC_TAG) {
        if (!req.isReleased()
            && !req.isHijacked()
            && (phase == -1
                || phase == NGX_HTTP_HEADER_FILTER_PHASE)) { // from content handler invoking
          ngx_http_clojure_mem_inc_req_count(r);
        }
        return NGX_DONE;
      }
      return handleResponse(req, resp);
    }

    // for safe access with another thread
    req.prefetchAll();

    if (phase == -1
        || phase == NGX_HTTP_HEADER_FILTER_PHASE) { // -1 means from content handler invoking
      ngx_http_clojure_mem_inc_req_count(r);
    }
    workers.submit(
        new Callable<NginxClojureRT.WorkerResponseContext>() {
          @Override
          public WorkerResponseContext call() throws Exception {
            NginxResponse resp = handleRequest(req);
            // let output chain built before entering the main thread
            return new WorkerResponseContext(resp, req);
          }
        });

    return NGX_DONE;
  }