blob: e6d6045790e8c3ff2bc5850fa5dca695d9f11c79 [file] [log] [blame]
/*
* 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.admin;
import java.io.File;
import java.net.InetAddress;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.apache.geode.cache.DataPolicy;
import org.apache.geode.cache.persistence.PersistentID;
import org.apache.geode.distributed.DistributedMember;
/**
* Administrative interface for managing an entire GemFire distributed system. This interface should
* not be confused with {@link org.apache.geode.distributed.DistributedSystem DistributedSystem}
* that represents a connection to a GemFire distributed system.
*
* @see AdminDistributedSystemFactory
*
* @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 AdminDistributedSystem {
/**
* Retrieves the unique id for this system.
*/
String getId();
/**
* Retrieves display friendly name for this system. If this administrative VM defined an optional
* name for its connection to the distributed system, that name will be returned. Otherwise the
* returned value will be {@link org.apache.geode.admin.AdminDistributedSystem#getId}.
*/
String getName();
/**
* Retrieves the remote command and formatting this system should use to access and/or manipulate
* resources on remote machines.
*/
String getRemoteCommand();
/**
* Sets the remote command and formatting this system should use to access and/or manipulate
* resources on remote machines.
*/
void setRemoteCommand(String remoteCommand);
/**
* Sets the lowest level of alert that should be delivered to the {@link AlertListener}s
* registered on this <code>AdminDistributedSystem</code>. The default level is
* {@link AlertLevel#WARNING}.
*/
void setAlertLevel(AlertLevel level);
/**
* Returns the lowest level of alerts that should be delivered to the {@link AlertListener}s
* registered on this <code>AdminDistributedSystem</code>.
*
* @see #setAlertLevel
*/
AlertLevel getAlertLevel();
/**
* Sets the lowest level of alert that should be delivered to the {@link AlertListener}s
* registered on this <code>AdminDistributedSystem</code>. The default level is
* {@link AlertLevel#WARNING}.
*/
void setAlertLevelAsString(String level);
/**
* Returns the lowest level of alerts that should be delivered to the {@link AlertListener}s
* registered on this <code>AdminDistributedSystem</code>.
*
* @see #setAlertLevelAsString
*/
String getAlertLevelAsString();
/**
* Registers an <code>AlertListener</code> that will receive all alerts that are at or above the
* {@linkplain #setAlertLevel alert level}.
*/
void addAlertListener(AlertListener listener);
/**
* Unregisters an <code>AlertListener</code>
*/
void removeAlertListener(AlertListener listener);
/**
* Retrieves the multicast address in use by this system.
*/
String getMcastAddress();
/**
* Retrieves the multicast port in use by this system.
*/
int getMcastPort();
/**
* Retrieves comma-delimited list locators to be used if multi-cast port is zero. Format of each
* locators must be host[port].
*/
String getLocators();
/**
* Returns true if this system has enabled the use of multicast for communications
*/
boolean isMcastEnabled();
/**
* Returns true if any members of this system are currently running.
*/
boolean isRunning();
/**
* Returns <code>true</code> if this is currently connected to the system.
*/
boolean isConnected();
/**
* Starts all managed entities that are not currently running.
*
* @throws AdminException If a problem is encountered while starting the managed entities.
*/
void start() throws AdminException;
/**
* Stops all managed entities that are currently running.
*
* @throws AdminException If a problem is encountered while starting the managed entities.
*/
void stop() throws AdminException;
/**
* Merges and returns all system logs as a single formatted log.
*/
String displayMergedLogs();
/**
* Retrieves the license information for this installation of GemFire.
*
* @deprecated Removed licensing in 8.0.
*/
java.util.Properties getLicense();
/**
* Creates a new <code>DistributionLocator</code> that is ready to
* {@linkplain DistributionLocator#getConfig configure} and {@linkplain #start start}.
*
* <P>
*
* It is presumed that the newly-added locator is used to discover members of the distributed
* system. That is, the host/port of the new locator is appended to the {@link #getLocators
* locators} attribute of this <code>AdminDistributedSystem</code>.
*/
DistributionLocator addDistributionLocator();
/**
* Returns array of <code>DistributionLocator</code>s administered by this
* <code>AdminDistributedSystem</code>.
*/
DistributionLocator[] getDistributionLocators();
/**
* Retrieves SystemMember instances for every application that is running and currently connection
* to this system. Note that this list does not include dedicated {@linkplain #getCacheVms cache
* server vms}.
*/
SystemMember[] getSystemMemberApplications() throws org.apache.geode.admin.AdminException;
/**
* Display in readable format the latest Alert in this distributed system.
*/
String getLatestAlert();
/**
* Returns an object for monitoring the health of GemFire.
*/
GemFireHealth getGemFireHealth();
/**
* Connects to the distributed system. This method will return immediately after spawning a
* background thread that connects to the distributed system. As a result, a
* <code>AdminDistributedSystem</code> can be "connected" to before any members of the system have
* been started or have been seen. The {@link #waitToBeConnected} method will wait for the
* connection to be made.
*
* @see #isConnected
* @see #isRunning
* @see #waitToBeConnected
*/
void connect();
/**
* Wait for up to a given number of milliseconds for the connection to the distributed system to
* be made.
*
* @param timeout The number of milliseconds to wait for the connection to to be made.
*
* @return Whether or not the connection was made. <code>false</code>, if the method times out
*
* @throws InterruptedException If the thread invoking this method is interrupted while waiting.
* @throws IllegalStateException If {@link #connect} has not yet been called.
*/
boolean waitToBeConnected(long timeout) throws InterruptedException;
/**
* Disconnects from the distributed system.
*/
void disconnect();
/** Returns this system's configuration . */
DistributedSystemConfig getConfig();
/**
* Registers a listener that receives callbacks when a member joins or leaves the distributed
* system.
*/
void addMembershipListener(SystemMembershipListener listener);
/**
* Unregisters a membership listener
*
* @see #addMembershipListener
*/
void removeMembershipListener(SystemMembershipListener listener);
/**
* Registers a cache event listener. Does nothing if the listener is already registered. The
* listeners are called in the order they are registered.
*
* @param listener the listener to register.
* @since GemFire 5.0
*/
void addCacheListener(SystemMemberCacheListener listener);
/**
* Unregisters a cache listener. Does nothing if the listener is not registered.
*
* @param listener the listener to unregister.
* @since GemFire 5.0
*/
void removeCacheListener(SystemMemberCacheListener listener);
/**
* Creates a new cache server that is ready to {@linkplain CacheServerConfig configure} and
* {@linkplain #start start}.
*
* @since GemFire 4.0
* @deprecated as of 5.7 use {@link #addCacheVm} instead.
*/
@Deprecated
CacheServer addCacheServer() throws AdminException;
/**
* Returns all of the dedicated cache server members of the distributed system. Because they are
* not managed entities, application VMs that host a server cache are not included in the array.
*
* @since GemFire 4.0
* @deprecated as of 5.7 use {@link #getCacheVms} instead.
*/
@Deprecated
CacheServer[] getCacheServers() throws AdminException;
/**
* Returns all the cache server members of the distributed system which are hosting a client queue
* for the particular durable-client having the given durableClientId
*
* @param durableClientId - durable-id of the client
* @return array of CacheServer(s) having the queue for the durable client
*
* @since GemFire 5.6
*/
CacheServer[] getCacheServers(String durableClientId) throws AdminException;
/**
* Creates a new cache vm that is ready to {@linkplain CacheVmConfig configure} and
* {@linkplain #start start}.
*
* @since GemFire 5.7
*/
CacheVm addCacheVm() throws AdminException;
/**
* Returns all of the dedicated cache server vm members of the distributed system. Because they
* are not managed entities, application VMs that host a server cache are not included in the
* array.
*
* @since GemFire 5.7
*/
CacheVm[] getCacheVms() throws AdminException;
/**
* Returns the administrative SystemMember specified by the
* {@link org.apache.geode.distributed.DistributedMember}.
*
* @param distributedMember the distributed member to lookup
* @return administrative SystemMember for that distributed member
* @since GemFire 5.0
*/
SystemMember lookupSystemMember(DistributedMember distributedMember) throws AdminException;
/**
* Indicate to the distributed system that persistent files have been lost. When a member recovers
* from a set of persistent files, it will wait for other members that were also persisting the
* same region to start up. If the persistent files for those other members were lost, this method
* can be used to tell the remaining members to stop waiting for the lost data.
*
* @param host The host of the member whose files were lost.
* @param directory The directory where those files resided.
* @since GemFire 6.5
* @deprecated use {@link #revokePersistentMember(UUID)} instead
*/
void revokePersistentMember(InetAddress host, String directory) throws AdminException;
/**
* Indicate to the distributed system that persistent files have been lost. When a member recovers
* from a set of persistent files, it will wait for other members that were also persisting the
* same region to start up. If the persistent files for those other members were lost, this method
* can be used to tell the remaining members to stop waiting for the lost data.
*
* @param diskStoreID The unique id of the disk store which you are revoking. The unique id can be
* discovered from {@link #getMissingPersistentMembers()}
*
* @since GemFire 7.0
*/
void revokePersistentMember(UUID diskStoreID) throws AdminException;
/**
* Retrieve the set of persistent files that the existing members are waiting for. See
* {@link AdminDistributedSystem#revokePersistentMember(InetAddress, String)}
*
* @return The persistent members that were known to the existing persistent members, when the
* existing members were last online.
* @since GemFire 6.5
*
*/
Set<PersistentID> getMissingPersistentMembers() throws AdminException;
/**
* Shuts down all the members of the distributed system with a cache that the admin member is
* connected to, excluding the stand-alone locators. Calling this method will ensure that regions
* with the {@link DataPolicy#PERSISTENT_PARTITION} to be shutdown in a way which allows for a
* faster recovery when the members are restarted.
*
* Killing individual members can lead to inconsistencies in the members persistent data, which
* gemfire repairs on startup. Calling shutDownAllMembers makes sure that the persistent files are
* consistent on shutdown, which makes recovery faster.
*
* This is equivalent to calling shutDownAllMembers(0);
*
* @return The set of members that were shutdown
* @since GemFire 6.5
*/
Set<DistributedMember> shutDownAllMembers() throws AdminException;
/**
* Shuts down all the members of the distributed system with a cache that the admin member is
* connected to, excluding the stand-alone locators. Calling this method will ensure that regions
* with the {@link DataPolicy#PERSISTENT_PARTITION} to be shutdown in a way which allows for a
* faster recovery when the members are restarted.
*
* Killing individual members can lead to inconsistencies in the members persistent data, which
* gemfire repairs on startup. Calling shutDownAllMembers makes sure that the persistent files are
* consistent on shutdown, which makes recovery faster.
*
* @param timeout The amount of time to wait (in milliseconds) for the shutdown all to complete.
* @return The set of members that were shutdown, or null if the timeout is exceeded.
*
* @since GemFire 6.5
*/
Set<DistributedMember> shutDownAllMembers(long timeout) throws AdminException;
/**
* Backup the persistent files for all of the members of the distributed system that the admin
* member is connected to.
*
* @param targetDir The directory where each member's backup should be placed.
*
* @return The status of the backup, which includes the set of members that were backed up and the
* set of members that were known to be offline at the time of backup.
* @since GemFire 6.5
*/
BackupStatus backupAllMembers(File targetDir) throws AdminException;
/**
* Incrementally backup the persistent files for all of the members of the distributed system that
* the admin member is connected to. Only new operation log files since the previous backup will
* be copied during this backup. The generated restore script will reference and copy operation
* log files from the previous backup.
*
* @param targetDir The directory where each member's backup should be placed.
* @param baselineDir The directory of a previous backup. If this parameter is null or the
* directory does not exist (on a member by member basis) a full backup will be performed
* for the member.
*
* @return The status of the backup, which includes the set of members that were backed up and the
* set of members that were known to be offline at the time of backup.
* @since GemFire 6.5
*/
BackupStatus backupAllMembers(File targetDir, File baselineDir) throws AdminException;
/**
* Compact the persistent files for all of the members of the distributed system that the admin
* member connected to.
*
* This is equivalent to calling {DiskStore#forceCompaction} on all members.
*
* @return The set of members that compacted their disk stores.
* @since GemFire 6.5
*/
Map<DistributedMember, Set<PersistentID>> compactAllDiskStores() throws AdminException;
}