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

dcapwell pushed a commit to branch cassandra-4.1
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-4.1 by this push:
     new 4962f3da3f IntrusiveStack.accumulate is not accumulating correctly
4962f3da3f is described below

commit 4962f3da3f7280004c153263206a67dbddfca25e
Author: Yuqi Yan <yukei0...@gmail.com>
AuthorDate: Fri Jul 18 12:12:45 2025 -0700

    IntrusiveStack.accumulate is not accumulating correctly
    
    patch by Yuqi Yan; reviewed by Benedict Elliott Smith, David Capwell for 
CASSANDRA-20670
---
 CHANGES.txt                                        |  1 +
 .../cassandra/utils/concurrent/IntrusiveStack.java |  2 +-
 .../service/FailureRecordingCallbackTest.java      | 50 ++++++++++++++++++++++
 3 files changed, 52 insertions(+), 1 deletion(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 20c6c89a98..5e4703f828 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.1.10
+ * IntrusiveStack.accumulate is not accumulating correctly (CASSANDRA-20670)
  * Add nodetool get/setguardrailsconfig commands (CASSANDRA-19552)
 Merged from 4.0:
  * Ensure prepared_statement INSERT timestamp precedes eviction DELETE 
(CASSANDRA-19703)
diff --git a/src/java/org/apache/cassandra/utils/concurrent/IntrusiveStack.java 
b/src/java/org/apache/cassandra/utils/concurrent/IntrusiveStack.java
index e61d56545f..6998c2f288 100644
--- a/src/java/org/apache/cassandra/utils/concurrent/IntrusiveStack.java
+++ b/src/java/org/apache/cassandra/utils/concurrent/IntrusiveStack.java
@@ -155,7 +155,7 @@ public class IntrusiveStack<T extends IntrusiveStack<T>> 
implements Iterable<T>
         long value = initialValue;
         while (list != null)
         {
-            value = accumulator.apply(list, initialValue);
+            value = accumulator.apply(list, value);
             list = list.next;
         }
         return value;
diff --git 
a/test/unit/org/apache/cassandra/service/FailureRecordingCallbackTest.java 
b/test/unit/org/apache/cassandra/service/FailureRecordingCallbackTest.java
new file mode 100644
index 0000000000..609ae0894d
--- /dev/null
+++ b/test/unit/org/apache/cassandra/service/FailureRecordingCallbackTest.java
@@ -0,0 +1,50 @@
+/*
+ * 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.cassandra.service;
+
+import java.net.UnknownHostException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.cassandra.exceptions.RequestFailureReason;
+import org.apache.cassandra.locator.InetAddressAndPort;
+import org.apache.cassandra.net.Message;
+
+public class FailureRecordingCallbackTest
+{
+    @Test
+    public void testFailuresCount() throws UnknownHostException
+    {
+        FailureRecordingCallback cb = new FailureRecordingCallback()
+        {
+
+            @Override
+            public void onResponse(Message msg) {}
+            @Override
+            public boolean invokeOnFailure() { return super.invokeOnFailure();}
+            @Override
+            public boolean trackLatencyForSnitch() { return 
super.trackLatencyForSnitch();}
+        };
+        cb.onFailureWithMutex(InetAddressAndPort.getByName("127.0.0.1"), 
RequestFailureReason.UNKNOWN);
+        cb.onFailureWithMutex(InetAddressAndPort.getByName("127.0.0.2"), 
RequestFailureReason.UNKNOWN);
+        cb.onFailureWithMutex(InetAddressAndPort.getByName("127.0.0.3"), 
RequestFailureReason.TIMEOUT);
+        Assert.assertEquals(2, cb.failureReasonsAsMap().failureCount());
+    }
+}


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

Reply via email to