On Fri, 2017-05-05 at 16:55 -0700, Gary Gregory wrote:
> In our method
> _org.apache.http.nio.protocol.HttpAsyncService.exception(NHttpServerC
> onnection,
> Exception)_ the log() method does not always get called:
> 
>  @Override
>     public void exception(
>             final NHttpServerConnection conn, final Exception cause)
> {
>         final State state = getState(conn);
>         if (state == null) {
>             shutdownConnection(conn);
>             log(cause);
>             return;
>         }
>         state.setTerminated();
>         closeHandlers(state, cause);
>         final Cancellable cancellable = state.getCancellable();
>         if (cancellable != null) {
>             cancellable.cancel();
>         }
>         final Queue<PipelineEntry> pipeline = state.getPipeline();
>         if (!pipeline.isEmpty()
>                 || conn.isResponseSubmitted()
>                 ||
> state.getResponseState().compareTo(MessageState.INIT) >
> 0) {
>             // There is not much that we can do if a response
>             // has already been submitted or pipelining is being
> used.
>             shutdownConnection(conn);
>         } else {
>             try {
>                 final Incoming incoming = state.getIncoming();
>                 final HttpRequest request = incoming != null ?
> incoming.getRequest() : null;
>                 final HttpContext context = incoming != null ?
> incoming.getContext() : new BasicHttpContext();
>                 final HttpAsyncResponseProducer responseProducer =
> handleException(cause, context);
>                 final HttpResponse response =
> responseProducer.generateResponse();
>                 final Outgoing outgoing = new Outgoing(request,
> response,
> responseProducer, context);
>                 state.setResponseState(MessageState.INIT);
>                 state.setOutgoing(outgoing);
>                 commitFinalResponse(conn, state);
>                 /////////////////////////////////////////////////////
> /////
>                 /////////////////////////////////////////////////////
> /////
>                 // log() has not been called by the time we get here
>                 /////////////////////////////////////////////////////
> /////
>                 /////////////////////////////////////////////////////
> /////
>             } catch (final Exception ex) {
>                 shutdownConnection(conn);
>                 closeHandlers(state);
>                 if (ex instanceof RuntimeException) {
>                     throw (RuntimeException) ex;
>                 } else {
>                     log(ex);
>                 }
>             }
>         }
>     }
> 
> So I propose we move the call to log from:
> 
>         if (state == null) {
>             shutdownConnection(conn);
>             log(cause);
>             return;
>         }
> 
> To the first line of the method:
> 
>  @Override
>     public void exception(
>             final NHttpServerConnection conn, final Exception cause)
> {
>         log(cause);
>         final State state = getState(conn);
>         if (state == null) {
>             shutdownConnection(conn);
>             return;
>         }
> 
> Thoughts?
> 
> Gary
> 

Gary

It would make things much easier if you forked HttpCore at GitHub,
patched your private fork, gave us a reference to the diff set in your
repository and asked for a review.

This should be the standard work-flow anyway once we migrate to Git.

Oleg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org
For additional commands, e-mail: dev-h...@hc.apache.org

Reply via email to