You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2022/08/17 14:23:25 UTC

[ignite-3] branch ignite-17354-review created (now 7588d4ca49)

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

agura pushed a change to branch ignite-17354-review
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


      at 7588d4ca49 IGNITE-17354 Review fixes in MetricRegistry related to concurrency and thread-safety issues.

This branch includes the following new commits:

     new fb98441d09 Merge branch 'main' into ignite-17354
     new 7588d4ca49 IGNITE-17354 Review fixes in MetricRegistry related to concurrency and thread-safety issues.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ignite-3] 02/02: IGNITE-17354 Review fixes in MetricRegistry related to concurrency and thread-safety issues.

Posted by ag...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 7588d4ca49d407d9a5f4a2b188769383df10a1b8
Author: Andrey Gura <ag...@apache.org>
AuthorDate: Wed Aug 17 17:22:24 2022 +0300

    IGNITE-17354 Review fixes in MetricRegistry related to concurrency and thread-safety issues.
---
 .../ignite/internal/metrics/MetricRegistry.java    | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricRegistry.java b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricRegistry.java
index d0b8e19087..fdcd6a574e 100644
--- a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricRegistry.java
+++ b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/MetricRegistry.java
@@ -20,13 +20,10 @@ package org.apache.ignite.internal.metrics;
 import static java.util.Collections.emptyMap;
 import static java.util.Collections.unmodifiableMap;
 import static java.util.Objects.requireNonNull;
