Search in sources :

Example 51 with Member

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

the class OrderInterceptor method processIncoming.

/**
 * @param order MessageOrder
 * @return boolean - true if a message expired and was processed
 */
protected boolean processIncoming(MessageOrder order) {
    boolean result = false;
    Member member = order.getMessage().getAddress();
    Counter cnt = getInCounter(member);
    MessageOrder tmp = incoming.get(member);
    if (tmp != null) {
        order = MessageOrder.add(tmp, order);
    }
    while ((order != null) && (order.getMsgNr() <= cnt.getCounter())) {
        // we are right on target. process orders
        if (order.getMsgNr() == cnt.getCounter())
            cnt.inc();
        else if (order.getMsgNr() > cnt.getCounter())
            cnt.setCounter(order.getMsgNr());
        super.messageReceived(order.getMessage());
        order.setMessage(null);
        order = order.next;
    }
    MessageOrder head = order;
    MessageOrder prev = null;
    tmp = order;
    // flag to empty out the queue when it larger than maxQueue
    boolean empty = order != null ? order.getCount() >= maxQueue : false;
    while (tmp != null) {
        // process expired messages or empty out the queue
        if (tmp.isExpired(expire) || empty) {
            // reset the head
            if (tmp == head)
                head = tmp.next;
            cnt.setCounter(tmp.getMsgNr() + 1);
            if (getForwardExpired())
                super.messageReceived(tmp.getMessage());
            tmp.setMessage(null);
            tmp = tmp.next;
            if (prev != null)
                prev.next = tmp;
            result = true;
        } else {
            prev = tmp;
            tmp = tmp.next;
        }
    }
    if (head == null)
        incoming.remove(member);
    else
        incoming.put(member, head);
    return result;
}
Also used : Member(org.apache.catalina.tribes.Member)

Example 52 with Member

use of org.apache.catalina.tribes.Member in project tomcat70 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((MemberImpl) members[i])) {
            // we don't have this one in our membership, check to see if he/she is alive
            if (memberAlive(members[i])) {
                log.warn("Member added, even though we weren't notified:" + members[i]);
                super.memberAdded(members[i]);
            } else {
                membership.removeMember((MemberImpl) members[i]);
            }
        // end if
        }
    // end if
    }
    // for
    // check suspect members if they are still alive,
    // if not, simply issue the memberDisappeared message
    MemberImpl[] keys = removeSuspects.keySet().toArray(new MemberImpl[removeSuspects.size()]);
    for (int i = 0; i < keys.length; i++) {
        MemberImpl m = keys[i];
        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("Suspect member, confirmed 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 MemberImpl[addSuspects.size()]);
    for (int i = 0; i < keys.length; i++) {
        MemberImpl m = keys[i];
        if (membership.getMember(m) == null && (memberAlive(m))) {
            membership.memberAlive(m);
            super.memberAdded(m);
            addSuspects.remove(m);
            if (log.isInfoEnabled())
                log.info("Suspect member, confirmed alive.[" + m + "]");
        }
    // end if
    }
}
Also used : StaticMember(org.apache.catalina.tribes.membership.StaticMember) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) Member(org.apache.catalina.tribes.Member) StaticMember(org.apache.catalina.tribes.membership.StaticMember)

Example 53 with Member

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

the class RpcChannel method messageReceived.

