THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- 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 | ||
---|---|---|
| ||
/** * 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
...