From: markt Date: Thu, 11 Nov 2010 22:10:25 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50230 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=71b5a911dbe70a05aae20caf6f82c81c91bade42;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50230 Add new DistributedManager interface that is implemented by the Backup Manager to remove circular dependency between tomcat-catalina-ha and tomcat-catalina modules. Also allows third-party distributed Manager implementations to report full session information through the HTML Manager. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1034174 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/DistributedManager.java b/java/org/apache/catalina/DistributedManager.java new file mode 100644 index 000000000..2d042c697 --- /dev/null +++ b/java/org/apache/catalina/DistributedManager.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.catalina; + +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. + */ +public interface DistributedManager { + + /** + * Returns the total session count for primary, backup and proxy. + * + * @return The total session count across the cluster. + */ + public int getActiveSessionsFull(); + + /** + * Returns the list of all sessions IDS (primary, backup and proxy). + * + * @return The complete set of sessions IDs across the cluster. + */ + public Set getSessionIdsFull(); +} diff --git a/java/org/apache/catalina/ha/session/BackupManager.java b/java/org/apache/catalina/ha/session/BackupManager.java index aca0342bd..5d844cbcd 100644 --- a/java/org/apache/catalina/ha/session/BackupManager.java +++ b/java/org/apache/catalina/ha/session/BackupManager.java @@ -20,6 +20,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import org.apache.catalina.DistributedManager; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; import org.apache.catalina.Session; @@ -36,7 +37,8 @@ import org.apache.juli.logging.LogFactory; *@author Filip Hanik *@version 1.0 */ -public class BackupManager extends ClusterManagerBase implements MapOwner { +public class BackupManager extends ClusterManagerBase + implements MapOwner, DistributedManager { private static final Log log = LogFactory.getLog(BackupManager.class); @@ -254,22 +256,13 @@ public class BackupManager extends ClusterManagerBase implements MapOwner { return result; } + @Override public int getActiveSessionsFull() { LazyReplicatedMap map = (LazyReplicatedMap)sessions; return map.sizeFull(); } - public String listSessionIdsFull() { - StringBuilder sb=new StringBuilder(); - LazyReplicatedMap map = (LazyReplicatedMap)sessions; - @SuppressWarnings("unchecked") // sessions is of type Map - Iterator keys = map.keySetFull().iterator(); - while (keys.hasNext()) { - sb.append(keys.next()).append(" "); - } - return sb.toString(); - } - + @Override public Set getSessionIdsFull() { Set sessionIds = new HashSet(); LazyReplicatedMap map = (LazyReplicatedMap)sessions; diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java index b05ba4ca2..dda96b2ae 100644 --- a/java/org/apache/catalina/manager/HTMLManagerServlet.java +++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java @@ -45,9 +45,9 @@ import javax.servlet.http.Part; import org.apache.catalina.Container; import org.apache.catalina.Context; +import org.apache.catalina.DistributedManager; import org.apache.catalina.Manager; import org.apache.catalina.Session; -import org.apache.catalina.ha.session.BackupManager; import org.apache.catalina.manager.util.BaseSessionComparator; import org.apache.catalina.manager.util.ReverseComparator; import org.apache.catalina.manager.util.SessionUtils; @@ -517,9 +517,9 @@ public final class HTMLManagerServlet extends ManagerServlet { (request.getContextPath() + "/html/sessions?path=" + URL_ENCODER.encode(displayPath)); Manager manager = ctxt.getManager(); - if (manager instanceof BackupManager && showProxySessions) { + if (manager instanceof DistributedManager && showProxySessions) { args[5] = new Integer( - ((BackupManager)manager).getActiveSessionsFull()); + ((DistributedManager)manager).getActiveSessionsFull()); } else if (ctxt.getManager() != null){ args[5] = new Integer(manager.getActiveSessions()); } else { @@ -871,10 +871,10 @@ public final class HTMLManagerServlet extends ManagerServlet { Manager manager = ctxt.getManager(); List sessions = new ArrayList(); sessions.addAll(Arrays.asList(manager.findSessions())); - if (manager instanceof BackupManager && showProxySessions) { + if (manager instanceof DistributedManager && showProxySessions) { // Add dummy proxy sessions Set sessionIds = - ((BackupManager) manager).getSessionIdsFull(); + ((DistributedManager) manager).getSessionIdsFull(); // Remove active (primary and backup) session IDs from full list for (Session session : sessions) { sessionIds.remove(session.getId()); diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index ee472d99b..bc31f6b87 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -221,6 +221,13 @@ Correct broken links for on-line JavaDocs. (markt) + + 50230: Add new DistributedManager interface that is + implemented by the Backup Manager to remove circular dependency between + tomcat-catalina-ha and tomcat-catalina modules. Also allows third-party + distributed Manager implementations to report full session information + through the HTML Manager. (markt) +