This is an automated email from the ASF dual-hosted git repository.
namelchev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-extensions.git
The following commit(s) were added to refs/heads/master by this push:
new 2e49deba IGNITE-20912 Fixed ConflictResolver debug logging (#282)
2e49deba is described below
commit 2e49debaffab774b4164433d065768306002526e
Author: Julia Bakulina <[email protected]>
AuthorDate: Fri Aug 9 13:48:15 2024 +0300
IGNITE-20912 Fixed ConflictResolver debug logging (#282)
---
.../CacheConflictResolutionManagerImpl.java | 8 --
.../CacheVersionConflictResolverImpl.java | 42 ++++++++++
.../DebugCacheVersionConflictResolverImpl.java | 89 ----------------------
.../ignite/cdc/CacheConflictOperationsTest.java | 41 +++++++++-
...heConflictOperationsWithCustomResolverTest.java | 7 ++
5 files changed, 89 insertions(+), 98 deletions(-)
diff --git
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheConflictResolutionManagerImpl.java
b/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheConflictResolutionManagerImpl.java
index 3d42d53f..19d6c75c 100644
---
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheConflictResolutionManagerImpl.java
+++
b/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheConflictResolutionManagerImpl.java
@@ -80,14 +80,6 @@ public class CacheConflictResolutionManagerImpl<K, V>
implements CacheConflictRe
if (resolver != null)
rslvr = resolver;
- else if (conflictResolverLog.isDebugEnabled()) {
- rslvr = new DebugCacheVersionConflictResolverImpl(
- clusterId,
- conflictResolveField,
- conflictResolverLog,
- mreg
- );
- }
else {
rslvr = new CacheVersionConflictResolverImpl(
clusterId,
diff --git
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheVersionConflictResolverImpl.java
b/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheVersionConflictResolverImpl.java
index 010eb3d9..fb60007f 100644
---
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheVersionConflictResolverImpl.java
+++
b/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/CacheVersionConflictResolverImpl.java
@@ -119,6 +119,9 @@ public class CacheVersionConflictResolverImpl implements
CacheVersionConflictRes
boolean useNew = isUseNew(ctx, oldEntry, newEntry);
+ if (log.isDebugEnabled())
+ debugResolve(ctx, useNew, oldEntry, newEntry);
+
if (useNew) {
res.useNew();
acceptedCnt.increment();
@@ -195,6 +198,45 @@ public class CacheVersionConflictResolverImpl implements
CacheVersionConflictRes
: U.field(val, conflictResolveField);
}
+ /** */
+ private <K, V> void debugResolve(
+ CacheObjectValueContext ctx,
+ boolean useNew,
+ GridCacheVersionedEntryEx<K, V> oldEntry,
+ GridCacheVersionedEntryEx<K, V> newEntry
+ ) {
+ Object oldVal = conflictResolveFieldEnabled ? oldEntry.value(ctx) :
null;
+ Object newVal = conflictResolveFieldEnabled ? newEntry.value(ctx) :
null;
+
+ if (oldVal != null)
+ oldVal = debugValue(oldVal);
+
+ if (newVal != null)
+ newVal = debugValue(newVal);
+
+ log.debug("isUseNew[" +
+ "start=" + oldEntry.isStartVersion() +
+ ", oldVer=" + oldEntry.version() +
+ ", newVer=" + newEntry.version() +
+ ", oldExpire=[" + oldEntry.ttl() + "," + oldEntry.expireTime() +
']' +
+ ", newExpire=[" + newEntry.ttl() + "," + newEntry.expireTime() +
']' +
+ ", old=" + oldVal +
+ ", new=" + newVal +
+ ", res=" + useNew + ']');
+ }
+
+ /** @return Conflict resolve field value, or specified {@code val} if the
field not found. */
+ private Object debugValue(Object val) {
+ try {
+ return value(val);
+ }
+ catch (Exception e) {
+ log.debug("Can't resolve field value [field=" +
conflictResolveField + ", val=" + val + ']');
+
+ return val;
+ }
+ }
+
/** {@inheritDoc} */
@Override public String toString() {
return S.toString(CacheVersionConflictResolverImpl.class, this);
diff --git
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/DebugCacheVersionConflictResolverImpl.java
b/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/DebugCacheVersionConflictResolverImpl.java
deleted file mode 100644
index b19585a4..00000000
---
a/modules/cdc-ext/src/main/java/org/apache/ignite/cdc/conflictresolve/DebugCacheVersionConflictResolverImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * 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.ignite.cdc.conflictresolve;
-
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
-import
org.apache.ignite.internal.processors.cache.version.GridCacheVersionedEntryEx;
-import org.apache.ignite.internal.processors.metric.MetricRegistryImpl;
-import org.apache.ignite.internal.util.typedef.internal.S;
-
-/** Debug aware resolver. */
-public class DebugCacheVersionConflictResolverImpl extends
CacheVersionConflictResolverImpl {
- /**
- * @param clusterId Data center id.
- * @param conflictResolveField Field to resolve conflicts.
- * @param log Logger.
- * @param mreg Metric registry.
- */
- public DebugCacheVersionConflictResolverImpl(
- byte clusterId,
- String conflictResolveField,
- IgniteLogger log,
- MetricRegistryImpl mreg
- ) {
- super(clusterId, conflictResolveField, log, mreg);
- }
-
- /** {@inheritDoc} */
- @Override protected <K, V> boolean isUseNew(
- CacheObjectValueContext ctx,
- GridCacheVersionedEntryEx<K, V> oldEntry,
- GridCacheVersionedEntryEx<K, V> newEntry
- ) {
- boolean res = super.isUseNew(ctx, oldEntry, newEntry);
-
- Object oldVal = conflictResolveFieldEnabled ? oldEntry.value(ctx) :
null;
- Object newVal = conflictResolveFieldEnabled ? newEntry.value(ctx) :
null;
-
- if (oldVal != null)
- oldVal = debugValue(oldVal);
-
- if (newVal != null)
- newVal = debugValue(newVal);
-
- log.debug("isUseNew[" +
- "start=" + oldEntry.isStartVersion() +
- ", oldVer=" + oldEntry.version() +
- ", newVer=" + newEntry.version() +
- ", oldExpire=[" + oldEntry.ttl() + "," + oldEntry.expireTime() +
']' +
- ", newExpire=[" + newEntry.ttl() + "," + newEntry.expireTime() +
']' +
- ", old=" + oldVal +
- ", new=" + newVal +
- ", res=" + res + ']');
-
- return res;
- }
-
- /** @return Conflict resolve field value, or specified {@code val} if the
field not found. */
- private Object debugValue(Object val) {
- try {
- return super.value(val);
- }
- catch (Exception e) {
- log.debug("Can't resolve field value [field=" +
conflictResolveField + ", val=" + val + ']');
-
- return val;
- }
- }
-
- /** {@inheritDoc} */
- @Override public String toString() {
- return S.toString(CacheVersionConflictResolverImpl.class, this);
- }
-}
diff --git
a/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsTest.java
b/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsTest.java
index 7315c030..6213abac 100644
---
a/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsTest.java
+++
b/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsTest.java
@@ -30,6 +30,7 @@ import org.apache.ignite.binary.BinaryObject;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheEntry;
import org.apache.ignite.cache.CacheEntryVersion;
+import org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverImpl;
import
org.apache.ignite.cdc.conflictresolve.CacheVersionConflictResolverPluginProvider;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
@@ -43,7 +44,11 @@ import
org.apache.ignite.internal.processors.cache.dr.GridCacheDrInfo;
import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
import org.apache.ignite.internal.processors.metric.MetricRegistryImpl;
import org.apache.ignite.internal.processors.metric.impl.LongAdderMetric;
+import org.apache.ignite.testframework.ListeningTestLogger;
+import org.apache.ignite.testframework.LogListener;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.config.Configurator;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -101,6 +106,9 @@ public class CacheConflictOperationsTest extends
GridCommonAbstractTest {
/** */
private IgniteEx ign;
+ /** Listening test logger. */
+ private final ListeningTestLogger listeningLog = new
ListeningTestLogger(log);
+
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String
igniteInstanceName) throws Exception {
CacheVersionConflictResolverPluginProvider<?> pluginCfg = new
CacheVersionConflictResolverPluginProvider<>();
@@ -109,7 +117,9 @@ public class CacheConflictOperationsTest extends
GridCommonAbstractTest {
pluginCfg.setCaches(new
HashSet<>(Collections.singleton(DEFAULT_CACHE_NAME)));
pluginCfg.setConflictResolveField(conflictResolveField());
- return
super.getConfiguration(igniteInstanceName).setPluginProviders(pluginCfg);
+ return super.getConfiguration(igniteInstanceName)
+ .setPluginProviders(pluginCfg)
+ .setGridLogger(listeningLog);
}
/** {@inheritDoc} */
@@ -270,6 +280,35 @@ public class CacheConflictOperationsTest extends
GridCommonAbstractTest {
checkMetrics(1, 1);
}
+ /** Test switching debug log level for ConflictResolver during runtime */
+ @Test
+ public void testResolveDebug() throws Exception {
+ String key = key("UpdateClusterUpdateReorder", otherClusterId);
+
+ LogListener lsnr = LogListener.matches("isUseNew").build();
+
+ listeningLog.registerListener(lsnr);
+
+
Configurator.setLevel(CacheVersionConflictResolverImpl.class.getName(),
Level.DEBUG);
+
+ try {
+ putConflict(key, 1, true);
+
+ putConflict(key, 1, false);
+
+ assertTrue(lsnr.check());
+ }
+ finally {
+
Configurator.setLevel(CacheVersionConflictResolverImpl.class.getName(),
Level.INFO);
+ }
+
+ lsnr.reset();
+
+ putConflict(key, 1, false);
+
+ assertFalse(lsnr.check());
+ }
+
/** */
private void put(String key) {
ConflictResolvableTestData newVal =
ConflictResolvableTestData.create();
diff --git
a/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsWithCustomResolverTest.java
b/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsWithCustomResolverTest.java
index ca5a3fe8..3a42692b 100644
---
a/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsWithCustomResolverTest.java
+++
b/modules/cdc-ext/src/test/java/org/apache/ignite/cdc/CacheConflictOperationsWithCustomResolverTest.java
@@ -58,6 +58,13 @@ public class CacheConflictOperationsWithCustomResolverTest
extends CacheConflict
GridTestUtils.assertThrows(log, super::testMetrics,
AssertionError.class, "");
}
+ /** {@inheritDoc} */
+ @Test
+ @Override public void testResolveDebug() throws Exception {
+ // LWW strategy resolves conflicts in unexpected way at versioned
resolve test.
+ GridTestUtils.assertThrows(log, super::testResolveDebug,
AssertionError.class, "");
+ }
+
/**
*
*/