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;