queue request template: sleep on exception shortened according to the stopwatch. test adjusted
This commit is contained in:
parent
e2aa4be741
commit
9daa43a115
@ -21,6 +21,7 @@ import com.google.common.util.concurrent.SettableFuture;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.thingsboard.common.util.TbStopWatch;
|
||||
import org.thingsboard.common.util.ThingsBoardThreadFactory;
|
||||
import org.thingsboard.server.common.msg.queue.TopicPartitionInfo;
|
||||
import org.thingsboard.server.queue.TbQueueAdmin;
|
||||
@ -95,11 +96,13 @@ public class DefaultTbQueueRequestTemplate<Request extends TbQueueMsg, Response
|
||||
|
||||
void mainLoop() {
|
||||
while (!stopped) {
|
||||
TbStopWatch sw = TbStopWatch.startNew();
|
||||
try {
|
||||
fetchAndProcessResponses();
|
||||
} catch (Throwable e) {
|
||||
log.warn("Failed to obtain and process responses from queue. Going to sleep " + pollInterval + "ms", e);
|
||||
sleep();
|
||||
long sleepNanos = TimeUnit.MILLISECONDS.toNanos(this.pollInterval) - sw.stopAndGetTotalTimeNanos();
|
||||
log.warn("Failed to obtain and process responses from queue. Going to sleep " + sleepNanos + "ns", e);
|
||||
sleep(sleepNanos);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -149,9 +152,8 @@ public class DefaultTbQueueRequestTemplate<Request extends TbQueueMsg, Response
|
||||
return responseTemplate.poll(pollInterval);
|
||||
}
|
||||
|
||||
void sleep() {
|
||||
Thread.yield();
|
||||
LockSupport.parkNanos(1);
|
||||
void sleep(long nanos) {
|
||||
LockSupport.parkNanos(nanos);
|
||||
}
|
||||
|
||||
void setTimeoutException(UUID key, ResponseMetaData<Response> staleRequest, long currentNs) {
|
||||
|
||||
@ -54,13 +54,13 @@ import java.util.concurrent.atomic.AtomicLong;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.hamcrest.Matchers.lessThan;
|
||||
import static org.mockito.BDDMockito.willAnswer;
|
||||
import static org.mockito.BDDMockito.willDoNothing;
|
||||
import static org.mockito.BDDMockito.willReturn;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyLong;
|
||||
import static org.mockito.Matchers.longThat;
|
||||
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
|
||||
import static org.mockito.Mockito.atLeastOnce;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@ -141,7 +141,7 @@ public class DefaultTbQueueRequestTemplateTest {
|
||||
public void givenMainLoop_whenLoopFewTimes_thenVerifyInvocationCount() throws InterruptedException {
|
||||
executor = inst.createExecutor();
|
||||
CountDownLatch latch = new CountDownLatch(5);
|
||||
willDoNothing().given(inst).sleep();
|
||||
willDoNothing().given(inst).sleep(anyLong());
|
||||
willAnswer(invocation -> {
|
||||
if (latch.getCount() == 1) {
|
||||
inst.stop(); //stop the loop in natural way
|
||||
@ -158,7 +158,7 @@ public class DefaultTbQueueRequestTemplateTest {
|
||||
latch.await(10, TimeUnit.SECONDS);
|
||||
|
||||
verify(inst, times(5)).fetchAndProcessResponses();
|
||||
verify(inst, times(2)).sleep();
|
||||
verify(inst, times(2)).sleep(longThat(lessThan(TimeUnit.MILLISECONDS.toNanos(inst.pollInterval))));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user