use of com.couchbase.client.core.cnc.SimpleEventBus in project couchbase-jvm-clients by couchbase.
the class PooledServiceTest method beforeEach.
@BeforeEach
void beforeEach() {
eventBus = new SimpleEventBus(true, Collections.singletonList(ServiceStateChangedEvent.class));
environment = CoreEnvironment.builder().eventBus(eventBus).build();
CoreContext coreContext = new CoreContext(mock(Core.class), 1, environment, authenticator);
serviceContext = new ServiceContext(coreContext, "127.0.0.1", 1234, ServiceType.KV, Optional.empty());
}
use of com.couchbase.client.core.cnc.SimpleEventBus in project couchbase-jvm-clients by couchbase.
the class RetryOrchestratorTest method retryWithDelay.
@Test
@SuppressWarnings({ "unchecked" })
void retryWithDelay() {
Timer timer = Timer.createAndStart(CoreEnvironment.DEFAULT_MAX_NUM_REQUESTS_IN_RETRY);
RetryStrategy retryStrategy = mock(RetryStrategy.class);
when(retryStrategy.shouldRetry(any(Request.class), any(RetryReason.class))).thenReturn(CompletableFuture.completedFuture(RetryAction.withDuration(Duration.ofMillis(200))));
Request<?> request = mock(Request.class);
RequestContext requestContext = mock(RequestContext.class);
when(request.completed()).thenReturn(false);
when(request.context()).thenReturn(requestContext);
when(request.retryStrategy()).thenReturn(retryStrategy);
when(request.absoluteTimeout()).thenReturn(System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(2500));
Core core = mock(Core.class);
CoreEnvironment env = mock(CoreEnvironment.class);
SimpleEventBus eventBus = new SimpleEventBus(true);
when(env.timer()).thenReturn(timer);
when(env.eventBus()).thenReturn(eventBus);
CoreContext ctx = new CoreContext(core, 1, env, mock(Authenticator.class));
long start = System.nanoTime();
RetryOrchestrator.maybeRetry(ctx, request, RetryReason.UNKNOWN);
verify(requestContext, times(1)).incrementRetryAttempts(Duration.ofMillis(200), RetryReason.UNKNOWN);
verify(request, never()).cancel(CancellationReason.noMoreRetries(RetryReason.UNKNOWN));
waitUntilCondition(() -> !Mockito.mockingDetails(core).getInvocations().isEmpty());
long end = System.nanoTime();
verify(core, times(1)).send(request, false);
verify(core, never()).send(request);
assertTrue(TimeUnit.NANOSECONDS.toMillis(end - start) >= 200);
timer.stop();
assertEquals(1, eventBus.publishedEvents().size());
RequestRetryScheduledEvent retryEvent = (RequestRetryScheduledEvent) eventBus.publishedEvents().get(0);
assertEquals(Event.Severity.DEBUG, retryEvent.severity());
assertEquals(Event.Category.REQUEST.path(), retryEvent.category());
assertEquals(requestContext, retryEvent.context());
assertEquals(RetryReason.UNKNOWN, retryEvent.retryReason());
}
use of com.couchbase.client.core.cnc.SimpleEventBus in project couchbase-jvm-clients by couchbase.
the class RetryOrchestratorTest method capsRetryDelay.
@Test
@SuppressWarnings({ "unchecked" })
void capsRetryDelay() {
Timer timer = Timer.createAndStart(CoreEnvironment.DEFAULT_MAX_NUM_REQUESTS_IN_RETRY);
RetryStrategy retryStrategy = mock(RetryStrategy.class);
when(retryStrategy.shouldRetry(any(Request.class), any(RetryReason.class))).thenReturn(CompletableFuture.completedFuture(RetryAction.withDuration(Duration.ofMillis(200))));
Request<?> request = mock(Request.class);
RequestContext requestContext = mock(RequestContext.class);
when(request.completed()).thenReturn(false);
when(request.context()).thenReturn(requestContext);
when(request.retryStrategy()).thenReturn(retryStrategy);
when(request.absoluteTimeout()).thenAnswer(invocationOnMock -> System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(10));
Core core = mock(Core.class);
CoreEnvironment env = mock(CoreEnvironment.class);
SimpleEventBus eventBus = new SimpleEventBus(true);
when(env.timer()).thenReturn(timer);
when(env.eventBus()).thenReturn(eventBus);
CoreContext ctx = new CoreContext(core, 1, env, mock(Authenticator.class));
long start = System.nanoTime();
RetryOrchestrator.maybeRetry(ctx, request, RetryReason.UNKNOWN);
verify(requestContext, never()).incrementRetryAttempts((Duration.ofMillis(200)), RetryReason.UNKNOWN);
verify(request, never()).cancel(CancellationReason.noMoreRetries(RetryReason.UNKNOWN));
waitUntilCondition(() -> !Mockito.mockingDetails(core).getInvocations().isEmpty());
long end = System.nanoTime();
verify(core, times(1)).send(request, false);
verify(core, never()).send(request);
assertTrue(TimeUnit.NANOSECONDS.toMillis(end - start) < 200);
timer.stop();
assertEquals(1, eventBus.publishedEvents().size());
RequestRetryScheduledEvent retryEvent = (RequestRetryScheduledEvent) eventBus.publishedEvents().get(0);
assertEquals(Event.Severity.DEBUG, retryEvent.severity());
assertEquals(Event.Category.REQUEST.path(), retryEvent.category());
assertEquals(requestContext, retryEvent.context());
assertEquals(RetryReason.UNKNOWN, retryEvent.retryReason());
}
use of com.couchbase.client.core.cnc.SimpleEventBus in project couchbase-jvm-clients by couchbase.
the class DefaultConfigurationProviderIntegrationTest method openBucketFromOneFirstValidSeed.
/**
* Bucket config should also be loaded when the second seed in the list is not available.
*/
@Test
void openBucketFromOneFirstValidSeed() {
TestNodeConfig cfg = config().firstNodeWith(Services.KV).get();
Set<SeedNode> seeds = new HashSet<>(Arrays.asList(SeedNode.create(cfg.hostname(), Optional.of(cfg.ports().get(Services.KV)), Optional.of(cfg.ports().get(Services.MANAGER))), SeedNode.create("1.2.3.4")));
SimpleEventBus eventBus = new SimpleEventBus(true);
environment = CoreEnvironment.builder().eventBus(eventBus).build();
core = Core.create(environment, authenticator(), seeds);
String bucketName = config().bucketname();
ConfigurationProvider provider = new DefaultConfigurationProvider(core, seeds);
openAndClose(bucketName, provider);
provider.shutdown().block();
waitUntilCondition(() -> eventBus.publishedEvents().stream().anyMatch(e -> e instanceof EndpointConnectionFailedEvent));
}
use of com.couchbase.client.core.cnc.SimpleEventBus in project couchbase-jvm-clients by couchbase.
the class DefaultConfigurationProviderIntegrationTest method retriesOnBucketNotFoundDuringLoadException.
/**
* Need to make sure that if a bucket is not found during load, we continue retrying the open
* bucket attempts.
*/
@Test
@IgnoreWhen(clusterTypes = ClusterType.CAVES)
void retriesOnBucketNotFoundDuringLoadException() {
TestNodeConfig cfg = config().firstNodeWith(Services.KV).get();
Set<SeedNode> seeds = new HashSet<>(Collections.singletonList(SeedNode.create(cfg.hostname(), Optional.of(cfg.ports().get(Services.KV)), Optional.of(cfg.ports().get(Services.MANAGER)))));
SimpleEventBus eventBus = new SimpleEventBus(true);
environment = CoreEnvironment.builder().eventBus(eventBus).build();
core = Core.create(environment, authenticator(), seeds);
ConfigurationProvider provider = new DefaultConfigurationProvider(core, seeds);
try {
String bucketName = "this-bucket-does-not-exist";
provider.openBucket(bucketName).subscribe(v -> {
}, e -> assertTrue(e instanceof ConfigException));
waitUntilCondition(() -> eventBus.publishedEvents().stream().anyMatch(p -> p instanceof BucketOpenRetriedEvent));
for (Event event : eventBus.publishedEvents()) {
if (event instanceof BucketOpenRetriedEvent) {
assertEquals(bucketName, ((BucketOpenRetriedEvent) event).bucketName());
assertTrue(event.cause() instanceof BucketNotFoundDuringLoadException);
}
}
} finally {
provider.shutdown().block();
}
}
Aggregations