@Override
public void messageReceived(Serializable msg, Member sender) {
    RpcMessage rmsg = (RpcMessage) msg;
    RpcCollectorKey key = new RpcCollectorKey(rmsg.uuid);
    if (rmsg.reply) {
        RpcCollector collector = responseMap.get(key);
        if (collector == null) {
            if (!(rmsg instanceof RpcMessage.NoRpcChannelReply))
                callback.leftOver(rmsg.message, sender);
        } else {
            synchronized (collector) {
                // make sure it hasn't been removed
                if (responseMap.containsKey(key)) {
                    if ((rmsg instanceof RpcMessage.NoRpcChannelReply))
                        collector.destcnt--;
                    else
                        collector.addResponse(rmsg.message, sender);
                    if (collector.isComplete())
                        collector.notifyAll();
                } else {
                    if (!(rmsg instanceof RpcMessage.NoRpcChannelReply))
                        callback.leftOver(rmsg.message, sender);
                }
            }
        // synchronized
        }
    // end if
    } else {
        boolean finished = false;
        final ExtendedRpcCallback excallback = (callback instanceof ExtendedRpcCallback) ? ((ExtendedRpcCallback) callback) : null;
        boolean asyncReply = ((replyMessageOptions & Channel.SEND_OPTIONS_ASYNCHRONOUS) == Channel.SEND_OPTIONS_ASYNCHRONOUS);
        Serializable reply = callback.replyRequest(rmsg.message, sender);
        ErrorHandler handler = null;
        final Serializable request = msg;
        final Serializable response = reply;
        final Member fsender = sender;
        if (excallback != null && asyncReply) {
            handler = new ErrorHandler() {

                @Override
                public void handleError(ChannelException x, UniqueId id) {
                    excallback.replyFailed(request, response, fsender, x);
                }

                @Override
                public void handleCompletion(UniqueId id) {
                    excallback.replySucceeded(request, response, fsender);
                }
            };
        }
        rmsg.reply = true;
        rmsg.message = reply;
        try {
            if (handler != null) {
                channel.send(new Member[] { sender }, rmsg, replyMessageOptions & ~Channel.SEND_OPTIONS_SYNCHRONIZED_ACK, handler);
            } else {
                channel.send(new Member[] { sender }, rmsg, replyMessageOptions & ~Channel.SEND_OPTIONS_SYNCHRONIZED_ACK);
            }
            finished = true;
        } catch (Exception x) {
            if (excallback != null && !asyncReply) {
                excallback.replyFailed(rmsg.message, reply, sender, x);
            } else {
                log.error("Unable to send back reply in RpcChannel.", x);
            }
        }
        if (finished && excallback != null && !asyncReply) {
            excallback.replySucceeded(rmsg.message, reply, sender);
        }
    }
// end if
}
Also used : ErrorHandler(org.apache.catalina.tribes.ErrorHandler) UniqueId(org.apache.catalina.tribes.UniqueId) Serializable(java.io.Serializable) ChannelException(org.apache.catalina.tribes.ChannelException) Member(org.apache.catalina.tribes.Member) ChannelException(org.apache.catalina.tribes.ChannelException)

Example 54 with Member

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

the class AbstractReplicatedMap method transferState.

public void transferState() {
    try {
        Member[] members = getMapMembers();
        Member backup = members.length > 0 ? (Member) members[0] : null;
        if (backup != null) {
            MapMessage msg = new MapMessage(mapContextName, getStateMessageType(), false, null, null, null, null, null);
            Response[] resp = rpcChannel.send(new Member[] { backup }, msg, RpcChannel.FIRST_REPLY, channelSendOptions, rpcTimeout);
            if (resp.length > 0) {
                synchronized (stateMutex) {
                    msg = (MapMessage) resp[0].getMessage();
                    msg.deserialize(getExternalLoaders());
                    ArrayList<?> list = (ArrayList<?>) msg.getValue();
                    for (int i = 0; i < list.size(); i++) {
                        messageReceived((Serializable) list.get(i), resp[0].getSource());
                    }
                // for
                }
                stateTransferred = true;
            } else {
                log.warn("Transfer state, 0 replies, probably a timeout.");
            }
        }
    } catch (ChannelException x) {
        log.error("Unable to transfer AbstractReplicatedMap state.", x);
    } catch (IOException x) {
        log.error("Unable to transfer AbstractReplicatedMap state.", x);
    } catch (ClassNotFoundException x) {
        log.error("Unable to transfer AbstractReplicatedMap state.", x);
    }
    this.state = State.STATETRANSFERRED;
}
Also used : Response(org.apache.catalina.tribes.group.Response) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FaultyMember(org.apache.catalina.tribes.ChannelException.FaultyMember) Member(org.apache.catalina.tribes.Member) ChannelException(org.apache.catalina.tribes.ChannelException)

Example 55 with Member

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

the class AbstractReplicatedMap method leftOver.

/**
 * If the reply has already been sent to the requesting thread,
 * the rpc callback can handle any data that comes in after the fact.
 * @param msg Serializable
 * @param sender Member
 */
@Override
public void leftOver(Serializable msg, Member sender) {
    // left over membership messages
    if (!(msg instanceof MapMessage))
        return;
    MapMessage mapmsg = (MapMessage) msg;
    try {
        mapmsg.deserialize(getExternalLoaders());
        if (mapmsg.getMsgType() == MapMessage.MSG_START) {
            mapMemberAdded(mapmsg.getPrimary());
        } else if (mapmsg.getMsgType() == MapMessage.MSG_INIT) {
            memberAlive(mapmsg.getPrimary());
        } else if (mapmsg.getMsgType() == MapMessage.MSG_PING) {
            Member member = mapmsg.getPrimary();
            if (log.isInfoEnabled())
                log.info("PING message has been received beyond the timeout period. " + "The map member[" + member + "] might have been removed from the map membership.");
            State state = (State) mapmsg.getValue();
            if (state.isAvailable()) {
                memberAlive(member);
            }
        } else {
            // other messages are ignored.
            if (log.isInfoEnabled())
                log.info("Message[" + mapmsg.getTypeDesc() + "] is ignored.");
        }
    } catch (IOException x) {
        log.error("Unable to deserialize MapMessage.", x);
    } catch (ClassNotFoundException x) {
        log.error("Unable to deserialize MapMessage.", x);
    }
}
Also used : IOException(java.io.IOException) 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