Package com.atlassian.jira.cluster
package com.atlassian.jira.cluster
-
ClassDescriptionProvides basic information about whether or not JIRA is clustered, the identification of the current node, and so on.Manages the cluster - addition of nodes, removal, etcRepresents a message sent from a nodeThe interface to be implemented by classes wishing to listen to messages sent to a cluster.Service responsible for notifying
ClusterMessageConsumer
instances when messages are waiting to be processed.This is used to lookup cluster properties from the underlying properties file.Loads the cluster properties from the "cluster.properties" file, if it exists.Provides access to cluster nodes.Marker annotation to indicate that an item, such as a cache, is cluster safe, even though it uses a pattern, e.g.Start and stop clustered servicesLoads on startup and returns cluster service settings.A generic exception for cluster related problemsResponsible for cleaning unfinished tasks fromTaskManager
that are assigned to offline nodes.A service that watches the clusternode table for node state changes and emits appropriate events.This is the cutting off executor that will optionally invoke caller's code with a callback that allows registering successful or failed execution.An implementation of cutting off executor that will cut off any further executions after registering first failure.Provides an implementation for theClusterMessagingService
that wraps an existingMessageHandlerService
in order to provide an API that can be consumed by plugins.Manages the cluster - addition of nodes, removal, etcStarts and stops clustering specific services - checks to see if clusteredBuilder for our EhCacheConfiguration.Manage the state of the current node.The NodeStateService implementation.Builder for our EhCacheConfiguration.Consumes cluster messages and pushes them out to the EventPublisher.Represents the set of messages that can be sent in the clusterSynchronously send and receive messagesRepresents a node in the clusterAn event that is fired when a node that already exists in the cluster changes any of its properties, as seen in theNode
class.An event that is fired when a new node joins the cluster for the first time.An event that is fired when a node is removed from the cluster (as of 7.6, the only way to do this is to manually remove an entry from the clusternode table in JIRA's database).Example output: 2022-07-08 21:06:15,122+1000 jira-stats-0 INFO [c.a.j.util.stats.JiraStats] [JIRA-STATS] [NODE-START] total stats: duration=PT5M0.016S, statsOverhead=n/a, data= { "_statsName": "NODE-START", "_statsType": "total", "_time": "2022-07-08T11:06:15.120Z", "_timestamp": 1657278375120, "_duration": "PT5M0.016S", "_invocations": 5, "_statsOverhead": "n/a", "configuration": { "isRebuildLocalIndex": true, "isPickSnapshotFromSharedHome": true, "isRequestIndexSnapshotFromAnotherNode": false, "isTriggerFullReindex": true }, "checkIndexOnStart": { "time": "2022-07-08T11:03:09.938Z", "result": "SUCCESS", "timeInSeconds": 39 }, "getIndexBy": { "rebuildLocalIndex": { "result": "FAILED", "timeInSeconds": 0 }, "pickIndexSnapshotFromSharedHome": { "snapshotName": "IndexSnapshot_12400_220707-235024.tar.sz", "result": "SUCCESS", "timeInSeconds": 39 }, "requestIndexSnapshotFromAnotherNode": { "result": "NOT_RUN", "timeInSeconds": 0 }, "performFullForegroundReindex": { "result": "NOT_RUN", "timeInSeconds": 0 } }, "ensureFreshIndexSnapshot": { "result": "SUCCESS", "snapshotExisted": true, "snapshotCreated": false, "timeInSeconds": 0 } }Manage the state of nodes in the HA Cluster.A service relating to the state of nodes within a JIRA cluster.Thrown when a cluster-specific operation is attempted but the target instance is not part of a cluster.Responsible for storing and retrieving cluster messages in the underlying database.Responsible for storing and retrieving ClusterNode state in the underlying databaseProvides an implementation for theClusterMessagingService
that uses OfBiz to manage the message queue in the database and holds any listeners via a weak reference so that it doesn't keep listeners alive across plugin restarts, etc.