Return-Path: X-Original-To: apmail-tomcat-dev-archive@www.apache.org Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9196B9A00 for ; Mon, 10 Sep 2012 13:57:30 +0000 (UTC) Received: (qmail 80925 invoked by uid 500); 10 Sep 2012 13:57:29 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 80809 invoked by uid 500); 10 Sep 2012 13:57:29 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 80800 invoked by uid 99); 10 Sep 2012 13:57:29 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 10 Sep 2012 13:57:29 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 10 Sep 2012 13:57:26 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3B6B8238897F for ; Mon, 10 Sep 2012 13:56:42 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1382850 - in /tomcat/sandbox/trunk-resources: ./ java/org/apache/catalina/ java/org/apache/catalina/session/ java/org/apache/catalina/startup/ webapps/manager/WEB-INF/ Date: Mon, 10 Sep 2012 13:56:41 -0000 To: dev@tomcat.apache.org From: markt@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120910135642.3B6B8238897F@eris.apache.org> Author: markt Date: Mon Sep 10 13:56:41 2012 New Revision: 1382850 URL: http://svn.apache.org/viewvc?rev=1382850&view=rev Log: Merge changes from trunk Modified: tomcat/sandbox/trunk-resources/ (props changed) tomcat/sandbox/trunk-resources/java/org/apache/catalina/DistributedManager.java tomcat/sandbox/trunk-resources/java/org/apache/catalina/StoreManager.java tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/LocalStrings.properties tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/PersistentManagerBase.java tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/HostConfig.java tomcat/sandbox/trunk-resources/webapps/manager/WEB-INF/web.xml Propchange: tomcat/sandbox/trunk-resources/ ------------------------------------------------------------------------------ svn:mergeinfo = /tomcat/trunk:1382517-1382847 Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/DistributedManager.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/DistributedManager.java?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/DistributedManager.java (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/DistributedManager.java Mon Sep 10 13:56:41 2012 @@ -21,11 +21,17 @@ import java.util.Set; /** * Interface implemented by session managers that do not keep a complete copy - * of all sessions on the local node but do know where every session is. The - * BackupManager is an example of such a Manager. Sessions can be primary - * (master copy on this node), backup (backup copy on this node) or proxy (only - * the session ID on this node). The identity of the primary and backup nodes - * are known for all sessions, including proxy sessions. + * of all sessions in memory but do know where every session is. The + * BackupManager is an example of such a Manager as are implementations of the + * StoreManager interface. + *

+ * With the BackupManager, sessions can be primary (master copy on this node), + * backup (backup copy on this node) or proxy (only the session ID on this + * node). The identity of the primary and backup nodes are known for all + * sessions, including proxy sessions. + *

+ * With StoreManager implementations, sessions can be primary (session is in + * memory) or proxy (session is in the Store). */ public interface DistributedManager { Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/StoreManager.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/StoreManager.java?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/StoreManager.java (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/StoreManager.java Mon Sep 10 13:56:41 2012 @@ -20,7 +20,7 @@ package org.apache.catalina; * PersistentManager would have been a better name but that would have clashed * with the implementation name. */ -public interface StoreManager { +public interface StoreManager extends DistributedManager { /** * Return the Store object which manages persistent Session Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/LocalStrings.properties?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/LocalStrings.properties (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/LocalStrings.properties Mon Sep 10 13:56:41 2012 @@ -69,4 +69,6 @@ persistentManager.tooManyActive=Too many persistentManager.swapTooManyActive=Swapping out session {0}, idle for {1} seconds too many sessions active persistentManager.swapIn=Swapping session {0} in from Store persistentManager.swapInException=Exception in the Store during swapIn: {0} -persistentManager.swapInInvalid=Swapped session {0} is invalid \ No newline at end of file +persistentManager.swapInInvalid=Swapped session {0} is invalid +persistentManager.storeKeysException=Unable to determine the list of session IDs for sessions in the session store, assuming that the store is empty +persistentManager.storeSizeException=Unable to determine the number of sessions in the session store, assuming that the store is empty \ No newline at end of file Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/PersistentManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/PersistentManagerBase.java?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/PersistentManagerBase.java (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/session/PersistentManagerBase.java Mon Sep 10 13:56:41 2012 @@ -23,7 +23,9 @@ import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleException; @@ -629,8 +631,40 @@ public abstract class PersistentManagerB } - // ------------------------------------------------------ Protected Methods + @Override + public int getActiveSessionsFull() { + // In memory session count + int result = getActiveSessions(); + try { + // Store session count + result += getStore().getSize(); + } catch (IOException ioe) { + log.warn(sm.getString("persistentManager.storeSizeException")); + } + return result; + } + + @Override + public Set getSessionIdsFull() { + Set sessionIds = new HashSet<>(); + // In memory session ID list + sessionIds.addAll(sessions.keySet()); + // Store session ID list + String[] storeKeys; + try { + storeKeys = getStore().keys(); + for (String storeKey : storeKeys) { + sessionIds.add(storeKey); + } + } catch (IOException e) { + log.warn(sm.getString("persistentManager.storeKeysException")); + } + return sessionIds; + } + + + // ------------------------------------------------------ Protected Methods /** * Look for a session in the Store and, if found, restore Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/HostConfig.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/HostConfig.java?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/HostConfig.java (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/startup/HostConfig.java Mon Sep 10 13:56:41 2012 @@ -47,6 +47,7 @@ import javax.management.ObjectName; import org.apache.catalina.Container; import org.apache.catalina.Context; +import org.apache.catalina.DistributedManager; import org.apache.catalina.Host; import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleEvent; @@ -1429,21 +1430,31 @@ public class HostConfig currentContext.getState().isAvailable() && !isServiced(previous.getName())) { Manager manager = previousContext.getManager(); - if (manager != null && manager.getActiveSessions() == 0) { - if (log.isInfoEnabled()) { - log.info(sm.getString("hostConfig.undeployVersion", - previous.getName())); + if (manager != null) { + int sessionCount; + if (manager instanceof DistributedManager) { + sessionCount = ((DistributedManager) + manager).getActiveSessionsFull(); + } else { + sessionCount = manager.getActiveSessions(); + } + if (sessionCount == 0) { + if (log.isInfoEnabled()) { + log.info(sm.getString( + "hostConfig.undeployVersion", + previous.getName())); + } + DeployedApplication app = + deployed.get(previous.getName()); + String[] resources = + app.redeployResources.keySet().toArray( + new String[0]); + // Version is unused - undeploy it completely + // The -1 is a 'trick' to ensure all redeploy + // resources are removed + deleteRedeployResources(app, resources, -1, + true); } - DeployedApplication app = - deployed.get(previous.getName()); - String[] resources = - app.redeployResources.keySet().toArray( - new String[0]); - // Version is unused - undeploy it completely - // The -1 is a 'trick' to ensure all redeploy resources - // are removed - deleteRedeployResources(app, resources, -1, - true); } } } Modified: tomcat/sandbox/trunk-resources/webapps/manager/WEB-INF/web.xml URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/webapps/manager/WEB-INF/web.xml?rev=1382850&r1=1382849&r2=1382850&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/webapps/manager/WEB-INF/web.xml (original) +++ tomcat/sandbox/trunk-resources/webapps/manager/WEB-INF/web.xml Mon Sep 10 13:56:41 2012 @@ -44,8 +44,8 @@ debug 2 -