This is an automated email from the ASF dual-hosted git repository.
prashantpogde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 22c8f55e74 HDDS-9118. Added an invalidateCacheEntry() in
RocksDBCheckpointDifferHolder to close cached instance of
RocksDBCheckpointDiffer (#5145)
22c8f55e74 is described below
commit 22c8f55e74b7a7cbbecdbe1bc3a0662d8e085fb8
Author: Hemant Kumar <[email protected]>
AuthorDate: Thu Aug 3 18:42:53 2023 -0700
HDDS-9118. Added an invalidateCacheEntry() in RocksDBCheckpointDifferHolder
to close cached instance of RocksDBCheckpointDiffer (#5145)
---
.../org/apache/hadoop/hdds/utils/db/RDBStore.java | 11 ++++--
.../ozone/rocksdiff/RocksDBCheckpointDiffer.java | 45 +++++++++++++++-------
2 files changed, 39 insertions(+), 17 deletions(-)
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
index 5536cdddd2..7ccb01d79f 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
@@ -100,8 +100,10 @@ public class RDBStore implements DBStore {
if (enableCompactionDag) {
rocksDBCheckpointDiffer = RocksDBCheckpointDifferHolder.getInstance(
getSnapshotMetadataDir(),
- DB_COMPACTION_SST_BACKUP_DIR, DB_COMPACTION_LOG_DIR,
- dbLocation.toString(), configuration);
+ DB_COMPACTION_SST_BACKUP_DIR,
+ DB_COMPACTION_LOG_DIR,
+ dbLocation.toString(),
+ configuration);
rocksDBCheckpointDiffer.setRocksDBForCompactionTracking(dbOptions);
} else {
rocksDBCheckpointDiffer = null;
@@ -217,7 +219,10 @@ public class RDBStore implements DBStore {
RDBMetrics.unRegister();
IOUtils.closeQuietly(checkPointManager);
- IOUtils.closeQuietly(rocksDBCheckpointDiffer);
+ if (rocksDBCheckpointDiffer != null) {
+ RocksDBCheckpointDifferHolder
+ .invalidateCacheEntry(rocksDBCheckpointDiffer.getMetadataDir());
+ }
IOUtils.closeQuietly(db);
}
diff --git
a/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/RocksDBCheckpointDiffer.java
b/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/RocksDBCheckpointDiffer.java
index b508a9dc0d..74472f5405 100644
---
a/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/RocksDBCheckpointDiffer.java
+++
b/hadoop-hdds/rocksdb-checkpoint-differ/src/main/java/org/apache/ozone/rocksdiff/RocksDBCheckpointDiffer.java
@@ -27,8 +27,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
@@ -36,6 +34,8 @@ import java.util.concurrent.atomic.AtomicReference;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
+import org.apache.hadoop.hdds.utils.IOUtils;
+import org.apache.hadoop.hdds.utils.Scheduler;
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksIterator;
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB;
import org.apache.ozone.rocksdb.util.RdbUtil;
@@ -176,14 +176,15 @@ public class RocksDBCheckpointDiffer implements
AutoCloseable,
private long reconstructionSnapshotGeneration;
private String reconstructionLastSnapshotID;
- private final ScheduledExecutorService executor;
- private boolean closed;
+ private final Scheduler scheduler;
+ private volatile boolean closed;
private final long maxAllowedTimeInDag;
private final BootstrapStateHandler.Lock lock
= new BootstrapStateHandler.Lock();
private ColumnFamilyHandle snapshotInfoTableCFHandle;
private final AtomicInteger tarballRequestCount;
+ private final String dagPruningServiceName = "CompactionDagPruningService";
/**
* This is a package private constructor and should not be used other than
@@ -229,21 +230,23 @@ public class RocksDBCheckpointDiffer implements
AutoCloseable,
TimeUnit.MILLISECONDS);
if (pruneCompactionDagDaemonRunIntervalInMs > 0) {
- this.executor = Executors.newSingleThreadScheduledExecutor();
- this.executor.scheduleWithFixedDelay(
+ this.scheduler = new Scheduler(dagPruningServiceName,
+ true, 1);
+
+ this.scheduler.scheduleWithFixedDelay(
this::pruneOlderSnapshotsWithCompactionHistory,
pruneCompactionDagDaemonRunIntervalInMs,
pruneCompactionDagDaemonRunIntervalInMs,
TimeUnit.MILLISECONDS);
- this.executor.scheduleWithFixedDelay(
+ this.scheduler.scheduleWithFixedDelay(
this::pruneSstFiles,
pruneCompactionDagDaemonRunIntervalInMs,
pruneCompactionDagDaemonRunIntervalInMs,
TimeUnit.MILLISECONDS
);
} else {
- this.executor = null;
+ this.scheduler = null;
}
this.tarballRequestCount = new AtomicInteger(0);
}
@@ -326,13 +329,17 @@ public class RocksDBCheckpointDiffer implements
AutoCloseable,
appendToCurrentCompactionLog("");
}
+
@Override
- public void close() {
- synchronized (this) {
- if (!closed) {
- closed = true;
- if (executor != null) {
- executor.shutdown();
+ public void close() throws Exception {
+ if (!closed) {
+ synchronized (this) {
+ if (!closed) {
+ closed = true;
+ if (scheduler != null) {
+ LOG.info("Shutting down {}.", dagPruningServiceName);
+ scheduler.close();
+ }
}
}
}
@@ -1540,6 +1547,16 @@ public class RocksDBCheckpointDiffer implements
AutoCloseable,
activeDBLocationName,
configuration));
}
+
+ /**
+ * Close RocksDBCheckpointDiffer object if value is present for the key.
+ * @param cacheKey cacheKey is metadataDirName path which is used as key
+ * for cache.
+ */
+ public static void invalidateCacheEntry(String cacheKey) {
+ IOUtils.closeQuietly(INSTANCE_MAP.get(cacheKey));
+ INSTANCE_MAP.remove(cacheKey);
+ }
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]