akka.contrib.pattern

ClusterSingletonManager

class ClusterSingletonManager extends Actor with FSM[State, Data]

Manages singleton actor instance among all cluster nodes or a group of nodes tagged with a specific role. At most one singleton instance is running at any point in time.

The ClusterSingletonManager is supposed to be started on all nodes, or all nodes with specified role, in the cluster with actorOf. The actual singleton is started on the oldest node by creating a child actor from the supplied singletonProps.

The singleton actor is always running on the oldest member, which can be determined by akka.cluster.Member#isOlderThan. This can change when removing members. A graceful hand over can normally be performed when current oldest node is leaving the cluster. Be aware that there is a short time period when there is no active singleton during the hand-over process.

The cluster failure detector will notice when oldest node becomes unreachable due to things like JVM crash, hard shut down, or network failure. When the crashed node has been removed (via down) from the cluster then a new oldest node will take over and a new singleton actor is created. For these failure scenarios there will not be a graceful hand-over, but more than one active singletons is prevented by all reasonable means. Some corner cases are eventually resolved by configurable timeouts.

You access the singleton actor with actorSelection using the names you have specified when creating the ClusterSingletonManager. You can subscribe to akka.cluster.ClusterEvent.MemberEvent and sort the members by age (akka.cluster.ClusterEvent.Member#isOlderThan) to keep track of oldest member. Alternatively the singleton actor may broadcast its existence when it is started.

Use factory method to create the akka.actor.Props for the actor.

Arguments

singletonProps akka.actor.Props of the singleton actor instance.

singletonName The actor name of the child singleton actor.

terminationMessage When handing over to a new oldest node this terminationMessage is sent to the singleton actor to tell it to finish its work, close resources, and stop. The hand-over to the new oldest node is completed when the singleton actor is terminated. Note that akka.actor.PoisonPill is a perfectly fine terminationMessage if you only need to stop the actor.

role Singleton among the nodes tagged with specified role. If the role is not specified it's a singleton among all nodes in the cluster.

maxHandOverRetries When a node is becoming oldest it sends hand-over request to previous oldest. This is retried with the retryInterval until the previous oldest confirms that the hand over has started, or this maxHandOverRetries limit has been reached. If the retry limit is reached it takes the decision to be the new oldest if previous oldest is unknown (typically removed), otherwise it initiates a new round by throwing akka.contrib.pattern.ClusterSingletonManagerIsStuck and expecting restart with fresh state. For a cluster with many members you might need to increase this retry limit because it takes longer time to propagate changes across all nodes.

maxTakeOverRetries When a oldest node is not oldest any more it sends take over request to the new oldest to initiate the normal hand-over process. This is especially useful when new node joins and becomes oldest immediately, without knowing who was previous oldest. This is retried with the retryInterval until this retry limit has been reached. If the retry limit is reached it initiates a new round by throwing akka.contrib.pattern.ClusterSingletonManagerIsStuck and expecting restart with fresh state. This will also cause the singleton actor to be stopped. maxTakeOverRetries must be less than maxHandOverRetries to ensure that new oldest doesn't start singleton actor before previous is stopped for certain corner cases.

Source
ClusterSingletonManager.scala
Linear Supertypes
FSM[ClusterSingletonManager.State, Data], ActorLogging, Listeners, Actor, AnyRef, Any
Type Hierarchy Learn more about scaladoc diagrams
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. ClusterSingletonManager
  2. FSM
  3. ActorLogging
  4. Listeners
  5. Actor
  6. AnyRef
  7. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ClusterSingletonManager(singletonProps: Props, singletonName: String, terminationMessage: Any, role: Option[String], maxHandOverRetries: Int, maxTakeOverRetries: Int, retryInterval: FiniteDuration)

Type Members

  1. type Event = actor.FSM.Event[Data]

    Definition Classes
    FSM
  2. type Receive = PartialFunction[Any, Unit]

    Definition Classes
    Actor
  3. type State = actor.FSM.State[ClusterSingletonManager.State, Data]

    Definition Classes
    FSM
  4. type StateFunction = PartialFunction[Event, State]

    Definition Classes
    FSM
  5. type StopEvent = actor.FSM.StopEvent[ClusterSingletonManager.State, Data]

    Definition Classes
    FSM
  6. type Timeout = Option[FiniteDuration]

    Definition Classes
    FSM
  7. final class TransformHelper extends AnyRef

    Definition Classes
    FSM
  8. type TransitionHandler = PartialFunction[(ClusterSingletonManager.State, ClusterSingletonManager.State), Unit]

    Definition Classes
    FSM

Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. def +(other: String): String

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to any2stringadd[ClusterSingletonManager] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. val ->: actor.FSM.->.type

    Definition Classes
    FSM
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  6. val Event: actor.FSM.Event.type

    Definition Classes
    FSM
  7. val StateTimeout: actor.FSM.StateTimeout.type

    Definition Classes
    FSM
  8. val StopEvent: actor.FSM.StopEvent.type

    Definition Classes
    FSM
  9. def addRemoved(address: Address): Unit

  10. def aroundPostRestart(reason: Throwable): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  11. def aroundPostStop(): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  12. def aroundPreRestart(reason: Throwable, message: Option[Any]): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  13. def aroundPreStart(): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  14. def aroundReceive(receive: actor.Actor.Receive, msg: Any): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  15. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  16. final def cancelTimer(name: String): Unit

    Definition Classes
    FSM
  17. def cleanupOverdueNotMemberAnyMore(): Unit

  18. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. val cluster: Cluster

  20. implicit val context: ActorContext

    Definition Classes
    Actor
  21. def ensuring(cond: (ClusterSingletonManager) ⇒ Boolean, msg: ⇒ Any): ClusterSingletonManager

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to Ensuring[ClusterSingletonManager] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  22. def ensuring(cond: (ClusterSingletonManager) ⇒ Boolean): ClusterSingletonManager

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to Ensuring[ClusterSingletonManager] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  23. def ensuring(cond: Boolean, msg: ⇒ Any): ClusterSingletonManager

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to Ensuring[ClusterSingletonManager] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  24. def ensuring(cond: Boolean): ClusterSingletonManager

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to Ensuring[ClusterSingletonManager] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  25. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  26. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  27. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  28. def formatted(fmtstr: String): String

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to StringFormat[ClusterSingletonManager] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  29. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  30. def getNextOldestChanged(): Unit

  31. def gossip(msg: Any)(implicit sender: ActorRef): Unit

    Attributes
    protected
    Definition Classes
    Listeners
  32. final def goto(nextStateName: ClusterSingletonManager.State): State

    Definition Classes
    FSM
  33. def gotoHandingOver(singleton: ActorRef, singletonTerminated: Boolean, handOverTo: Option[ActorRef]): State

  34. def gotoOldest(): State

  35. def handOverDone(handOverTo: Option[ActorRef]): State

  36. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  37. final def initialize(): Unit

    Definition Classes
    FSM
  38. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  39. final def isTimerActive(name: String): Boolean

    Definition Classes
    FSM
  40. def listenerManagement: actor.Actor.Receive

    Attributes
    protected
    Definition Classes
    Listeners
  41. val listeners: Set[ActorRef]

    Attributes
    protected
    Definition Classes
    Listeners
  42. def log: LoggingAdapter

    Definition Classes
    ActorLogging
  43. def logInfo(template: String, arg1: Any, arg2: Any): Unit

  44. def logInfo(template: String, arg1: Any): Unit

  45. def logInfo(message: String): Unit

  46. def logTermination(reason: Reason): Unit

    Attributes
    protected
    Definition Classes
    FSM
  47. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  48. final def nextStateData: Data

    Definition Classes
    FSM
  49. final def notify(): Unit

    Definition Classes
    AnyRef
  50. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  51. var oldestChangedBuffer: ActorRef

  52. var oldestChangedReceived: Boolean

  53. final def onTermination(terminationHandler: PartialFunction[StopEvent, Unit]): Unit

    Definition Classes
    FSM
  54. final def onTransition(transitionHandler: TransitionHandler): Unit

    Definition Classes
    FSM
  55. def peer(at: Address): ActorSelection

  56. def postRestart(reason: Throwable): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  57. def postStop(): Unit

    Definition Classes
    ClusterSingletonManager → FSM → Actor
  58. def preRestart(reason: Throwable, message: Option[Any]): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  59. def preStart(): Unit

    Definition Classes
    ClusterSingletonManager → Actor
  60. def receive: Receive

    Definition Classes
    FSM → Actor
  61. var removed: Map[Address, Deadline]

  62. implicit final val self: ActorRef

    Definition Classes
    Actor
  63. val selfAddressOption: Some[Address]

  64. var selfExited: Boolean

  65. final def sender(): ActorRef

    Definition Classes
    Actor
  66. final def setStateTimeout(state: ClusterSingletonManager.State, timeout: Timeout): Unit

    Definition Classes
    FSM
  67. final def setTimer(name: String, msg: Any, timeout: FiniteDuration, repeat: Boolean): Unit

    Definition Classes
    FSM
  68. final def startWith(stateName: ClusterSingletonManager.State, stateData: Data, timeout: Timeout): Unit

    Definition Classes
    FSM
  69. final def stateData: Data

    Definition Classes
    FSM
  70. final def stateName: ClusterSingletonManager.State

    Definition Classes
    FSM
  71. final def stay(): State

    Definition Classes
    FSM
  72. final def stop(reason: Reason, stateData: Data): State

    Definition Classes
    FSM
  73. final def stop(reason: Reason): State

    Definition Classes
    FSM
  74. final def stop(): State

    Definition Classes
    FSM
  75. def supervisorStrategy: SupervisorStrategy

    Definition Classes
    Actor
  76. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  77. def toString(): String

    Definition Classes
    AnyRef → Any
  78. implicit final def total2pf(transitionHandler: (ClusterSingletonManager.State, ClusterSingletonManager.State) ⇒ Unit): TransitionHandler

    Definition Classes
    FSM
  79. final def transform(func: StateFunction): TransformHelper

    Definition Classes
    FSM
  80. def unhandled(message: Any): Unit

    Definition Classes
    Actor
  81. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  82. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  83. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  84. final def when(stateName: ClusterSingletonManager.State, stateTimeout: FiniteDuration)(stateFunction: StateFunction): Unit

    Definition Classes
    FSM
  85. final def whenUnhandled(stateFunction: StateFunction): Unit

    Definition Classes
    FSM
  86. def [B](y: B): (ClusterSingletonManager, B)

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to ArrowAssoc[ClusterSingletonManager] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Shadowed Implicit Value Members

  1. def ->[B](y: B): (ClusterSingletonManager, B)

    Implicit information
    This member is added by an implicit conversion from ClusterSingletonManager to ArrowAssoc[ClusterSingletonManager] performed by method ArrowAssoc in scala.Predef.
    Shadowing
    This implicitly inherited member is shadowed by one or more members in this class.
    To access this member you can use a type ascription:
    (clusterSingletonManager: ArrowAssoc[ClusterSingletonManager]).->(y)
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()

Inherited from FSM[ClusterSingletonManager.State, Data]

Inherited from ActorLogging

Inherited from Listeners

Inherited from Actor

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from ClusterSingletonManager to any2stringadd[ClusterSingletonManager]

Inherited by implicit conversion StringFormat from ClusterSingletonManager to StringFormat[ClusterSingletonManager]

Inherited by implicit conversion Ensuring from ClusterSingletonManager to Ensuring[ClusterSingletonManager]

Inherited by implicit conversion ArrowAssoc from ClusterSingletonManager to ArrowAssoc[ClusterSingletonManager]

Ungrouped