| | |
| | | * It is exchanged with the replication servers at connection establishment |
| | | * time. |
| | | */ |
| | | public class ServerState implements Iterable<Short> |
| | | public class ServerState implements Iterable<Integer> |
| | | { |
| | | private HashMap<Short, ChangeNumber> list; |
| | | private HashMap<Integer, ChangeNumber> list; |
| | | private boolean saved = true; |
| | | |
| | | /** |
| | |
| | | */ |
| | | public ServerState() |
| | | { |
| | | list = new HashMap<Short, ChangeNumber>(); |
| | | list = new HashMap<Integer, ChangeNumber>(); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | try |
| | | { |
| | | list = new HashMap<Short, ChangeNumber>(); |
| | | list = new HashMap<Integer, ChangeNumber>(); |
| | | |
| | | while (endpos > pos) |
| | | { |
| | |
| | | */ |
| | | int length = getNextLength(in, pos); |
| | | String serverIdString = new String(in, pos, length, "UTF-8"); |
| | | short serverId = Short.valueOf(serverIdString); |
| | | int serverId = Integer.valueOf(serverIdString); |
| | | pos += length +1; |
| | | |
| | | /* |
| | |
| | | |
| | | synchronized(list) |
| | | { |
| | | Short id = changeNumber.getServerId(); |
| | | int id = changeNumber.getServerId(); |
| | | ChangeNumber oldCN = list.get(id); |
| | | if (oldCN == null || changeNumber.newer(oldCN)) |
| | | { |
| | |
| | | synchronized (list) |
| | | { |
| | | clear(); |
| | | for (Short id : serverState) { |
| | | for (Integer id : serverState) { |
| | | ChangeNumber maxChangeNumber = serverState.getMaxChangeNumber(id); |
| | | if (this.update(maxChangeNumber)) { |
| | | result = true; |
| | |
| | | |
| | | synchronized (list) |
| | | { |
| | | for (Short key : list.keySet()) |
| | | for (int key : list.keySet()) |
| | | { |
| | | ChangeNumber change = list.get(key); |
| | | Date date = new Date(change.getTime()); |
| | |
| | | |
| | | synchronized (list) |
| | | { |
| | | for (Short id : list.keySet()) |
| | | for (int id : list.keySet()) |
| | | { |
| | | ByteString value = ByteString.valueOf(list.get(id).toString()); |
| | | values.add(value); |
| | |
| | | |
| | | synchronized (list) |
| | | { |
| | | for (Short key : list.keySet()) |
| | | for (int key : list.keySet()) |
| | | { |
| | | ChangeNumber change = list.get(key); |
| | | buffer.append(change.toString()); |
| | |
| | | /** |
| | | * Get the largest ChangeNumber seen for a given LDAP server ID. |
| | | * |
| | | * @param serverId : the server ID |
| | | * @param serverId2 : the server ID |
| | | * @return the largest ChangeNumber seen |
| | | */ |
| | | public ChangeNumber getMaxChangeNumber(short serverId) |
| | | public ChangeNumber getMaxChangeNumber(int serverId2) |
| | | { |
| | | return list.get(serverId); |
| | | return list.get(serverId2); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | int length = 0; |
| | | List<String> idList = new ArrayList<String>(list.size()); |
| | | for (short id : list.keySet()) |
| | | for (int id : list.keySet()) |
| | | { |
| | | String temp = String.valueOf(id); |
| | | idList.add(temp); |
| | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | public Iterator<Short> iterator() |
| | | public Iterator<Integer> iterator() |
| | | { |
| | | return list.keySet().iterator(); |
| | | } |
| | |
| | | ServerState newState = new ServerState(); |
| | | synchronized (list) |
| | | { |
| | | for (Short key : list.keySet()) |
| | | for (Integer key : list.keySet()) |
| | | { |
| | | ChangeNumber change = list.get(key); |
| | | Short id = change.getServerId(); |
| | | Integer id = change.getServerId(); |
| | | newState.list.put(id,change); |
| | | } |
| | | } |
| | |
| | | throw new IllegalArgumentException("Null server state(s)"); |
| | | |
| | | int diff = 0; |
| | | for (Short serverId : ss1.list.keySet()) |
| | | for (Integer serverId : ss1.list.keySet()) |
| | | { |
| | | ChangeNumber cn1 = ss1.list.get(serverId); |
| | | if (cn1 != null) |
| | |
| | | } else { |
| | | // ss2 does not have a change for this server id but ss1, so the |
| | | // server holding ss1 has every changes represented in cn1 in advance |
| | | // compared to server hodling ss2, add this amount |
| | | // compared to server holding ss2, add this amount |
| | | diff += cn1.getSeqnum(); |
| | | } |
| | | } |