Search in sources :

Example 81 with Member

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

the class TestMemberImplSerialization method testSerializationOne.

@Test
public void testSerializationOne() throws Exception {
    Member m = m1;
    byte[] md1 = m.getData(false, true);
    byte[] mda1 = m.getData(false, false);
    Assert.assertTrue(Arrays.equals(md1, mda1));
    Assert.assertTrue(md1 == mda1);
    mda1 = m.getData(true, true);
    Member ma1 = MemberImpl.getMember(mda1);
    Assert.assertTrue(compareMembers(m, ma1));
    mda1 = p1.getData(false);
    Assert.assertFalse(Arrays.equals(md1, mda1));
    ma1 = MemberImpl.getMember(mda1);
    Assert.assertTrue(compareMembers(p1, ma1));
    md1 = m.getData(true, true);
    Thread.sleep(50);
    mda1 = m.getData(true, true);
    Member a1 = MemberImpl.getMember(md1);
    Member a2 = MemberImpl.getMember(mda1);
    Assert.assertTrue(a1.equals(a2));
    Assert.assertFalse(Arrays.equals(md1, mda1));
}
Also used : Member(org.apache.catalina.tribes.Member) Test(org.junit.Test)

Example 82 with Member

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

the class SimpleTcpCluster method messageReceived.

public void messageReceived(ClusterMessage message) {
    if (log.isDebugEnabled() && message != null) {
        log.debug("Assuming clocks are synched: Replication for " + message.getUniqueId() + " took=" + (System.currentTimeMillis() - (message).getTimestamp()) + " ms.");
    }
    // invoke all the listeners
    boolean accepted = false;
    if (message != null) {
        for (ClusterListener listener : clusterListeners) {
            if (listener.accept(message)) {
                accepted = true;
                listener.messageReceived(message);
            }
        }
        if (!accepted && notifyLifecycleListenerOnFailure) {
            Member dest = message.getAddress();
            // Notify our interested LifecycleListeners
            fireLifecycleEvent(RECEIVE_MESSAGE_FAILURE_EVENT, new SendMessageData(message, dest, null));
            if (log.isDebugEnabled()) {
                log.debug("Message " + message.toString() + " from type " + message.getClass().getName() + " transferred but no listener registered");
            }
        }
    }
}
Also used : ClusterListener(org.apache.catalina.ha.ClusterListener) Member(org.apache.catalina.tribes.Member)

Example 83 with Member

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

the class DeltaManager method getAllClusterSessions.

/**
 * get from first session master the backup from all clustered sessions
 * @see #findSessionMasterMember()
 */
public synchronized void getAllClusterSessions() {
    if (cluster != null && cluster.getMembers().length > 0) {
        long beforeSendTime = System.currentTimeMillis();
        Member mbr = findSessionMasterMember();
        if (mbr == null) {
            // No domain member found
            return;
        }
        SessionMessage msg = new SessionMessageImpl(this.getName(), SessionMessage.EVT_GET_ALL_SESSIONS, null, "GET-ALL", "GET-ALL-" + getName());
        msg.setTimestamp(beforeSendTime);
        // set reference time
        stateTransferCreateSendTime = beforeSendTime;
        // request session state
        counterSend_EVT_GET_ALL_SESSIONS++;
        stateTransferred = false;
        // FIXME This send call block the deploy thread, when sender waitForAck is enabled
        try {
            synchronized (receivedMessageQueue) {
                receiverQueue = true;
            }
            cluster.send(msg, mbr, Channel.SEND_OPTIONS_ASYNCHRONOUS);
            if (log.isInfoEnabled()) {
                log.info(sm.getString("deltaManager.waitForSessionState", getName(), mbr, Integer.valueOf(getStateTransferTimeout())));
            }
            // FIXME At sender ack mode this method check only the state
            // transfer and resend is a problem!
            waitForSendAllSessions(beforeSendTime);
        } finally {
            synchronized (receivedMessageQueue) {
                for (SessionMessage smsg : receivedMessageQueue) {
                    if (!stateTimestampDrop) {
                        messageReceived(smsg, smsg.getAddress());
                    } else {
                        if (smsg.getEventType() != SessionMessage.EVT_GET_ALL_SESSIONS && smsg.getTimestamp() >= stateTransferCreateSendTime) {
                            // FIXME handle EVT_GET_ALL_SESSIONS later
                            messageReceived(smsg, smsg.getAddress());
                        } else {
                            if (log.isWarnEnabled()) {
                                log.warn(sm.getString("deltaManager.dropMessage", getName(), smsg.getEventTypeString(), new Date(stateTransferCreateSendTime), new Date(smsg.getTimestamp())));
                            }
                        }
                    }
                }
                receivedMessageQueue.clear();
                receiverQueue = false;
            }
        }
    } else {
        if (log.isInfoEnabled()) {
            log.info(sm.getString("deltaManager.noMembers", getName()));
        }
    }
}
Also used : Member(org.apache.catalina.tribes.Member) Date(java.util.Date)

