(Some useful keys: domain, type, subType, category, group, service, cluster, system, name, value, section, tier, owner)

The following is a list of proposed MBeans with possible attributes/operations for the new GemFire Management API. We should aim to minimize the number of MBeans and exposed stats while making this as complete and feature-rich as possible. Ultimately if a proposed MBean fails to expose worthwhile operations or stats, then instead of being a placeholder of little value we should consider removing it from this list.

Visual diagrams are here.

MBean Scopes

  • Local: every "managed" (and "managing") GemFire member hosts MBeans of this scope for itself
  • Proxy: every "managing" GemFire member hosts proxies pointing to remote Local MBeans of every remote "managed" member
  • Aggregate: every "managing" GemFire member hosts MBeans of this scope
  • Filters: ManagementMBean defines filters which allow control over which MBeans are registered

ManagementMBean

Represents the GemFire Management layer for the hosting member. Controls scope of management. Presence of this MBean means that this member is manageable. Changing the configuration of this MBean at runtime should be supported. We may also need to provide a way to configure this from gemfire.properties as well.

  • Scope: Local
  • Proxied: No
  • Object-Name: GemFire:type=Management
  • Refresh policy/interval for all other MBeans (if any)
  • Scope: Local or All; default: Local
    • Local implies this is a managed node
    • All implies this is a managing node
  • Policy for MBean discovery/filtering configuration (ie, allow configuration to specify not registering member-level MBeans)
    • Local MBean Filter: determines what local MBeans will be registered
      • Inclusion: list of regex patterns; if ObjectName matches any then it will be created/registered; default: * (all)
      • Exclusion: list of regex patterns; if ObjectName matches any then it will be ignored; default: null
    • Remote MBean Filter: determines what remote MBeans will be federated by proxy MBeans
      • Inclusion: list of regex patterns; if ObjectName matches any then it will be created/registered; default: * (all)
      • Exclusion: list of regex patterns; if ObjectName matches any then it will be skipped; default: null
    • Managed Member Filter: determines what members will be managed (federated)
      • Inclusion: list of regex patterns; if MemberId matches any then it will be managed (federated); default: * (all)
      • Exclusion: list of regex patterns; if MemberId matches any then it will be ignored; default: null
  • Operation: processCommand(String) - parse and process command sent from CLI tool ?

Should the following operations be on this MBean or a different MBean? Is it ok to provide status/stop for customer GemFire processes are are not CacheServer processes (ie, those started using "cacheserver start")? What we can do is define a ManagementListener with callbacks for status() and stop() which the customer can implement; invoking these MBean operations would then fire those callbacks, allowing the customer to control their application lifecycle uniformly with CacheServers or other GemFire started processes.

  • Operation: status() - this replaces how we currently implement "cacheserver status" ?
  • Operation: stop() - this replaces how we currently implement "cacheserver stop" ?

MemberMBean

Member's local view of its connection and cache.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,memberId=<memberId>
  • MemberId (Host, Ports are embedded)
  • Member gemfire properties
  • Member cache attrs
  • Member cache stats
  • Member region count
  • Member cache size
  • Rebalance operation

RegionMBean

Member's local view of region. Member may have 0..n of these.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=Region,name=<regionName>,memberId=<memberId>
  • Name
  • MemberId
  • Member region attrs
  • Member region stats
  • Member region entry count
  • Member region size - object sizer (Dan added new work here)
  • Partition info

TransactionManagerMBean

Member may have 0..1 of these. This could be collapsed onto MemberMBean to help minimize number of MBeans.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=TransactionManager,memberId=<memberId>
  • Transactions - count of transactions; maybe ids of threads?
  • JTA TransactionTimeout?

QueryServiceMBean

Member may have 0..1 of these. This could be collapsed onto MemberMBean to help minimize number of MBeans.

Each QueryService has multiple Indexes, and each Index has multiple stats. We should try to have the QueryServiceMBean aggregate these in some way instead of having IndexMBeans (too fine-grained).

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=QueryService,memberId=<memberId>
  • Indexes - count or collection of indexes
  • CQs - count or collection of CQs
  • Operations to get/remove an index
  • Operations to get/execute/stop/close CQs

