http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/GemFireMemberStatus.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/GemFireMemberStatus.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/GemFireMemberStatus.java new file mode 100755 index 0000000..5bd6600 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/GemFireMemberStatus.java @@ -0,0 +1,698 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.cache.Cache; +import org.apache.geode.cache.Region; +import org.apache.geode.cache.client.PoolManager; +import org.apache.geode.cache.server.CacheServer; +import org.apache.geode.distributed.DistributedSystem; +import org.apache.geode.distributed.Locator; +import org.apache.geode.distributed.internal.DM; +import org.apache.geode.distributed.internal.DistributionConfig; +import org.apache.geode.distributed.internal.InternalDistributedSystem; +import org.apache.geode.distributed.internal.membership.InternalDistributedMember; +import org.apache.geode.internal.net.SocketCreator; +import org.apache.geode.internal.admin.ClientHealthMonitoringRegion; +import org.apache.geode.internal.admin.remote.ClientHealthStats; +import org.apache.geode.internal.cache.*; +import org.apache.geode.internal.cache.tier.InternalClientMembership; +import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID; + +import java.io.IOException; +import java.io.Serializable; +import java.net.InetAddress; +import java.util.*; + +/** + * Class <code>GemFireMemberStatus</code> provides the status of a specific + * GemFire member VM. This VM can be a peer, a client, a server and/or a + * gateway. + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public class GemFireMemberStatus implements Serializable { + private static final long serialVersionUID = 3389997790525991310L; + + /** + * Notifies whether this member is a client to a cache server. + */ + protected boolean _isClient; + + /** + * Notifies whether this member is a cache server. + */ + protected boolean _isServer; + + /** + * Notifies whether this member is a hub for WAN gateways. + */ + protected boolean _isGatewayHub; + + /** + * Notifies whether this member is a locator. + */ + protected boolean _isLocator; + + protected boolean _isPrimaryGatewayHub; + + protected Object/*GatewayHubStatus*/ _gatewayHubStatus; + + protected boolean _isConnected; + protected Serializable _memberId; + protected Set _connectedPeers; + protected Set _connectedServers; + protected Set _unconnectedServers; + protected Set _connectedClients; + protected Map _connectedIncomingGateways; + protected Map _outgoingGateways; + + protected Map _clientHostNames; + protected Map _clientQueueSizes; + protected Map _gatewayQueueSizes; + protected Map _regionStatuses; + protected Map _clientHealthStats; + + protected String _memberName; + protected int _mcastPort; + protected int _serverPort; + protected InetAddress _mcastAddress; + protected String _bindAddress; + protected String _locators; + protected InetAddress _hostAddress; + + protected long _maximumHeapSize; + protected long _freeHeapSize; + + protected long upTime = -1; + + protected transient final Cache cache; + + public GemFireMemberStatus() { + this(null); + } + + public GemFireMemberStatus(Cache cache) { + this.cache = cache; + DistributedSystem ds = null; + if (cache != null) { + ds = cache.getDistributedSystem(); + } + initialize(ds); + } + + public boolean getIsConnected() { + return this._isConnected; + } + + protected void setIsConnected(boolean isConnected) { + this._isConnected = isConnected; + } + + /** + * Returns whether this member is a client to a cache server + * @return whether this member is a client to a cache server + */ + public boolean getIsClient() { + return this._isClient; + } + + /** + * Sets whether this member is a client to a cache server + * @param isClient Boolean defining whether this member is a client to a + * cache server + */ + protected void setIsClient(boolean isClient) { + this._isClient = isClient; + } + + /** + * Returns whether this member is a cache server + * @return whether this member is a cache server + */ + public boolean getIsServer() { + return this._isServer; + } + + /** + * Sets whether this member is a cache server + * @param isServer Boolean defining whether this member is a cache server + */ + protected void setIsServer(boolean isServer) { + this._isServer = isServer; + } + + public int getServerPort() { + return this._serverPort; + } + + protected void setServerPort(int port) { + this._serverPort = port; + } + + /** + * Returns whether this member is a hub for WAN gateways + * @return whether this member is a hub for WAN gateways + */ + public boolean getIsGatewayHub() { + return this._isGatewayHub; + } + + /** + * Sets whether this member is a cache server + * @param isGatewayHub Boolean defining whether this member is a hub for + * WAN gateways + */ + protected void setIsGatewayHub(boolean isGatewayHub) { + this._isGatewayHub = isGatewayHub; + } + + public boolean getIsLocator() { + return this._isLocator; + } + + protected void setIsLocator(boolean isLocator) { + this._isLocator = isLocator; + } + + public boolean getIsPrimaryGatewayHub() { + return this._isPrimaryGatewayHub; + } + + protected void setIsPrimaryGatewayHub(boolean isPrimaryGatewayHub) { + this._isPrimaryGatewayHub = isPrimaryGatewayHub; + } + + /** + * For internal use only + * @return status of the gateway hub + */ + public Object/*GatewayHubStatus*/ getGatewayHubStatus() { + return this._gatewayHubStatus; + } + +// protected void setGatewayHubStatus(GatewayHubStatus gatewayHubStatus) { +// this._gatewayHubStatus = gatewayHubStatus; +// } + + public boolean getIsSecondaryGatewayHub() { + return !this._isPrimaryGatewayHub; + } + + public Set getConnectedPeers() { + return this._connectedPeers; + } + + protected void setConnectedPeers(Set connectedPeers) { + this._connectedPeers = connectedPeers; + } + + public Set getConnectedServers() { + return this._connectedServers; + } + + protected void setConnectedServers(Set connectedServers) { + this._connectedServers = connectedServers; + } + + protected void addConnectedServer(String connectedServer) { + this._connectedServers.add(connectedServer); + } + + public Set getUnconnectedServers() { + return this._unconnectedServers; + } + + protected void setUnconnectedServers(Set unconnectedServers) { + this._unconnectedServers = unconnectedServers; + } + + protected void addUnconnectedServer(String unconnectedServer) { + this._unconnectedServers.add(unconnectedServer); + } + + public Set getConnectedClients() { + return this._connectedClients; + } + + protected void addConnectedClient(String connectedClient) { + this._connectedClients.add(connectedClient); + } + + public Map getOutgoingGateways() { + return this._outgoingGateways; + } + + public Map getConnectedIncomingGateways() { + return this._connectedIncomingGateways; + } + + protected void setConnectedIncomingGateways(Map connectedIncomingGateways) { + this._connectedIncomingGateways = connectedIncomingGateways; + } + + public Map getClientQueueSizes() { + return this._clientQueueSizes; + } + + protected void setClientQueueSizes(Map clientQueueSizes) { + this._clientQueueSizes = clientQueueSizes; + } + + public int getClientQueueSize(String clientMemberId) { + Integer clientQueueSize = (Integer) getClientQueueSizes().get(clientMemberId); + return clientQueueSize == null ? 0 : clientQueueSize.intValue(); + } + + protected void putClientQueueSize(String clientMemberId, int size) { + getClientQueueSizes().put(clientMemberId, Integer.valueOf(size)); + } + + public Map getClientHealthStats() { + return this._clientHealthStats; + } + + protected void setClientHealthStats(Map stats) { + this._clientHealthStats = stats; + } + + /** + * For internal use only + * @param clientID client for health + * @return the client's health + */ + public Object/*ClientHealthStats*/ getClientHealthStats(String clientID) { + return this._clientHealthStats.get(clientID); + } + + protected void setClientHealthStats(String clientID, ClientHealthStats stats) { + this._clientHealthStats.put(clientID, stats); + } + + protected void putClientHostName(String clientId, String hostName) { + this._clientHostNames.put(clientId, hostName); + } + + public String getClientHostName(String clientId) { + return (String)this._clientHostNames.get(clientId); + } + + public Map getRegionStatuses() { + return this._regionStatuses; + } + + /** + * For internal use only + * @param fullRegionPath region path + * @return status for the region + */ + public Object/*RegionStatus*/ getRegionStatus(String fullRegionPath) { + return getRegionStatuses().get(fullRegionPath); + } + + protected void putRegionStatus(String fullRegionPath, RegionStatus status) { + getRegionStatuses().put(fullRegionPath, status); + } + + public Serializable getMemberId() { + return this._memberId; + } + + protected void setMemberId(Serializable memberId) { + this._memberId = memberId; + } + + public String getMemberName() { + return this._memberName; + } + + protected void setMemberName(String memberName) { + this._memberName = memberName; + } + + public int getMcastPort() { + return this._mcastPort; + } + + protected void setMcastPort(int mcastPort) { + this._mcastPort = mcastPort; + } + + public InetAddress getMcastAddress() { + return this._mcastAddress; + } + + protected void setMcastAddress(InetAddress mcastAddress) { + this._mcastAddress = mcastAddress; + } + + public InetAddress getHostAddress() { + return this._hostAddress; + } + + protected void setHostAddress(InetAddress hostAddress) { + this._hostAddress = hostAddress; + } + + public String getBindAddress() { + return this._bindAddress; + } + + protected void setBindAddress(String bindAddress) { + this._bindAddress = bindAddress; + } + + public String getLocators() { + return this._locators; + } + + protected void setLocators(String locators) { + this._locators = locators; + } + + public long getMaximumHeapSize() { + return this._maximumHeapSize; + } + + protected void setMaximumHeapSize(long size) { + this._maximumHeapSize = size; + } + + public long getFreeHeapSize() { + return this._freeHeapSize; + } + + protected void setFreeHeapSize(long size) { + this._freeHeapSize = size; + } + + public long getUsedHeapSize() { + return getMaximumHeapSize() - getFreeHeapSize(); + } + + public long getUpTime() { + return upTime; + } + + public void setUpTime(long upTime) { + this.upTime = upTime; + } + + @Override + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer + .append("GemFireMemberStatus[") + .append("isConnected=") + .append(this._isConnected) + .append("; memberName=") + .append(this._memberName) + .append("; memberId=") + .append(this._memberId) + .append("; hostAddress=") + .append(this._hostAddress) + .append("; mcastPort=") + .append(this._mcastPort) + .append("; mcastAddress=") + .append(this._mcastAddress) + .append("; bindAddress=") + .append(this._bindAddress) + .append("; serverPort=") + .append(this._serverPort) + .append("; locators=") + .append(this._locators) + .append("; isClient=") + .append(this._isClient) + .append("; isServer=") + .append(this._isServer) + .append("; isGatewayHub=") + .append(this._isGatewayHub) + .append("; isLocator=") + .append(this._isLocator) + .append("; isPrimaryGatewayHub=") + .append(this._isPrimaryGatewayHub) + .append("; gatewayHubStatus=") + .append(this._gatewayHubStatus) + .append("; connectedPeers=") + .append(this._connectedPeers) + .append("; connectedServers=") + .append(this._connectedServers) + .append("; unconnectedServers=") + .append(this._unconnectedServers) + .append("; connectedClients=") + .append(this._connectedClients) + .append("; clientHostNames=") + .append(this._clientHostNames) + .append("; clientQueueSizes=") + .append(this._clientQueueSizes) + .append("; clientHealthStats=") + .append(this._clientHealthStats) + .append("; gatewayQueueSizes=") + .append(this._gatewayQueueSizes) + .append("; regionStatuses=") + .append(this._regionStatuses) + .append("; maximumHeapSize=") + .append(this._maximumHeapSize) + .append("; freeHeapSize=") + .append(this._freeHeapSize) + .append("; upTime=") + .append(this.upTime) + .append("]"); + return buffer.toString(); + } + + protected void initialize(DistributedSystem distributedSystem) { + // Initialize instance variables + initializeInstanceVariables(); + + // If the cache is set, initialize the status. + // If the cache is not set, then this is most + // likely an unconnected status. + if (cache != null) { + // Initialize server + initializeServer(); + + // Initialize client + initializeClient(); + + // Initialize region sizes + initializeRegionSizes(); + } + + if (distributedSystem != null) { + // Initialize all + initializeAll(distributedSystem); + } + + // If this is a locator, initialize the locator status + if (Locator.getLocators().size() > 0) { + setIsLocator(true); + } + } + + protected void initializeInstanceVariables() { + // Variables for servers + this._connectedClients = new HashSet(); + this._clientQueueSizes = new HashMap(); + this._clientHealthStats = new HashMap(); + this._clientHostNames = new HashMap(); + + // Variables for gateway hubs + this._outgoingGateways = new HashMap(); + //this._connectedOutgoingGateways = new HashSet(); + //this._unconnectedOutgoingGateways = new HashSet(); + this._connectedIncomingGateways = new HashMap(); + this._gatewayQueueSizes = new HashMap(); + + // Variables for clients + this._connectedServers = new HashSet(); + this._unconnectedServers = new HashSet(); + + // Variables for all + this._connectedPeers = new HashSet(); + this._regionStatuses = new HashMap(); + } + + protected void initializeServer() { + Collection servers = cache.getCacheServers(); + if (servers.size() == 0) { + setIsServer(false); + } else { + setIsServer(true); + + // Get connected clients. + // The following method returns a map of client member id to a cache + // client info. For now, keep track of the member ids in the set of + // _connectedClients. + Map allConnectedClients = InternalClientMembership.getStatusForAllClientsIgnoreSubscriptionStatus(); + Iterator allConnectedClientsIterator = allConnectedClients.values().iterator(); + while (allConnectedClientsIterator.hasNext()) { + CacheClientStatus ccs = (CacheClientStatus) allConnectedClientsIterator.next(); + addConnectedClient(ccs.getMemberId()); + // host address is available directly by id, hence CacheClientStatus need not be populated + putClientHostName(ccs.getMemberId(), ccs.getHostAddress()); + } + + // Get client queue sizes + Map clientQueueSize = getClientIDMap(InternalClientMembership.getClientQueueSizes()); + setClientQueueSizes(clientQueueSize); + + // Set server acceptor port (set it based on the first CacheServer) + CacheServer server = (CacheServer) servers.toArray()[0]; + setServerPort(server.getPort()); + + // Get Client Health Stats +// Assert.assertTrue(cache != null); (cannot be null) + Region clientHealthMonitoringRegion = ClientHealthMonitoringRegion.getInstance( + (GemFireCacheImpl)cache); + if(clientHealthMonitoringRegion != null) { + String [] clients = (String[])clientHealthMonitoringRegion.keySet().toArray(new String[0]); + for (int i = 0; i < clients.length; i++) { + String clientId = clients[i]; + ClientHealthStats stats = (ClientHealthStats)clientHealthMonitoringRegion.get(clientId); + setClientHealthStats(clientId, stats); + } + } + } + } + + /** + * returning Map of client queue size against client Id + * + * param clientMap is a Map of client queue size against ClientProxyMembershipID + */ + private Map getClientIDMap(Map ClientProxyMembershipIDMap) { + Map clientIdMap = new HashMap(); + Set entrySet = ClientProxyMembershipIDMap.entrySet(); + Iterator entries = entrySet.iterator(); + while (entries.hasNext()) { + Map.Entry entry = (Map.Entry)entries.next(); + ClientProxyMembershipID key = (ClientProxyMembershipID)entry.getKey(); + Integer size = (Integer)entry.getValue(); + clientIdMap.put(key.getDSMembership(), size); + } + return clientIdMap; + } + + protected void initializeClient() { + Map poolMap = PoolManager.getAll(); + if (poolMap.size() == 0) { + setIsClient(false); + } else { + setIsClient(true); + + // Get connected servers. + // The following method returns a map of server name to a count of logical + // connections. A logical connection will be made for each region that + // references the live server. If the client is not connected to the server, + // the logical connections for that server will be 0. For now, keep track + // of the keys (server names) of this map in the sets of _connectedServers + // and _unconnectedServers. + Map connectedServers = InternalClientMembership.getConnectedServers(); + if (!connectedServers.isEmpty()) { + Iterator connected = connectedServers.entrySet().iterator(); + while (connected.hasNext()) { + Map.Entry entry = (Map.Entry) connected.next(); + String server = (String) entry.getKey(); +// Integer connections = (Integer) entry.getValue(); +// if (connections.intValue()==0) { +// addUnconnectedServer(server); +// } else { + addConnectedServer(server); +// } + //System.out.println(connections.size() + " logical connnections to server " + server); + } + } + } + } + + protected void initializeAll(DistributedSystem distributedSystem) { + // Initialize isConnected + setIsConnected(true); + + // Initialize distributed system status + initializeDistributedSystem(distributedSystem); + + // Initialize peers + initializePeers(distributedSystem); + + // Initialize memory + initializeMemory(); + } + + protected void initializeDistributedSystem(DistributedSystem distributedSystem) { + InternalDistributedSystem ids = (InternalDistributedSystem) distributedSystem; + setMemberId(ids.getMemberId()); + DistributionConfig config = ids.getConfig(); + setMemberName(config.getName()); + setMcastPort(config.getMcastPort()); + setMcastAddress(config.getMcastAddress()); + String bindAddress = config.getBindAddress(); + setBindAddress(bindAddress); + setLocators(config.getLocators()); + setUpTime(System.currentTimeMillis() - ids.getStartTime()); + try { + setHostAddress((bindAddress != null && bindAddress.length() > 0) + ? InetAddress.getByName(bindAddress) + : SocketCreator.getLocalHost()); + } catch (IOException e) {/*ignore - leave null host address*/} + } + + protected void initializePeers(DistributedSystem distributedSystem) { + InternalDistributedSystem ids = (InternalDistributedSystem) distributedSystem; + DM dm = ids.getDistributionManager(); + Set connections = dm.getOtherNormalDistributionManagerIds(); + Set connectionsIDs = new HashSet(connections.size()); + for (Iterator iter=connections.iterator(); iter.hasNext() ; ) { + InternalDistributedMember idm = (InternalDistributedMember)iter.next(); + connectionsIDs.add(idm.getId()); + } + setConnectedPeers(connectionsIDs); + } + + protected void initializeMemory() { + //InternalDistributedSystem system = (InternalDistributedSystem) region.getCache().getDistributedSystem(); + //GemFireStatSampler sampler = system.getStatSampler(); + //VMStatsContract statsContract = sampler.getVMStats(); + + Runtime rt = Runtime.getRuntime(); + setMaximumHeapSize(rt.maxMemory()); + setFreeHeapSize(rt.freeMemory()); + } + + protected void initializeRegionSizes() { + Iterator rootRegions = cache.rootRegions().iterator(); + + while (rootRegions.hasNext()) { + LocalRegion rootRegion = (LocalRegion) rootRegions.next(); + if (!(rootRegion instanceof HARegion)) { + RegionStatus rootRegionStatus = rootRegion instanceof PartitionedRegion + ? new PartitionedRegionStatus((PartitionedRegion) rootRegion) + : new RegionStatus(rootRegion); + putRegionStatus(rootRegion.getFullPath(), rootRegionStatus); + Iterator subRegions = rootRegion.subregions(true).iterator(); + while (subRegions.hasNext()) { + LocalRegion subRegion = (LocalRegion) subRegions.next(); + RegionStatus subRegionStatus = subRegion instanceof PartitionedRegion + ? new PartitionedRegionStatus((PartitionedRegion) subRegion) + : new RegionStatus(subRegion); + putRegionStatus(subRegion.getFullPath(), subRegionStatus); + } + } + } + } +} +
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntity.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntity.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntity.java new file mode 100644 index 0000000..f80d7f9 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntity.java @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +/** + * A entity that can be managed with the GemFire administration API. + * + * @see ManagedEntityConfig + * + * @since GemFire 4.0 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface ManagedEntity { + + /** + * Starts this managed entity. Note that this method may return + * before the managed entity is actually started. + * + * @throws AdminException + * If a problem is encountered while starting this managed + * entity. + * @throws IllegalStateException + * If this managed entity resides on a remote machine and a + * <code>null</code> or empty (<code>""</code>) {@linkplain + * ManagedEntityConfig#getRemoteCommand remote command} has + * been specified. + * + * @see #waitToStart + */ + public void start() throws AdminException; + + /** + * Stops this managed entity. Note that this method may return + * before the managed entity is actually stopped. + * + * @throws AdminException + * If a problem is encountered while stopping this managed + * entity. + * @throws IllegalStateException + * If this managed entity resides on a remote machine and a + * <code>null</code> or empty (<code>""</code>) {@linkplain + * ManagedEntityConfig#getRemoteCommand remote command} has + * been specified. + * + * @see #waitToStop + */ + public void stop() throws AdminException; + + /** + * Waits for up to a given number of milliseconds for this managed + * entity to {@linkplain #start start}. + * + * @param timeout + * The number of milliseconds to wait for this managed entity + * to start. + * + * @return Whether or not the entity has started. + * <code>false</code>, if the method times out. + * + * @throws InterruptedException + * If the thread invoking this method is interrupted while + * waiting. + */ + public boolean waitToStart(long timeout) + throws InterruptedException; + + /** + * Waits for up to a given number of milliseconds for this managed + * entity to {@linkplain #stop stop}. + * + * @param timeout + * The number of milliseconds to wait for this managed entity + * to stop. + * + * @return Whether or not the entity has stopped. + * <code>false</code>, if the method times out. + * + * @throws InterruptedException + * If the thread invoking this method is interrupted while + * waiting. + */ + public boolean waitToStop(long timeout) + throws InterruptedException; + + /** + * Returns whether or not this managed entity is running. Note that + * this operation may attempt to contact the managed entity. + * + * @throws IllegalStateException + * If this managed entity resides on a remote machine and a + * <code>null</code> or empty (<code>""</code>) {@linkplain + * ManagedEntityConfig#getRemoteCommand remote command} has + * been specified. + */ + public boolean isRunning(); + + /** + * Returns the tail of this manage entity's log file. Note that not + * all managed entities implement this functionality. + * + * @throws AdminException + * If a problem is encountered while getting the log of this + * managed entity. + * @throws UnsupportedOperationException + * If this managed entity does not support retrieving its + * log. + */ + public String getLog() throws AdminException; + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntityConfig.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntityConfig.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntityConfig.java new file mode 100644 index 0000000..db38269 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/ManagedEntityConfig.java @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +/** + * Common configuration for all entities that can be managed using the + * GemFire administration API. Note that once a managed entity has + * been {@linkplain ManagedEntity#start started}, attempts to modify + * its configuration will cause an {@link IllegalStateException} to be + * thrown. + * + * @see ManagedEntity + * + * @since GemFire 4.0 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface ManagedEntityConfig extends Cloneable { + + /** + * Returns the name of the host on which the managed entity runs or + * will run. + */ + public String getHost(); + + /** + * Sets the name of the host on which the managed entity will run. + */ + public void setHost(String host); + + /** + * Returns the name of the working directory in which the managed + * entity runs or will run. + */ + public String getWorkingDirectory(); + + /** + * Sets the name of the working directory in which the managed + * entity will run. + */ + public void setWorkingDirectory(String dir); + + /** + * Returns the name of the GemFire product directory to use when + * administering the managed entity. + */ + public String getProductDirectory(); + + /** + * Sets the name of the GemFire product directory to use when + * administering the managed entity. + */ + public void setProductDirectory(String dir); + + /** + * Returns the command prefix used to administer a managed entity + * that is hosted on a remote machine. If the remote command is + * <code>null</code> (the default value), then the remote command + * associated with the {@linkplain + * AdminDistributedSystem#getRemoteCommand() distributed system} + * will be used. + */ + public String getRemoteCommand(); + + /** + * Sets the command prefix used to administer a managed entity that + * is hosted on a remote machine. + */ + public void setRemoteCommand(String remoteCommand); + + /** + * Validates this configuration. + * + * @throws IllegalStateException + * If a managed entity cannot be administered using this + * configuration + */ + public void validate(); + + /** + * Returns a new <code>ManagedEntityConfig</code> with the same + * configuration as this <code>ManagedEntityConfig</code>. + */ + public Object clone() throws CloneNotSupportedException; + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/MemberHealthConfig.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/MemberHealthConfig.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/MemberHealthConfig.java new file mode 100644 index 0000000..3d4bfe6 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/MemberHealthConfig.java @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +/** + * Provides configuration information relating to the health of a + * member of a GemFire distributed system. + * + * <P> + * + * If any of the following criteria is true, then a member is + * considered to be in {@link GemFireHealth#OKAY_HEALTH OKAY_HEALTH}. + * + * <UL> + * + * <LI>The size of the {@linkplain #getMaxVMProcessSize VM process} is + * too large.</LI> + * + * <LI>There are too many {@linkplain #getMaxMessageQueueSize enqueued} + * incoming/outgoing messages.</LI> + * + * <LI>Too many message sends {@link #getMaxReplyTimeouts timeout} + * while waiting for a reply.</LI> + * + * </UL> + * + * If any of the following criteria is true, then a member is + * considered to be in {@link GemFireHealth#POOR_HEALTH POOR_HEALTH}. + * + * <UL> + * + * </UL> + * + * + * @since GemFire 3.5 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + * */ +public interface MemberHealthConfig { + + /** The default maximum VM process size (in megabytes) of a health + * member of the distributed system. The default value is 1000. */ + public static final long DEFAULT_MAX_VM_PROCESS_SIZE = 1000; + + /** The default maximum number of enqueued incoming or outgoing + * messages that a healthy member of a distributed system can have. + * The default value is 1000. */ + public static final long DEFAULT_MAX_MESSAGE_QUEUE_SIZE = 1000; + + /** The default maximum number of message reply timeouts that can + * occur in a given health monitoring interval. The default value + * is zero. */ + public static final long DEFAULT_MAX_REPLY_TIMEOUTS = 0; + + /** The default maximum multicast retransmission ratio. The default + * value is 0.20 (twenty percent of messages retransmitted) + */ + public static final double DEFAULT_MAX_RETRANSMISSION_RATIO = 0.20; + + /////////////////////// Instance Methods /////////////////////// + + /** + * Returns the maximum VM process size (in megabytes) of a healthy + * member of the distributed system. + * + * @see #DEFAULT_MAX_VM_PROCESS_SIZE + */ + public long getMaxVMProcessSize(); + + /** + * Sets the maximum VM process size (in megabytes) of a healthy + * member of the distributed system. + * + * @see #getMaxVMProcessSize + */ + public void setMaxVMProcessSize(long size); + + /** + * Returns the maximum number of enqueued incoming or outgoing + * messages that a healthy member of a distributed system can have. + * + * @see #DEFAULT_MAX_MESSAGE_QUEUE_SIZE + */ + public long getMaxMessageQueueSize(); + + /** + * Sets the maximum number of enqueued incoming or outgoing + * messages that a healthy member of a distributed system can have. + * + * @see #getMaxMessageQueueSize + */ + public void setMaxMessageQueueSize(long maxMessageQueueSize); + + /** + * Returns the maximum number message replies that can timeout in a + * healthy member. + * + * @see #DEFAULT_MAX_REPLY_TIMEOUTS + */ + public long getMaxReplyTimeouts(); + + /** + * Sets the maximum number message replies that can timeout in a + * healthy member. + * + * @see #getMaxReplyTimeouts + */ + public void setMaxReplyTimeouts(long maxReplyTimeouts); + + /** + * Returns the maximum ratio of multicast retransmissions / total multicast + * messages. Retransmissions are requestor-specific (i.e., unicast), so + * a single lost message may result in multiple retransmissions.<p> + * A high retransmission ratio may indicate + * poor network conditions requiring reduced flow-control settings, + * a udp-fragment-size setting that is too high. + * @see #DEFAULT_MAX_RETRANSMISSION_RATIO + */ + public double getMaxRetransmissionRatio(); + + /** + * Sets the maximum ratio of multicast retransmissions / total multicast + * messages. + * @see #getMaxRetransmissionRatio + */ + public void setMaxRetransmissionRatio(double ratio); + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/OperationCancelledException.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/OperationCancelledException.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/OperationCancelledException.java new file mode 100644 index 0000000..2875b9a --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/OperationCancelledException.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.geode.internal.admin.api; + +//import org.apache.geode.GemFireException; + +/** + * Thrown when an administration operation that accesses information + * in a remote system member is cancelled. The cancelation may occur + * because the system member has left the distributed system. + * + * @since GemFire 3.5 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public class OperationCancelledException extends RuntimeAdminException { + private static final long serialVersionUID = 5474068770227602546L; + + public OperationCancelledException() { + super(); + } + + public OperationCancelledException( String message ) { + super( message ); + } + + public OperationCancelledException( Throwable cause ){ + super(cause); + } + + public OperationCancelledException( String message, Throwable cause ) { + super(message, cause); + } +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionNotFoundException.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionNotFoundException.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionNotFoundException.java new file mode 100644 index 0000000..faa10c8 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionNotFoundException.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +//import org.apache.geode.cache.CacheException; +import org.apache.geode.cache.CacheRuntimeException; + +/** + * Thrown by the administration API when the region administered by a + * {@link SystemMemberRegion} has been closed or destroyed in system + * member. + * <P>Also thrown by {@link org.apache.geode.DataSerializer#readRegion(java.io.DataInput)} + * if the named region no longer exists. + * + * @since GemFire 3.5 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public class RegionNotFoundException extends CacheRuntimeException { +private static final long serialVersionUID = 1758668137691463909L; + + public RegionNotFoundException(String message) { + super(message); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionSubRegionSnapshot.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionSubRegionSnapshot.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionSubRegionSnapshot.java new file mode 100644 index 0000000..447527a --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RegionSubRegionSnapshot.java @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.apache.geode.DataSerializable; +import org.apache.geode.DataSerializer; +import org.apache.geode.cache.Region; +import org.apache.geode.i18n.LogWriterI18n; +import org.apache.geode.internal.cache.PartitionedRegion; + +/** + * Class <code>RegionSubRegionSnapshot</code> provides information about + * <code>Region</code>s. This also provides the information about sub regions + * This class is used by the monitoring tool. + * + * + * @since GemFire 5.7 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public class RegionSubRegionSnapshot implements DataSerializable { + private static final long serialVersionUID = -8052137675270041871L; + public RegionSubRegionSnapshot() { + this.parent = null; + this.subRegionSnapshots = new HashSet(); + } + + public RegionSubRegionSnapshot(Region reg) { + this(); + this.name = reg.getName(); + if (reg instanceof PartitionedRegion) { + PartitionedRegion p_reg = (PartitionedRegion)reg; + this.entryCount = p_reg.entryCount(true); + } + else { + this.entryCount = reg.entrySet().size(); + } + final LogWriterI18n logger = reg.getCache().getLoggerI18n(); + if((logger != null) && logger.fineEnabled()) { + logger.fine( + "RegionSubRegionSnapshot Region entry count =" + this.entryCount + + " for region =" + this.name); + } + } + + /** + * add the snapshot of sub region + * + * @param snap + * snapshot of sub region + * @return true if operation is successful + */ + public boolean addSubRegion(RegionSubRegionSnapshot snap) { + if (subRegionSnapshots.contains(snap)) { + return true; + } + + if (subRegionSnapshots.add(snap)) { + snap.setParent(this); + return true; + } + + return false; + } + + /** + * @return get entry count of region + */ + public final int getEntryCount() { + return entryCount; + } + + /** + * @param entryCount + * entry count of region + */ + public final void setEntryCount(int entryCount) { + this.entryCount = entryCount; + } + + /** + * @return name of region + */ + public final String getName() { + return name; + } + + /** + * @param name + * name of region + */ + public final void setName(String name) { + this.name = name; + } + + /** + * @return subRegionSnapshots of all the sub regions + */ + public final Set getSubRegionSnapshots() { + return subRegionSnapshots; + } + + /** + * @param subRegionSnapshots + * subRegionSnapshots of all the sub regions + */ + public final void setSubRegionSnapshots(Set subRegionSnapshots) { + this.subRegionSnapshots = subRegionSnapshots; + } + + /** + * @return snapshot of parent region + */ + public final RegionSubRegionSnapshot getParent() { + return parent; + } + + /** + * @param parent + * snapshot of parent region + */ + public final void setParent(RegionSubRegionSnapshot parent) { + this.parent = parent; + } + + /** + * + * @return full path of region + */ + public String getFullPath() { + return (getParent() == null ? "/" : getParent().getFullPath()) + getName() + + "/"; + } + + public void toData(DataOutput out) throws IOException { + DataSerializer.writeString(this.name, out); + out.writeInt(this.entryCount); + DataSerializer.writeHashSet((HashSet)this.subRegionSnapshots, out); + } + + public void fromData(DataInput in) throws IOException, ClassNotFoundException { + this.name = DataSerializer.readString(in); + this.entryCount = in.readInt(); + this.subRegionSnapshots = DataSerializer.readHashSet(in); + for (Iterator iter = this.subRegionSnapshots.iterator(); iter.hasNext();) { + ((RegionSubRegionSnapshot)iter.next()).setParent(this); + } + } + + @Override + public String toString() { + String toStr = "RegionSnapshot [" + "path=" + this.getFullPath() + + ",parent=" + (this.parent == null ? "null" : this.parent.name) + + ", entryCount=" + this.entryCount + ", subRegionCount=" + + this.subRegionSnapshots.size() + "<<"; + + for (Iterator iter = subRegionSnapshots.iterator(); iter.hasNext();) { + toStr = toStr + ((RegionSubRegionSnapshot)iter.next()).getName() + ", "; + } + + toStr = toStr + ">>" + "]"; + return toStr; + } + + protected String name; + + protected int entryCount; + + protected RegionSubRegionSnapshot parent; + + protected Set subRegionSnapshots; +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/RuntimeAdminException.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/RuntimeAdminException.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RuntimeAdminException.java new file mode 100755 index 0000000..894be08 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/RuntimeAdminException.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.geode.internal.admin.api; + +/** + * A <code>RuntimeAdminException</code> is thrown when a runtime errors occurs + * during administration or monitoring of GemFire. + * + * @since GemFire 3.5 + * + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public class RuntimeAdminException +extends org.apache.geode.GemFireException { + + private static final long serialVersionUID = -7512771113818634005L; + + public RuntimeAdminException() { + super(); + } + + public RuntimeAdminException(String message) { + super(message); + } + + public RuntimeAdminException(String message, Throwable cause) { + super(message, cause); + } + + public RuntimeAdminException(Throwable cause) { + super(cause); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/Statistic.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/Statistic.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/Statistic.java new file mode 100755 index 0000000..49e597b --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/Statistic.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.geode.internal.admin.api; + +/** + * Interface to represent a single statistic of a <code>StatisticResource</code> + * + * @since GemFire 3.5 + * + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface Statistic extends java.io.Serializable { + + /** + * Gets the identifying name of this statistic. + * + * @return the identifying name of this statistic + */ + public String getName(); + + /** + * Gets the value of this statistic as a <code>java.lang.Number</code>. + * + * @return the value of this statistic + */ + public Number getValue(); + + /** + * Gets the unit of measurement (if any) this statistic represents. + * + * @return the unit of measurement (if any) this statistic represents + */ + public String getUnits(); + + /** + * Returns true if this statistic represents a numeric value which always + * increases. + * + * @return true if this statistic represents a value which always increases + */ + public boolean isCounter(); + + /** + * Gets the full description of this statistic. + * + * @return the full description of this statistic + */ + public String getDescription(); +} + http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/StatisticResource.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/StatisticResource.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/StatisticResource.java new file mode 100755 index 0000000..d259ccd --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/StatisticResource.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +/** + * Adminitrative interface for monitoring a statistic resource in a GemFire + * system member. A resource is comprised of one or many + * <code>Statistics</code>. + * + * @since GemFire 3.5 + * + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface StatisticResource { + + /** + * Gets the identifying name of this resource. + * + * @return the identifying name of this resource + */ + public String getName(); + + /** + * Gets the full description of this resource. + * + * @return the full description of this resource + */ + public String getDescription(); + + /** + * Gets the classification type of this resource. + * + * @return the classification type of this resource + * @since GemFire 5.0 + */ + public String getType(); + + /** + * Returns a display string of the {@link SystemMember} owning this + * resource. + * + * @return a display string of the owning {@link SystemMember} + */ + public String getOwner(); + + /** + * Returns an ID that uniquely identifies the resource within the + * {@link SystemMember} it belongs to. + * + * @return unique id within the owning {@link SystemMember} + */ + public long getUniqueId(); + + /** + * Returns a read-only array of every {@link Statistic} in this resource. + * + * @return read-only array of every {@link Statistic} in this resource + */ + public Statistic[] getStatistics(); + + /** + * Refreshes the values of every {@link Statistic} in this resource by + * retrieving them from the member's VM. + * + * @throws AdminException + * if unable to refresh statistic values + */ + public void refresh() throws AdminException; + +} + http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMember.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMember.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMember.java new file mode 100755 index 0000000..810184a --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMember.java @@ -0,0 +1,147 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.distributed.DistributedMember; + +import java.net.InetAddress; + +/** + * Administrative interface for monitoring a GemFire system member. + * + * @since GemFire 3.5 + * + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface SystemMember { + + /** Gets the {@link AdminDistributedSystem} this member belongs to. */ + public AdminDistributedSystem getDistributedSystem(); + + /** + * Gets identifying name of this member. + * For applications this is the string form of {@link #getDistributedMember}. + * For cache servers it is a unique cache server string. + */ + public String getId(); + + /** + * Retrieves display friendly name for this member. If this member defined + * an optional name for its connection to the distributed system, that name + * will be returned. Otherwise the returned value will be {@link + * SystemMember#getId}. + * + * @see org.apache.geode.distributed.DistributedSystem#connect + * @see org.apache.geode.distributed.DistributedSystem#getName + */ + public String getName(); + + /** Gets the type of {@link SystemMemberType} this member is. */ + public SystemMemberType getType(); + + /** Gets host name of the machine this member resides on. */ + public String getHost(); + + /** Gets the host of this member as an <code>java.net.InetAddress<code>. */ + public InetAddress getHostAddress(); + + /** Retrieves the log for this member. */ + public String getLog(); + + /** + * Returns the GemFire license this member is using. + * + * @deprecated Removed licensing in 8.0. + */ + @Deprecated + public java.util.Properties getLicense(); + + /** Returns this member's GemFire version information. */ + public String getVersion(); + + /** + * Gets the configuration parameters for this member. + */ + public ConfigurationParameter[] getConfiguration(); + + /** + * Sets the configuration of this member. The argument is an array of any + * and all configuration parameters that are to be updated in the member. + * <p> + * The entire array of configuration parameters is then returned. + * + * @param parms subset of the configuration parameters to be changed + * @return all configuration parameters including those that were changed + * @throws AdminException + * if this fails to make the configuration changes + */ + public ConfigurationParameter[] setConfiguration(ConfigurationParameter[] parms) throws AdminException; + + /** Refreshes this member's configuration from the member or it's properties */ + public void refreshConfig() throws AdminException; + + /** + * Retrieves this members statistic resources. If the member is not running + * then an empty array is returned. + * + *@param statisticsTypeName String ame of the Statistics Type + * @return array of runtime statistic resources owned by this member + * @since GemFire 5.7 + */ + public StatisticResource[] getStat(String statisticsTypeName) throws AdminException; + + /** + * Retrieves this members statistic resources. If the member is not running + * then an empty array is returned. All Stats are returned + * + * @return array of runtime statistic resources owned by this member + */ + public StatisticResource[] getStats() throws AdminException; + + /** + * Returns whether or not this system member hosts a GemFire {@link + * org.apache.geode.cache.Cache Cache}. + * + * @see #getCache + */ + public boolean hasCache() + throws AdminException; + + /** + * Returns an object that provides admin access to this member's cache. + * If the member currently has no cache then <code>null</code> is returned. + */ + public SystemMemberCache getCache() throws AdminException; + + /** + * Returns the names of the membership roles filled by this member. + * + * @return array of string membership role names + * @since GemFire 5.0 + */ + public String[] getRoles(); + + /** + * Returns the {@link org.apache.geode.distributed.DistributedMember} + * that represents this system member. + * + * @return DistributedMember instance representing this system member + * @since GemFire 5.0 + */ + public DistributedMember getDistributedMember(); +} + http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberBridgeServer.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberBridgeServer.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberBridgeServer.java new file mode 100644 index 0000000..be6f7d9 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberBridgeServer.java @@ -0,0 +1,308 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.cache.server.ServerLoadProbe; + +/** + * Administrative interface that represents a CacheServer that + * serves the contents of a system member's cache. + * + * @see SystemMemberCache#addCacheServer + * + * @since GemFire 4.0 + * @deprecated as of 5.7 use {@link SystemMemberCacheServer} instead. + */ +@Deprecated +public interface SystemMemberBridgeServer { + + /** + * Returns the port on which this bridge server listens for bridge + * clients to connect. + */ + public int getPort(); + + /** + * Sets the port on which this bridge server listens for bridge + * clients to connect. + * + * @throws AdminException + * If this bridge server is running + */ + public void setPort(int port) throws AdminException; + + /** + * Starts this bridge server. Once the server is running, its + * configuration cannot be changed. + * + * @throws AdminException + * If an error occurs while starting the bridge server + */ + public void start() throws AdminException; + + /** + * Returns whether or not this bridge server is running + */ + public boolean isRunning(); + + /** + * Stops this bridge server. Note that the + * <code>BridgeServer</code> can be reconfigured and restarted if + * desired. + */ + public void stop() throws AdminException; + + /** + * Updates the information about this bridge server. + */ + public void refresh(); + + /** + * Returns a string representing the ip address or host name that this server + * will listen on. + * @return the ip address or host name that this server is to listen on + * @since GemFire 5.7 + */ + public String getBindAddress(); + /** + * Sets the ip address or host name that this server is to listen on for + * client connections. + * <p>Setting a specific bind address will cause the bridge server to always + * use this address and ignore any address specified by "server-bind-address" + * or "bind-address" in the <code>gemfire.properties</code> file + * (see {@link org.apache.geode.distributed.DistributedSystem} + * for a description of these properties). + * <p> A <code>null</code> value will be treated the same as the default "". + * <p> The default value does not override the gemfire.properties. If you wish to + * override the properties and want to have your server bind to all local + * addresses then use this string <code>"0.0.0.0"</code>. + * @param address the ip address or host name that this server is to listen on + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setBindAddress(String address) throws AdminException; + /** + * Returns a string representing the ip address or host name that server locators + * will tell clients that this server is listening on. + * @return the ip address or host name to give to clients so they can connect + * to this server + * @since GemFire 5.7 + */ + public String getHostnameForClients(); + /** + * Sets the ip address or host name that this server is to listen on for + * client connections. + * <p>Setting a specific hostname-for-clients will cause server locators + * to use this value when telling clients how to connect to this server. + * <p> The default value causes the bind-address to be given to clients + * <p> A <code>null</code> value will be treated the same as the default "". + * @param name the ip address or host name that will be given to clients + * so they can connect to this server + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setHostnameForClients(String name) throws AdminException; + /** + * Sets whether or not this bridge server should notify clients based on + * key subscription. + * + * If false, then an update to any key on the server causes an update to + * be sent to all clients. This update does not push the actual data to the + * clients. Instead, it causes the client to locally invalidate or destroy + * the corresponding entry. The next time the client requests the key, it + * goes to the bridge server for the value. + * + * If true, then an update to any key on the server causes an update to be + * sent to only those clients who have registered interest in that key. Other + * clients are not notified of the change. In addition, the actual value is + * pushed to the client. The client does not need to request the new value + * from the bridge server. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setNotifyBySubscription(boolean b) throws AdminException; + + /** + * Answers whether or not this bridge server should notify clients based on + * key subscription. + * @since GemFire 5.7 + */ + public boolean getNotifyBySubscription(); + + /** + * Sets the buffer size in bytes of the socket connection for this + * <code>BridgeServer</code>. The default is 32768 bytes. + * + * @param socketBufferSize The size in bytes of the socket buffer + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setSocketBufferSize(int socketBufferSize) throws AdminException; + + /** + * Returns the configured buffer size of the socket connection for this + * <code>BridgeServer</code>. The default is 32768 bytes. + * @return the configured buffer size of the socket connection for this + * <code>BridgeServer</code> + * @since GemFire 5.7 + */ + public int getSocketBufferSize(); + + /** + * Sets the maximum amount of time between client pings. This value is + * used by the <code>ClientHealthMonitor</code> to determine the health + * of this <code>BridgeServer</code>'s clients. The default is 60000 ms. + * + * @param maximumTimeBetweenPings The maximum amount of time between client + * pings + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setMaximumTimeBetweenPings(int maximumTimeBetweenPings) throws AdminException; + + /** + * Returns the maximum amount of time between client pings. This value is + * used by the <code>ClientHealthMonitor</code> to determine the health + * of this <code>BridgeServer</code>'s clients. The default is 60000 ms. + * @return the maximum amount of time between client pings. + * @since GemFire 5.7 + */ + public int getMaximumTimeBetweenPings(); + + /** + * Returns the maximum allowed client connections + * @since GemFire 5.7 + */ + public int getMaxConnections(); + + /** + * Sets the maxium number of client connections allowed. + * When the maximum is reached the server will stop accepting + * connections. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setMaxConnections(int maxCons) throws AdminException; + + /** + * Returns the maxium number of threads allowed in this server to service + * client requests. + * The default of <code>0</code> causes the server to dedicate a thread for + * every client connection. + * @since GemFire 5.7 + */ + public int getMaxThreads(); + + /** + * Sets the maxium number of threads allowed in this server to service + * client requests. + * The default of <code>0</code> causes the server to dedicate a thread for + * every client connection. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setMaxThreads(int maxThreads) throws AdminException; + + /** + * Returns the maximum number of messages that can be enqueued in a + * client-queue. + * @since GemFire 5.7 + */ + public int getMaximumMessageCount(); + + /** + * Sets maximum number of messages that can be enqueued in a client-queue. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setMaximumMessageCount(int maxMessageCount) throws AdminException; + + /** + * Returns the time (in seconds ) after which a message in the client queue + * will expire. + * @since GemFire 5.7 + */ + public int getMessageTimeToLive(); + + /** + * Sets the time (in seconds ) after which a message in the client queue + * will expire. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setMessageTimeToLive(int messageTimeToLive) throws AdminException; + /** + * Sets the list of server groups this bridge server will belong to. + * By default bridge servers belong to the default global server group + * which all bridge servers always belong to. + * @param groups possibly empty array of <code>String</code> where each string + * is a server groups that this bridge server will be a member of. + * @throws AdminException if this bridge server is running + * @since GemFire 5.7 + */ + public void setGroups(String[] groups) throws AdminException; + /** + * Returns the list of server groups that this bridge server belongs to. + * @return a possibly empty array of <code>String</code>s where + * each string is a server group. Modifying this array will not change the + * server groups that this bridge server belongs to. + * @since GemFire 5.7 + */ + public String[] getGroups(); + + /** + * Get a description of the load probe for this bridge server. + * {@link ServerLoadProbe} for details on the load probe. + * @return the load probe used by this bridge + * server. + * @since GemFire 5.7 + */ + public String getLoadProbe(); + + /** + * Set the load probe for this bridge server. See + * {@link ServerLoadProbe} for details on how to implement + * a load probe. + * + * The load probe should implement DataSerializable if + * it is used with this interface, because it will be sent to the remote + * VM. + * @param loadProbe the load probe to use for + * this bridge server. + * @throws AdminException if the bridge server is running + * @since GemFire 5.7 + */ + public void setLoadProbe(ServerLoadProbe loadProbe) throws AdminException; + + /** + * Get the frequency in milliseconds to poll the load probe on this bridge + * server. + * + * @return the frequency in milliseconds that we will poll the load probe. + */ + public long getLoadPollInterval(); + + /** + * Set the frequency in milliseconds to poll the load probe on this bridge + * server + * @param loadPollInterval the frequency in milliseconds to poll + * the load probe. Must be greater than 0. + * @throws AdminException if the bridge server is running + */ + public void setLoadPollInterval(long loadPollInterval) throws AdminException; + +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCache.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCache.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCache.java new file mode 100644 index 0000000..da8f8ae --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCache.java @@ -0,0 +1,204 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.cache.RegionAttributes; + +/** + * Administrative interface that represent's the {@link SystemMember}'s view + * of its {@link org.apache.geode.cache.Cache}. + * + * @since GemFire 3.5 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface SystemMemberCache { + // attributes + /** + * The name of the cache. + */ + public String getName(); + /** + * Value that uniquely identifies an instance of a cache for a given member. + */ + public int getId(); + /** + * Indicates if this cache has been closed. + * @return true, if this cache is closed; false, otherwise + */ + public boolean isClosed(); + /** + * Gets the number of seconds a cache operation will wait to obtain + * a distributed lock lease. + */ + public int getLockTimeout(); + /** + * Sets the number of seconds a cache operation may wait to obtain a + * distributed lock lease before timing out. + * + * @throws AdminException + * If a problem is encountered while setting the lock + * timeout + * + * @see org.apache.geode.cache.Cache#setLockTimeout + */ + public void setLockTimeout(int seconds) throws AdminException; + + /** + * Gets the length, in seconds, of distributed lock leases obtained + * by this cache. + */ + public int getLockLease(); + /** + * Sets the length, in seconds, of distributed lock leases obtained + * by this cache. + * + * @throws AdminException + * If a problem is encountered while setting the lock + * lease + * + * @see org.apache.geode.cache.Cache#setLockLease + */ + public void setLockLease(int seconds) throws AdminException; + + /** + * Gets the number of seconds a cache + * {@link org.apache.geode.cache.Region#get(Object) get} operation + * can spend searching for a value before it times out. + * The search includes any time spent loading the object. + * When the search times out it causes the get to fail by throwing + * an exception. + */ + public int getSearchTimeout(); + /** + * Sets the number of seconds a cache get operation can spend searching + * for a value. + * + * @throws AdminException + * If a problem is encountered while setting the search + * timeout + * + * @see org.apache.geode.cache.Cache#setSearchTimeout + */ + public void setSearchTimeout(int seconds) throws AdminException; + /** + * Returns number of seconds since this member's cache has been created. + * Returns <code>-1</code> if this member does not have a cache or its cache + * has been closed. + */ + public int getUpTime(); + + /** + * Returns the names of all the root regions currently in this cache. + */ + public java.util.Set getRootRegionNames(); + + // operations + + /** + * Returns statistics related to this cache's performance. + */ + public Statistic[] getStatistics(); + + /** + * Return the existing region (or subregion) with the specified + * path that already exists in the cache. + * Whether or not the path starts with a forward slash it is interpreted as a + * full path starting at a root. + * + * @param path the path to the region + * @return the Region or null if not found + * @throws IllegalArgumentException if path is null, the empty string, or "/" + */ + public SystemMemberRegion getRegion(String path) throws AdminException; + + /** + * Creates a VM root <code>Region</code> in this cache. + * + * @param name + * The name of the region to create + * @param attrs + * The attributes of the root region + * + * @throws AdminException + * If the region cannot be created + * + * @since GemFire 4.0 + * @deprecated as of GemFire 5.0, use {@link #createRegion} instead + */ + @Deprecated + public SystemMemberRegion createVMRegion(String name, + RegionAttributes attrs) + throws AdminException; + + /** + * Creates a root <code>Region</code> in this cache. + * + * @param name + * The name of the region to create + * @param attrs + * The attributes of the root region + * + * @throws AdminException + * If the region cannot be created + * + * @since GemFire 5.0 + */ + public SystemMemberRegion createRegion(String name, + RegionAttributes attrs) + throws AdminException; + + /** + * Updates the state of this cache instance. Note that once a cache + * instance is closed refresh will never change the state of that instance. + */ + public void refresh(); + + /** + * Adds a new, unstarted cache server that will serve the contents + * of this cache to clients. + * + * @see org.apache.geode.cache.Cache#addCacheServer + * + * @since GemFire 5.7 + */ + public SystemMemberCacheServer addCacheServer() + throws AdminException; + + /** + * Returns the cache servers that run in this member's VM. Note + * that this list will not be updated until {@link #refresh} is + * called. + * + * @see org.apache.geode.cache.Cache#getCacheServers + * + * @since GemFire 5.7 + */ + public SystemMemberCacheServer[] getCacheServers() + throws AdminException; + + /** + * Returns whether or not this cache acts as a server. This method + * will always return <code>true</code> for the + * <code>SystemMemberCache</code> obtained from a {@link + * CacheServer}. Note that this value will not be updated until + * {@link #refresh} is invoked. + * + * @since GemFire 4.0 + */ + public boolean isServer() throws AdminException; +} + http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheEvent.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheEvent.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheEvent.java new file mode 100644 index 0000000..798c232 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheEvent.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.cache.Operation; +/** + * An event that describes an operation on a cache. + * Instances of this are delivered to a {@link SystemMemberCacheListener} when a + * a cache is created or closed. + * + * @since GemFire 5.0 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface SystemMemberCacheEvent extends SystemMembershipEvent { + /** + * Returns the actual operation that caused this event. + */ + public Operation getOperation(); +} http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/3bd8ef7f/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheListener.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheListener.java b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheListener.java new file mode 100644 index 0000000..e9ac024 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/internal/admin/api/SystemMemberCacheListener.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.geode.internal.admin.api; + +import org.apache.geode.cache.*; + +/** + * A listener whose callback methods can be used to track the lifecycle of + * {@link Cache caches} and {@link Region regions} in the GemFire distributed system. + * + * @see AdminDistributedSystem#addCacheListener + * @see AdminDistributedSystem#removeCacheListener + * + * @since GemFire 5.0 + * @deprecated as of 7.0 use the <code><a href="{@docRoot}/org/apache/geode/management/package-summary.html">management</a></code> package instead + */ +public interface SystemMemberCacheListener { + + /** + * Invoked after a region is created in any node of distributed system. + * @param event describes the region that was created. + * @see CacheFactory#create + * @see Cache#createRegion + * @see Region#createSubregion + */ + public void afterRegionCreate(SystemMemberRegionEvent event); + + /** + * Invoked when a region is destroyed or closed in any node of distributed system. + * @param event describes the region that was lost. The operation on this event + * can be used to determine the actual operation that caused the loss. Note that + * {@link Cache#close()} invokes this callback with <code>Operation.CACHE_CLOSE</code> + * for each region in the closed cache and it invokes {@link #afterCacheClose}. + + * @see Cache#close() + * @see Region#close + * @see Region#localDestroyRegion() + * @see Region#destroyRegion() + */ + public void afterRegionLoss(SystemMemberRegionEvent event); + + /** + * Invoked after a cache is created in any node of a distributed system. + * Note that this callback will be done before any regions are created in the + * cache. + * @param event describes the member that created the cache. + * @see CacheFactory#create + */ + public void afterCacheCreate(SystemMemberCacheEvent event); + /** + * Invoked after a cache is closed in any node of a distributed system. + * This callback is done after those done for each region in the cache. + * This callback is not done if the distributed member that has a cache crashes. + * @param event describes the member that closed its cache. + * @see Cache#close() + */ + public void afterCacheClose(SystemMemberCacheEvent event); +}
