Interface DiscoveryPlugin

  • public interface DiscoveryPlugin
    An additional extension point for Plugins that extends Elasticsearch's discovery functionality. To add an additional NetworkService.CustomNameResolver just implement the interface and implement the getCustomNameResolver(Settings) method:
     public class MyDiscoveryPlugin extends Plugin implements DiscoveryPlugin {
         public NetworkService.CustomNameResolver getCustomNameResolver(Settings settings) {
             return new YourCustomNameResolverInstance(settings);
    • Method Detail

      • getDiscoveryTypes

        default java.util.Map<java.lang.String,​java.util.function.Supplier<Discovery>> getDiscoveryTypes​(ThreadPool threadPool,
                                                                                                               TransportService transportService,
                                                                                                               NamedWriteableRegistry namedWriteableRegistry,
                                                                                                               MasterService masterService,
                                                                                                               ClusterApplier clusterApplier,
                                                                                                               ClusterSettings clusterSettings,
                                                                                                               UnicastHostsProvider hostsProvider,
                                                                                                               AllocationService allocationService)
        Future versions will not support pluggable discovery implementations.
        Returns custom discovery implementations added by this plugin. The key of the returned map is the name of the discovery implementation (see DiscoveryModule.DISCOVERY_TYPE_SETTING, and the value is a supplier to construct the Discovery.
        threadPool - Use to schedule ping actions
        transportService - Use to communicate with other nodes
        masterService - Use to submit cluster state update tasks
        clusterApplier - Use to locally apply cluster state updates
        clusterSettings - Use to get cluster settings
        hostsProvider - Use to find configured hosts which should be pinged for initial discovery
      • getCustomNameResolver

        default NetworkService.CustomNameResolver getCustomNameResolver​(Settings settings)
        Override to add additional NetworkService.CustomNameResolvers. This can be handy if you want to provide your own Network interface name like _mycard_ and implement by yourself the logic to get an actual IP address/hostname based on this name. For example: you could call a third party service (an API) to resolve _mycard_. Then you could define in elasticsearch.yml settings like:
      • getZenHostsProviders

        default java.util.Map<java.lang.String,​java.util.function.Supplier<UnicastHostsProvider>> getZenHostsProviders​(TransportService transportService,
                                                                                                                             NetworkService networkService)
        Returns providers of unicast host lists for zen discovery. The key of the returned map is the name of the host provider (see DiscoveryModule.DISCOVERY_HOSTS_PROVIDER_SETTING), and the value is a supplier to construct the host provider when it is selected for use.
        transportService - Use to form the TransportAddress portion of a DiscoveryNode
        networkService - Use to find the publish host address of the current node
      • getJoinValidator

        default java.util.function.BiConsumer<DiscoveryNode,​ClusterState> getJoinValidator()
        Returns a consumer that validate the initial join cluster state. The validator, unless null is called exactly once per join attempt but might be called multiple times during the lifetime of a node. Validators are expected to throw a IllegalStateException if the node and the cluster-state are incompatible.