Example 84 with Member

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

the class NonBlockingCoordinator method startElection.

// ============================================================================================================
// COORDINATION HANDLING
// ============================================================================================================
public void startElection(boolean force) throws ChannelException {
    synchronized (electionMutex) {
        Member local = getLocalMember(false);
        Member[] others = membership.getMembers();
        fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_START_ELECT, this, "Election initiated"));
        if (others.length == 0) {
            this.viewId = new UniqueId(UUIDGenerator.randomUUID(false));
            this.view = new Membership(local, AbsoluteOrder.comp, true);
            this.handleViewConf(createElectionMsg(local, others, local), view);
            // the only member, no need for an election
            return;
        }
        if (suggestedviewId != null) {
            if (view != null && Arrays.diff(view, suggestedView, local).length == 0 && Arrays.diff(suggestedView, view, local).length == 0) {
                suggestedviewId = null;
                suggestedView = null;
                fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED, this, "Election abandoned, running election matches view"));
            } else {
                fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED, this, "Election abandoned, election running"));
            }
            // election already running, I'm not allowed to have two of them
            return;
        }
        if (view != null && Arrays.diff(view, membership, local).length == 0 && Arrays.diff(membership, view, local).length == 0) {
            fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED, this, "Election abandoned, view matches membership"));
            // already have this view installed
            return;
        }
        int prio = AbsoluteOrder.comp.compare(local, others[0]);
        // am I the leader in my view?
        Member leader = (prio < 0) ? local : others[0];
        if (local.equals(leader) || force) {
            CoordinationMessage msg = createElectionMsg(local, others, leader);
            suggestedviewId = msg.getId();
            suggestedView = new Membership(local, AbsoluteOrder.comp, true);
            Arrays.fill(suggestedView, msg.getMembers());
            fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_PROCESS_ELECT, this, "Election, sending request"));
            sendElectionMsg(local, others[0], msg);
        } else {
            try {
                coordMsgReceived.set(false);
                fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_WAIT_FOR_MSG, this, "Election, waiting for request"));
                electionMutex.wait(waitForCoordMsgTimeout);
            } catch (InterruptedException x) {
                Thread.currentThread().interrupt();
            }
            String msg;
            if (suggestedviewId == null && !coordMsgReceived.get()) {
                if (Thread.interrupted()) {
                    msg = "Election abandoned, waiting interrupted.";
                } else {
                    msg = "Election abandoned, waiting timed out.";
                }
            } else {
                msg = "Election abandoned, received a message";
            }
            fireInterceptorEvent(new CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED, this, msg));
        }
    }
}
Also used : UniqueId(org.apache.catalina.tribes.UniqueId) Membership(org.apache.catalina.tribes.membership.Membership) Member(org.apache.catalina.tribes.Member)

Example 85 with Member

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

the class OrderInterceptor method sendMessage.

@Override
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException {
    if (!okToProcess(msg.getOptions())) {
        super.sendMessage(destination, msg, payload);
        return;
    }
    ChannelException cx = null;
    for (Member member : destination) {
        try {
            int nr = 0;
            outLock.writeLock().lock();
            try {
                nr = incCounter(member);
            } finally {
                outLock.writeLock().unlock();
            }
            // reduce byte copy
            msg.getMessage().append(nr);
            try {
                getNext().sendMessage(new Member[] { member }, msg, payload);
            } finally {
                msg.getMessage().trim(4);
            }
        } catch (ChannelException x) {
            if (cx == null) {
                cx = x;
            }
            cx.addFaultyMember(x.getFaultyMembers());
        }
    }
    // for
    if (cx != null) {
        throw cx;
    }
}
Also used : Member(org.apache.catalina.tribes.Member) ChannelException(org.apache.catalina.tribes.ChannelException)

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