You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2022/01/27 08:43:50 UTC
[ignite] branch master updated: IGNITE-16387 Improve CDC monitoring and logging (#9766)
This is an automated email from the ASF dual-hosted git repository.
nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new e084f4a IGNITE-16387 Improve CDC monitoring and logging (#9766)
e084f4a is described below
commit e084f4a88475b48be64ce8e2d02467a40247c0dd
Author: Nikolay <ni...@apache.org>
AuthorDate: Thu Jan 27 11:43:08 2022 +0300
IGNITE-16387 Improve CDC monitoring and logging (#9766)
---
docs/_docs/monitoring-metrics/new-metrics.adoc | 14 ++
docs/_docs/monitoring-metrics/system-views.adoc | 1 +
docs/_docs/tools/control-script.adoc | 2 +-
.../ignite/jdbc/thin/JdbcThinMetadataSelfTest.java | 1 +
.../systemview/walker/CacheViewWalker.java | 196 +++++++++++----------
.../processors/cache/ClusterCachesInfo.java | 2 +-
.../processors/cache/GridCacheContext.java | 5 +
.../processors/cache/version/GridCacheVersion.java | 3 +-
.../cache/version/GridCacheVersionEx.java | 1 +
.../cache/version/GridCacheVersionManager.java | 5 +
.../ignite/internal/visor/tx/TxVerboseId.java | 2 +-
.../ignite/spi/systemview/view/CacheView.java | 22 ++-
.../org/apache/ignite/cdc/CdcCacheVersionTest.java | 31 ++++
.../processors/cache/GridCacheVersionSelfTest.java | 8 +
14 files changed, 190 insertions(+), 103 deletions(-)
diff --git a/docs/_docs/monitoring-metrics/new-metrics.adoc b/docs/_docs/monitoring-metrics/new-metrics.adoc
index 08b69c7..44a68fc 100644
--- a/docs/_docs/monitoring-metrics/new-metrics.adoc
+++ b/docs/_docs/monitoring-metrics/new-metrics.adoc
@@ -452,3 +452,17 @@ Register name: `cluster`
|TotalClientNodes| integer | Client nodes count.
|TotalServerNodes| integer | Server nodes count.
|===
+
+== Cache processor
+
+Cache processor metrics.
+
+Register name: `cache`
+
+
+[cols="2,1,3",opts="header"]
+|===
+|Name| Type| Description
+|LastDataVer| long | The latest data version on the node.
+|DataVersionClusterId| integer | Data version cluster id.
+|===
diff --git a/docs/_docs/monitoring-metrics/system-views.adoc b/docs/_docs/monitoring-metrics/system-views.adoc
index c642aad..a3ef869 100644
--- a/docs/_docs/monitoring-metrics/system-views.adoc
+++ b/docs/_docs/monitoring-metrics/system-views.adoc
@@ -114,6 +114,7 @@ control.bat --system-view NODE_METRICS --node-id a1b77663-b37f-4ddf-87a6-1e2d684
|EVICTION_FILTER | string | toString representation of eviction filter
|EVICTION_POLICY_FACTORY | string | toString representation of eviction policy factory
|EXPIRY_POLICY_FACTORY | string | toString representation of expiry policy factory
+|CONFLICT_RESOLVER | string | toString representation of cache conflict resolver
|INTERCEPTOR | string | toString representation of interceptor
|IS_COPY_ON_READ | boolean | Flag indicating whether a copy of the value stored in the on-heap cache
|IS_EAGER_TTL | boolean | Flag indicating whether expired cache entries will be eagerly removed from cache
diff --git a/docs/_docs/tools/control-script.adoc b/docs/_docs/tools/control-script.adoc
index be2f9ed..a1cce22 100644
--- a/docs/_docs/tools/control-script.adoc
+++ b/docs/_docs/tools/control-script.adoc
@@ -593,7 +593,7 @@ If the index inline sizes are different, the console output is similar to the da
[source,text]
----
Control utility [ver. 2.10.0]
-2021 Copyright(C) Apache Software Foundation
+2022 Copyright(C) Apache Software Foundation
User: test
Time: 2021-04-27T16:13:21.213
Command [CACHE] started
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
index cea2d07..43ec92f 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinMetadataSelfTest.java
@@ -692,6 +692,7 @@ public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
"SYS.CACHES.REBALANCE_ORDER.null.10",
"SYS.CACHES.EVICTION_FILTER.null.2147483647",
"SYS.CACHES.EVICTION_POLICY_FACTORY.null.2147483647",
+ "SYS.CACHES.CONFLICT_RESOLVER.null.2147483647",
"SYS.CACHES.IS_NEAR_CACHE_ENABLED.null.1",
"SYS.CACHES.NEAR_CACHE_EVICTION_POLICY_FACTORY.null.2147483647",
"SYS.CACHES.NEAR_CACHE_START_SIZE.null.10",
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/CacheViewWalker.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/CacheViewWalker.java
index 0b5f1c9..cc98a09 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/CacheViewWalker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/systemview/walker/CacheViewWalker.java
@@ -48,54 +48,55 @@ public class CacheViewWalker implements SystemViewRowAttributeWalker<CacheView>
v.accept(10, "cacheLoaderFactory", String.class);
v.accept(11, "cacheStoreFactory", String.class);
v.accept(12, "cacheWriterFactory", String.class);
- v.accept(13, "dataRegionName", String.class);
- v.accept(14, "defaultLockTimeout", long.class);
- v.accept(15, "evictionFilter", String.class);
- v.accept(16, "evictionPolicyFactory", String.class);
- v.accept(17, "expiryPolicyFactory", String.class);
- v.accept(18, "interceptor", String.class);
- v.accept(19, "isCopyOnRead", boolean.class);
- v.accept(20, "isEagerTtl", boolean.class);
- v.accept(21, "isEncryptionEnabled", boolean.class);
- v.accept(22, "isEventsDisabled", boolean.class);
- v.accept(23, "isInvalidate", boolean.class);
- v.accept(24, "isLoadPreviousValue", boolean.class);
- v.accept(25, "isManagementEnabled", boolean.class);
- v.accept(26, "isNearCacheEnabled", boolean.class);
- v.accept(27, "isOnheapCacheEnabled", boolean.class);
- v.accept(28, "isReadFromBackup", boolean.class);
- v.accept(29, "isReadThrough", boolean.class);
- v.accept(30, "isSqlEscapeAll", boolean.class);
- v.accept(31, "isSqlOnheapCacheEnabled", boolean.class);
- v.accept(32, "isStatisticsEnabled", boolean.class);
- v.accept(33, "isStoreKeepBinary", boolean.class);
- v.accept(34, "isWriteBehindEnabled", boolean.class);
- v.accept(35, "isWriteThrough", boolean.class);
- v.accept(36, "maxConcurrentAsyncOperations", int.class);
- v.accept(37, "maxQueryIteratorsCount", int.class);
- v.accept(38, "nearCacheEvictionPolicyFactory", String.class);
- v.accept(39, "nearCacheStartSize", int.class);
- v.accept(40, "nodeFilter", String.class);
- v.accept(41, "partitionLossPolicy", PartitionLossPolicy.class);
- v.accept(42, "queryDetailMetricsSize", int.class);
- v.accept(43, "queryParallelism", int.class);
- v.accept(44, "rebalanceBatchSize", int.class);
- v.accept(45, "rebalanceBatchesPrefetchCount", long.class);
- v.accept(46, "rebalanceDelay", long.class);
- v.accept(47, "rebalanceMode", CacheRebalanceMode.class);
- v.accept(48, "rebalanceOrder", int.class);
- v.accept(49, "rebalanceThrottle", long.class);
- v.accept(50, "rebalanceTimeout", long.class);
- v.accept(51, "sqlIndexMaxInlineSize", int.class);
- v.accept(52, "sqlOnheapCacheMaxSize", int.class);
- v.accept(53, "sqlSchema", String.class);
- v.accept(54, "topologyValidator", String.class);
- v.accept(55, "writeBehindBatchSize", int.class);
- v.accept(56, "writeBehindCoalescing", boolean.class);
- v.accept(57, "writeBehindFlushFrequency", long.class);
- v.accept(58, "writeBehindFlushSize", int.class);
- v.accept(59, "writeBehindFlushThreadCount", int.class);
- v.accept(60, "writeSynchronizationMode", CacheWriteSynchronizationMode.class);
+ v.accept(13, "conflictResolver", String.class);
+ v.accept(14, "dataRegionName", String.class);
+ v.accept(15, "defaultLockTimeout", long.class);
+ v.accept(16, "evictionFilter", String.class);
+ v.accept(17, "evictionPolicyFactory", String.class);
+ v.accept(18, "expiryPolicyFactory", String.class);
+ v.accept(19, "interceptor", String.class);
+ v.accept(20, "isCopyOnRead", boolean.class);
+ v.accept(21, "isEagerTtl", boolean.class);
+ v.accept(22, "isEncryptionEnabled", boolean.class);
+ v.accept(23, "isEventsDisabled", boolean.class);
+ v.accept(24, "isInvalidate", boolean.class);
+ v.accept(25, "isLoadPreviousValue", boolean.class);
+ v.accept(26, "isManagementEnabled", boolean.class);
+ v.accept(27, "isNearCacheEnabled", boolean.class);
+ v.accept(28, "isOnheapCacheEnabled", boolean.class);
+ v.accept(29, "isReadFromBackup", boolean.class);
+ v.accept(30, "isReadThrough", boolean.class);
+ v.accept(31, "isSqlEscapeAll", boolean.class);
+ v.accept(32, "isSqlOnheapCacheEnabled", boolean.class);
+ v.accept(33, "isStatisticsEnabled", boolean.class);
+ v.accept(34, "isStoreKeepBinary", boolean.class);
+ v.accept(35, "isWriteBehindEnabled", boolean.class);
+ v.accept(36, "isWriteThrough", boolean.class);
+ v.accept(37, "maxConcurrentAsyncOperations", int.class);
+ v.accept(38, "maxQueryIteratorsCount", int.class);
+ v.accept(39, "nearCacheEvictionPolicyFactory", String.class);
+ v.accept(40, "nearCacheStartSize", int.class);
+ v.accept(41, "nodeFilter", String.class);
+ v.accept(42, "partitionLossPolicy", PartitionLossPolicy.class);
+ v.accept(43, "queryDetailMetricsSize", int.class);
+ v.accept(44, "queryParallelism", int.class);
+ v.accept(45, "rebalanceBatchSize", int.class);
+ v.accept(46, "rebalanceBatchesPrefetchCount", long.class);
+ v.accept(47, "rebalanceDelay", long.class);
+ v.accept(48, "rebalanceMode", CacheRebalanceMode.class);
+ v.accept(49, "rebalanceOrder", int.class);
+ v.accept(50, "rebalanceThrottle", long.class);
+ v.accept(51, "rebalanceTimeout", long.class);
+ v.accept(52, "sqlIndexMaxInlineSize", int.class);
+ v.accept(53, "sqlOnheapCacheMaxSize", int.class);
+ v.accept(54, "sqlSchema", String.class);
+ v.accept(55, "topologyValidator", String.class);
+ v.accept(56, "writeBehindBatchSize", int.class);
+ v.accept(57, "writeBehindCoalescing", boolean.class);
+ v.accept(58, "writeBehindFlushFrequency", long.class);
+ v.accept(59, "writeBehindFlushSize", int.class);
+ v.accept(60, "writeBehindFlushThreadCount", int.class);
+ v.accept(61, "writeSynchronizationMode", CacheWriteSynchronizationMode.class);
}
/** {@inheritDoc} */
@@ -113,58 +114,59 @@ public class CacheViewWalker implements SystemViewRowAttributeWalker<CacheView>
v.accept(10, "cacheLoaderFactory", String.class, row.cacheLoaderFactory());
v.accept(11, "cacheStoreFactory", String.class, row.cacheStoreFactory());
v.accept(12, "cacheWriterFactory", String.class, row.cacheWriterFactory());
- v.accept(13, "dataRegionName", String.class, row.dataRegionName());
- v.acceptLong(14, "defaultLockTimeout", row.defaultLockTimeout());
- v.accept(15, "evictionFilter", String.class, row.evictionFilter());
- v.accept(16, "evictionPolicyFactory", String.class, row.evictionPolicyFactory());
- v.accept(17, "expiryPolicyFactory", String.class, row.expiryPolicyFactory());
- v.accept(18, "interceptor", String.class, row.interceptor());
- v.acceptBoolean(19, "isCopyOnRead", row.isCopyOnRead());
- v.acceptBoolean(20, "isEagerTtl", row.isEagerTtl());
- v.acceptBoolean(21, "isEncryptionEnabled", row.isEncryptionEnabled());
- v.acceptBoolean(22, "isEventsDisabled", row.isEventsDisabled());
- v.acceptBoolean(23, "isInvalidate", row.isInvalidate());
- v.acceptBoolean(24, "isLoadPreviousValue", row.isLoadPreviousValue());
- v.acceptBoolean(25, "isManagementEnabled", row.isManagementEnabled());
- v.acceptBoolean(26, "isNearCacheEnabled", row.isNearCacheEnabled());
- v.acceptBoolean(27, "isOnheapCacheEnabled", row.isOnheapCacheEnabled());
- v.acceptBoolean(28, "isReadFromBackup", row.isReadFromBackup());
- v.acceptBoolean(29, "isReadThrough", row.isReadThrough());
- v.acceptBoolean(30, "isSqlEscapeAll", row.isSqlEscapeAll());
- v.acceptBoolean(31, "isSqlOnheapCacheEnabled", row.isSqlOnheapCacheEnabled());
- v.acceptBoolean(32, "isStatisticsEnabled", row.isStatisticsEnabled());
- v.acceptBoolean(33, "isStoreKeepBinary", row.isStoreKeepBinary());
- v.acceptBoolean(34, "isWriteBehindEnabled", row.isWriteBehindEnabled());
- v.acceptBoolean(35, "isWriteThrough", row.isWriteThrough());
- v.acceptInt(36, "maxConcurrentAsyncOperations", row.maxConcurrentAsyncOperations());
- v.acceptInt(37, "maxQueryIteratorsCount", row.maxQueryIteratorsCount());
- v.accept(38, "nearCacheEvictionPolicyFactory", String.class, row.nearCacheEvictionPolicyFactory());
- v.acceptInt(39, "nearCacheStartSize", row.nearCacheStartSize());
- v.accept(40, "nodeFilter", String.class, row.nodeFilter());
- v.accept(41, "partitionLossPolicy", PartitionLossPolicy.class, row.partitionLossPolicy());
- v.acceptInt(42, "queryDetailMetricsSize", row.queryDetailMetricsSize());
- v.acceptInt(43, "queryParallelism", row.queryParallelism());
- v.acceptInt(44, "rebalanceBatchSize", row.rebalanceBatchSize());
- v.acceptLong(45, "rebalanceBatchesPrefetchCount", row.rebalanceBatchesPrefetchCount());
- v.acceptLong(46, "rebalanceDelay", row.rebalanceDelay());
- v.accept(47, "rebalanceMode", CacheRebalanceMode.class, row.rebalanceMode());
- v.acceptInt(48, "rebalanceOrder", row.rebalanceOrder());
- v.acceptLong(49, "rebalanceThrottle", row.rebalanceThrottle());
- v.acceptLong(50, "rebalanceTimeout", row.rebalanceTimeout());
- v.acceptInt(51, "sqlIndexMaxInlineSize", row.sqlIndexMaxInlineSize());
- v.acceptInt(52, "sqlOnheapCacheMaxSize", row.sqlOnheapCacheMaxSize());
- v.accept(53, "sqlSchema", String.class, row.sqlSchema());
- v.accept(54, "topologyValidator", String.class, row.topologyValidator());
- v.acceptInt(55, "writeBehindBatchSize", row.writeBehindBatchSize());
- v.acceptBoolean(56, "writeBehindCoalescing", row.writeBehindCoalescing());
- v.acceptLong(57, "writeBehindFlushFrequency", row.writeBehindFlushFrequency());
- v.acceptInt(58, "writeBehindFlushSize", row.writeBehindFlushSize());
- v.acceptInt(59, "writeBehindFlushThreadCount", row.writeBehindFlushThreadCount());
- v.accept(60, "writeSynchronizationMode", CacheWriteSynchronizationMode.class, row.writeSynchronizationMode());
+ v.accept(13, "conflictResolver", String.class, row.conflictResolver());
+ v.accept(14, "dataRegionName", String.class, row.dataRegionName());
+ v.acceptLong(15, "defaultLockTimeout", row.defaultLockTimeout());
+ v.accept(16, "evictionFilter", String.class, row.evictionFilter());
+ v.accept(17, "evictionPolicyFactory", String.class, row.evictionPolicyFactory());
+ v.accept(18, "expiryPolicyFactory", String.class, row.expiryPolicyFactory());
+ v.accept(19, "interceptor", String.class, row.interceptor());
+ v.acceptBoolean(20, "isCopyOnRead", row.isCopyOnRead());
+ v.acceptBoolean(21, "isEagerTtl", row.isEagerTtl());
+ v.acceptBoolean(22, "isEncryptionEnabled", row.isEncryptionEnabled());
+ v.acceptBoolean(23, "isEventsDisabled", row.isEventsDisabled());
+ v.acceptBoolean(24, "isInvalidate", row.isInvalidate());
+ v.acceptBoolean(25, "isLoadPreviousValue", row.isLoadPreviousValue());
+ v.acceptBoolean(26, "isManagementEnabled", row.isManagementEnabled());
+ v.acceptBoolean(27, "isNearCacheEnabled", row.isNearCacheEnabled());
+ v.acceptBoolean(28, "isOnheapCacheEnabled", row.isOnheapCacheEnabled());
+ v.acceptBoolean(29, "isReadFromBackup", row.isReadFromBackup());
+ v.acceptBoolean(30, "isReadThrough", row.isReadThrough());
+ v.acceptBoolean(31, "isSqlEscapeAll", row.isSqlEscapeAll());
+ v.acceptBoolean(32, "isSqlOnheapCacheEnabled", row.isSqlOnheapCacheEnabled());
+ v.acceptBoolean(33, "isStatisticsEnabled", row.isStatisticsEnabled());
+ v.acceptBoolean(34, "isStoreKeepBinary", row.isStoreKeepBinary());
+ v.acceptBoolean(35, "isWriteBehindEnabled", row.isWriteBehindEnabled());
+ v.acceptBoolean(36, "isWriteThrough", row.isWriteThrough());
+ v.acceptInt(37, "maxConcurrentAsyncOperations", row.maxConcurrentAsyncOperations());
+ v.acceptInt(38, "maxQueryIteratorsCount", row.maxQueryIteratorsCount());
+ v.accept(39, "nearCacheEvictionPolicyFactory", String.class, row.nearCacheEvictionPolicyFactory());
+ v.acceptInt(40, "nearCacheStartSize", row.nearCacheStartSize());
+ v.accept(41, "nodeFilter", String.class, row.nodeFilter());
+ v.accept(42, "partitionLossPolicy", PartitionLossPolicy.class, row.partitionLossPolicy());
+ v.acceptInt(43, "queryDetailMetricsSize", row.queryDetailMetricsSize());
+ v.acceptInt(44, "queryParallelism", row.queryParallelism());
+ v.acceptInt(45, "rebalanceBatchSize", row.rebalanceBatchSize());
+ v.acceptLong(46, "rebalanceBatchesPrefetchCount", row.rebalanceBatchesPrefetchCount());
+ v.acceptLong(47, "rebalanceDelay", row.rebalanceDelay());
+ v.accept(48, "rebalanceMode", CacheRebalanceMode.class, row.rebalanceMode());
+ v.acceptInt(49, "rebalanceOrder", row.rebalanceOrder());
+ v.acceptLong(50, "rebalanceThrottle", row.rebalanceThrottle());
+ v.acceptLong(51, "rebalanceTimeout", row.rebalanceTimeout());
+ v.acceptInt(52, "sqlIndexMaxInlineSize", row.sqlIndexMaxInlineSize());
+ v.acceptInt(53, "sqlOnheapCacheMaxSize", row.sqlOnheapCacheMaxSize());
+ v.accept(54, "sqlSchema", String.class, row.sqlSchema());
+ v.accept(55, "topologyValidator", String.class, row.topologyValidator());
+ v.acceptInt(56, "writeBehindBatchSize", row.writeBehindBatchSize());
+ v.acceptBoolean(57, "writeBehindCoalescing", row.writeBehindCoalescing());
+ v.acceptLong(58, "writeBehindFlushFrequency", row.writeBehindFlushFrequency());
+ v.acceptInt(59, "writeBehindFlushSize", row.writeBehindFlushSize());
+ v.acceptInt(60, "writeBehindFlushThreadCount", row.writeBehindFlushThreadCount());
+ v.accept(61, "writeSynchronizationMode", CacheWriteSynchronizationMode.class, row.writeSynchronizationMode());
}
/** {@inheritDoc} */
@Override public int count() {
- return 61;
+ return 62;
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index a72b444..299b53c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -177,7 +177,7 @@ public class ClusterCachesInfo {
ctx.systemView().registerView(CACHES_VIEW, CACHES_VIEW_DESC,
new CacheViewWalker(),
registeredCaches.values(),
- CacheView::new);
+ (desc) -> new CacheView(desc, ctx));
ctx.systemView().registerView(CACHE_GRPS_VIEW, CACHE_GRPS_VIEW_DESC,
new CacheGroupViewWalker(),
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index 319c3ec..281dc2a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -1654,6 +1654,11 @@ public class GridCacheContext<K, V> implements Externalizable {
return conflictRslvr != null;
}
+ /** @return Conflict resolver. */
+ public CacheVersionConflictResolver conflictResolver() {
+ return conflictRslvr;
+ }
+
/**
* Resolve DR conflict.
*
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
index 7769501..a54a9f5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersion.java
@@ -326,6 +326,7 @@ public class GridCacheVersion implements Message, Externalizable, CacheEntryVers
@Override public String toString() {
return "GridCacheVersion [topVer=" + topologyVersion() +
", order=" + order() +
- ", nodeOrder=" + nodeOrder() + ']';
+ ", nodeOrder=" + nodeOrder() +
+ ", dataCenterId=" + dataCenterId() + ']';
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java
index 1d5bad0..4848893 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionEx.java
@@ -168,6 +168,7 @@ public class GridCacheVersionEx extends GridCacheVersion {
return "GridCacheVersionEx [topVer=" + topologyVersion() +
", order=" + order() +
", nodeOrder=" + nodeOrder() +
+ ", dataCenterId=" + dataCenterId() +
", drVer=" + drVer + ']';
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
index 48a6507..ac81bf9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
@@ -49,6 +49,9 @@ public class GridCacheVersionManager extends GridCacheSharedManagerAdapter {
/** Last data version metric name. */
public static final String LAST_DATA_VER = "LastDataVersion";
+ /** Cluster ID metric name. */
+ public static final String DATA_VER_CLUSTER_ID = "DataVersionClusterId";
+
/** Last version metric. */
protected AtomicLongMetric lastDataVer;
@@ -99,6 +102,8 @@ public class GridCacheVersionManager extends GridCacheSharedManagerAdapter {
lastDataVer = sysreg.longMetric(LAST_DATA_VER, "The latest data version on the node.");
+ sysreg.register(DATA_VER_CLUSTER_ID, () -> dataCenterId, "Data version cluster id.");
+
startVer = new GridCacheVersion(0, 0, 0, dataCenterId);
cctx.gridEvents().addLocalEventListener(discoLsnr, EVT_NODE_METRICS_UPDATED);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/TxVerboseId.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/TxVerboseId.java
index 0bb25ac..afd4547 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/TxVerboseId.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/tx/TxVerboseId.java
@@ -88,7 +88,7 @@ public class TxVerboseId extends IgniteDataTransferObject {
"either UUID or GridCacheVersion text representation: " + text);
}
- assert m.groupCount() == 3 : "Unexpected group count [cnt=" + m.groupCount() + ", pattern=" + regexPtrn + ']';
+ assert m.groupCount() == 4 : "Unexpected group count [cnt=" + m.groupCount() + ", pattern=" + regexPtrn + ']';
try {
return new TxVerboseId(null, new GridCacheVersion(
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheView.java b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheView.java
index e2c0932..72c663f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheView.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/systemview/view/CacheView.java
@@ -27,10 +27,13 @@ import org.apache.ignite.cache.affinity.AffinityKeyMapper;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.NearCacheConfiguration;
import org.apache.ignite.configuration.TopologyValidator;
+import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.managers.systemview.walker.Order;
import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
import org.apache.ignite.internal.processors.cache.CacheType;
import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
+import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
+import org.apache.ignite.internal.processors.cache.version.CacheVersionConflictResolver;
import static org.apache.ignite.internal.util.IgniteUtils.toStringSafe;
@@ -39,13 +42,18 @@ import static org.apache.ignite.internal.util.IgniteUtils.toStringSafe;
*/
public class CacheView {
/** Cache descriptor. */
- private DynamicCacheDescriptor cache;
+ private final DynamicCacheDescriptor cache;
+
+ /** Kernal context. */
+ private final GridKernalContext ctx;
/**
* @param cache Cache descriptor.
+ * @param ctx Kernal context.
*/
- public CacheView(DynamicCacheDescriptor cache) {
+ public CacheView(DynamicCacheDescriptor cache, GridKernalContext ctx) {
this.cache = cache;
+ this.ctx = ctx;
}
/** @see DynamicCacheDescriptor#groupId() */
@@ -370,4 +378,14 @@ public class CacheView {
public String dataRegionName() {
return cache.cacheConfiguration().getDataRegionName();
}
+
+ /** @see CacheVersionConflictResolver */
+ public String conflictResolver() {
+ IgniteInternalCache<Object, Object> cache = ctx.cache().cache(this.cache.cacheName());
+
+ if (cache == null || !cache.context().conflictNeedResolve())
+ return null;
+
+ return toStringSafe(cache.context().conflictResolver());
+ }
}
diff --git a/modules/core/src/test/java/org/apache/ignite/cdc/CdcCacheVersionTest.java b/modules/core/src/test/java/org/apache/ignite/cdc/CdcCacheVersionTest.java
index 050f4bc..efea107 100644
--- a/modules/core/src/test/java/org/apache/ignite/cdc/CdcCacheVersionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/cdc/CdcCacheVersionTest.java
@@ -49,10 +49,16 @@ import org.apache.ignite.plugin.AbstractCachePluginProvider;
import org.apache.ignite.plugin.AbstractTestPluginProvider;
import org.apache.ignite.plugin.CachePluginContext;
import org.apache.ignite.plugin.CachePluginProvider;
+import org.apache.ignite.spi.metric.IntMetric;
+import org.apache.ignite.spi.systemview.view.CacheView;
+import org.apache.ignite.spi.systemview.view.SystemView;
import org.jetbrains.annotations.Nullable;
import org.junit.Test;
import static org.apache.ignite.cluster.ClusterState.ACTIVE;
+import static org.apache.ignite.internal.processors.cache.CacheMetricsImpl.CACHE_METRICS;
+import static org.apache.ignite.internal.processors.cache.ClusterCachesInfo.CACHES_VIEW;
+import static org.apache.ignite.internal.processors.cache.version.GridCacheVersionManager.DATA_VER_CLUSTER_ID;
import static org.apache.ignite.testframework.GridTestUtils.runAsync;
import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
@@ -122,6 +128,27 @@ public class CdcCacheVersionTest extends AbstractCdcTest {
IgniteCache<Integer, User> cache = ign.getOrCreateCache(FOR_OTHER_CLUSTER_ID);
addAndWaitForConsumption(cnsmr, cfg, cache, null, this::addConflictData, 0, KEYS_CNT, true);
+
+ assertEquals(
+ DFLT_CLUSTER_ID,
+ ign.context().metric().registry(CACHE_METRICS).<IntMetric>findMetric(DATA_VER_CLUSTER_ID).value()
+ );
+
+ boolean found = false;
+
+ SystemView<CacheView> caches = ign.context().systemView().view(CACHES_VIEW);
+
+ for (CacheView v : caches) {
+ if (v.cacheName().equals(FOR_OTHER_CLUSTER_ID)) {
+ assertEquals(v.conflictResolver(), "TestCacheConflictResolutionManager");
+
+ found = true;
+ }
+ else
+ assertNull(v.conflictResolver());
+ }
+
+ assertTrue(found);
}
/** */
@@ -223,6 +250,10 @@ public class CdcCacheVersionTest extends AbstractCdcTest {
return res;
}
+
+ @Override public String toString() {
+ return "TestCacheConflictResolutionManager";
+ }
};
}
}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
index 77df9f6..12918ad 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheVersionSelfTest.java
@@ -47,10 +47,18 @@ public class GridCacheVersionSelfTest extends GridCommonAbstractTest {
ver = version(0x7FFFFFF, 15);
assertEquals(0x7FFFFFF, ver.nodeOrder());
assertEquals(15, ver.dataCenterId());
+ assertEquals(
+ ver.toString(),
+ "GridCacheVersion [topVer=0, order=0, nodeOrder=" + 0x7FFFFFF + ", dataCenterId=15]"
+ );
ver = version(0x7FFFFFF, 31);
assertEquals(0x7FFFFFF, ver.nodeOrder());
assertEquals(31, ver.dataCenterId());
+ assertEquals(
+ ver.toString(),
+ "GridCacheVersion [topVer=0, order=0, nodeOrder=" + 0x7FFFFFF + ", dataCenterId=31]"
+ );
// Check max dr ID with some topology versions.
ver = version(11, 31);