Hi guys. I found the cause. It seems that requests, that take less than 1000ms to respond, aren't covered by the receiveTimeout. That means if I set the receiveTimeout to 1ms, and perform a request that only takes 500ms, the call succeeds. If I do the same with a request that takes 2000ms, it fails with a ProcessingException. With 3.1.8 it also failed with requests < 1000ms.
One could argue though, that in most cases it doesn't make sense to set a receiveTimeout < 1s. In my case it's only within a testcase. So you can decide whether this is a bug, or just an undocumented behavior :). I have a testcase - if you're still interested. Just give me a note and I create a Bug|Improvement|You name it. Thanks Veit > Gesendet: Freitag, 13. Januar 2017 um 11:02 Uhr > Von: "Sergey Beryozkin" <[email protected]> > An: ffang <[email protected]> > Cc: [email protected], [email protected] > Betreff: Re: receiveTimeout ignored since 3.1.9? > > Hi Freeman, thanks... > On 13/01/17 04:14, ffang wrote: > > Hi Sergey, > > > > Thanks, and just add a test in JAXRSAsyncClientTest to verify the > > receiveTimeout configuration works for the jaxrs async invocation with > > ahc[1] > > > > [1]http://git-wip-us.apache.org/repos/asf/cxf/commit/17c7ebc8 > > > > Hi Veit, > > > > Could you please provide a runnable testcase as we can’t reproduce this > > on our side. You can create a jira ticket and attach your testcase there. > > > > Thanks > > ------------- > > Freeman(Yue) Fang > > > > Red Hat, Inc. > > FuseSource is now part of Red Hat > > > > > > > >> On Jan 12, 2017, at 9:52 PM, Sergey Beryozkin <[email protected] > >> <mailto:[email protected]>> wrote: > >> > >> Hi Freeman, thanks, try either JAXWS or JAXRS end to end system sync > >> test (ex, JAXRSAsyncClientTest) where a 'use.async.conduit' is set as > >> a property > >> > >> Cheers, Sergey > >> On 12/01/17 13:46, Freeman Fang wrote: > >>> Hi Sergey, > >>> > >>> With CXF-7122, we found that with ahc 4.1.0 afterwards, the > >>> ReceivedTimeout we set on ahc RequestConfig won't affect the connection > >>> return to the pool, so that the connection could be actually reused. So > >>> that CXF can rely on ahc to manage the ReceivedTimeout and don’t need > >>> that TimeoutThread(Timer) in CXF, so we remove that Timer in CXF-7122. > >>> > >>> And we actually have AsyncHTTPConduitTest#testTimeout > >>> and AsyncHTTPConduitTest#testTimeoutAsync to cover both the sync and > >>> async calls > >>> > >>> @Test > >>> public void testTimeout() throws Exception { > >>> updateAddressPort(g, PORT); > >>> HTTPConduit c = > >>> (HTTPConduit)ClientProxy.getClient(g).getConduit(); > >>> c.getClient().setReceiveTimeout(3000); > >>> try { > >>> assertEquals("Hello " + request, g.greetMeLater(-5000)); > >>> fail(); > >>> } catch (Exception ex) { > >>> //expected!!! > >>> } > >>> } > >>> > >>> @Test > >>> public void testTimeoutAsync() throws Exception { > >>> updateAddressPort(g, PORT); > >>> HTTPConduit c = > >>> (HTTPConduit)ClientProxy.getClient(g).getConduit(); > >>> c.getClient().setReceiveTimeout(3000); > >>> try { > >>> Response<GreetMeLaterResponse> future = > >>> g.greetMeLaterAsync(-5000L); > >>> future.get(); > >>> fail(); > >>> } catch (Exception ex) { > >>> //expected!!! > >>> } > >>> } > >>> > >>> Not sure what’s the real problem Veit run into, I will try to reproduce > >>> the error. > >>> ------------- > >>> Freeman(Yue) Fang > >>> > >>> Red Hat, Inc. > >>> FuseSource is now part of Red Hat > >>> > >>> > >>> > >>>> On Jan 12, 2017, at 8:42 PM, Sergey Beryozkin <[email protected] > >>>> <mailto:[email protected]> > >>>> <mailto:[email protected]>> wrote: > >>>> > >>>> Hi Veit, > >>>> > >>>> I recall there was another update related to introducing a > >>>> TimeoutThread, the async conduit was ignoring the receiveTimeout for > >>>> the async calls. > >>>> > >>>> Hi Freeman, looks like that change affected the use of the async > >>>> conduit for the sync calls (this would affect both JAXWS & JAXRS), can > >>>> you double check please > >>>> > >>>> Thanks, Sergey > >>>> > >>>> > >>>> On 03/01/17 17:09, Veit Guna wrote: > >>>>> Hi. > >>>>> > >>>>> I just upgraded from 3.1.8 to 3.1.9 with the effect, that one of my > >>>>> tests is failing now regarding the receiveTimeout set on > >>>>> HTTPClientPolicy. > >>>>> I'm currently using CXF for JAX-RS client side proxy generation > >>>>> based on > >>>>> my REST server interfaces. I'm also using the "use.async.http.conduit" > >>>>> switch > >>>>> to use the async http conduit. > >>>>> > >>>>> The test is setting the receiveTimeout on the HTTPClientPolicy to 1 > >>>>> (ms) > >>>>> like this: > >>>>> > >>>>> JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); > >>>>> ... > >>>>> MyService myService = bean.create(MyService.class); > >>>>> ClientConfiguration clientConfig = WebClient.getConfig(myService); > >>>>> clientConfig.getResponseContext().put("buffer.proxy.response", > >>>>> cacheResponses); > >>>>> clientConfig.getRequestContext().put("use.async.http.conduit", true); > >>>>> > >>>>> HTTPClientPolicy clientPolicy = > >>>>> clientConfig.getHttpConduit().getClient(); > >>>>> cllientPolicy.setReceiveTimeout(receiveTimeoutMillis); > >>>>> clientPolicy.setConnectionTimeout(connectionTimeoutMillis); > >>>>> > >>>>> Then it calls a status REST endpoint and expects a ProcessingException > >>>>> to be thrown. But this is never thrown and the call succeeds. > >>>>> In the past it failed as expected. I also switched to another endpoint > >>>>> that takes a bit longer to respond but with the same effect. > >>>>> Going back to 3.1.8 fixes the issue. > >>>>> > >>>>> I took a look at the recent changes and found this: > >>>>> > >>>>> https://issues.apache.org/jira/browse/CXF-7122 > >>>>> > >>>>> Maybe it is related to it? > >>>>> > >>>>> Thanks! > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>> > >>>> > >>>> -- > >>>> Sergey Beryozkin > >>>> > >>>> Talend Community Coders > >>>> http://coders.talend.com/ > >>> > >> > >> > >> -- > >> Sergey Beryozkin > >> > >> Talend Community Coders > >> http://coders.talend.com/ > > > > >
