Versions Compared

Key

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

...

  • It is not a goal to give the membership system a public API for use by geode users. The membership system will have an internal  API and be usable in isolation, but we don't intend to advertise it as a publicly available component by itself.
  • It is not a goal to create an SPI that allows different membership systems to be swapped in.
  • It is not a goal to change the membership algorithms or wire protocol in any way.

Solution

Describe your solution and how it’s going to solve the problem. This is likely the largest section of your proposal and might even include some high-level diagrams if you are proposing code changes. While all important aspects need to be covered, also keep in mind that shorter documents are more likely to be read.

...

PlantUML
@startuml
interface MembershipManagerFactory {
 + static newMembershipManagerFactory()
----
 + set...()

}

interface MembershipManager {
Core class of a running membership system.
+ getMembershipView(): GMSMembershipView
}
interface Messenger {
+ send(GMSMessage)

}
interface GMSMembershipView {


}
interface GMSMember {
A single member of the system
}
interface GMSMembershipListener {


}
interface GMSMessageHandler {

}
interface GMSAuthenticator {


}
interface GMSStatsListener {

}
interface GMSConfig {

}

MembershipManagerFactory --> MembershipManager : creates
MembershipManagerFactory *-- GMSAuthenticator
MembershipManagerFactory *-- GMSStatsListener
MembershipManagerFactory *-- GMSMessageHandler
MembershipManagerFactory *-- GMSConfig
MembershipManagerFactory *-- GMSMembershipListener
MembershipManager *-- Messenger
MembershipManager *-- GMSMembershipView
GMSMembershipView *-- GMSMember
@enduml


Code Block
languagejava
/** 
* Creates the membership system, given the provided configuration
+ */

interface MembershipManagerFactory {
static newMembershipManagerFactory() : MembershipManagerFactory
+ setConfig(GMSConfig)
+ setAuthenticator(GMSAuthenticator)
+ setMembershipListener(GMSMembershipListener)
+ setMessageHandler(GMSMessageHandler)
+ setStatsListener(GMSStatsListener)
+ setMemberFactory(GMSMemberFactory)
+ create() : MembershipManager
}


/** 
* Interface used to create a GMSMember from a set of properties
* This API is provided solely to allow geode-core to add additional
* properties to the GMSMember that are not relevant to membership
* For example DurableClientAttributes. Membership will provide
* A default GMSMember which just has the membership relevant attributes

interface GMSMemberFactory {
  GMSMember create(host, port, version, viewId, ...)
}


interface MembershipManager {
/**
* Core class of a running membership system.
+ */
interface MembershipManager {
getMembershipView(): GMSMembershipView
+ getMessenger(): Messenger
+ getLocalMember(): GMSMember
+ contactedBy(GMSMember)
+ isShunned(GMSMember)
+ close()
+ isClosed()
}

/**
* API for sending messages to other members, using memberships messaging system
* Membership currently allows geode-core to send messages over it's UDP messaging system. 
* This interface provides that functionality.
*/
interface Messenger {
+ send(GMSMessage)
+ getMessageState(): Object
+ waitForMessageState(Object)
}

/**
* Provides the current members of the system
*/
interface GMSMembershipView {
Provides the current members of the system
 +List<GMSMember> getMembers: List<GMSMember>
}
interface GMSMember {

/**
* A single member of the system
}*/
interface GMSMembershipListenerGMSMember {
}

/**
* Receives notifications about changes to membership
+ 
*/
interface GMSMembershipListener {
memberJoined(GMSMember)
+ memberDeparted(GMSMember)
+ forceDisconnected()
}

/**
interface* GMSMessageHandler {
Receives all messages sent from other members
+ 
*/
interface GMSMessageHandler {
processMessage(GMSMessage)
}
interface GMSAuthenticator {

/**
* Interface used by membership to authenticate other members

}*/
interface GMSStatsListenerGMSAuthenticator {
}

/**
* Interface to notify statistics systems about membership changes
+
*/
interface GMSStatsListener {
memberJoined()
+memberDeparted()
}

interface GMSConfig {
Configuration/**
* Primitive configuration options for membership
+ 
* - timeouts, etc.
*/
interface GMSConfig {
getJoinTimeout()
+ {method} ...
}

MembershipManagerFactory --> MembershipManager : creates

MembershipManager *-- Messenger
MembershipManager *-- GMSMembershipView
MembershipManager *-- GMSMember
@enduml


TODO


geode-serialization API

...