Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

PlantUML
skinparam dpi 80

@startuml
hide empty members
title Server to Client Queues - Class Diagram
class CacheClientNotifier {
  Singleton for a Cache.
}
class CacheClientProxy {
  One for each client.
  Keeps track of a the subscriptions for the client.
}
class MessageDispatcher {
  Thread that reads events from the queue.
}
class HARegionQueue {
  Holds the list of events to
  dispatch to a single client.
}
class HAContainerMap {
  Holds the actual values for events to dispatch.
  Used to store only a single copy of each value
  across all queues.
}
interface HAContainerMap
CacheClientNotifier "1   " o-- "*" CacheClientProxy
CacheClientProxy o-- MessageDispatcher
CacheClientNotifier o-- HAContainerMap
MessageDispatcher o-- HARegionQueue
HARegionQueue "*" --> "1" HAContainerMap
HARegionQueue o-- HARegion
@enduml


PlantUML
@startuml

title HARegionQueue—Class Diagram\nHARegion and DACE Cardinalities

class SequenceID <<design class>>
Long <|-- SequenceID
class Position <<design class>>
Long <|-- Position

class HARegionQueue {
  Position tailKey
}

class DispatchedAndCurrentEvents {
 SequenceID lastDispatchedSequenceID
}

' these are together because I want to highlight the similarity (potential subtype relationship)
together {

  ' putting this first causes it to be layed out to the right of ThreadIdentifier, making the
  ' association (line) from Conflatable shorter
  class EventID {
    byte[]     membershipId
    long       threadId
    SequenceID sequenceId
    int        bucketId
  }

  class ThreadIdentifier {
    byte[]     membershipId
    long       threadId
  }
}

interface Conflatable

' these subtypes of Conflatable are grouped together
together {
  interface ClientMessage
  class HAEventWrapper
  class ConflatableObject
}

Conflatable <|-- HAEventWrapper

Conflatable <|-- ConflatableObject

Conflatable <|-- ClientMessage

interface ClientUpdateMessage

ClientMessage <|-- ClientUpdateMessage
ClientUpdateMessage <|-- ClientUpdateMessageImpl
ClientUpdateMessageImpl <|-- ClientInstantiatorMessage


ClientMessage <|-- ClientMarkerMessageImpl

Conflatable --> EventID

interface RegionQueue
RegionQueue <|-- HARegionQueue
HARegionQueue <|-- BlockingHARegionQueue
BlockingHARegionQueue <|-- DurableHARegionQueue
DistributedRegion <|-- HARegion

' while method signatures in HARegionQueue take Object, there's downcasting to Conflatable
HARegion "*" *-- "0..1 per Position" Conflatable

HARegion "*" *-- "0..1 per ThreadIdentifier" SequenceID

HARegionQueue *-- HARegion

HARegionQueue "1" *-- "0..1 per ThreadIdentifier" DispatchedAndCurrentEvents

DispatchedAndCurrentEvents "1" *-- "0..1 per Position" Position

' this hidden assoc changes layout such that cardinality text on SequenceID and Position isn't overlapping as much
ConflatableObject -[hidden]- HARegion

@enduml


Sequence Diagrams


PlantUML
skinparam dpi 80

title Put into Queue (for Partitioned Regions)
actor user
user -> "PR Primary" : put
"PR Primary" -> "PR Secondary" : UpdateMessage
"PR Primary" -> "Adjunct Receiver": PutMessage
note right
  The primary notifies all members that have
  clients with interest
end note
"PR Primary" -> CacheClientNotifier: notifyClients()
"Adjunct Receiver" -> CacheClientNotifier: notifyClients()
note right 
  All members with interest 
  call notifyClients locally
end note
"PR Secondary" -> CacheClientNotifier: notifyClients()
CacheClientNotifier -> CacheClientProxy: deliverMessage()
CacheClientProxy -> MessageDispatcher : enqueueMessage()
MessageDispatcher -> HARegionQueue: basicPut()
 

...