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; 20 21 import java.io.Externalizable; 22 23 /** 24 * The Partitionable Group Membership Service contained in Jgroup 25 * tracks changes in the group's composition and installs them as views 26 * at member objects. Installated views are an abstraction of the 27 * current environment with respect to failures and recoveries. Member 28 * objects can obtain information about the current view through the 29 * <code>View</code> interface. Each view is uniquely identified by a 30 * view identifier, that can be obtained by invoking method 31 * <code>getVid</code>. The composition of the view may be obtained by 32 * invoking method <code>getMembers</code>. 33 * 34 * @author Alberto Montresor 35 * @author Hein Meling 36 * @since Jgroup 0.1 37 */ 38 public interface View 39 extends Externalizable, Cloneable 40 { 41 42 /** 43 * Returns the identifier of the group for which this view has been 44 * generated. 45 */ 46 public int getGid(); 47 48 /** 49 * Returns the identifier of this view. 50 */ 51 public long getVid(); 52 53 /** 54 * Returns the number of views (or partitions) merging into this view. 55 */ 56 public int mergingViews(); 57 58 /** 59 * Returns an array of <code>MemberId</code>s identifying the members 60 * included in this view. 61 */ 62 public MemberId[] getMembers(); 63 64 /** 65 * Return the <code>MemberId</code> of the group leader (member in 66 * position 0). 67 */ 68 public MemberId getLeader(); 69 70 /** 71 * Returns true if the given member is the group leader. 72 */ 73 public boolean isLeader(MemberId member); 74 75 /** 76 * Returns an array of <code>MemberId</code>s that are common to this 77 * view and the provided member array. 78 */ 79 public MemberId[] commonMembers(MemberId[] members); 80 81 /** 82 * Returns an array of <code>MemberId</code>s that are common to this 83 * view and the provided view. 84 */ 85 public MemberId[] commonMembers(View view); 86 87 /** 88 * Returns an array of <code>MemberId</code>s that are new to this 89 * view; that is they were not in the previous view. 90 */ 91 public MemberId[] newMembers(View previousView); 92 93 /** 94 * Returns an array of <code>MemberId</code>s that are not longer 95 * part of this view; that is they were members of the previous view 96 * but are no longer members of the this view. 97 */ 98 public MemberId[] oldMembers(View previousView); 99 100 /** 101 * Returns true if the given member is contained in the current view. 102 * Otherwise, false is returned. 103 */ 104 public boolean contains(MemberId memberId); 105 106 /** 107 * Returns true if this view contains all members of the provided view. 108 * False is returned otherwise. <p> 109 * 110 * This is useful for checking if a new view is a contraction of the 111 * previous view, or if there are new members. 112 */ 113 public boolean containsAll(View view); 114 115 /** 116 * Returns true if this view has exactly the same members are the provided 117 * view. False is returned otherwise. <p> 118 * 119 * Note that this is different from using <code>Object.equals()</code>, since 120 * this method will not check that the view identifiers are the same. 121 */ 122 public boolean hasSameMembers(View prevView); 123 124 /** 125 * Returns the number of members in this view. 126 */ 127 public int size(); 128 129 /** 130 * Returns the position of the given member in this view. If the member 131 * is not in this view, a negative value is returned. 132 */ 133 public int getMemberPosition(MemberId id); 134 135 /** 136 * Returns true if the specified member is the member at the given 137 * position; otherwise false is returned. 138 * 139 * @param pos 140 * The position in the view to check for equality with the given 141 * member. A negative position value is considered to indicate 142 * a position from the end of the view array, while a positive 143 * value indicate a position from the beginning of the view 144 * array. A position value outside the range of the view, will 145 * always return false. 146 * @param member 147 * The member whose position to check. 148 * @return 149 * True if the given member is at the specified position in this 150 * view; false otherwise. 151 */ 152 public boolean memberHasPosition(int pos, MemberId member); 153 154 public Object clone(); 155 156 } // END View