Class HazelcastClusterManager
- java.lang.Object
-
- com.atlassian.confluence.cluster.hazelcast.HazelcastClusterManager
-
- All Implemented Interfaces:
com.atlassian.beehive.ClusterLockService
,ClusterManager
,LockFactory
,com.atlassian.util.concurrent.Supplier<com.hazelcast.core.HazelcastInstance>
,com.google.common.base.Supplier<com.hazelcast.core.HazelcastInstance>
,Supplier<com.hazelcast.core.HazelcastInstance>
@ParametersAreNonnullByDefault @Internal public class HazelcastClusterManager extends Object implements ClusterManager, com.atlassian.beehive.ClusterLockService, com.google.common.base.Supplier<com.hazelcast.core.HazelcastInstance>, com.atlassian.util.concurrent.Supplier<com.hazelcast.core.HazelcastInstance>, Supplier<com.hazelcast.core.HazelcastInstance>
Hazelcast implementation ofClusterManager
- Since:
- 5.6
-
-
Field Summary
-
Fields inherited from interface com.atlassian.confluence.cluster.ClusterManager
DEFAULT_EXECUTOR_SVC_NAME
-
-
Constructor Summary
Constructors Constructor Description HazelcastClusterManager(com.atlassian.config.ApplicationConfig applicationConfig, ClassLoader classLoader, String configResourceName, SynchronizationManager synchronizationManager, com.atlassian.hazelcast.serialization.OsgiSafeStreamSerializer osgiSafeStreamSerializer, com.hazelcast.core.OutOfMemoryHandler outOfMemoryHandler, io.micrometer.core.instrument.MeterRegistry micrometerRegistry, MBeanServer mbeanServer)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
configure(ClusterConfig clusterConfig)
Set a new cluster configuration.protected com.hazelcast.core.HazelcastInstance
createHazelcastInstance()
com.hazelcast.core.HazelcastInstance
get()
Collection<ClusterNodeInformation>
getAllNodesInformation()
ClusteredLock
getClusteredLock(String key)
Get a distributed lock -- getting the lock does *not* imply that it has been acquired.ClusterInformation
getClusterInformation()
Deprecated, for removal: This API element is subject to removal in a future version.since 8.2ClusterInvariants
getClusterInvariants()
Get all attributes of the server that must be consistent between the nodes of a stable cluster.long
getClusterUptime()
Gets the amount of time that the cluster has been running.<T> com.atlassian.core.task.FifoBuffer<T>
getFifoBuffer(String name)
Deprecated, for removal: This API element is subject to removal in a future version.since 8.2Lock
getLock(String name)
Get a lock -- getting the lock does *not* imply that it has been acquired.com.atlassian.confluence.cluster.hazelcast.DualLock
getLockForName(@NonNull String key)
Map<Integer,NodeStatus>
getNodeStatuses()
Deprecated.Map<ClusterNodeInformation,NodeStatus>
getNodeStatusMap()
Gets status information from all members of the cluster.Map<ClusterNodeInformation,CompletionStage<NodeStatus>>
getNodeStatusMapAsync()
GetsCompletionStage
of status information from all members of the cluster.String
getSharedSecret()
Get the value of config propertyconfluence.cluster.authentication.secret
from confluence.cfg.xmlClusterNodeInformation
getThisNodeInformation()
Get the identity of this node in the cluster.void
initOutOfmemoryhandler()
boolean
isClustered()
boolean
isClusterSupported()
Check whether this Confluence distribution is capable of running in a cluster.boolean
isConfigured()
boolean
isNodeAuthEnabled()
Get the value of config propertyconfluence.cluster.authentication.enabled
from confluence.cfg.xmlvoid
publishEvent(ConfluenceEvent event)
Publish an event as a ClusterEventWrapper to other nodesvoid
publishEventImmediately(ConfluenceEvent event)
Publish immediately, an event as a ClusterEventWrapper to other nodesvoid
reconfigure(ClusterConfig config)
Set a new cluster configuration and cycle the servicevoid
startCluster()
Start the clustering servicevoid
stopCluster()
Stop the clustering service<T> List<ClusterNodeExecution<T>>
submitToAllNodes(Callable<T> task, String serviceName)
Submit a task to be executed on all nodes in the cluster.<T> CompletionStage<T>
submitToKeyOwner(Callable<T> task, String serviceName, Object key)
Submit a task to be executed by a service given by its name on one node of the cluster that own a given key.<T> ClusterNodeExecution<T>
submitToNode(@Nullable String nodeId, Callable<T> task, String serviceName)
Submit a task to be executed on a node with the specified ID
-
-
-
Constructor Detail
-
HazelcastClusterManager
public HazelcastClusterManager(com.atlassian.config.ApplicationConfig applicationConfig, ClassLoader classLoader, String configResourceName, SynchronizationManager synchronizationManager, com.atlassian.hazelcast.serialization.OsgiSafeStreamSerializer osgiSafeStreamSerializer, com.hazelcast.core.OutOfMemoryHandler outOfMemoryHandler, io.micrometer.core.instrument.MeterRegistry micrometerRegistry, MBeanServer mbeanServer)
-
-
Method Detail
-
initOutOfmemoryhandler
@PostConstruct public void initOutOfmemoryhandler()
-
isClusterSupported
public boolean isClusterSupported()
Description copied from interface:ClusterManager
Check whether this Confluence distribution is capable of running in a cluster. This differs fromClusterManager.isClustered()
in that it will return true if the code to support clustering is present, even if this instance does not have a clustered license or a current clustering configuration.- Specified by:
isClusterSupported
in interfaceClusterManager
- Returns:
- true if this Confluence installation is capable of running in a cluster
-
getClusterUptime
public long getClusterUptime()
Description copied from interface:ClusterManager
Gets the amount of time that the cluster has been running.- Specified by:
getClusterUptime
in interfaceClusterManager
- Returns:
- the time in milliseconds since the first node in the cluster came up, or the node uptime if not clustered.
-
isClustered
public boolean isClustered()
- Specified by:
isClustered
in interfaceClusterManager
- Returns:
- true if this instance is configured to allow clustering with other nodes. Note, this does not mean this instance is licensed to cluster.
-
getClusterInformation
@Deprecated(since="8.2", forRemoval=true) public ClusterInformation getClusterInformation()
Deprecated, for removal: This API element is subject to removal in a future version.since 8.2Description copied from interface:ClusterManager
Get information about the running cluster.- Specified by:
getClusterInformation
in interfaceClusterManager
-
getFifoBuffer
@Deprecated(since="8.2", forRemoval=true) public <T> com.atlassian.core.task.FifoBuffer<T> getFifoBuffer(String name)
Deprecated, for removal: This API element is subject to removal in a future version.since 8.2Description copied from interface:ClusterManager
Get a distributed FIFO buffer- Specified by:
getFifoBuffer
in interfaceClusterManager
-
publishEvent
public void publishEvent(ConfluenceEvent event)
Description copied from interface:ClusterManager
Publish an event as a ClusterEventWrapper to other nodesThis waits for any current transaction to be committed successfully before scheduling the event for publishing.
- Specified by:
publishEvent
in interfaceClusterManager
-
publishEventImmediately
public void publishEventImmediately(ConfluenceEvent event)
Description copied from interface:ClusterManager
Publish immediately, an event as a ClusterEventWrapper to other nodesThis is done immediately regardless of the state of any current transactions.
- Specified by:
publishEventImmediately
in interfaceClusterManager
-
getThisNodeInformation
public ClusterNodeInformation getThisNodeInformation()
Description copied from interface:ClusterManager
Get the identity of this node in the cluster. ClusterNodeInformation implements equals().
- Specified by:
getThisNodeInformation
in interfaceClusterManager
- Returns:
- the identity of this node in the cluster. May return null if the node is not in a cluster.
-
getAllNodesInformation
public Collection<ClusterNodeInformation> getAllNodesInformation()
- Specified by:
getAllNodesInformation
in interfaceClusterManager
-
configure
public void configure(ClusterConfig clusterConfig)
Description copied from interface:ClusterManager
Set a new cluster configuration.- Specified by:
configure
in interfaceClusterManager
-
isConfigured
public boolean isConfigured()
- Specified by:
isConfigured
in interfaceClusterManager
- Returns:
- true if
ClusterManager.configure(ClusterConfig)
has been called with a valid configuration, otherwise false.
-
reconfigure
public void reconfigure(ClusterConfig config)
Description copied from interface:ClusterManager
Set a new cluster configuration and cycle the service- Specified by:
reconfigure
in interfaceClusterManager
-
stopCluster
@PreDestroy public void stopCluster()
Description copied from interface:ClusterManager
Stop the clustering service- Specified by:
stopCluster
in interfaceClusterManager
-
startCluster
public void startCluster()
Description copied from interface:ClusterManager
Start the clustering service- Specified by:
startCluster
in interfaceClusterManager
-
createHazelcastInstance
protected com.hazelcast.core.HazelcastInstance createHazelcastInstance()
-
getNodeStatuses
@Deprecated public Map<Integer,NodeStatus> getNodeStatuses()
Deprecated.Gets status information from all members of the cluster.- Specified by:
getNodeStatuses
in interfaceClusterManager
- Returns:
- a map of node IDs to node statuses
-
getNodeStatusMap
public Map<ClusterNodeInformation,NodeStatus> getNodeStatusMap()
Gets status information from all members of the cluster.- Specified by:
getNodeStatusMap
in interfaceClusterManager
-
getNodeStatusMapAsync
public Map<ClusterNodeInformation,CompletionStage<NodeStatus>> getNodeStatusMapAsync()
GetsCompletionStage
of status information from all members of the cluster.- Specified by:
getNodeStatusMapAsync
in interfaceClusterManager
-
getClusterInvariants
public ClusterInvariants getClusterInvariants() throws ClusterException
Description copied from interface:ClusterManager
Get all attributes of the server that must be consistent between the nodes of a stable cluster. They are to be retrieved from another member in the cluster. If there are no other members currently active in the cluster, then return null.- Specified by:
getClusterInvariants
in interfaceClusterManager
- Returns:
- the cluster invariants of this server
- Throws:
ClusterException
- if the invariants can not be gathered for some reason
-
getLockForName
public com.atlassian.confluence.cluster.hazelcast.DualLock getLockForName(@NonNull String key)
- Specified by:
getLockForName
in interfacecom.atlassian.beehive.ClusterLockService
-
getClusteredLock
public ClusteredLock getClusteredLock(String key)
Description copied from interface:ClusterManager
Get a distributed lock -- getting the lock does *not* imply that it has been acquired. CallLock.tryLock()
orLock.lock()
on the returned object to acquire the lock.- Specified by:
getClusteredLock
in interfaceClusterManager
-
getLock
public Lock getLock(String name)
Description copied from interface:LockFactory
Get a lock -- getting the lock does *not* imply that it has been acquired. CallLock.tryLock()
orLock.lock()
on the returned object to acquire the lock.- Specified by:
getLock
in interfaceLockFactory
-
get
public com.hazelcast.core.HazelcastInstance get()
-
submitToKeyOwner
public <T> CompletionStage<T> submitToKeyOwner(Callable<T> task, String serviceName, Object key)
Description copied from interface:ClusterManager
Submit a task to be executed by a service given by its name on one node of the cluster that own a given key.- Specified by:
submitToKeyOwner
in interfaceClusterManager
- Parameters:
task
- task to be executed on the node that owns the provided key, it must beSerializable
serviceName
- name of service used to execute the taskkey
- key used to determined which node is going to execute the task, it must beSerializable
- Returns:
- CompletionStage
-
submitToNode
public <T> ClusterNodeExecution<T> submitToNode(@Nullable String nodeId, Callable<T> task, String serviceName) throws NoSuchClusterNodeException
Description copied from interface:ClusterManager
Submit a task to be executed on a node with the specified ID- Specified by:
submitToNode
in interfaceClusterManager
- Parameters:
nodeId
- ID of the node that should execute the task. If null, task will be executed locally.task
- task to be executed on the specified nodeserviceName
- name of service used to execute the task- Returns:
- node execution result
- Throws:
NoSuchClusterNodeException
- if there's no node in the cluster with the specified ID
-
submitToAllNodes
public <T> List<ClusterNodeExecution<T>> submitToAllNodes(Callable<T> task, String serviceName)
Description copied from interface:ClusterManager
Submit a task to be executed on all nodes in the cluster.- Specified by:
submitToAllNodes
in interfaceClusterManager
- Parameters:
task
- task to be executed on the node that owns the provided key, it must beSerializable
serviceName
- name of service used to execute the task- Returns:
- List of
ClusterNodeExecution
, one element from each node
-
getSharedSecret
public String getSharedSecret()
Get the value of config propertyconfluence.cluster.authentication.secret
from confluence.cfg.xml
-
isNodeAuthEnabled
public boolean isNodeAuthEnabled()
Get the value of config propertyconfluence.cluster.authentication.enabled
from confluence.cfg.xml
-
-