This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new 1e40ec20dc Improve stats thread safety
1e40ec20dc is described below
commit 1e40ec20dc3074d6165dc8cd2a218c84d2f40857
Author: remm <[email protected]>
AuthorDate: Mon Jul 7 16:04:06 2025 +0200
Improve stats thread safety
Also add a flag to disable them.
Found a long time ago by Coverity.
---
.../apache/catalina/ha/session/DeltaManager.java | 208 +++++++++++++--------
webapps/docs/changelog.xml | 8 +
webapps/docs/config/cluster-manager.xml | 4 +
3 files changed, 144 insertions(+), 76 deletions(-)
diff --git a/java/org/apache/catalina/ha/session/DeltaManager.java
b/java/org/apache/catalina/ha/session/DeltaManager.java
index cf4ace54cf..59e00e0d51 100644
--- a/java/org/apache/catalina/ha/session/DeltaManager.java
+++ b/java/org/apache/catalina/ha/session/DeltaManager.java
@@ -23,6 +23,8 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
@@ -76,6 +78,7 @@ public class DeltaManager extends ClusterManagerBase {
private int stateTransferTimeout = 60;
private boolean sendAllSessions = true;
private int sendAllSessionsSize = 1000;
+ private boolean enableStatistics = true;
/**
* wait time between send session block (default 2 sec)
@@ -88,25 +91,25 @@ public class DeltaManager extends ClusterManagerBase {
// -------------------------------------------------------- stats
attributes
- private volatile long sessionReplaceCounter = 0;
- private volatile long counterReceive_EVT_GET_ALL_SESSIONS = 0;
- private volatile long counterReceive_EVT_ALL_SESSION_DATA = 0;
- private volatile long counterReceive_EVT_SESSION_CREATED = 0;
- private volatile long counterReceive_EVT_SESSION_EXPIRED = 0;
- private volatile long counterReceive_EVT_SESSION_ACCESSED = 0;
- private volatile long counterReceive_EVT_SESSION_DELTA = 0;
- private volatile int counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0;
- private volatile long counterReceive_EVT_CHANGE_SESSION_ID = 0;
- private volatile long counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER = 0;
- private volatile long counterSend_EVT_GET_ALL_SESSIONS = 0;
- private volatile long counterSend_EVT_ALL_SESSION_DATA = 0;
- private volatile long counterSend_EVT_SESSION_CREATED = 0;
- private volatile long counterSend_EVT_SESSION_DELTA = 0;
- private volatile long counterSend_EVT_SESSION_ACCESSED = 0;
- private volatile long counterSend_EVT_SESSION_EXPIRED = 0;
- private volatile int counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0;
- private volatile long counterSend_EVT_CHANGE_SESSION_ID = 0;
- private volatile int counterNoStateTransferred = 0;
+ private final AtomicLong sessionReplaceCounter = new AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_GET_ALL_SESSIONS = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_ALL_SESSION_DATA = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_SESSION_CREATED = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_SESSION_EXPIRED = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_SESSION_ACCESSED = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_SESSION_DELTA = new
AtomicLong(0);
+ private final AtomicInteger
counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE = new AtomicInteger(0);
+ private final AtomicLong counterReceive_EVT_CHANGE_SESSION_ID = new
AtomicLong(0);
+ private final AtomicLong counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER =
new AtomicLong(0);
+ private final AtomicLong counterSend_EVT_GET_ALL_SESSIONS = new
AtomicLong(0);
+ private final AtomicLong counterSend_EVT_ALL_SESSION_DATA = new
AtomicLong(0);
+ private final AtomicLong counterSend_EVT_SESSION_CREATED = new
AtomicLong(0);
+ private final AtomicLong counterSend_EVT_SESSION_DELTA = new AtomicLong(0);
+ private final AtomicLong counterSend_EVT_SESSION_ACCESSED = new
AtomicLong(0);
+ private final AtomicLong counterSend_EVT_SESSION_EXPIRED = new
AtomicLong(0);
+ private final AtomicInteger counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE =
new AtomicInteger(0);
+ private final AtomicLong counterSend_EVT_CHANGE_SESSION_ID = new
AtomicLong(0);
+ private final AtomicInteger counterNoStateTransferred = new
AtomicInteger(0);
// -------------------------------------------------------------
Constructor
@@ -130,98 +133,98 @@ public class DeltaManager extends ClusterManagerBase {
* @return Returns the counterSend_EVT_GET_ALL_SESSIONS.
*/
public long getCounterSend_EVT_GET_ALL_SESSIONS() {
- return counterSend_EVT_GET_ALL_SESSIONS;
+ return counterSend_EVT_GET_ALL_SESSIONS.get();
}
/**
* @return Returns the counterSend_EVT_SESSION_ACCESSED.
*/
public long getCounterSend_EVT_SESSION_ACCESSED() {
- return counterSend_EVT_SESSION_ACCESSED;
+ return counterSend_EVT_SESSION_ACCESSED.get();
}
/**
* @return Returns the counterSend_EVT_SESSION_CREATED.
*/
public long getCounterSend_EVT_SESSION_CREATED() {
- return counterSend_EVT_SESSION_CREATED;
+ return counterSend_EVT_SESSION_CREATED.get();
}
/**
* @return Returns the counterSend_EVT_SESSION_DELTA.
*/
public long getCounterSend_EVT_SESSION_DELTA() {
- return counterSend_EVT_SESSION_DELTA;
+ return counterSend_EVT_SESSION_DELTA.get();
}
/**
* @return Returns the counterSend_EVT_SESSION_EXPIRED.
*/
public long getCounterSend_EVT_SESSION_EXPIRED() {
- return counterSend_EVT_SESSION_EXPIRED;
+ return counterSend_EVT_SESSION_EXPIRED.get();
}
/**
* @return Returns the counterSend_EVT_ALL_SESSION_DATA.
*/
public long getCounterSend_EVT_ALL_SESSION_DATA() {
- return counterSend_EVT_ALL_SESSION_DATA;
+ return counterSend_EVT_ALL_SESSION_DATA.get();
}
/**
* @return Returns the counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE.
*/
public int getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE() {
- return counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE;
+ return counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE.get();
}
/**
* @return Returns the counterSend_EVT_CHANGE_SESSION_ID.
*/
public long getCounterSend_EVT_CHANGE_SESSION_ID() {
- return counterSend_EVT_CHANGE_SESSION_ID;
+ return counterSend_EVT_CHANGE_SESSION_ID.get();
}
/**
* @return Returns the counterReceive_EVT_ALL_SESSION_DATA.
*/
public long getCounterReceive_EVT_ALL_SESSION_DATA() {
- return counterReceive_EVT_ALL_SESSION_DATA;
+ return counterReceive_EVT_ALL_SESSION_DATA.get();
}
/**
* @return Returns the counterReceive_EVT_GET_ALL_SESSIONS.
*/
public long getCounterReceive_EVT_GET_ALL_SESSIONS() {
- return counterReceive_EVT_GET_ALL_SESSIONS;
+ return counterReceive_EVT_GET_ALL_SESSIONS.get();
}
/**
* @return Returns the counterReceive_EVT_SESSION_ACCESSED.
*/
public long getCounterReceive_EVT_SESSION_ACCESSED() {
- return counterReceive_EVT_SESSION_ACCESSED;
+ return counterReceive_EVT_SESSION_ACCESSED.get();
}
/**
* @return Returns the counterReceive_EVT_SESSION_CREATED.
*/
public long getCounterReceive_EVT_SESSION_CREATED() {
- return counterReceive_EVT_SESSION_CREATED;
+ return counterReceive_EVT_SESSION_CREATED.get();
}
/**
* @return Returns the counterReceive_EVT_SESSION_DELTA.
*/
public long getCounterReceive_EVT_SESSION_DELTA() {
- return counterReceive_EVT_SESSION_DELTA;
+ return counterReceive_EVT_SESSION_DELTA.get();
}
/**
* @return Returns the counterReceive_EVT_SESSION_EXPIRED.
*/
public long getCounterReceive_EVT_SESSION_EXPIRED() {
- return counterReceive_EVT_SESSION_EXPIRED;
+ return counterReceive_EVT_SESSION_EXPIRED.get();
}
@@ -229,35 +232,35 @@ public class DeltaManager extends ClusterManagerBase {
* @return Returns the counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE.
*/
public int getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE() {
- return counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE;
+ return counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE.get();
}
/**
* @return Returns the counterReceive_EVT_CHANGE_SESSION_ID.
*/
public long getCounterReceive_EVT_CHANGE_SESSION_ID() {
- return counterReceive_EVT_CHANGE_SESSION_ID;
+ return counterReceive_EVT_CHANGE_SESSION_ID.get();
}
/**
* @return Returns the counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER.
*/
public long getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER() {
- return counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER;
+ return counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER.get();
}
/**
* @return Returns the sessionReplaceCounter.
*/
public long getSessionReplaceCounter() {
- return sessionReplaceCounter;
+ return sessionReplaceCounter.get();
}
/**
* @return Returns the counterNoStateTransferred.
*/
public int getCounterNoStateTransferred() {
- return counterNoStateTransferred;
+ return counterNoStateTransferred.get();
}
public int getReceivedQueueSize() {
@@ -391,6 +394,19 @@ public class DeltaManager extends ClusterManagerBase {
this.notifyContainerListenersOnReplication =
notifyContainerListenersOnReplication;
}
+ /**
+ * @return the enableStatistics
+ */
+ public boolean getEnableStatistics() {
+ return this.enableStatistics;
+ }
+
+ /**
+ * @param enableStatistics the enableStatistics to set
+ */
+ public void setEnableStatistics(boolean enableStatistics) {
+ this.enableStatistics = enableStatistics;
+ }
// --------------------------------------------------------- Public Methods
@@ -433,7 +449,9 @@ public class DeltaManager extends ClusterManagerBase {
log.trace(sm.getString("deltaManager.sendMessage.newSession",
name, sessionId));
}
msg.setTimestamp(session.getCreationTime());
- counterSend_EVT_SESSION_CREATED++;
+ if (enableStatistics) {
+ counterSend_EVT_SESSION_CREATED.incrementAndGet();
+ }
send(msg);
}
}
@@ -495,7 +513,9 @@ public class DeltaManager extends ClusterManagerBase {
SessionMessage msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_CHANGE_SESSION_ID, data,
orgSessionID, orgSessionID + "-" +
System.currentTimeMillis());
msg.setTimestamp(System.currentTimeMillis());
- counterSend_EVT_CHANGE_SESSION_ID++;
+ if (enableStatistics) {
+ counterSend_EVT_CHANGE_SESSION_ID.incrementAndGet();
+ }
send(msg);
} catch (IOException e) {
log.error(sm.getString("deltaManager.unableSerializeSessionID", newSessionID),
e);
@@ -573,7 +593,9 @@ public class DeltaManager extends ClusterManagerBase {
session.resetDeltaRequest();
// FIXME How inform other session id cache like SingleSignOn
if (findSession(session.getIdInternal()) != null) {
- sessionReplaceCounter++;
+ if (enableStatistics) {
+ sessionReplaceCounter.incrementAndGet();
+ }
// FIXME better is to grap this sessions again !
if (log.isWarnEnabled()) {
log.warn(sm.getString("deltaManager.loading.existing.session",
session.getIdInternal()));
@@ -684,7 +706,9 @@ public class DeltaManager extends ClusterManagerBase {
// set reference time
stateTransferCreateSendTime = beforeSendTime;
// request session state
- counterSend_EVT_GET_ALL_SESSIONS++;
+ if (enableStatistics) {
+ counterSend_EVT_GET_ALL_SESSIONS.incrementAndGet();
+ }
stateTransferred = false;
// FIXME This send call block the deploy thread, when sender
waitForAck is enabled
try {
@@ -784,7 +808,9 @@ public class DeltaManager extends ClusterManagerBase {
}
}
if (isTimeout) {
- counterNoStateTransferred++;
+ if (enableStatistics) {
+ counterNoStateTransferred.incrementAndGet();
+ }
log.error(sm.getString("deltaManager.noSessionState", getName(),
new Date(beforeSendTime),
Long.valueOf(reqNow - beforeSendTime)));
} else if (isNoContextManagerReceived()) {
@@ -894,7 +920,9 @@ public class DeltaManager extends ClusterManagerBase {
return null;
}
if (session.isDirty()) {
- counterSend_EVT_SESSION_DELTA++;
+ if (enableStatistics) {
+ counterSend_EVT_SESSION_DELTA.incrementAndGet();
+ }
msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_DELTA, session.getDiff(), sessionId,
sessionId + "-" + System.currentTimeMillis());
}
@@ -904,7 +932,9 @@ public class DeltaManager extends ClusterManagerBase {
}
if (msg == null) {
if (!expires && !session.isPrimarySession()) {
- counterSend_EVT_SESSION_ACCESSED++;
+ if (enableStatistics) {
+ counterSend_EVT_SESSION_ACCESSED.incrementAndGet();
+ }
msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_ACCESSED, null, sessionId,
sessionId + "-" + System.currentTimeMillis());
if (log.isDebugEnabled()) {
@@ -923,7 +953,9 @@ public class DeltaManager extends ClusterManagerBase {
if (!expires && (msg == null)) {
long replDelta = System.currentTimeMillis() -
session.getLastTimeReplicated();
if (session.getMaxInactiveInterval() >= 0 && replDelta >
(session.getMaxInactiveInterval() * 1000L)) {
- counterSend_EVT_SESSION_ACCESSED++;
+ if (enableStatistics) {
+ counterSend_EVT_SESSION_ACCESSED.incrementAndGet();
+ }
msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_ACCESSED, null, sessionId,
sessionId + "-" + System.currentTimeMillis());
if (log.isDebugEnabled()) {
@@ -959,25 +991,25 @@ public class DeltaManager extends ClusterManagerBase {
}
}
rejectedSessions = 0;
- sessionReplaceCounter = 0;
- counterNoStateTransferred = 0;
+ sessionReplaceCounter.set(0);
+ counterNoStateTransferred.set(0);
setMaxActive(getActiveSessions());
- counterReceive_EVT_ALL_SESSION_DATA = 0;
- counterReceive_EVT_GET_ALL_SESSIONS = 0;
- counterReceive_EVT_SESSION_ACCESSED = 0;
- counterReceive_EVT_SESSION_CREATED = 0;
- counterReceive_EVT_SESSION_DELTA = 0;
- counterReceive_EVT_SESSION_EXPIRED = 0;
- counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0;
- counterReceive_EVT_CHANGE_SESSION_ID = 0;
- counterSend_EVT_ALL_SESSION_DATA = 0;
- counterSend_EVT_GET_ALL_SESSIONS = 0;
- counterSend_EVT_SESSION_ACCESSED = 0;
- counterSend_EVT_SESSION_CREATED = 0;
- counterSend_EVT_SESSION_DELTA = 0;
- counterSend_EVT_SESSION_EXPIRED = 0;
- counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0;
- counterSend_EVT_CHANGE_SESSION_ID = 0;
+ counterReceive_EVT_ALL_SESSION_DATA.set(0);
+ counterReceive_EVT_GET_ALL_SESSIONS.set(0);
+ counterReceive_EVT_SESSION_ACCESSED.set(0);
+ counterReceive_EVT_SESSION_CREATED.set(0);
+ counterReceive_EVT_SESSION_DELTA.set(0);
+ counterReceive_EVT_SESSION_EXPIRED.set(0);
+ counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE.set(0);
+ counterReceive_EVT_CHANGE_SESSION_ID.set(0);
+ counterSend_EVT_ALL_SESSION_DATA.set(0);
+ counterSend_EVT_GET_ALL_SESSIONS.set(0);
+ counterSend_EVT_SESSION_ACCESSED.set(0);
+ counterSend_EVT_SESSION_CREATED.set(0);
+ counterSend_EVT_SESSION_DELTA.set(0);
+ counterSend_EVT_SESSION_EXPIRED.set(0);
+ counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE.set(0);
+ counterSend_EVT_CHANGE_SESSION_ID.set(0);
}
@@ -990,7 +1022,9 @@ public class DeltaManager extends ClusterManagerBase {
*/
protected void sessionExpired(String id) {
if (cluster.getMembers().length > 0) {
- counterSend_EVT_SESSION_EXPIRED++;
+ if (enableStatistics) {
+ counterSend_EVT_SESSION_EXPIRED.incrementAndGet();
+ }
SessionMessage msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_EXPIRED, null, id,
id + "-EXPIRED-MSG");
msg.setTimestamp(System.currentTimeMillis());
@@ -1110,7 +1144,9 @@ public class DeltaManager extends ClusterManagerBase {
* @param sender Member which sent the message
*/
protected void handleALL_SESSION_TRANSFERCOMPLETE(SessionMessage msg,
Member sender) {
- counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE++;
+ if (enableStatistics) {
+ counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE.incrementAndGet();
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.transfercomplete",
getName(), sender.getHost(),
Integer.valueOf(sender.getPort())));
@@ -1129,7 +1165,9 @@ public class DeltaManager extends ClusterManagerBase {
* @throws ClassNotFoundException Serialization error
*/
protected void handleSESSION_DELTA(SessionMessage msg, Member sender)
throws IOException, ClassNotFoundException {
- counterReceive_EVT_SESSION_DELTA++;
+ if (enableStatistics) {
+ counterReceive_EVT_SESSION_DELTA.incrementAndGet();
+ }
byte[] delta = msg.getSession();
DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
if (session == null) {
@@ -1154,7 +1192,9 @@ public class DeltaManager extends ClusterManagerBase {
* @throws IOException Propagated IO error
*/
protected void handleSESSION_ACCESSED(SessionMessage msg, Member sender)
throws IOException {
- counterReceive_EVT_SESSION_ACCESSED++;
+ if (enableStatistics) {
+ counterReceive_EVT_SESSION_ACCESSED.incrementAndGet();
+ }
DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
if (session != null) {
if (log.isDebugEnabled()) {
@@ -1175,7 +1215,9 @@ public class DeltaManager extends ClusterManagerBase {
* @throws IOException Propagated IO error
*/
protected void handleSESSION_EXPIRED(SessionMessage msg, Member sender)
throws IOException {
- counterReceive_EVT_SESSION_EXPIRED++;
+ if (enableStatistics) {
+ counterReceive_EVT_SESSION_EXPIRED.incrementAndGet();
+ }
DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
if (session != null) {
if (log.isDebugEnabled()) {
@@ -1192,7 +1234,9 @@ public class DeltaManager extends ClusterManagerBase {
* @param sender Member which sent the message
*/
protected void handleSESSION_CREATED(SessionMessage msg, Member sender) {
- counterReceive_EVT_SESSION_CREATED++;
+ if (enableStatistics) {
+ counterReceive_EVT_SESSION_CREATED.incrementAndGet();
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.createNewSession",
getName(), msg.getSessionID()));
}
@@ -1220,7 +1264,9 @@ public class DeltaManager extends ClusterManagerBase {
*/
protected void handleALL_SESSION_DATA(SessionMessage msg, Member sender)
throws ClassNotFoundException, IOException {
- counterReceive_EVT_ALL_SESSION_DATA++;
+ if (enableStatistics) {
+ counterReceive_EVT_ALL_SESSION_DATA.incrementAndGet();
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.allSessionDataBegin",
getName()));
}
@@ -1242,7 +1288,9 @@ public class DeltaManager extends ClusterManagerBase {
* @throws IOException IO error sending messages
*/
protected void handleGET_ALL_SESSIONS(SessionMessage msg, Member sender)
throws IOException {
- counterReceive_EVT_GET_ALL_SESSIONS++;
+ if (enableStatistics) {
+ counterReceive_EVT_GET_ALL_SESSIONS.incrementAndGet();
+ }
// get a list of all the session from this manager
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.unloadingBegin",
getName()));
@@ -1279,7 +1327,9 @@ public class DeltaManager extends ClusterManagerBase {
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.createMessage.allSessionTransferred",
getName()));
}
- counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE++;
+ if (enableStatistics) {
+ counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE.incrementAndGet();
+ }
cluster.send(newmsg, sender);
}
@@ -1292,7 +1342,9 @@ public class DeltaManager extends ClusterManagerBase {
* @throws IOException IO error with serialization
*/
protected void handleCHANGE_SESSION_ID(SessionMessage msg, Member sender)
throws IOException {
- counterReceive_EVT_CHANGE_SESSION_ID++;
+ if (enableStatistics) {
+ counterReceive_EVT_CHANGE_SESSION_ID.incrementAndGet();
+ }
DeltaSession session = (DeltaSession) findSession(msg.getSessionID());
if (session != null) {
String newSessionID = deserializeSessionId(msg.getSession());
@@ -1310,7 +1362,9 @@ public class DeltaManager extends ClusterManagerBase {
* @param sender Member which sent the message
*/
protected void handleALL_SESSION_NOCONTEXTMANAGER(SessionMessage msg,
Member sender) {
- counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER++;
+ if (enableStatistics) {
+ counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER.incrementAndGet();
+ }
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.receiveMessage.noContextManager",
getName(), sender.getHost(),
Integer.valueOf(sender.getPort())));
@@ -1338,7 +1392,9 @@ public class DeltaManager extends ClusterManagerBase {
if (log.isDebugEnabled()) {
log.debug(sm.getString("deltaManager.createMessage.allSessionData", getName()));
}
- counterSend_EVT_ALL_SESSION_DATA++;
+ if (enableStatistics) {
+ counterSend_EVT_ALL_SESSION_DATA.incrementAndGet();
+ }
int sendOptions = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK |
Channel.SEND_OPTIONS_USE_ACK;
cluster.send(newmsg, sender, sendOptions);
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 4ea7bfa05e..bc0eed459e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -105,6 +105,14 @@
issues do not "pop up" wrt. others).
-->
<section name="Tomcat 10.1.44 (schultz)" rtext="in development">
+ <subsection name="Cluster">
+ <changelog>
+ <update>
+ Add <code>enableStatistics</code> configuration attribute for the
+ <code>DeltaManager</code>, defaulting to <code>true</code>. (remm)
+ </update>
+ </changelog>
+ </subsection>
</section>
<section name="Tomcat 10.1.43 (schultz)" rtext="2025-07-04">
<subsection name="Catalina">
diff --git a/webapps/docs/config/cluster-manager.xml
b/webapps/docs/config/cluster-manager.xml
index 7d742cbe5f..1e0a14ee5d 100644
--- a/webapps/docs/config/cluster-manager.xml
+++ b/webapps/docs/config/cluster-manager.xml
@@ -119,6 +119,10 @@
</subsection>
<subsection name="org.apache.catalina.ha.session.DeltaManager Attributes">
<attributes>
+ <attribute name="enableStatistics" required="false">
+ Tracks statistics for the session and events of the cluster.
+ Default value is <code>true</code>.
+ </attribute>
<attribute name="expireSessionsOnShutdown" required="false">
When a web application is being shutdown, Tomcat issues an expire call
to each session to notify all the listeners. If you wish for all
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]