-import static java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.TreeMap;
-import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.NotNull;
@@ -37,10 +34,7 @@ import org.jetbrains.annotations.NotNull;
  * provides access to all enabled metrics through corresponding metrics sets. Metrics registry lifetime is equal to the node lifetime.
  */
 public class MetricRegistry {
-    private static final AtomicReferenceFieldUpdater<MetricRegistry, IgniteBiTuple> metricSnapshotUpdater =
-            newUpdater(MetricRegistry.class, IgniteBiTuple.class, "metricSnapshot");
-
-    private final Lock lock = new ReentrantLock();
+    private final ReentrantLock lock = new ReentrantLock();
 
     /** Registered metric sources. */
     private final Map<String, MetricSource> sources = new HashMap<>();
@@ -224,6 +218,8 @@ public class MetricRegistry {
      */
     @NotNull
     private MetricSource checkAndGetRegistered(@NotNull MetricSource src) {
+        assert lock.isHeldByCurrentThread() : "Access to shared state from an incorrect thread " + Thread.currentThread().getName();
+
         requireNonNull(src);
 
         MetricSource registered = sources.get(src.name());
@@ -247,6 +243,8 @@ public class MetricRegistry {
      * @param metricSet Metric set.
      */
     private void addMetricSet(String srcName, MetricSet metricSet) {
+        assert lock.isHeldByCurrentThread() : "Access to a shared state from an incorrect thread " + Thread.currentThread().getName();
+
         Map<String, MetricSet> metricSets = new TreeMap<>(metricSnapshot.get1());
 
         metricSets.put(srcName, metricSet);
@@ -261,6 +259,8 @@ public class MetricRegistry {
      * @param srcName Metric source name.
      */
     private void removeMetricSet(String srcName) {
+        assert lock.isHeldByCurrentThread() : "Access to a shared state from an incorrect thread " + Thread.currentThread().getName();
+
         Map<String, MetricSet> metricSets = new TreeMap<>(metricSnapshot.get1());
 
         metricSets.remove(srcName);
@@ -274,13 +274,11 @@ public class MetricRegistry {
      * @param metricSets New map of metric sets that should be saved to new version of metric snapshot.
      */
     private void updateMetricSnapshot(Map<String, MetricSet> metricSets) {
-        IgniteBiTuple<Map<String, MetricSet>, Long> old = metricSnapshot;
-
-        long newVersion = old.get2() + 1;
+        assert lock.isHeldByCurrentThread() : "Access to shared state from an incorrect thread " + Thread.currentThread().getName();
 
-        IgniteBiTuple<Map<String, MetricSet>, Long> newMetricSnapshot = new IgniteBiTuple<>(unmodifiableMap(metricSets), newVersion);
+        IgniteBiTuple<Map<String, MetricSet>, Long> old = metricSnapshot;
 
-        metricSnapshotUpdater.compareAndSet(this, old, newMetricSnapshot);
+        metricSnapshot = new IgniteBiTuple<>(unmodifiableMap(metricSets), old.get2() + 1);
     }
 
     /**


[ignite-3] 01/02: Merge branch 'main' into ignite-17354

Posted by ag...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fb98441d09491b60d70e4338855f724e941ff40f
Merge: 4778f40894 68f1dec4cc
Author: Andrey Gura <ag...@apache.org>
AuthorDate: Wed Aug 17 01:04:39 2022 +0300

    Merge branch 'main' into ignite-17354

 .../ignite/internal/pagememory/Storable.java       |   2 +-
 .../pagememory/persistence/PartitionMeta.java      |  74 ---
 .../pagememory/persistence/io/PartitionMetaIo.java |  56 +--
 .../internal/pagememory/freelist/TestDataRow.java  |   2 +-
 .../persistence/PartitionMetaManagerTest.java      |  12 +-
 .../pagememory/persistence/PartitionMetaTest.java  |  62 +--
 .../persistence/checkpoint/CheckpointerTest.java   |   2 +-
 .../internal/storage/engine/StorageEngine.java     |   4 +-
 .../storage/ConcurrentHashMapStorageTest.java      |  83 ----
 .../chm/TestConcurrentHashMapPartitionStorage.java | 295 ------------
 .../chm/TestConcurrentHashMapStorageEngine.java    |   9 +-
 .../chm/TestConcurrentHashMapTableStorage.java     | 105 -----
 .../AbstractPageMemoryPartitionStorage.java        | 487 --------------------
 .../pagememory/AbstractPageMemoryTableStorage.java |  82 +---
 .../storage/pagememory/FragmentedByteArray.java    |  94 ----
 .../pagememory/PageMemoryStorageIoModule.java      |  43 --
 .../PersistentPageMemoryPartitionStorage.java      | 165 -------
 .../PersistentPageMemoryStorageEngine.java         |   9 +-
 .../PersistentPageMemoryTableStorage.java          | 148 ------
 .../internal/storage/pagememory/TableDataRow.java  | 111 -----
 .../storage/pagememory/TableDataRowAdapter.java    |  63 ---
 .../internal/storage/pagememory/TableFreeList.java | 100 -----
 .../storage/pagememory/TableSearchRow.java         |  65 ---
 .../internal/storage/pagememory/TableTree.java     | 329 --------------
 .../pagememory/VolatilePageMemoryDataRegion.java   |  36 --
 .../VolatilePageMemoryPartitionStorage.java        |  41 --
 .../VolatilePageMemoryStorageEngine.java           |   8 +-
 .../pagememory/VolatilePageMemoryTableStorage.java |  44 +-
 .../internal/storage/pagememory/io/RowIo.java      |  39 --
 .../storage/pagememory/io/TableDataIo.java         | 174 -------
 .../storage/pagememory/io/TableInnerIo.java        | 113 -----
 .../storage/pagememory/io/TableLeafIo.java         | 112 -----
 .../storage/pagememory/io/TableMetaIo.java         |  42 --
 .../mv/AbstractPageMemoryMvPartitionStorage.java   |  14 +-
 .../storage/pagememory/mv/PartitionlessLinks.java  |  14 +-
 .../storage/pagememory/mv/ReadRowVersion.java      |  11 +-
 .../storage/pagememory/mv/ReadRowVersionValue.java |   2 +
 .../internal/storage/pagememory/mv/RowVersion.java |  34 +-
 .../pagememory/mv/ScanVersionChainByTimestamp.java |  12 +-
 .../internal/storage/pagememory/mv/Timestamps.java |  24 +-
 .../storage/pagememory/mv/VersionChain.java        |  14 +-
 .../mv/VolatilePageMemoryMvPartitionStorage.java   |   4 +-
 ...ache.ignite.internal.pagememory.io.PageIoModule |   1 -
 .../PersistentPageMemoryPartitionStorageTest.java  | 177 --------
 .../VolatilePageMemoryPartitionStorageTest.java    | 166 -------
 ...PersistentPageMemoryMvPartitionStorageTest.java |   2 +-
 .../VolatilePageMemoryMvPartitionStorageTest.java  |   2 +-
 .../storage/rocksdb/RocksDbFlushListener.java      |   8 +-
 .../storage/rocksdb/RocksDbMvPartitionStorage.java |  39 +-
 .../storage/rocksdb/RocksDbPartitionStorage.java   | 500 ---------------------
 .../storage/rocksdb/RocksDbStorageEngine.java      |   9 +-
 .../storage/rocksdb/RocksDbTableStorage.java       | 119 +++--
 .../rocksdb/RocksDbMvPartitionStorageTest.java     |   2 +-
 .../storage/rocksdb/RocksDbTableStorageTest.java   |  33 +-
 54 files changed, 212 insertions(+), 3986 deletions(-)