View Javadoc

1   /*
2    * Copyright (c) 1998-2002 The Jgroup Team.
3    *
4    * This program is free software; you can redistribute it and/or modify
5    * it under the terms of the GNU Lesser General Public License version 2 as
6    * published by the Free Software Foundation.
7    *
8    * This program is distributed in the hope that it will be useful,
9    * but WITHOUT ANY WARRANTY; without even the implied warranty of
10   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   * GNU Lesser General Public License for more details.
12   *
13   * You should have received a copy of the GNU Lesser General Public License
14   * along with this program; if not, write to the Free Software
15   * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16   *
17   */
18   
19  package jgroup.core.arm;
20  
21  import jgroup.relacs.config.AppConfig;
22  import jgroup.relacs.config.Host;
23  import jgroup.relacs.config.HostSet;
24  
25  
26  /**
27   *  The <code>RecoveryStrategy</code> interface provides methods that
28   *  must be implemented by a particular recovery service.  These methods
29   *  will be invoked in response to a corresponding failure event, that
30   *  the method intend to rectify. <p>
31   *
32   *  All implementations of this interface that are to be used through
33   *  the <code>ReplicationManager</code> must implement a no-argument
34   *  constructor.  Initialization of a particular recovery strategy
35   *  should occur in the {@link #initialize(DistributionScheme, AppConfig) initialize}
36   *  method.
37   *
38   *  @author Hein Meling
39   *  @since Jgroup 1.2
40   *  @see jgroup.arm.recovery.AbstractRecoveryStrategy
41   *  @see jgroup.arm.recovery.KeepMinimalInPartition
42   *  @see jgroup.arm.recovery.KeepInitialInPartition
43   */
44  public interface RecoveryStrategy
45  {
46  
47    /**
48     *  Initialize the recovery strategy for the given application.
49     */
50    public void initialize(DistributionScheme distScheme, AppConfig app);
51  
52  
53    /**
54     *  Returns true if the associated application needs a recovery action,
55     *  otherwise false is returned.
56     */
57    public boolean needsRecovery();
58  
59  
60    /**
61     *  Invoked to initialize the recovery strategy implementation
62     *  for the provided application.  The method returns true if
63     *  the group has failed.
64     */
65    public boolean prepareRecovery();
66  
67  
68    /**
69     *  Handle multiple simulatenous failures; this may either be due to
70     *  a network partitioning scenario or if several members of the group
71     *  failed at the same time.
72     *  
73     *  FIXME UPDATE DOCUMENTATION:
74     *  Invoked in the event that an entire group fails.  This particular
75     *  type of failure can be characterized as a design failure in most
76     *  cases.  This can be used by special recovery strategies that are
77     *  capable of recovery with different versions of a replica.  For
78     *  instance if a replica group running version X of the application
79     *  software, may be replaced by version Y of the same software, in
80     *  case we get a group failure.
81     *
82     *  @param hosts
83     *    The set of hosts on which the application were running.
84     *
85     *  @return 
86     *    True if recovery was successful; false otherwise.
87     */
88    public boolean handleFailure(HostSet hosts);
89  
90  
91    /**
92     *  Restart the given replica on the given host.  This method differes
93     *  from the one below in that it will try to instatiate the replica
94     *  on the same host on which the failed replica was running.  That is
95     *  it will be invoked only when the execution service is still believed
96     *  to be available on that host.
97     *
98     *  @param host
99     *    The host on which the replica was running.
100    *
101    *  @return 
102    *    True if recovery was successful; false otherwise.
103    */
104   public boolean restartReplica(Host host);
105 
106 
107   /**
108    *  Relocate the application replica that were running on the given
109    *  host.  The new location should be obtain through the
110    *  <code>DistributionScheme</code> provided by the replication
111    *  manager.
112    *
113    *  @param host
114    *    The host on which the replica were running.
115    *
116    *  @return 
117    *    True if recovery was successful; false otherwise.
118    */
119   public boolean relocateReplica(Host host);
120 
121 } // END RecoveryStrategy