Search in sources :

Example 6 with ConfigException

use of com.couchbase.client.core.error.ConfigException in project couchbase-jvm-clients by couchbase.

the class ClusterManagerBucketRefresher method registerStream.

/**
 * Registers the given bucket name with the http stream.
 *
 * <p>Note that this method deliberately subscribes "out of band" and not being flatMapped into the
 * {@link #register(String)} return value. The idea is that the flux config subscription keeps on going
 * forever until specifically unsubscribed through either {@link #deregister(String)} or {@link #shutdown()}.</p>
 *
 * @param ctx the core context to use.
 * @param name the name of the bucket.
 * @return once registered, returns the disposable so it can be later used to deregister.
 */
private Disposable registerStream(final CoreContext ctx, final String name) {
    return Mono.defer(() -> {
        BucketConfigStreamingRequest request = new BucketConfigStreamingRequest(ctx.environment().timeoutConfig().managementTimeout(), ctx, BestEffortRetryStrategy.INSTANCE, name, ctx.authenticator());
        core.send(request);
        return Reactor.wrap(request, request.response(), true);
    }).flux().flatMap(res -> {
        if (res.status().success()) {
            return res.configs().map(config -> new ProposedBucketConfigContext(name, config, res.address()));
        } else {
            eventBus.publish(new BucketConfigRefreshFailedEvent(core.context(), BucketConfigRefreshFailedEvent.RefresherType.MANAGER, BucketConfigRefreshFailedEvent.Reason.INDIVIDUAL_REQUEST_FAILED, Optional.of(res)));
            // and retry the whole thing
            return Flux.error(new ConfigException());
        }
    }).doOnError(e -> eventBus.publish(new BucketConfigRefreshFailedEvent(core.context(), BucketConfigRefreshFailedEvent.RefresherType.MANAGER, BucketConfigRefreshFailedEvent.Reason.STREAM_FAILED, Optional.of(e)))).doOnComplete(() -> {
        eventBus.publish(new BucketConfigRefreshFailedEvent(core.context(), BucketConfigRefreshFailedEvent.RefresherType.MANAGER, BucketConfigRefreshFailedEvent.Reason.STREAM_CLOSED, Optional.empty()));
        // handled in the retryWhen below.
        throw new ConfigException();
    }).retryWhen(Retry.any().exponentialBackoff(Duration.ofMillis(32), Duration.ofMillis(4096)).toReactorRetry()).subscribe(provider::proposeBucketConfig);
}
Also used : Disposable(reactor.core.Disposable) Reactor(com.couchbase.client.core.Reactor) Retry(com.couchbase.client.core.retry.reactor.Retry) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) BestEffortRetryStrategy(com.couchbase.client.core.retry.BestEffortRetryStrategy) Mono(reactor.core.publisher.Mono) BucketConfigStreamingRequest(com.couchbase.client.core.msg.manager.BucketConfigStreamingRequest) Flux(reactor.core.publisher.Flux) EventBus(com.couchbase.client.core.cnc.EventBus) CoreContext(com.couchbase.client.core.CoreContext) Duration(java.time.Duration) Map(java.util.Map) ProposedBucketConfigContext(com.couchbase.client.core.config.ProposedBucketConfigContext) ConfigException(com.couchbase.client.core.error.ConfigException) Optional(java.util.Optional) BucketConfigRefreshFailedEvent(com.couchbase.client.core.cnc.events.config.BucketConfigRefreshFailedEvent) Core(com.couchbase.client.core.Core) ConfigurationProvider(com.couchbase.client.core.config.ConfigurationProvider) ProposedBucketConfigContext(com.couchbase.client.core.config.ProposedBucketConfigContext) ConfigException(com.couchbase.client.core.error.ConfigException) BucketConfigRefreshFailedEvent(com.couchbase.client.core.cnc.events.config.BucketConfigRefreshFailedEvent) BucketConfigStreamingRequest(com.couchbase.client.core.msg.manager.BucketConfigStreamingRequest)

Aggregations

ConfigException (com.couchbase.client.core.error.ConfigException)6 Core (com.couchbase.client.core.Core)4 AlreadyShutdownException (com.couchbase.client.core.error.AlreadyShutdownException)4 EventBus (com.couchbase.client.core.cnc.EventBus)3 BucketOpenRetriedEvent (com.couchbase.client.core.cnc.events.config.BucketOpenRetriedEvent)3 SeedNode (com.couchbase.client.core.env.SeedNode)3 BucketNotFoundDuringLoadException (com.couchbase.client.core.error.BucketNotFoundDuringLoadException)3 RequestCanceledException (com.couchbase.client.core.error.RequestCanceledException)3 UnsupportedConfigMechanismException (com.couchbase.client.core.error.UnsupportedConfigMechanismException)3 BestEffortRetryStrategy (com.couchbase.client.core.retry.BestEffortRetryStrategy)3 Duration (java.time.Duration)3 Optional (java.util.Optional)3 BucketConfigUpdatedEvent (com.couchbase.client.core.cnc.events.config.BucketConfigUpdatedEvent)2 CollectionMapRefreshFailedEvent (com.couchbase.client.core.cnc.events.config.CollectionMapRefreshFailedEvent)2 CollectionMapRefreshIgnoredEvent (com.couchbase.client.core.cnc.events.config.CollectionMapRefreshIgnoredEvent)2 CollectionMapRefreshSucceededEvent (com.couchbase.client.core.cnc.events.config.CollectionMapRefreshSucceededEvent)2 ConfigIgnoredEvent (com.couchbase.client.core.cnc.events.config.ConfigIgnoredEvent)2 GlobalConfigRetriedEvent (com.couchbase.client.core.cnc.events.config.GlobalConfigRetriedEvent)2 GlobalConfigUpdatedEvent (com.couchbase.client.core.cnc.events.config.GlobalConfigUpdatedEvent)2 IndividualGlobalConfigLoadFailedEvent (com.couchbase.client.core.cnc.events.config.IndividualGlobalConfigLoadFailedEvent)2