On 09.03.2009 09:24, Mikel Ibiricu wrote:
So, It works OK but when starting up one of the nodes with over 500 sessions
alive in the other, it doesn't replicate anything. We assume that it would
not be able to replicate everything... but why it does either replicate
everything or nothing? If it's not able replicate all the sessions, we would
assume it, but we would like to replicate at least something... Maybe some
trouble with the config we are trying? We tried to limit the keepAliveCount
of the senders, without improvement with this.

Reading the DeltaManager code, I have seen the sendAlllSessions parameter.
According to in-line javadoc and the implementation,

/**
      * handle receive that other node want all sessions ( restart )
      * a) send all sessions with one message
      * b) send session at blocks
      * After sending send state is complete transfered
      * @param msg
      * @param sender
      * @throws IOException
      */
     protected void handleGET_ALL_SESSIONS(SessionMessage msg, Member sender)
throws IOException {

         [...]

         if (isSendAllSessions()) {
             sendSessions(sender, currentSessions, findSessionTimestamp);
         } else {
             // send session at blocks
             int len = currentSessions.length<  getSendAllSessionsSize() ?
currentSessions.length : getSendAllSessionsSize();
             Session[] sendSessions = new Session[len];
             for (int i = 0; i<  currentSessions.length; i +=
getSendAllSessionsSize()) {
                 len = i + getSendAllSessionsSize()>  currentSessions.length
? currentSessions.length - i : getSendAllSessionsSize();
                 System.arraycopy(currentSessions, i, sendSessions, 0, len);
                 sendSessions(sender, sendSessions,findSessionTimestamp);
                 if (getSendAllSessionsWaitTime()>  0) {
                     try {
                         Thread.sleep(getSendAllSessionsWaitTime());
                     } catch (Exception sleep) {
                     }
                 }//end if
             }//for
         }//end if

         SessionMessage newmsg = new
SessionMessageImpl(name,SessionMessage.EVT_ALL_SESSION_TRANSFERCOMPLETE,
null,"SESSION-STATE-TRANSFERED", "SESSION-STATE-TRANSFERED"+ getName());
         newmsg.setTimestamp(findSessionTimestamp);
         if (log.isDebugEnabled())
log.debug(sm.getString("deltaManager.createMessage.allSessionTransfered",getName()));
         counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE++;
         cluster.send(newmsg, sender);
     }

it may cover our expectatives, so I tried to include sendAllSessions="false"
in the cluster manager configuration

<Manager className="org.apache.catalina.ha.session.DeltaManager"
                    name="clusterPruebas6"
                    stateTransferTimeout="180"
                    expireSessionsOnShutdown="false"
                    notifyListenersOnReplication="false"
                    sendAllSessions="false"/>

But it seems like this parameter is not configurable from the server.xml
file. So, what can I do to force that if it's not posible to replicate all
the sessions, at least replicate something in the startup?

If you want to test with sendAllSessions set to false, then add

manager.sendAllSessions="false"

to the Manager element of the cluster configuration.

You might then also want to configure:

manager.sendAllSessionsSize: the number of session which will be serialized and send in one chunk (default if sendAllSessions="false": 1000)

manager.sendAllSessionsWaitTime: the time in milliseconds between sending out consecutive session chunks (default if sendAllSessions="false": 2000)

Regards,

Rainer

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to