Search in sources :

Example 36 with Member

use of org.apache.catalina.tribes.Member in project tomcat by apache.

the class Arrays method diff.

public static Member[] diff(Membership complete, Membership local, Member ignore) {
    List<Member> result = new ArrayList<>();
    Member[] comp = complete.getMembers();
    for (Member member : comp) {
        if (ignore != null && ignore.equals(member)) {
            continue;
        }
        if (local.getMember(member) == null) {
            result.add(member);
        }
    }
    return result.toArray(new Member[0]);
}
Also used : ArrayList(java.util.ArrayList) Member(org.apache.catalina.tribes.Member)

Example 37 with Member

use of org.apache.catalina.tribes.Member in project tomcat by apache.

the class ReplicatedMap method memberDisappeared.

@Override
public void memberDisappeared(Member member) {
    boolean removed = false;
    Log log = getLog();
    synchronized (mapMembers) {
        removed = (mapMembers.remove(member) != null);
        if (!removed) {
            if (log.isDebugEnabled()) {
                log.debug("Member[" + member + "] disappeared, but was not present in the map.");
            }
            // the member was not part of our map.
            return;
        }
    }
    if (log.isInfoEnabled()) {
        log.info(sm.getString("replicatedMap.member.disappeared", member));
    }
    long start = System.currentTimeMillis();
    for (Entry<K, MapEntry<K, V>> e : innerMap.entrySet()) {
        MapEntry<K, V> entry = innerMap.get(e.getKey());
        if (entry == null) {
            continue;
        }
        if (entry.isPrimary()) {
            try {
                Member[] backup = getMapMembers();
                if (backup.length > 0) {
                    MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_NOTIFY_MAPMEMBER, false, (Serializable) entry.getKey(), null, null, channel.getLocalMember(false), backup);
                    getChannel().send(backup, msg, getChannelSendOptions());
                }
                entry.setBackupNodes(backup);
                entry.setPrimary(channel.getLocalMember(false));
            } catch (ChannelException x) {
                log.error(sm.getString("replicatedMap.unable.relocate", entry.getKey()), x);
            }
        } else if (member.equals(entry.getPrimary())) {
            entry.setPrimary(null);
        }
        if (entry.getPrimary() == null && entry.isCopy() && entry.getBackupNodes() != null && entry.getBackupNodes().length > 0 && entry.getBackupNodes()[0].equals(channel.getLocalMember(false))) {
            try {
                entry.setPrimary(channel.getLocalMember(false));
                entry.setBackup(false);
                entry.setProxy(false);
                entry.setCopy(false);
                Member[] backup = getMapMembers();
                if (backup.length > 0) {
                    MapMessage msg = new MapMessage(getMapContextName(), MapMessage.MSG_NOTIFY_MAPMEMBER, false, (Serializable) entry.getKey(), null, null, channel.getLocalMember(false), backup);
                    getChannel().send(backup, msg, getChannelSendOptions());
                }
                entry.setBackupNodes(backup);
                if (mapOwner != null) {
                    mapOwner.objectMadePrimary(entry.getKey(), entry.getValue());
                }
            } catch (ChannelException x) {
                log.error(sm.getString("replicatedMap.unable.relocate", entry.getKey()), x);
            }
        }
    }
    // while
    long complete = System.currentTimeMillis() - start;
    if (log.isInfoEnabled()) {
        log.info(sm.getString("replicatedMap.relocate.complete", Long.toString(complete)));
    }
}
Also used : Log(org.apache.juli.logging.Log) FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) Member(org.apache.catalina.tribes.Member) ChannelException(org.apache.catalina.tribes.ChannelException)

Example 38 with Member

use of org.apache.catalina.tribes.Member in project tomcat by apache.

the class NonBlockingCoordinator method createElectionMsg.

private CoordinationMessage createElectionMsg(Member local, Member[] others, Member leader) {
    Membership m = new Membership(local, AbsoluteOrder.comp, true);
    Arrays.fill(m, others);
    Member[] mbrs = m.getMembers();
    m.reset();
    CoordinationMessage msg = new CoordinationMessage(leader, local, mbrs, new UniqueId(UUIDGenerator.randomUUID(true)), COORD_REQUEST);
    return msg;
}
Also used : UniqueId(org.apache.catalina.tribes.UniqueId) Membership(org.apache.catalina.tribes.membership.Membership) Member(org.apache.catalina.tribes.Member)

Example 39 with Member

use of org.apache.catalina.tribes.Member in project tomcat by apache.

the class NonBlockingCoordinator method heartbeat.

@Override
public void heartbeat() {
    try {
        Member local = getLocalMember(false);
        if (view != null && (Arrays.diff(view, membership, local).length != 0 || Arrays.diff(membership, view, local).length != 0)) {
            if (isHighest()) {
                fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_START_ELECT, this, sm.getString("nonBlockingCoordinator.heartbeat.inconsistency")));
                startElection(true);
            }
        }
    } catch (Exception x) {
        log.error(sm.getString("nonBlockingCoordinator.heartbeat.failed"), x);
    } finally {
        super.heartbeat();
    }
}
Also used : Member(org.apache.catalina.tribes.Member) SocketTimeoutException(java.net.SocketTimeoutException) ChannelException(org.apache.catalina.tribes.ChannelException) ConnectException(java.net.ConnectException)

Example 40 with Member

use of org.apache.catalina.tribes.Member in project tomcat by apache.

the class NonBlockingCoordinator method mergeOnArrive.

protected Membership mergeOnArrive(CoordinationMessage msg) {
    fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_PRE_MERGE, this, "Pre merge"));
    Member local = getLocalMember(false);
    Membership merged = new Membership(local, AbsoluteOrder.comp, true);
    Arrays.fill(merged, msg.getMembers());
    Arrays.fill(merged, getMembers());
    Member[] diff = Arrays.diff(merged, membership, local);
    for (Member member : diff) {
        if (!alive(member)) {
            merged.removeMember(member);
        } else {
            memberAdded(member, false);
        }
    }
    fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_POST_MERGE, this, "Post merge"));
    return merged;
}
Also used : Membership(org.apache.catalina.tribes.membership.Membership) Member(org.apache.catalina.tribes.Member)

Aggregations

Member (org.apache.catalina.tribes.Member)93 ChannelException (org.apache.catalina.tribes.ChannelException)28 FaultyMember (org.apache.catalina.tribes.ChannelException.FaultyMember)17 Test (org.junit.Test)17 IOException (java.io.IOException)16 MemberImpl (org.apache.catalina.tribes.membership.MemberImpl)15 ReceiverBase (org.apache.catalina.tribes.transport.ReceiverBase)11 ArrayList (java.util.ArrayList)10 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)10 UniqueId (org.apache.catalina.tribes.UniqueId)9 Serializable (java.io.Serializable)6 BigDecimal (java.math.BigDecimal)6 DecimalFormat (java.text.DecimalFormat)6 Response (org.apache.catalina.tribes.group.Response)6 ChannelData (org.apache.catalina.tribes.io.ChannelData)6 XByteBuffer (org.apache.catalina.tribes.io.XByteBuffer)6 SelectionKey (java.nio.channels.SelectionKey)4 Selector (java.nio.channels.Selector)4 Membership (org.apache.catalina.tribes.membership.Membership)4 StaticMember (org.apache.catalina.tribes.membership.StaticMember)4