public class ActiveElectionManager extends Object
INamingService
 and provides a distributed active election algorithm to select only one active service
 between all candidates.  NOTE: The manage service must provide consistent
 equals() method implementation or implement ReferentUuid
 interface.
 Example:
 
   
    public class ServiceIDOrderFilter
      implements IActiveElectionDecisionFilter
    {
         ServiceID _srvID;
     public boolean isAcceptable(ActiveElectionState.State advanceState, List
 candidateSrv )
     {
       for( ServiceItem srvItem : candidateSrv )
       {
        // return true if _srvID is the greater from all candidateSrv.serviceID;
       }
     }
    }
    public class ElectionListener
                implements IActiveElectionListener
    {
      ActiveElectionManager _electManager;
      public void onActive( ActiveElectionEvent event )
      {
        System.out.println("OnActive -> Elected Active: " + event.getActiveServiceItem() );
        if ( _electManager.getState() == ActiveElectionState.State.ACTIVE )
          System.out.println("The manage service is an ACTIVE");
        else
          System.out.println("The manage service is an NOT an ACTIVE");
       }
       public void onSplitBrain( ActiveElectionEvent event )
       {
         System.out.println("OnSplit -> Elected Active: " + event.getActiveServiceItem() ); *
       }
     }
    public static void main( String[] args )
    {
     IJSpace space;
     ServiceTemplate srvTemplate;
     INamingService lookupSrv    = new LookupNamingService();
     ElectionListener listener   = new ElectionListener();
     ServiceIDOrderFilter filter = new ServiceIDOrderFilter();
     ActiveElectionManager electManager = new ActiveElectionManager( space, srvTemplate,
 lookupSrv, listener, filter );
     electManager.elect();
    }
    
 IActiveElectionDecisionFilter| Constructor and Description | 
|---|
ActiveElectionManager(String nodeName,
                     Object service,
                     ServiceTemplate participantSrvTemplate,
                     INamingService namingSrv,
                     IActiveElectionListener activeElectionListener,
                     IActiveElectionDecisionFilter decisionFilter,
                     ActiveElectionConfig config,
                     ClusterFailureDetector clusterFailureDetector,
                     SplitBrainRecoveryHolder splitBrainRecoveryHolder,
                     AtomicBoolean recoveryIndicator)
Constructs an instance of this class that will add  
ActiveElectionState
 to the set of service attributes see: #addNamingAttributes(Object, Entry[]). | 
| Modifier and Type | Method and Description | 
|---|---|
protected boolean | 
changeState(ActiveElectionState.State oldState,
           ActiveElectionState.State newState,
           boolean force)
Change the service state on naming service. 
 | 
protected boolean | 
confirmPendingStateRegistration(int retryCount)
Confirmation PENDING state registration on naming service. 
 | 
void | 
elect()
Elect the active service, this method will be blocked while the active service will be
 elected. 
 | 
protected ServiceItem | 
findActive()
Find an ACTIVE service with the election template. 
 | 
void | 
forceMoveToPrimary()
Forcefully make this space to be primary 
 | 
ClusterFailureDetector | 
getClusterFailureDetector()  | 
ActiveElectionConfig | 
getConfig()  | 
ActiveElectionState.State | 
getState()  | 
protected boolean | 
isAdvanceToStateAllowed(ActiveElectionState.State currentState,
                       ActiveElectionState.State acquireState)
Request to advance to the new state. 
 | 
protected boolean | 
isSpaceInRecovery()  | 
protected boolean | 
isTerminate()  | 
protected List<ServiceItem> | 
lookup(ActiveElectionState.State state,
      int maxMatches)
Lookup the services with desired state. 
 | 
protected void | 
notifyListenerOnActive(ServiceItem activeService)
notify the  
IActiveElectionListener about
 elected ACTIVE service or an ACTIVE on split-brain occurrence. | 
void | 
onActiveDiscoveryCheckExtraBackup(ServiceItem activeServiceItem)
A backup Space verifies that it is a replication target of an active primary Space. 
 | 
protected void | 
onActiveFailure()
The callback method from  
ActiveFailureDetector
 on active failure. | 
protected void | 
onSplitBrain(List<ServiceItem> splitActives)
The callback method from  
SplitBrainController
 on 2 or more identified ACTIVE services. | 
protected ServiceItem | 
pollStateUntilAvailable(ActiveElectionState.State pollingState)
Poll the desired service state on naming service while available, when the
  
pollingState is not available make an attempt to find an ACTIVE state, if ACTIVE
 was found notify the IActiveElectionListener
 and return the active service. | 
void | 
reelect()
Re-elect the primary space. 
 | 
protected void | 
startSplitBrainController()
Start the split-brain controller which controls the collision of 2 or more ACTIVE services. 
 | 
void | 
terminate()
Terminate the ActiveElectionManager. 
 | 
