| /* |
| * 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.distributed.internal.membership.gms.interfaces; |
| |
| import java.io.NotSerializableException; |
| import java.util.Collection; |
| import java.util.Set; |
| |
| import org.apache.geode.distributed.DistributedMember; |
| import org.apache.geode.distributed.internal.DistributionMessage; |
| import org.apache.geode.distributed.internal.membership.InternalDistributedMember; |
| import org.apache.geode.distributed.internal.membership.NetView; |
| |
| /** |
| * Manager presents the GMS services to the outside world and handles startup/shutdown race |
| * conditions. It is also the default MessageHandler |
| */ |
| public interface Manager extends Service, MessageHandler<DistributionMessage> { |
| |
| /** |
| * After all services have been started this is used to join the distributed system |
| */ |
| void joinDistributedSystem(); |
| |
| /** |
| * Sends a message using a selected distribution channel (e.g. Messenger or DirectChannel) |
| * |
| * @return a set of recipients that did not receive the message |
| */ |
| Set<InternalDistributedMember> send(DistributionMessage m) throws NotSerializableException; |
| |
| /** |
| * initiates a Forced Disconnect, shutting down the distributed system and closing the cache |
| * |
| */ |
| void forceDisconnect(String reason); |
| |
| /** |
| * notifies the manager that membership quorum has been lost |
| */ |
| void quorumLost(Collection<InternalDistributedMember> failures, NetView view); |
| |
| /** |
| * Notifies the manager that a member has contacted us who is not in the current membership view |
| * |
| */ |
| void addSurpriseMemberForTesting(DistributedMember mbr, long birthTime); |
| |
| /** |
| * Tests to see if the given member has been put into "shunned" state, meaning that it has left |
| * the distributed system and we should no longer process requests from it. Shunned status |
| * eventually times out. |
| * |
| * @return true if the member is shunned |
| */ |
| boolean isShunned(DistributedMember mbr); |
| |
| /** |
| * returns the lead member from the current membership view. This is typically the oldest member |
| * that is not an Admin or Locator member. |
| * |
| * @return the ID of the lead member |
| */ |
| DistributedMember getLeadMember(); |
| |
| /** |
| * returns the coordinator of the current membership view. This is who created and distributed the |
| * view. See NetView. |
| */ |
| DistributedMember getCoordinator(); |
| |
| /** |
| * sometimes we cannot perform multicast messaging, such as during a rolling upgrade. |
| * |
| * @return true if multicast messaging can be performed |
| */ |
| boolean isMulticastAllowed(); |
| |
| /** |
| * Returns the reason for a shutdown. |
| */ |
| Throwable getShutdownCause(); |
| |
| /** |
| * Returns true if a shutdown is in progress or has been completed . When it returns true, |
| * shutdown message is already sent. |
| */ |
| boolean shutdownInProgress(); |
| |
| /** |
| * Returns true if a distributed system close is started. And shutdown msg has not sent yet,its in |
| * progress. |
| */ |
| boolean isShutdownStarted(); |
| |
| /** |
| * Indicate whether we are attempting a reconnect |
| */ |
| boolean isReconnectingDS(); |
| |
| /** |
| * If this.isReconnectingDS() then this method will inform whether the reconnect |
| * has completed |
| */ |
| boolean isReconnectCompleted(); |
| |
| } |