Class DefaultConfigurationProvider

java.lang.Object
com.couchbase.client.core.config.DefaultConfigurationProvider
All Implemented Interfaces:
ConfigurationProvider

public class DefaultConfigurationProvider extends Object implements ConfigurationProvider
The standard ConfigurationProvider that is used by default.

This provider has been around since the 1.x days, but it has been revamped and reworked for the 2.x breakage - the overall functionality remains very similar though.

Since:
1.0.0
  • Constructor Details

    • DefaultConfigurationProvider

      public DefaultConfigurationProvider(Core core, Set<SeedNode> seedNodes)
    • DefaultConfigurationProvider

      public DefaultConfigurationProvider(Core core, Set<SeedNode> seedNodes, ConnectionString connectionString)
      Creates a new configuration provider.
      Parameters:
      core - the core against which all ops are executed.
  • Method Details

    • collectionMap

      public CollectionMap collectionMap()
      Description copied from interface: ConfigurationProvider
      Returns the attached collection map.
      Specified by:
      collectionMap in interface ConfigurationProvider
    • configs

      public Flux<ClusterConfig> configs()
      Description copied from interface: ConfigurationProvider
      This is a hot stream which when attached will return the current config as well as all subsequent ones.
      Specified by:
      configs in interface ConfigurationProvider
      Returns:
      a flux of new configurations as they arrive.
    • config

      public ClusterConfig config()
      Description copied from interface: ConfigurationProvider
      Returns the current ClusterConfig.
      Specified by:
      config in interface ConfigurationProvider
      Returns:
      the current cluster configuration.
    • seedNodes

      public Flux<Set<SeedNode>> seedNodes()
      Description copied from interface: ConfigurationProvider
      Returns a stream of seed node sets sourced from the server's global config or bucket config.

      Only nodes running the KV service are present in the set.

      This is a hot stream which when attached will return the current set of seed nodes as well as all subsequent sets. The returned Flux does not emit any items until the client has received at least one config from the server.

      Specified by:
      seedNodes in interface ConfigurationProvider
      Returns:
      a flux of new sets of seed nodes as they arrive.
    • openBucket

      public Mono<Void> openBucket(String name)
      Description copied from interface: ConfigurationProvider
      Initiates the bucket opening process.

      Note that when this mono completes, it does not mean that the process is completely finished yet, just that it has been initiated and no hard error has been found at the time.

      Specified by:
      openBucket in interface ConfigurationProvider
      Parameters:
      name - the name of the bucket to open.
      Returns:
      a Mono that completes once the bucket has been logically opened.
    • loadBucketConfigForSeed

      protected Mono<ProposedBucketConfigContext> loadBucketConfigForSeed(NodeIdentifier identifier, int mappedKvPort, int mappedManagerPort, String name, Optional<String> alternateAddress)
      Encapsulates the logic to load the bucket config from kv and then fall back to manager.

      This method can be overridden in tests to simulate various states/errors from the loaders.

      Parameters:
      identifier - the identifier to load it from.
      mappedKvPort - the port of the kv loader.
      mappedManagerPort - the port for the manager.
      name - the name of the bucket.
      alternateAddress - the alternate address, if present.
      Returns:
      returns the bucket config context if present, or an error.
    • loadAndRefreshGlobalConfig

      public Mono<Void> loadAndRefreshGlobalConfig()
      Description copied from interface: ConfigurationProvider
      Instructs the provider to try and load the global config, and then manage it.
      Specified by:
      loadAndRefreshGlobalConfig in interface ConfigurationProvider
    • proposeBucketConfig

      public void proposeBucketConfig(ProposedBucketConfigContext ctx)
      Description copied from interface: ConfigurationProvider
      Allows to propose a bucket config to the provider from an external context.

      This method is usually only called when a "not my vbucket" response is received and the corresponding config is extracted. Do not call this method with arbitrary configs.

      Specified by:
      proposeBucketConfig in interface ConfigurationProvider
      Parameters:
      ctx - the bucket config and surrounding context.
    • proposeGlobalConfig

      public void proposeGlobalConfig(ProposedGlobalConfigContext ctx)
      Description copied from interface: ConfigurationProvider
      Allows to propose a global config to the provider from an external context.
      Specified by:
      proposeGlobalConfig in interface ConfigurationProvider
      Parameters:
      ctx - the context with the global config.
    • closeBucket

      public Mono<Void> closeBucket(String name, boolean pushConfig)
      Description copied from interface: ConfigurationProvider
      Initiates the bucket closing process.
      Specified by:
      closeBucket in interface ConfigurationProvider
      Parameters:
      name - the name of the bucket.
      pushConfig - whether this should result in a config being pushed. Not needed during e.g. shutdown.
      Returns:
      a Mono that completes once the bucket has been logically closed.
    • shutdown

      public Mono<Void> shutdown()
      Description copied from interface: ConfigurationProvider
      Shuts down the configuration provider and all its associated resources and timers.
      Specified by:
      shutdown in interface ConfigurationProvider
      Returns:
      the mono completes once shut down properly.
    • refreshCollectionId

      public void refreshCollectionId(CollectionIdentifier identifier)
      Description copied from interface: ConfigurationProvider
      Helper method to refresh the collection map for the given collection. Returns after refreshed completes the mono (or fails if error).
      Specified by:
      refreshCollectionId in interface ConfigurationProvider
      Parameters:
      identifier - the identifier to refresh.
    • collectionRefreshInProgress

      public boolean collectionRefreshInProgress()
      Description copied from interface: ConfigurationProvider
      Returns true while a collection refresh is in progress at all.
      Specified by:
      collectionRefreshInProgress in interface ConfigurationProvider
    • collectionRefreshInProgress

      public boolean collectionRefreshInProgress(CollectionIdentifier identifier)
      Description copied from interface: ConfigurationProvider
      Returns true if a collection refresh is in progress for the given identifier.
      Specified by:
      collectionRefreshInProgress in interface ConfigurationProvider
      Parameters:
      identifier - the collection identifier to check.
    • extractAlternateAddressInfos

      public static List<DefaultConfigurationProvider.AlternateAddressHolder> extractAlternateAddressInfos(ClusterConfig config)
      Helper method to turn either the port info or the node info into a list of hosts to use for the alternate address resolution.
      Returns:
      a list of hostname/alternate address mappings.
    • determineNetworkResolution

      public static String determineNetworkResolution(List<DefaultConfigurationProvider.AlternateAddressHolder> nodes, NetworkResolution nr, Set<String> seedHosts)
      Helper method to figure out which network resolution should be used.

      If DEFAULT is selected, then null is returned which is equal to the "internal" or default config mode. If AUTO is used then we perform the select heuristic based off of the seed hosts given. All other resolution settings (i.e. EXTERNAL) are returned directly and are considered to be part of the alternate address configs.

      Parameters:
      nodes - the list of nodes to check.
      nr - the network resolution setting from the environment
      seedHosts - the seed hosts from bootstrap for autoconfig.
      Returns:
      the found setting if external is used, null if internal/default is used.
    • republishCurrentConfig

      public void republishCurrentConfig()
      Description copied from interface: ConfigurationProvider
      Shouldn't be necessary, but gives InvalidStateWatchdog something to do.
      Specified by:
      republishCurrentConfig in interface ConfigurationProvider
    • registerRefresher

      protected Mono<Void> registerRefresher(String bucket)
      Registers the given bucket for refreshing.

      Note that this changes the implementation from the 1.x series a bit. In the past, whatever loader succeeded automatically registered the same type of refresher. This is still the case for situations like a memcache bucket, but in cases where we bootstrap from i.e. a query node only the manager loader will work but we'll be able to use the key value refresher going forward.

      As a result, this method is a bit more intelligent in selecting the right refresher based on the loaded configuration.

      Parameters:
      bucket - the name of the bucket.
      Returns:
      a Mono once registered.
    • globalConfigLoadInProgress

      public boolean globalConfigLoadInProgress()
      Description copied from interface: ConfigurationProvider
      Returns true if an initial global config load attempt is in progress.
      Specified by:
      globalConfigLoadInProgress in interface ConfigurationProvider
      Returns:
      true if it is in progress, false if not (done or failed).
    • bucketConfigLoadInProgress

      public boolean bucketConfigLoadInProgress()
      Description copied from interface: ConfigurationProvider
      Returns true if a bucket config load attempt is in progress.
      Specified by:
      bucketConfigLoadInProgress in interface ConfigurationProvider
      Returns:
      true if in progress, false if not.
    • signalConfigRefreshFailed

      public void signalConfigRefreshFailed(ConfigRefreshFailure failure)
      Description copied from interface: ConfigurationProvider
      Signals to the config provider that certain types of config refreshes failed and action might need to be taken.
      Specified by:
      signalConfigRefreshFailed in interface ConfigurationProvider
      Parameters:
      failure - the type of config refresh failure.
    • signalConfigChanged

      public void signalConfigChanged()
      Description copied from interface: ConfigurationProvider
      Signals to the config provider that the server sent a notification that the cluster topology or bucket config changed.
      Specified by:
      signalConfigChanged in interface ConfigurationProvider
    • configChangeNotifications

      public Flux<Long> configChangeNotifications()
      Description copied from interface: ConfigurationProvider
      Returns a feed that emits -1L whenever someone calls ConfigurationProvider.signalConfigChanged().
      Specified by:
      configChangeNotifications in interface ConfigurationProvider
    • performDnsSrvLookup

      protected List<String> performDnsSrvLookup(boolean tlsEnabled) throws NamingException
      Performs DNS SRV lookups - and can be overridden by test classes.
      Returns:
      the (potentially empty) DNS SRV records after the lookup.
      Throws:
      NamingException