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();
}
}