I am a bit confused about the behaviour of following code:
@Retry(maxRetries=1,delay=100,delayUnit=ChronoUnit.MILLIS,retryOn={TimeoutException.class, NoHttpResponseException.class})
@Timeout(3000)
doSomething();
So if we do this under normal load everything is fine and behaves as expected. If doSomething() fails under the specified conditions we use a fallback service for the request. I would assume that following is correct:
First Request(3sec) + Delay(100ms) + Retry(3sec) + some Network Time(1sec) = Max request time(7,1sec)
So, now we did some loadtests and the rest service which is called comes to throttling. After that we have many(about 30 of 300000 Requests) requests in the logs that are way over the maximum time with a request time of 20 seconds and more. (The fallback calls are finished and have no impact on this times). In my opinion these times are not possible because the request should be interrupted meanwhile. I have read following in the SmallRye documentation:
Note that interruption requires cooperation from the executing code. In other words, it is not guaranteed that interrupting the method will actually make it stop.
Is it possible that these "not guaranteed interrupted method calls" are responsible for the long running requests? Sorry if my question leaves something unclear and thanks in advance!