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

sk0x50 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 8a09f055820 IGNITE-27720 Do not trigger failure handler on vacuum 
failure (#7554)
8a09f055820 is described below

commit 8a09f0558202c654c48dcd1736edd86ecb38e2b5
Author: Slava Koptilin <[email protected]>
AuthorDate: Tue Feb 10 16:46:06 2026 +0200

    IGNITE-27720 Do not trigger failure handler on vacuum failure (#7554)
---
 .../internal/logger/IgniteThrottledLoggerImpl.java  |  4 ++++
 .../org/apache/ignite/internal/logger/Loggers.java  | 19 ++++++++++++++++++-
 .../tx/impl/PersistentTxStateVacuumizer.java        | 21 ++++++++++-----------
 .../ignite/internal/tx/impl/TxManagerImpl.java      |  3 +--
 .../tx/impl/VolatileTxStateMetaStorage.java         |  1 +
 5 files changed, 34 insertions(+), 14 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/logger/IgniteThrottledLoggerImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/logger/IgniteThrottledLoggerImpl.java
index 14f2a113bc6..a58e41612a4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/logger/IgniteThrottledLoggerImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/logger/IgniteThrottledLoggerImpl.java
@@ -40,6 +40,10 @@ class IgniteThrottledLoggerImpl implements 
IgniteThrottledLogger {
     /** Log messages. */
     private final Map<LogThrottleKey, Long> messagesMap;
 
+    IgniteThrottledLoggerImpl(Logger delegate) {
+        this(delegate, Runnable::run);
+    }
+
     IgniteThrottledLoggerImpl(Logger delegate, Executor executor) {
         this.delegate = delegate;
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/logger/Loggers.java 
b/modules/core/src/main/java/org/apache/ignite/internal/logger/Loggers.java
index 088b1ad214a..1ce6b4f0990 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/logger/Loggers.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/logger/Loggers.java
@@ -88,10 +88,27 @@ public final class Loggers {
     }
 
     /**
-     * Converts to {@link IgniteThrottledLogger}.
+     * Creates a new throttled logger based on the provided {@code logger}.
+     * Take into account that internal cleanup tasks will be performed in the 
same thread that calls log operations.
+     * When it is required to run such maintenance activities asynchronously 
(in the background),
+     * consider using {@link #toThrottledLogger(IgniteLogger, Executor)}.
+     *
+     * @param logger Logger.
+     * @see IgniteThrottledLogger
+     * @see #toThrottledLogger(IgniteLogger, Executor)
+     */
+    public static IgniteThrottledLogger toThrottledLogger(IgniteLogger logger) 
{
+        assert logger instanceof IgniteLoggerImpl : logger;
+
+        return new IgniteThrottledLoggerImpl(((IgniteLoggerImpl) 
logger).delegate);
+    }
+
+    /**
+     * Creates a new throttled logger based on the provided {@code logger}.
      *
      * @param logger Logger.
      * @param executor Executor for cleaning internal structures.
+     * @see IgniteThrottledLogger
      */
     public static IgniteThrottledLogger toThrottledLogger(IgniteLogger logger, 
Executor executor) {
         assert logger instanceof IgniteLoggerImpl : logger;
diff --git 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/PersistentTxStateVacuumizer.java
 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/PersistentTxStateVacuumizer.java
index f03ee4f7ba2..159483b0a9a 100644
--- 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/PersistentTxStateVacuumizer.java
+++ 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/PersistentTxStateVacuumizer.java
@@ -32,13 +32,12 @@ import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.internal.failure.FailureContext;
-import org.apache.ignite.internal.failure.FailureProcessor;
 import org.apache.ignite.internal.hlc.ClockService;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.lang.ComponentStoppingException;
 import org.apache.ignite.internal.lang.NodeStoppingException;
 import org.apache.ignite.internal.logger.IgniteLogger;
+import org.apache.ignite.internal.logger.IgniteThrottledLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.network.InternalClusterNode;
 import org.apache.ignite.internal.placementdriver.PlacementDriver;
@@ -59,6 +58,8 @@ import org.jetbrains.annotations.Nullable;
 public class PersistentTxStateVacuumizer {
     private static final IgniteLogger LOG = 
Loggers.forClass(PersistentTxStateVacuumizer.class);
 
+    private static final String VACUUM_THROTTLE_KEY = "vacuum-failed";
+
     private static final TxMessagesFactory TX_MESSAGES_FACTORY = new 
TxMessagesFactory();
 
     private static final ReplicaMessagesFactory REPLICA_MESSAGES_FACTORY = new 
ReplicaMessagesFactory();
@@ -71,7 +72,7 @@ public class PersistentTxStateVacuumizer {
 
     private final PlacementDriver placementDriver;
 
-    private final FailureProcessor failureProcessor;
+    private final IgniteThrottledLogger throttledLogger = 
Loggers.toThrottledLogger(LOG);
 
     /**
      * Constructor.
@@ -80,20 +81,17 @@ public class PersistentTxStateVacuumizer {
      * @param localNode Local node.
      * @param clockService Clock service.
      * @param placementDriver Placement driver.
-     * @param failureProcessor Failure processor.
      */
     public PersistentTxStateVacuumizer(
             ReplicaService replicaService,
             InternalClusterNode localNode,
             ClockService clockService,
-            PlacementDriver placementDriver,
-            FailureProcessor failureProcessor
+            PlacementDriver placementDriver
     ) {
         this.replicaService = replicaService;
         this.localNode = localNode;
         this.clockService = clockService;
         this.placementDriver = placementDriver;
-        this.failureProcessor = failureProcessor;
     }
 
     /**
@@ -153,10 +151,11 @@ public class PersistentTxStateVacuumizer {
                                     // vacuumization will be retried after 
restart.
                                     LOG.debug("Failed to vacuum tx states from 
the persistent storage.", e);
                                 } else {
-                                    failureProcessor.process(new 
FailureContext(
-                                            e,
-                                            "Failed to vacuum tx states from 
the persistent storage."
-                                    ));
+                                    // In general, even though this vacuum 
round has completed unsuccessfully,
+                                    // due to ReplicationTimeoutException for 
instance,
+                                    // it does not mean that correctness is 
violated, and we need to shutdown the node.
+                                    // Perhaps the next attempt will be 
successful.
+                                    throttledLogger.warn(VACUUM_THROTTLE_KEY, 
"Failed to vacuum tx states from the persistent storage.", e);
                                 }
                             });
                         } else {
diff --git 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/TxManagerImpl.java
 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/TxManagerImpl.java
index d169255c381..0ea57518cdb 100644
--- 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/TxManagerImpl.java
+++ 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/TxManagerImpl.java
@@ -1040,8 +1040,7 @@ public class TxManagerImpl implements TxManager, 
NetworkMessageHandler, SystemVi
                 replicaService,
                 topologyService.localMember(),
                 clockService,
-                placementDriver,
-                failureProcessor
+                placementDriver
         );
 
         txViewProvider.init(localNodeId, txStateVolatileStorage.statesMap());
diff --git 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/VolatileTxStateMetaStorage.java
 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/VolatileTxStateMetaStorage.java
index 9c6cc9068db..19396b007ad 100644
--- 
a/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/VolatileTxStateMetaStorage.java
+++ 
b/modules/transactions/src/main/java/org/apache/ignite/internal/tx/impl/VolatileTxStateMetaStorage.java
@@ -201,6 +201,7 @@ public class VolatileTxStateMetaStorage {
                             return meta0;
                         }
                     } else {
+                        // TODO 
https://issues.apache.org/jira/browse/IGNITE-27773
                         resourceVacuumMetrics.onMarkedForVacuum();
 
                         return meta0;

Reply via email to