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

ibessonov 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 499b168339f IGNITE-25031 Remove unnecessary locks from some 
meta-storage operations (#5572)
499b168339f is described below

commit 499b168339f6d17d22bb7df9cb064fc44c10817c
Author: Ivan Bessonov <[email protected]>
AuthorDate: Fri Apr 4 15:21:46 2025 +0300

    IGNITE-25031 Remove unnecessary locks from some meta-storage operations 
(#5572)
---
 .../server/AbstractKeyValueStorage.java            |  4 +---
 .../server/persistence/RocksDbKeyValueStorage.java | 26 ++--------------------
 2 files changed, 3 insertions(+), 27 deletions(-)

diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorage.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorage.java
index 6714b89c25a..6c7f88e344a 100644
--- 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorage.java
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorage.java
@@ -70,10 +70,8 @@ public abstract class AbstractKeyValueStorage implements 
KeyValueStorage {
 
     /**
      * Revision. Will be incremented for each single-entry or multi-entry 
update operation.
-     *
-     * <p>Multi-threaded access is guarded by {@link #rwLock}.</p>
      */
-    protected long rev;
+    protected volatile long rev;
 
     /**
      * Last compaction revision that was set or restored from a snapshot.
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
index cd5ecbc0a3e..44868363501 100644
--- 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
@@ -565,23 +565,15 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
 
     @Override
     public void setIndexAndTerm(long index, long term) {
-        rwLock.writeLock().lock();
-
-        try (WriteBatch batch = new WriteBatch()) {
-            data.put(batch, INDEX_AND_TERM_KEY, longsToBytes(0, index, term));
-
-            db.write(writeOptions, batch);
+        try {
+            db.put(data.handle(), writeOptions, INDEX_AND_TERM_KEY, 
longsToBytes(0, index, term));
         } catch (RocksDBException e) {
             throw new MetaStorageException(OP_EXECUTION_ERR, e);
-        } finally {
-            rwLock.writeLock().unlock();
         }
     }
 
     @Override
     public @Nullable IndexWithTerm getIndexWithTerm() {
-        rwLock.readLock().lock();
-
         try {
             byte[] bytes = data.get(INDEX_AND_TERM_KEY);
 
@@ -592,8 +584,6 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
             return new IndexWithTerm(bytesToLong(bytes, 0), bytesToLong(bytes, 
Long.BYTES));
         } catch (RocksDBException e) {
             throw new MetaStorageException(OP_EXECUTION_ERR, e);
-        } finally {
-            rwLock.readLock().unlock();
         }
     }
 
@@ -1281,8 +1271,6 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
 
     @Override
     public HybridTimestamp timestampByRevision(long revision) {
-        rwLock.readLock().lock();
-
         try {
             assertRequestedRevisionLessThanOrEqualToCurrent(revision, rev);
 
@@ -1295,15 +1283,11 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
             return hybridTimestamp(bytesToLong(tsBytes));
         } catch (RocksDBException e) {
             throw new MetaStorageException(OP_EXECUTION_ERR, "Error reading 
revision timestamp: " + revision, e);
-        } finally {
-            rwLock.readLock().unlock();
         }
     }
 
     @Override
     public long revisionByTimestamp(HybridTimestamp timestamp) {
-        rwLock.readLock().lock();
-
         // Find a revision with timestamp lesser or equal to the timestamp.
         try (RocksIterator rocksIterator = tsToRevision.newIterator()) {
             rocksIterator.seekForPrev(hybridTsToArray(timestamp));
@@ -1319,8 +1303,6 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
             return bytesToLong(tsValue);
         } catch (RocksDBException e) {
             throw new MetaStorageException(OP_EXECUTION_ERR, e);
-        } finally {
-            rwLock.readLock().unlock();
         }
     }
 
@@ -1395,16 +1377,12 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
 
     @Override
     public long checksum(long revision) {
-        rwLock.readLock().lock();
-
         try {
             assertRequestedRevisionLessThanOrEqualToCurrent(revision, rev);
 
             return checksumByRevision(revision);
         } catch (RocksDBException e) {
             throw new MetaStorageException(INTERNAL_ERR, "Cannot get checksum 
by revision: " + revision, e);
-        } finally {
-            rwLock.readLock().unlock();
         }
     }
 

Reply via email to