Class SeedNodeProviderGroup
- java.lang.Object
-
- io.hekate.cluster.seed.SeedNodeProviderGroup
-
- All Implemented Interfaces:
SeedNodeProvider
,JmxSupport<Collection<? extends SeedNodeProvider>>
,ConfigReportSupport
public class SeedNodeProviderGroup extends Object implements SeedNodeProvider, JmxSupport<Collection<? extends SeedNodeProvider>>, ConfigReportSupport
Group ofSeedNodeProvider
s.This class provides support for registering multiple
SeedNodeProvider
s simultaneously to theClusterService
and act as a single provider.It is possible to specify an error handling policy via the
SeedNodeProviderGroupConfig.setPolicy(SeedNodeProviderGroupPolicy)
method. For the list of available policies please see the documentation ofSeedNodeProviderGroupPolicy
enum's values.Below is the configuration example:
// Prepare seed node providers group. SeedNodeProviderGroupConfig seedGroupCfg = new SeedNodeProviderGroupConfig() // First provider. .withProvider( new MulticastSeedNodeProvider( new MulticastSeedNodeProviderConfig() .withGroup("224.1.2.12") .withPort(45454) .withInterval(200) .withWaitTime(1000) ) ) // Second provider. .withProvider( new FsSeedNodeProvider( new FsSeedNodeProviderConfig().withWorkDir(tempDir) ) ) // Do not fail if at least one provider can find seed nodes. .withPolicy(SeedNodeProviderGroupPolicy.IGNORE_PARTIAL_ERRORS); // Start node. Hekate hekate = new HekateBootstrap() .withCluster(cluster -> { // Register the providers group to the cluster service. cluster.withSeedNodeProvider(new SeedNodeProviderGroup(seedGroupCfg)); }) .join();
-
-
Constructor Summary
Constructors Constructor Description SeedNodeProviderGroup(SeedNodeProviderGroupConfig cfg)
Constructs a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description List<SeedNodeProvider>
allProviders()
Returns an immutable list of all providers that are configured for this group.long
cleanupInterval()
Returns the time interval in milliseconds for the cluster service to perform the stale data cleaning.<T> Optional<T>
findProvider(Class<T> type)
Searches for a seed node provider of the specified type.List<InetSocketAddress>
findSeedNodes(String namespace)
Returns the list of known seed node addresses.Collection<? extends SeedNodeProvider>
jmx()
Creates a JMX object.List<SeedNodeProvider>
liveProviders()
Returns a copy of a list of all providers that were successfully started.SeedNodeProviderGroupPolicy
policy()
Returns the error handling policy of this group.void
registerRemote(String namespace, InetSocketAddress node)
Registered the specified addresses within this provider.void
report(ConfigReporter report)
Report configuration.void
startDiscovery(String namespace, InetSocketAddress node)
Registers the local node address and starts this provider.void
stopDiscovery(String namespace, InetSocketAddress node)
Unregisters the local node address and stops this provider.void
suspendDiscovery()
Suspends discovery activities.String
toString()
void
unregisterRemote(String namespace, InetSocketAddress node)
Unregisters the specified address from this provider.
-
-
-
Constructor Detail
-
SeedNodeProviderGroup
public SeedNodeProviderGroup(SeedNodeProviderGroupConfig cfg)
Constructs a new instance.- Parameters:
cfg
- Configuration.
-
-
Method Detail
-
report
public void report(ConfigReporter report)
Description copied from interface:ConfigReportSupport
Report configuration.- Specified by:
report
in interfaceConfigReportSupport
- Parameters:
report
- Reporter.
-
allProviders
public List<SeedNodeProvider> allProviders()
Returns an immutable list of all providers that are configured for this group.- Returns:
- Immutable list of all providers of this group.
- See Also:
SeedNodeProviderGroupConfig.setProviders(List)
-
liveProviders
public List<SeedNodeProvider> liveProviders()
Returns a copy of a list of all providers that were successfully started.- Returns:
- Copy of a list of all providers that were successfully started.
- See Also:
SeedNodeProvider.startDiscovery(String, InetSocketAddress)
-
findProvider
public <T> Optional<T> findProvider(Class<T> type)
Searches for a seed node provider of the specified type.- Type Parameters:
T
- Type of a seed node provider.- Parameters:
type
- Type of a seed node provider.- Returns:
- Seed node provider.
-
policy
public SeedNodeProviderGroupPolicy policy()
Returns the error handling policy of this group.- Returns:
- Error handling policy of this group.
- See Also:
SeedNodeProviderGroupConfig.setPolicy(SeedNodeProviderGroupPolicy)
-
cleanupInterval
public long cleanupInterval()
Description copied from interface:SeedNodeProvider
Returns the time interval in milliseconds for the cluster service to perform the stale data cleaning. If the returned value if less than or equals to zero then stale data cleaning will be disabled.- Specified by:
cleanupInterval
in interfaceSeedNodeProvider
- Returns:
- Time interval in milliseconds.
-
findSeedNodes
public List<InetSocketAddress> findSeedNodes(String namespace) throws HekateException
Description copied from interface:SeedNodeProvider
Returns the list of known seed node addresses.- Specified by:
findSeedNodes
in interfaceSeedNodeProvider
- Parameters:
namespace
- Cluster namespace (seeClusterServiceFactory.setNamespace(String)
).- Returns:
- List of known seed node addresses.
- Throws:
HekateException
- if failed to provide seed node addresses information due to the system failure.
-
startDiscovery
public void startDiscovery(String namespace, InetSocketAddress node) throws HekateException
Description copied from interface:SeedNodeProvider
Registers the local node address and starts this provider.- Specified by:
startDiscovery
in interfaceSeedNodeProvider
- Parameters:
namespace
- Cluster namespace (seeClusterServiceFactory.setNamespace(String)
).node
- Local node address.- Throws:
HekateException
- If failed to start discovery due to the system failure.
-
suspendDiscovery
public void suspendDiscovery() throws HekateException
Description copied from interface:SeedNodeProvider
Suspends discovery activities.- Specified by:
suspendDiscovery
in interfaceSeedNodeProvider
- Throws:
HekateException
- If failed to suspend discovery activities due to some system failure.
-
stopDiscovery
public void stopDiscovery(String namespace, InetSocketAddress node) throws HekateException
Description copied from interface:SeedNodeProvider
Unregisters the local node address and stops this provider.- Specified by:
stopDiscovery
in interfaceSeedNodeProvider
- Parameters:
namespace
- Cluster namespace (seeClusterServiceFactory.setNamespace(String)
).node
- Local node address.- Throws:
HekateException
- If failed to stop discovery due to the system failure.
-
registerRemote
public void registerRemote(String namespace, InetSocketAddress node) throws HekateException
Description copied from interface:SeedNodeProvider
Registered the specified addresses within this provider.This method is the part of a stale data cleanup activity and is performed by the cluster service if it detects that particular node is within its cluster topology but is not registered within this provider (i.e. not returned from
SeedNodeProvider.findSeedNodes(String)
method).- Specified by:
registerRemote
in interfaceSeedNodeProvider
- Parameters:
namespace
- Cluster namespace (seeClusterServiceFactory.setNamespace(String)
).node
- Node address that should be registered.- Throws:
HekateException
- If node couldn't be registered due to the system failure.
-
unregisterRemote
public void unregisterRemote(String namespace, InetSocketAddress node) throws HekateException
Description copied from interface:SeedNodeProvider
Unregisters the specified address from this provider.This method is the part of a stale data cleanup activity and is called by the cluster service if it detects that there is no cluster node running at the specified address while this address is still registered within this provider (i.e. is returned from
SeedNodeProvider.findSeedNodes(String)
method).- Specified by:
unregisterRemote
in interfaceSeedNodeProvider
- Parameters:
namespace
- Cluster namespace (seeClusterServiceFactory.setNamespace(String)
).node
- Node address that should be unregistered.- Throws:
HekateException
- If node couldn't be unregistered due to the system failure.
-
jmx
public Collection<? extends SeedNodeProvider> jmx()
Description copied from interface:JmxSupport
Creates a JMX object.- Specified by:
jmx
in interfaceJmxSupport<Collection<? extends SeedNodeProvider>>
- Returns:
- JMX object.
-
-