FunctionServiceMBean

Member may have 0..1 of these. This could be collapsed onto MemberMBean to help minimize number of MBeans. (System-wide aggregrate might be useful for when functions are executed across multiple members)

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=FunctionService,memberId=<memberId>
  • Function count
  • FunctionIds
  • View running Functions
  • Operation: kill running Function?

CacheServerMBean

Member may have 0..n of these.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=CacheServer,port=<serverPort>,memberId=<memberId>
  • ClientCount
  • ConnectionCount
  • Cache clients - list of CacheClient Ids
  • SubscriptionConnectionCount
  • Subscription stats
  • MaxConnections
  • DurableQueues and Sizes
  • Operation: remove DurableQueue that's building too large

LockServiceMBean

Member may have 0..n of these (Global Region will have 1 of these). A system-wide aggregrate might show grantor info and number of locks.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=LockService,name=<dlsName>,memberId=<memberId>
  • Name - name of the lock service
  • Member count
  • MemberIds - list of MemberIds
  • GrantorMemberId

DiskStoreMBean

Member may have 0..n (each DiskStore may provide for 1..n Regions). Or maybe this should only be a system-wide aggregate.

Several of these are operations are commands from the "gemfire" command line tool.

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=DiskStore,name=<name>,memberId=<memberId>
  • Name - the name of the DiskStore
  • BackupAllMembers - system-wide aggregate operation
  • compact-all-disk-stores
  • shut-down-all
  • list-missing-disk-stores
  • revoke-missing-disk-stores

GatewayReceiverMBean

Member may have 0..n of these. Does a system-wide aggregate make sense?

Note: use new naming scheme instead: "Gateway" becomes "GatewaySender", and "GatewayHub" becomes "GatewayReceiver"

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=GatewaySender,gatewayHub=<gatewayHub>,memberId=<memberId>
  • GatewayHub - the gateway hub id

GatewaySenderMBean

Member may have 0..n of these. Does a system-wide aggregate make sense?

Note: use new naming scheme instead: "Gateway" becomes "GatewaySender", and "GatewayHub" becomes "GatewayReceiver"

  • Scope: Local
  • Proxied: Yes
  • Object-Name: GemFire:type=Member,service=GatewaySender,gatewayHub=<gatewayHub>,gateway=<gateway>,memberId=<memberId>
  • GatewayHub - the gateway hub id
  • Gatway - the gateway id

DistributedSystemMBean

System-wide aggregate providing high-level view of all members and their Caches.

  • Scope: Aggregate
  • Proxied: No
  • Object-Name: GemFire:type=Distributed,service=System
  • Member count
  • MemberIds - list of DistributedMemberIds
  • Gemfire distribution properties
  • LocatorIds - list of locators (host:port)
  • System cache attrs
  • System cache stats - aggregate rollups
  • System cache entry count - aggregate across entire system
  • System cache size - aggregate across entire system
  • System region count - aggregate across entire system

DistributedRegionMBean

System-wide aggregate of a named Region. Provides high-level view of a Region for all members hosting and/or using it.

  • Scope: Aggregate
  • Proxied: No
  • Object-Name: GemFire:type=Distributed,service=Region,name=<regionName>
  • Name - fully qualified name
  • Region attrs
  • Member count - number of members hosting/using this Region
  • MemberIds - list of MemberIds
  • Redundancy - zero or more... replicated will have redundancy equal to member cont
  • System region entry count
  • System region size
  • System region stats - rollups
  • Partitions

ServerGroupMBean

System-wide aggregate of a named server group. Provides high-level view of a server group for all members hosting and/or using it.

  • Scope: Aggregate
  • Proxied: No
  • Object-Name: GemFire:type=Member,service=ServerGroup,name=<serverGroup>
  • Name or ServerGroup - the name of the server group
  • ServerCount - number of servers in the group
  • ServerIds - list of MemberIds in this group