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.core.MergingListener;
22 import jgroup.core.View;
23 import jgroup.relacs.config.AppConfig;
24 import jgroup.relacs.config.Host;
25 import jgroup.relacs.config.HostSet;
26
27
28 /**
29 * The <code>DistributionScheme</code> interface provides a standard
30 * for implementing various distribution schemes that simplify
31 * interaction with the <code>ReplicationManager</code>.
32 *
33 * @author Hein Meling
34 * @since Jgroup 1.2
35 */
36 public interface DistributionScheme
37 extends MergingListener
38 {
39
40 ////////////////////////////////////////////////////////////////////////////////////////////
41 // Methods related to replica distribution
42 ////////////////////////////////////////////////////////////////////////////////////////////
43
44 /**
45 * Assign the host location for the specified application. The
46 * <code>AppConfig</code> object also contains the required redundancy.
47 *
48 * @param app
49 * An <code>AppConfig</code> object specifying the class parameters
50 * and redundancy requirements, and group identifier.
51 * @return
52 * A <code>HostSet</code> specifying the locations where the replicas
53 * should be created.
54 * @exception RedundancyException
55 * Is raised if the specified redundancy could not be satisfied.
56 * @exception GroupExistsException
57 * Raised if the specified application group already exists (has been
58 * assigned to some hostset).
59 */
60 public HostSet assignReplicas(AppConfig app)
61 throws RedundancyException, GroupExistsException;
62
63
64 /**
65 * Remove replica assignments for the specified application.
66 *
67 * @param app
68 * An <code>AppConfig</code> object specifying the class parameters
69 * and redundancy requirements, and group identifier.
70 * @return
71 * A <code>HostSet</code> specifying the locations where the replicas
72 * was located prior to the remove.
73 */
74 public HostSet removeReplicas(AppConfig app)
75 throws UnknownGroupException;
76
77
78 public HostSet collocateReplicas(AppConfig app, AppConfig collocateWithApp)
79 throws GroupExistsException, RedundancyException, UnknownGroupException;
80
81
82 /**
83 * Reassign the application replica running on the specified host.
84 *
85 * @param app
86 * The application group to which the replica belongs.
87 * @param host
88 * The host from which to remove the replica.
89 * @return
90 * The host on which a new replica should be created.
91 * @exception UnknownGroupException
92 * The given application group is unknown.
93 * @exception RedundancyException
94 * Raised if the system could not reassign the replica to any host
95 * in the system.
96 */
97 public Host reassignReplica(AppConfig app, Host host)
98 throws UnknownGroupException, RedundancyException;
99
100
101 /**
102 * Update the distribution scheme according to the specified view
103 * for the given application.
104 * <P>
105 * Note that the method behavior should be idempotent.
106 */
107 public void viewChangeEvent(View view);
108
109 } // END DistributionScheme