You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Andriy Redko (Jira)" <ji...@apache.org> on 2019/10/14 01:48:00 UTC

[jira] [Resolved] (CXF-8124) CXF metrics - MetricsContext#stop called twice or without Fault in certain error cases

     [ https://issues.apache.org/jira/browse/CXF-8124?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andriy Redko resolved CXF-8124.
-------------------------------
    Resolution: Fixed

> CXF metrics - MetricsContext#stop called twice or without Fault in certain error cases
> --------------------------------------------------------------------------------------
>
>                 Key: CXF-8124
>                 URL: https://issues.apache.org/jira/browse/CXF-8124
>             Project: CXF
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 3.1.18, 3.3.3
>            Reporter: Emile de Weerd
>            Assignee: Andriy Redko
>            Priority: Major
>             Fix For: 3.4.0, 3.2.11, 3.3.4
>
>         Attachments: cxf-metrics-context-stop-issue.tar.xz
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> While using the CXF metrics feature with a CXF REST client, in some situation there are incoherent calls to the MetricsContext#stop method. 2 cases can be isolated: server returns a 404 and the response body transmission is interrupted in the middle of the transfer.
> I wrote a unit test that allows to clearly reproduce the 2 use cases. Of course they are failing. The test prints out a stacktrace per call to the MetricsContext#stop method.
> *notFoundStatusCode_stopCalledOnceWithFaultObjectInExchange*
> [main] INFO cxf.reproducers.CxfMetricsIssueReproducerTest - MetricsContext#stop called 2 times
>  [main] INFO cxf.reproducers.CxfMetricsIssueReproducerTest - - stop called with time = 16408651 ns, inSize = -1, outSize = 0, exchange that contains a FaultMode = false; callad at:
>  [...]
>  at org.apache.cxf.metrics.MetricsContext$$EnhancerByMockitoWithCGLIB$$1997d2d2.stop(<generated>)
>  at org.apache.cxf.metrics.ExchangeMetrics.stop(ExchangeMetrics.java:75)
>  at org.apache.cxf.metrics.interceptors.AbstractMetricsInterceptor.stop(AbstractMetricsInterceptor.java:215)
>  at org.apache.cxf.metrics.interceptors.MetricsMessageInPostInvokeInterceptor.handleMessage(MetricsMessageInPostInvokeInterceptor.java:34)
>  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at org.apache.cxf.jaxrs.client.ClientMessageObserver.onMessage(ClientMessageObserver.java:56)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1693)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1570)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1371)
>  at org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
>  at org.apache.cxf.metrics.interceptors.CountingOutputStream.close(CountingOutputStream.java:47)
>  at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>  at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671)
>  at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
>  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:709)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:887)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:335)
>  at com.sun.proxy.$Proxy22.getBook(Unknown Source)
>  at cxf.reproducers.CxfMetricsIssueReproducerTest.notFoundStatusCode_stopCalledOnceWithFaultObjectInExchange(CxfMetricsIssueReproducerTest.java:151)
>  [...]
>  [main] INFO cxf.reproducers.CxfMetricsIssueReproducerTest - - stop called with time = 26412378 ns, inSize = -1, outSize = 0, exchange that contains a FaultMode = true; callad at:
>  [...]
>  at org.apache.cxf.metrics.MetricsContext$$EnhancerByMockitoWithCGLIB$$1997d2d2.stop(<generated>)
>  at org.apache.cxf.metrics.ExchangeMetrics.stop(ExchangeMetrics.java:75)
>  at org.apache.cxf.metrics.interceptors.AbstractMetricsInterceptor.stop(AbstractMetricsInterceptor.java:215)
>  at org.apache.cxf.metrics.interceptors.MetricsMessageInPostInvokeInterceptor.handleMessage(MetricsMessageInPostInvokeInterceptor.java:34)
>  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.checkResponse(ClientProxyImpl.java:434)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:990)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:895)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:335)
>  at com.sun.proxy.$Proxy22.getBook(Unknown Source)
>  at cxf.reproducers.CxfMetricsIssueReproducerTest.notFoundStatusCode_stopCalledOnceWithFaultObjectInExchange(CxfMetricsIssueReproducerTest.java:151)
>  [...]
> *incompleteResponse_stopCalledOnceWithFaultObjectInExchange*
> [main] INFO cxf.reproducers.CxfMetricsIssueReproducerTest - MetricsContext#stop called 1 times
>  [main] INFO cxf.reproducers.CxfMetricsIssueReproducerTest - - stop called with time = 14901568 ns, inSize = -1, outSize = 0, exchange that contains a FaultMode = false; callad at:
>  [...]
>  at org.apache.cxf.metrics.MetricsContext$$EnhancerByMockitoWithCGLIB$$1997d2d2.stop(<generated>)
>  at org.apache.cxf.metrics.ExchangeMetrics.stop(ExchangeMetrics.java:75)
>  at org.apache.cxf.metrics.interceptors.AbstractMetricsInterceptor.stop(AbstractMetricsInterceptor.java:215)
>  at org.apache.cxf.metrics.interceptors.MetricsMessageInPostInvokeInterceptor.handleMessage(MetricsMessageInPostInvokeInterceptor.java:34)
>  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at org.apache.cxf.jaxrs.client.ClientMessageObserver.onMessage(ClientMessageObserver.java:56)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1693)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1570)
>  at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1371)
>  at org.apache.cxf.io.AbstractWrappedOutputStream.close(AbstractWrappedOutputStream.java:77)
>  at org.apache.cxf.metrics.interceptors.CountingOutputStream.close(CountingOutputStream.java:47)
>  at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
>  at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:671)
>  at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
>  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
>  at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:709)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:887)
>  at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:335)
>  at com.sun.proxy.$Proxy22.getBook(Unknown Source)
>  at cxf.reproducers.CxfMetricsIssueReproducerTest.incompleteResponse_stopCalledOnceWithFaultObjectInExchange(CxfMetricsIssueReproducerTest.java:171)
>  [...]
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)