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, "");
+    }
+
     /**
      *
      */

Reply via email to