This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/11.0.x by this push:
     new 3f6d75168d Handle eviction running over a bucket boundary.
3f6d75168d is described below

commit 3f6d75168d65d224f6997ba7b9135e618a15cd37
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Mar 10 09:14:54 2025 +0000

    Handle eviction running over a bucket boundary.
    
    Patch by Chenjp
---
 java/org/apache/catalina/util/TimeBucketCounterBase.java | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/catalina/util/TimeBucketCounterBase.java 
b/java/org/apache/catalina/util/TimeBucketCounterBase.java
index 4679a41f0a..122a7b02fa 100644
--- a/java/org/apache/catalina/util/TimeBucketCounterBase.java
+++ b/java/org/apache/catalina/util/TimeBucketCounterBase.java
@@ -181,10 +181,17 @@ public abstract class TimeBucketCounterBase {
      * long run.
      */
     public void periodicEvict() {
-        String currentBucketPrefix = String.valueOf(getCurrentBucketPrefix());
+        /*
+         * The implementation of this method assumes that the time taken for 
eviction is less than 1 bucket duration.
+         * It is possible that the eviction process starts in one bucket but 
finishes in another. Therefore, keys for
+         * the current bucket and the next bucket when the eviction process 
starts are excluded from eviction.
+         */
+        long currentBucketIndex = getCurrentBucketPrefix();
+        String currentBucketPrefix = String.valueOf(currentBucketIndex);
+        String nextBucketPrefix = String.valueOf(currentBucketIndex + 1);
         ConcurrentHashMap.KeySetView<String,AtomicInteger> keys = map.keySet();
         // remove obsolete keys
-        keys.removeIf(k -> !k.startsWith(currentBucketPrefix));
+        keys.removeIf(k -> !k.startsWith(currentBucketPrefix) && 
!k.startsWith(nextBucketPrefix));
     }
 
 


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

Reply via email to