String | 
toString()  | 
public ActiveElectionManager(String nodeName, Object service, ServiceTemplate participantSrvTemplate, INamingService namingSrv, IActiveElectionListener activeElectionListener, IActiveElectionDecisionFilter decisionFilter, ActiveElectionConfig config, ClusterFailureDetector clusterFailureDetector, SplitBrainRecoveryHolder splitBrainRecoveryHolder, AtomicBoolean recoveryIndicator) throws ActiveElectionException
ActiveElectionState
 to the set of service attributes see: #addNamingAttributes(Object, Entry[]).service - the service candidate which a participate in active
                               election.equals() method implementation or implement ReferentUuid interface.participantSrvTemplate - the template to match participant services with match
                               attributes set.namingSrv - the naming service provider to lookup services, change states
                               and etc...activeElectionListener - the listener implementation to receive notification about new
                               active candidate.decisionFilter - the decision filter is call to get acceptance to advance new
                               state.ActiveElectionException - Failed to initialize
                                                                            ActiveElectionManager,
                                                                            naming service
                                                                            communication
                                                                            problem.protected boolean isSpaceInRecovery()
protected boolean confirmPendingStateRegistration(int retryCount)
                                           throws ActiveElectionException
true if registration confirmed, otherwise false.ActiveElectionException - failed to confirm,
                                                                            the process might
                                                                            be interrupted.protected List<ServiceItem> lookup(ActiveElectionState.State state, int maxMatches) throws InterruptedException
state - The state to find.maxMatches - maximum number of matched services.null if no service was found.InterruptedExceptionprotected boolean changeState(ActiveElectionState.State oldState, ActiveElectionState.State newState, boolean force) throws RemoteException
oldState - oldState the old service state.newState - newState the new service state.force - true if the newState must be changed without throwing
                 RemoteException. This operation will continue with retrying until the change
                 state operation will be succeed or election manager was terminated.RemoteException - Failed to change state on naming-service, the reason might
                                  be a network problem.protected ServiceItem pollStateUntilAvailable(ActiveElectionState.State pollingState) throws InterruptedException
pollingState is not available make an attempt to find an ACTIVE state, if ACTIVE
 was found notify the IActiveElectionListener
 and return the active service.pollingState - the polling service state.null if ACTIVE was not found and polling
 state is not available on naming service..InterruptedExceptionprotected boolean isAdvanceToStateAllowed(ActiveElectionState.State currentState, ActiveElectionState.State acquireState) throws RemoteException, InterruptedException
IActiveElectionDecisionFilter.isAcceptable(com.gigaspaces.cluster.activeelection.core.ActiveElectionState.State, java.util.List<net.jini.core.lookup.ServiceItem>)
 return true this manage service can advance to the acquireState
 state.currentState - the current state.acquireState - the requesting state to acquire.true the manage service can advance the state from currentState to
 acquireState, false another candidate should advance first, or current state not
 in lookup.RemoteException - Failed to communicate with Naming Service.InterruptedException - current thread was interrupted.protected ServiceItem findActive() throws InterruptedException
ActiveFailureDetector,
 so that to get notification on active failure.IActiveElectionListener about new active
 service.
 If split-brain has been identified( two or more active services were found), lookup again the
 active while the split-bran will be resolved.null active not found.InterruptedException - throws when operation was interrupted.public void elect()
           throws InterruptedException,
                  ActiveElectionException
InterruptedException - thrown when operation
                                                                            was interrupted.ActiveElectionException - failed to elect
                                                                            active service,
                                                                            might be INamingService
                                                                            communication.public void forceMoveToPrimary()
                        throws RemoteException
RemoteExceptionprotected void notifyListenerOnActive(ServiceItem activeService)
IActiveElectionListener about
 elected ACTIVE service or an ACTIVE on split-brain occurrence.protected void onSplitBrain(List<ServiceItem> splitActives) throws RemoteException, InterruptedException, ActiveElectionException
SplitBrainController
 on 2 or more identified ACTIVE services. This method should resolve the split-brain and only
 1 ACTIVE service should stay in the network.RemoteException - Failed to communicate
                                                                            with naming service.ActiveElectionException - Election failedInterruptedException - on split brain
                                                                            resolution was
                                                                            interrupted.public void onActiveDiscoveryCheckExtraBackup(ServiceItem activeServiceItem)
activeServiceItem - the primary service received from the LUSprotected void onActiveFailure()
                        throws InterruptedException,
                               ActiveElectionException
ActiveFailureDetector
 on active failure.ActiveElectionException - Failed to elect
                                                                            new Active.InterruptedException - operation was
                                                                            interrupted.protected void startSplitBrainController()
                                  throws RemoteException
RemoteExceptionpublic void terminate()
public ActiveElectionState.State getState()
public ActiveElectionConfig getConfig()
protected boolean isTerminate()
true if the manager should terminate, otherwise false.public void reelect()
             throws InterruptedException,
                    ActiveElectionException,
                    RemoteException
public ClusterFailureDetector getClusterFailureDetector()
Copyright © GigaSpaces.