Package com.atlassian.beehive.db
Class AbstractClusterNodeHeartbeatService
java.lang.Object
com.atlassian.beehive.db.AbstractClusterNodeHeartbeatService
- All Implemented Interfaces:
ClusterNodeHeartbeatService
- Direct Known Subclasses:
CrowdClusterNodeHeartbeatService
public abstract class AbstractClusterNodeHeartbeatService
extends Object
implements ClusterNodeHeartbeatService
Implementation of ClusterNodeHeartbeatService.
It is up to the concrete class to ensure that startHeartbeat()
is called upon product startup.
The current heartbeat is one minute which is the finest that atlassian-scheduler currently allows.
-
Constructor Summary
ConstructorDescriptionAbstractClusterNodeHeartbeatService
(ClusterNodeHeartBeatDao clusterNodeHeartBeatDao, com.atlassian.scheduler.SchedulerService schedulerService) -
Method Summary
Modifier and TypeMethodDescriptionReturns all nodes that have sent a heartbeat within the default threshold time.findLiveNodes
(long threshold) Returns all nodes that have sent a heartbeat within the given threshold.getLastHeartbeatTime
(String nodeId) Returns the last time a heartbeat was sent by the given node.Returns the node ID for this node.boolean
isNodeLive
(String nodeId) Checks whether the given cluster node is considered "live".protected com.atlassian.scheduler.JobRunner
protected void
The concrete class must ensure that this is called upon product startup, but after the DB is available.
-
Constructor Details
-
AbstractClusterNodeHeartbeatService
public AbstractClusterNodeHeartbeatService(ClusterNodeHeartBeatDao clusterNodeHeartBeatDao, com.atlassian.scheduler.SchedulerService schedulerService)
-
-
Method Details
-
startHeartbeat
protected void startHeartbeat() throws com.atlassian.scheduler.SchedulerServiceExceptionThe concrete class must ensure that this is called upon product startup, but after the DB is available.- Throws:
com.atlassian.scheduler.SchedulerServiceException
- if the heartbeat job could not be scheduled. This should be considered a fatal exception.
-
getNodeId
Description copied from interface:ClusterNodeHeartbeatService
Returns the node ID for this node.- Specified by:
getNodeId
in interfaceClusterNodeHeartbeatService
- Returns:
- the node ID for this node.
-
isNodeLive
Description copied from interface:ClusterNodeHeartbeatService
Checks whether the given cluster node is considered "live".Each live node will be writing a heartbeat on a set schedule (eg once a minute). A node is considered live if it has written a heartbeat within a reasonable tolerance level (eg 5 minutes).
The tolerance level needs to be large enough to avoid certain expected slow-downs in the system including GC pauses, or just general slowness in the JVM / scheduler / network / database of the remote node.
- Specified by:
isNodeLive
in interfaceClusterNodeHeartbeatService
- Parameters:
nodeId
- the cluster node to check- Returns:
- true iff the given cluster node is still "live".
-
getLastHeartbeatTime
Description copied from interface:ClusterNodeHeartbeatService
Returns the last time a heartbeat was sent by the given node.A
null
value indicates no heartbeats have ever been sent by the given node.- Specified by:
getLastHeartbeatTime
in interfaceClusterNodeHeartbeatService
- Parameters:
nodeId
- the node- Returns:
- the last time a heartbeat was sent by the given node.
-
findLiveNodes
Description copied from interface:ClusterNodeHeartbeatService
Returns all nodes that have sent a heartbeat within the default threshold time.- Specified by:
findLiveNodes
in interfaceClusterNodeHeartbeatService
- Returns:
- all nodes that have sent a heartbeat within the default threshold time.
- See Also:
-
findLiveNodes
Description copied from interface:ClusterNodeHeartbeatService
Returns all nodes that have sent a heartbeat within the given threshold.- Specified by:
findLiveNodes
in interfaceClusterNodeHeartbeatService
- Parameters:
threshold
- the threshold in milliseconds- Returns:
- all nodes that have sent a heartbeat within the given threshold.
- See Also:
-
newHeartbeatJobRunner
protected com.atlassian.scheduler.JobRunner newHeartbeatJobRunner()
-