Search in sources :

Example 86 with Member

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

the class StaticMembershipInterceptor method start.

/**
 * {@inheritDoc}
 * <p>
 * Sends notifications upwards.
 */
@Override
public void start(int svc) throws ChannelException {
    if ((Channel.SND_RX_SEQ & svc) == Channel.SND_RX_SEQ) {
        super.start(Channel.SND_RX_SEQ);
    }
    if ((Channel.SND_TX_SEQ & svc) == Channel.SND_TX_SEQ) {
        super.start(Channel.SND_TX_SEQ);
    }
    final ChannelInterceptorBase base = this;
    ScheduledExecutorService executor = getChannel().getUtilityExecutor();
    for (final Member member : members) {
        Runnable r = () -> {
            base.memberAdded(member);
            if (getfirstInterceptor().getMember(member) != null) {
                sendLocalMember(new Member[] { member });
            }
        };
        executor.execute(r);
    }
    super.start(svc & (~Channel.SND_RX_SEQ) & (~Channel.SND_TX_SEQ));
    // check required interceptors
    TcpFailureDetector failureDetector = null;
    TcpPingInterceptor pingInterceptor = null;
    ChannelInterceptor prev = getPrevious();
    while (prev != null) {
        if (prev instanceof TcpFailureDetector) {
            failureDetector = (TcpFailureDetector) prev;
        }
        if (prev instanceof TcpPingInterceptor) {
            pingInterceptor = (TcpPingInterceptor) prev;
        }
        prev = prev.getPrevious();
    }
    if (failureDetector == null) {
        log.warn(sm.getString("staticMembershipInterceptor.no.failureDetector"));
    }
    if (pingInterceptor == null) {
        log.warn(sm.getString("staticMembershipInterceptor.no.pingInterceptor"));
    }
}
Also used : ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ChannelInterceptorBase(org.apache.catalina.tribes.group.ChannelInterceptorBase) ChannelInterceptor(org.apache.catalina.tribes.ChannelInterceptor) Member(org.apache.catalina.tribes.Member)

Example 87 with Member

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

the class TcpFailureDetector method performBasicCheck.

protected void performBasicCheck() {
    // update all alive times
    Member[] members = super.getMembers();
    for (int i = 0; members != null && i < members.length; i++) {
        if (addSuspects.containsKey(members[i]) && membership.getMember(members[i]) == null) {
            // avoid temporary adding member.
            continue;
        }
        if (membership.memberAlive(members[i])) {
            // we don't have this one in our membership, check to see if the member is alive
            if (memberAlive(members[i])) {
                log.warn(sm.getString("tcpFailureDetector.performBasicCheck.memberAdded", members[i]));
                super.memberAdded(members[i]);
            } else {
                membership.removeMember(members[i]);
            }
        // end if
        }
    // end if
    }
    // for
    // check suspect members if they are still alive,
    // if not, simply issue the memberDisappeared message
    Member[] keys = removeSuspects.keySet().toArray(new Member[0]);
    for (Member m : keys) {
        if (membership.getMember(m) != null && (!memberAlive(m))) {
            membership.removeMember(m);
            if (m instanceof StaticMember) {
                addSuspects.put(m, Long.valueOf(System.currentTimeMillis()));
            }
            super.memberDisappeared(m);
            removeSuspects.remove(m);
            if (log.isInfoEnabled()) {
                log.info(sm.getString("tcpFailureDetector.suspectMember.dead", m));
            }
        } else {
            if (removeSuspectsTimeout > 0) {
                long timeNow = System.currentTimeMillis();
                int timeIdle = (int) ((timeNow - removeSuspects.get(m).longValue()) / 1000L);
                if (timeIdle > removeSuspectsTimeout) {
                    // remove suspect member
                    removeSuspects.remove(m);
                }
            }
        }
    }
    // check add suspects members if they are alive now,
    // if they are, simply issue the memberAdded message
    keys = addSuspects.keySet().toArray(new Member[0]);
    for (Member m : keys) {
        if (membership.getMember(m) == null && (memberAlive(m))) {
            membership.memberAlive(m);
            super.memberAdded(m);
            addSuspects.remove(m);
            if (log.isInfoEnabled()) {
                log.info(sm.getString("tcpFailureDetector.suspectMember.alive", m));
            }
        }
    // end if
    }
}
Also used : StaticMember(org.apache.catalina.tribes.membership.StaticMember) FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) Member(org.apache.catalina.tribes.Member) StaticMember(org.apache.catalina.tribes.membership.StaticMember)

Example 88 with Member

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

the class Membership method expire.

/**
 * Runs a refresh cycle and returns a list of members that has expired.
 * This also removes the members from the membership, in such a way that
 * getMembers() = getMembers() - expire()
 * @param maxtime - the max time a member can remain unannounced before it is considered dead.
 * @return the list of expired members
 */
public Member[] expire(long maxtime) {
    synchronized (membersLock) {
        if (!hasMembers()) {
            return EMPTY_MEMBERS;
        }
        ArrayList<Member> list = null;
        for (MbrEntry entry : map.values()) {
            if (entry.hasExpired(maxtime)) {
                if (list == null) {
                    // Only need a list when members are expired (smaller gc)
                    list = new java.util.ArrayList<>();
                }
                list.add(entry.getMember());
            }
        }
        if (list != null) {
            Member[] result = new Member[list.size()];
            list.toArray(result);
            for (Member member : result) {
                removeMember(member);
            }
            return result;
        } else {
            return EMPTY_MEMBERS;
        }
    }
}
Also used : Member(org.apache.catalina.tribes.Member)

Example 89 with Member

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

the class StaticMembershipProvider method memberAdded.

protected void memberAdded(Member member) {
    Member mbr = setupMember(member);
    if (membership.memberAlive(mbr)) {
        Runnable r = () -> {
            String name = Thread.currentThread().getName();
            try {
                Thread.currentThread().setName("StaticMembership-memberAdded");
                membershipListener.memberAdded(mbr);
            } finally {
                Thread.currentThread().setName(name);
            }
        };
        executor.execute(r);
    }
}
Also used : FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) Member(org.apache.catalina.tribes.Member)

Example 90 with Member

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

the class StaticMembershipProvider method messageReceived.

@Override
public void messageReceived(Serializable msg, Member sender) {
    MemberMessage memMsg = (MemberMessage) msg;
    Member member = memMsg.getMember();
    if (memMsg.getMsgtype() == MemberMessage.MSG_START) {
        memberAdded(member);
    } else if (memMsg.getMsgtype() == MemberMessage.MSG_STOP) {
        memberDisappeared(member);
    } else if (memMsg.getMsgtype() == MemberMessage.MSG_PING) {
        memberAlive(member);
    }
}
Also used : FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) 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