This is an automated email from the ASF dual-hosted git repository.
sarvekshayr 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 a3ca93ac435 HDDS-15342. Make RocksDB bottommost level compaction
options configurable for background compaction (#10419)
a3ca93ac435 is described below
commit a3ca93ac43554433b88ed2cf32fc313c3def1772
Author: Rishabh Patel <[email protected]>
AuthorDate: Sun Jul 19 22:44:33 2026 -0700
HDDS-15342. Make RocksDB bottommost level compaction options configurable
for background compaction (#10419)
---
.../common/src/main/resources/ozone-default.xml | 10 +++
.../ozone/repair/ldb/RocksDBManualCompaction.java | 15 ++--
.../apache/hadoop/ozone/repair/om/CompactOMDB.java | 14 ++--
.../hadoop/ozone/repair/ldb/TestLdbRepair.java | 2 +-
hadoop-ozone/common/pom.xml | 4 +
.../org/apache/hadoop/ozone/om/OMConfigKeys.java | 12 +++
.../compose/ozonesecure-ha/test-repair-tools.sh | 2 +-
.../hadoop/ozone/om/service/CompactDBUtil.java | 19 +++++
.../hadoop/ozone/om/service/CompactionService.java | 12 ++-
.../hadoop/ozone/om/service/TestCompactDBUtil.java | 92 ++++++++++++++++++++++
.../ozone/om/service/TestCompactionService.java | 33 ++++++++
pom.xml | 1 +
12 files changed, 193 insertions(+), 23 deletions(-)
diff --git a/hadoop-hdds/common/src/main/resources/ozone-default.xml
b/hadoop-hdds/common/src/main/resources/ozone-default.xml
index 6a6a78e58fb..ee5c752e65f 100644
--- a/hadoop-hdds/common/src/main/resources/ozone-default.xml
+++ b/hadoop-hdds/common/src/main/resources/ozone-default.xml
@@ -1600,6 +1600,16 @@
If this is empty, no column families are compacted.
</description>
</property>
+ <property>
+ <name>ozone.om.compaction.service.bottommost-level-compaction</name>
+ <value>kSkip</value>
+ <tag>OZONE, OM, PERFORMANCE</tag>
+ <description>
+ Bottommost level compaction type for compaction.
+ Invalid values will default to kSkip.
+ Valid values: kSkip, kIfHaveCompactionFilter, kForce, kForceOptimized.
+ </description>
+ </property>
<property>
<name>ozone.om.snapshot.compact.non.snapshot.diff.tables</name>
diff --git
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/ldb/RocksDBManualCompaction.java
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/ldb/RocksDBManualCompaction.java
index 0b89bb42418..1a2373b08fa 100644
---
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/ldb/RocksDBManualCompaction.java
+++
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/ldb/RocksDBManualCompaction.java
@@ -27,7 +27,6 @@
import org.apache.hadoop.hdds.utils.db.managed.ManagedDBOptions;
import org.apache.hadoop.hdds.utils.db.managed.ManagedRocksDB;
import org.apache.hadoop.ozone.debug.RocksDBUtils;
-import org.apache.hadoop.ozone.om.service.CompactDBUtil;
import org.apache.hadoop.ozone.repair.RepairTool;
import org.apache.hadoop.util.Time;
import org.rocksdb.ColumnFamilyDescriptor;
@@ -64,11 +63,11 @@ public class RocksDBManualCompaction extends RepairTool {
private String columnFamilyName;
@CommandLine.Option(names = {"--bottommost-level-compaction", "--blc"},
- description = "BottommostLevelCompaction option for RocksDB compaction."
+
- " Valid values: 0 (kSkip), 1 (kIfHaveCompactionFilter), 2 (kForce),
3 (kForceOptimized).",
- defaultValue = "0",
+ description = "BottommostLevelCompaction algorithm for RocksDB
compaction." +
+ " Valid values: ${COMPLETION-CANDIDATES}",
+ defaultValue = "kSkip",
showDefaultValue = CommandLine.Help.Visibility.ALWAYS)
- private int bottommostLevelCompaction;
+ private ManagedCompactRangeOptions.BottommostLevelCompaction
bottommostLevelCompaction;
private String getConsoleReadLineWithFormat() {
err().printf(WARNING_TO_STOP_SERVICE);
@@ -104,14 +103,12 @@ public void execute() throws Exception {
" is not in a column family in DB for the given path.");
}
- ManagedCompactRangeOptions.BottommostLevelCompaction blcOption =
-
CompactDBUtil.getBottommostLevelCompaction(bottommostLevelCompaction);
info("Running compaction on " + columnFamilyName +
- " with bottommost level compaction: " + blcOption.name());
+ " with bottommost level compaction: " +
bottommostLevelCompaction.name());
long startTime = Time.monotonicNow();
if (!isDryRun()) {
ManagedCompactRangeOptions compactOptions = new
ManagedCompactRangeOptions();
- compactOptions.setBottommostLevelCompaction(blcOption);
+ compactOptions.setBottommostLevelCompaction(bottommostLevelCompaction);
db.get().compactRange(cfh, null, null, compactOptions);
}
long duration = Time.monotonicNow() - startTime;
diff --git
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/om/CompactOMDB.java
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/om/CompactOMDB.java
index bef7c0419dc..a405944e91a 100644
---
a/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/om/CompactOMDB.java
+++
b/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/om/CompactOMDB.java
@@ -24,7 +24,6 @@
import org.apache.hadoop.ozone.OmUtils;
import org.apache.hadoop.ozone.om.helpers.OMNodeDetails;
import org.apache.hadoop.ozone.om.protocolPB.OMAdminProtocolClientSideImpl;
-import org.apache.hadoop.ozone.om.service.CompactDBUtil;
import org.apache.hadoop.ozone.repair.RepairTool;
import org.apache.hadoop.security.UserGroupInformation;
import picocli.CommandLine;
@@ -64,10 +63,10 @@ public class CompactOMDB extends RepairTool {
@CommandLine.Option(names = {"--bottommost-level-compaction", "--blc"},
description = "BottommostLevelCompaction option for RocksDB compaction."
+
- " Valid values: 0 (kSkip), 1 (kIfHaveCompactionFilter), 2 (kForce),
3 (kForceOptimized).",
- defaultValue = "0",
+ " Valid values: ${COMPLETION-CANDIDATES}",
+ defaultValue = "kSkip",
showDefaultValue = CommandLine.Help.Visibility.ALWAYS)
- private int bottommostLevelCompaction;
+ private ManagedCompactRangeOptions.BottommostLevelCompaction
bottommostLevelCompaction;
@Override
public void execute() throws Exception {
@@ -90,15 +89,14 @@ public void execute() throws Exception {
}
String omDisplay = nodeId != null ? nodeId :
omNodeDetails.getRpcAddressString();
- ManagedCompactRangeOptions.BottommostLevelCompaction blcOption =
- CompactDBUtil.getBottommostLevelCompaction(bottommostLevelCompaction);
if (!isDryRun()) {
try (OMAdminProtocolClientSideImpl omAdminProtocolClient =
OMAdminProtocolClientSideImpl.createProxyForSingleOM(conf,
UserGroupInformation.getCurrentUser(), omNodeDetails)) {
- omAdminProtocolClient.compactOMDB(columnFamilyName,
blcOption.getValue());
+ omAdminProtocolClient.compactOMDB(columnFamilyName,
bottommostLevelCompaction.getValue());
info("Compaction request issued for om.db of om node: %s,
column-family: %s" +
- " with bottommost level compaction: %s.", omDisplay,
columnFamilyName, blcOption.name());
+ " with bottommost level compaction: %s.",
+ omDisplay, columnFamilyName, bottommostLevelCompaction.name());
info("Please check role logs of %s for completion status.", omDisplay);
} catch (IOException ex) {
error("Couldn't compact column %s. \nException: %s", columnFamilyName,
ex);
diff --git
a/hadoop-ozone/cli-repair/src/test/java/org/apache/hadoop/ozone/repair/ldb/TestLdbRepair.java
b/hadoop-ozone/cli-repair/src/test/java/org/apache/hadoop/ozone/repair/ldb/TestLdbRepair.java
index af5001ed174..29602b2679c 100644
---
a/hadoop-ozone/cli-repair/src/test/java/org/apache/hadoop/ozone/repair/ldb/TestLdbRepair.java
+++
b/hadoop-ozone/cli-repair/src/test/java/org/apache/hadoop/ozone/repair/ldb/TestLdbRepair.java
@@ -126,7 +126,7 @@ public void testRocksDBManualCompaction() throws Exception {
String[] args = {
"--db", dbPath.toString(),
"--column-family", TEST_CF_NAME,
- "--blc", "2"
+ "--blc", "kForce"
};
// Pass two "y" inputs - one for user confirmation and the other for
warning to stop service
int exitCode = withTextFromSystemIn("y", "y")
diff --git a/hadoop-ozone/common/pom.xml b/hadoop-ozone/common/pom.xml
index a5318a66f83..c5fc6aeb27b 100644
--- a/hadoop-ozone/common/pom.xml
+++ b/hadoop-ozone/common/pom.xml
@@ -121,6 +121,10 @@
<groupId>org.apache.ratis</groupId>
<artifactId>ratis-thirdparty-misc</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.rocksdb</groupId>
+ <artifactId>rocksdbjni</artifactId>
+ </dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
diff --git
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
index 02b270070ed..66cea2763fd 100644
---
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
+++
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/OMConfigKeys.java
@@ -22,6 +22,7 @@
import org.apache.hadoop.hdds.client.ReplicationType;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.ratis.util.TimeDuration;
+import org.rocksdb.CompactRangeOptions.BottommostLevelCompaction;
/**
* Ozone Manager Constants.
@@ -693,6 +694,17 @@ public final class OMConfigKeys {
public static final String
OZONE_OM_COMPACTION_SERVICE_COLUMNFAMILIES_DEFAULT =
"keyTable,fileTable,directoryTable,deletedTable,deletedDirectoryTable,multipartInfoTable,multipartPartsTable";
+ /**
+ * Bottommost level compaction type for manual compaction.
+ * Invalid values will default to kSkip.
+ * Valid values: kSkip, kIfHaveCompactionFilter, kForce, kForceOptimized.
+ * Refer to {@code
org.rocksdb.CompactRangeOptions.BottommostLevelCompaction}.
+ */
+ public static final String
OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION =
+ "ozone.om.compaction.service.bottommost-level-compaction";
+ public static final BottommostLevelCompaction
+ OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION_DEFAULT =
BottommostLevelCompaction.kSkip;
+
/**
* Configuration to enable/disable non-snapshot diff table compaction when
snapshots are evicted from cache.
*/
diff --git
a/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-repair-tools.sh
b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-repair-tools.sh
index 1e8f2d78eb2..ee00dd95840 100644
--- a/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-repair-tools.sh
+++ b/hadoop-ozone/dist/src/main/compose/ozonesecure-ha/test-repair-tools.sh
@@ -112,7 +112,7 @@ check_om_log() {
compact_om_db() {
for cf in "$@"; do
- execute_command_in_container ${OM} ozone repair om compact --cf="${cf}"
--service-id "${OM_SERVICE_ID}" --node-id "${OM}" --blc 2
+ execute_command_in_container ${OM} ozone repair om compact --cf="${cf}"
--service-id "${OM_SERVICE_ID}" --node-id "${OM}" --blc kForce
retry check_om_log "$cf"
done
}
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactDBUtil.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactDBUtil.java
index 73c54f2586d..d21a655cf9b 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactDBUtil.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactDBUtil.java
@@ -20,9 +20,11 @@
import java.io.IOException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.utils.db.RDBStore;
import org.apache.hadoop.hdds.utils.db.RocksDatabase;
import org.apache.hadoop.hdds.utils.db.managed.ManagedCompactRangeOptions;
+import org.apache.hadoop.ozone.om.OMConfigKeys;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.util.Time;
import org.slf4j.Logger;
@@ -74,6 +76,23 @@ public static CompletableFuture<Void>
compactTableAsync(OMMetadataManager metada
});
}
+ public static ManagedCompactRangeOptions.BottommostLevelCompaction
getBottommostLevelCompaction(
+ OzoneConfiguration configuration) {
+ ManagedCompactRangeOptions.BottommostLevelCompaction blc =
+
OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION_DEFAULT;
+
+ try {
+ blc = configuration.getEnum(
+ OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION,
+
OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION_DEFAULT);
+ } catch (IllegalArgumentException e) {
+ LOG.warn("Invalid value for bottommost level compaction configuration
'{}'",
+
configuration.get(OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION),
e);
+ }
+
+ return blc;
+ }
+
/**
* Converts the given RocksDB id to a
* {@link ManagedCompactRangeOptions.BottommostLevelCompaction} enum value.
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactionService.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactionService.java
index 34c7a8ff867..053efcbace6 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactionService.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/CompactionService.java
@@ -54,6 +54,7 @@ public class CompactionService extends BackgroundService {
private final AtomicBoolean suspended;
// list of tables that can be compacted
private final List<String> compactableTables;
+ private final ManagedCompactRangeOptions.BottommostLevelCompaction
bottommostLevelCompaction;
public CompactionService(OzoneManager ozoneManager, TimeUnit unit, long
interval, long timeout,
List<String> tables) {
@@ -66,6 +67,7 @@ public CompactionService(OzoneManager ozoneManager, TimeUnit
unit, long interval
this.numCompactions = new AtomicLong(0);
this.suspended = new AtomicBoolean(false);
this.compactableTables = validateTables(tables);
+ this.bottommostLevelCompaction =
CompactDBUtil.getBottommostLevelCompaction(ozoneManager.getConfiguration());
}
private List<String> validateTables(List<String> tables) {
@@ -109,6 +111,10 @@ public List<String> getCompactableTables() {
return compactableTables;
}
+ ManagedCompactRangeOptions.BottommostLevelCompaction
getBottommostLevelCompaction() {
+ return bottommostLevelCompaction;
+ }
+
/**
* Returns the number of manual compactions performed.
*
@@ -142,13 +148,11 @@ private boolean shouldRun() {
* @return CompletableFuture that completes when compaction finishes
*/
public CompletableFuture<Void> compactTableAsync(String tableName) {
- return CompactDBUtil.compactTableAsync(omMetadataManager, tableName,
- ManagedCompactRangeOptions.BottommostLevelCompaction.kForce);
+ return CompactDBUtil.compactTableAsync(omMetadataManager, tableName,
bottommostLevelCompaction);
}
protected void compactFully(String tableName) throws IOException {
- CompactDBUtil.compactTable(omMetadataManager, tableName,
- ManagedCompactRangeOptions.BottommostLevelCompaction.kForce);
+ CompactDBUtil.compactTable(omMetadataManager, tableName,
bottommostLevelCompaction);
}
private class CompactTask implements BackgroundTask {
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactDBUtil.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactDBUtil.java
new file mode 100644
index 00000000000..f757549c8eb
--- /dev/null
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactDBUtil.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.om.service;
+
+import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION;
+import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION_DEFAULT;
+import static org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_DB_DIRS;
+import static
org.apache.hadoop.ozone.om.service.CompactDBUtil.getBottommostLevelCompaction;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.utils.db.managed.ManagedCompactRangeOptions;
+import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
+import org.junit.jupiter.params.provider.ValueSource;
+
+/**
+ * Tests for {@link CompactDBUtil}.
+ */
+class TestCompactDBUtil {
+
+ private OMMetadataManager omMetadataManager;
+
+ @BeforeEach
+ void setup(@TempDir File tempDir) throws Exception {
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.set(OZONE_OM_DB_DIRS, tempDir.getAbsolutePath());
+ omMetadataManager = new OmMetadataManagerImpl(conf, null);
+ }
+
+ @ParameterizedTest
+ @EnumSource(ManagedCompactRangeOptions.BottommostLevelCompaction.class)
+ void
testCompactionAlgorithms(ManagedCompactRangeOptions.BottommostLevelCompaction
bottommostLevelCompaction) {
+ assertDoesNotThrow(() ->
+ CompactDBUtil.compactTable(omMetadataManager, "keyTable",
bottommostLevelCompaction));
+ }
+
+ @Test
+ void testCompactInvalidColumnFamily() {
+ assertThrows(IOException.class, () ->
+ CompactDBUtil.compactTable(omMetadataManager, "nonExistentTable",
+ ManagedCompactRangeOptions.BottommostLevelCompaction.kSkip));
+ }
+
+ @Test
+ void testDefaultConfigValueMapsToKSkip() {
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kSkip,
+ OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION_DEFAULT);
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"", "kForceeee"})
+ void testDefaultConfigKeyIsReadFromOzoneConfiguration(String compactionType)
{
+ // unset or invalid values should use the default value
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.set(OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION,
compactionType);
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kSkip,
getBottommostLevelCompaction(conf));
+ }
+
+ @ParameterizedTest
+ @ValueSource(strings = {"kForce", " kForce", "kForce ", " kForce "})
+ void testConfigKeyIsReadFromOzoneConfiguration(String compactionType) {
+ // have trailing spaces in the config values to ensure they are trimmed
and handled correctly
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.set(OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION,
compactionType);
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kForce,
getBottommostLevelCompaction(conf));
+ }
+}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactionService.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactionService.java
index d2542315670..4299abd6253 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactionService.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestCompactionService.java
@@ -17,8 +17,10 @@
package org.apache.hadoop.ozone.om.service;
+import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION;
import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_ENABLED;
import static
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_COMPACTION_SERVICE_RUN_INTERVAL;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -39,6 +41,7 @@
import org.apache.hadoop.hdds.server.ServerUtils;
import org.apache.hadoop.hdds.utils.db.DBConfigFromFile;
import org.apache.hadoop.hdds.utils.db.TypedTable;
+import org.apache.hadoop.hdds.utils.db.managed.ManagedCompactRangeOptions;
import org.apache.hadoop.ozone.om.OMConfigKeys;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
@@ -74,6 +77,7 @@ void setup(@TempDir Path tempDir) {
ozoneManager = mock(OzoneManager.class);
OMMetadataManager metadataManager = mock(OMMetadataManager.class);
when(ozoneManager.getMetadataManager()).thenReturn(metadataManager);
+ when(ozoneManager.getConfiguration()).thenReturn(conf);
TypedTable table = mock(TypedTable.class);
Set<String> tables = new HashSet<>();
@@ -159,6 +163,35 @@ public void testCompactFailure() {
() -> getCompactionService(compactTables));
}
+ @Test
+ public void testDefaultCompactionLevelIsKSkip() {
+ CompactionService compactionService =
getCompactionService(Arrays.asList("keyTable", "fileTable"));
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kSkip,
+ compactionService.getBottommostLevelCompaction());
+ }
+
+ @Test
+ public void testConfiguredCompactionLevelKForce() {
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.set(OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION, "kForce");
+ when(ozoneManager.getConfiguration()).thenReturn(conf);
+
+ CompactionService compactionService =
getCompactionService(Arrays.asList("keyTable", "fileTable"));
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kForce,
+ compactionService.getBottommostLevelCompaction());
+ }
+
+ @Test
+ public void testInvalidCompactionLevelFallsBackToDefault() {
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.set(OZONE_OM_COMPACTION_SERVICE_BOTTOMMOSTLEVELCOMPACTION,
"kForceeeee");
+ when(ozoneManager.getConfiguration()).thenReturn(conf);
+
+ CompactionService compactionService =
getCompactionService(Arrays.asList("keyTable", "fileTable"));
+ assertEquals(ManagedCompactRangeOptions.BottommostLevelCompaction.kSkip,
+ compactionService.getBottommostLevelCompaction());
+ }
+
private CompactionService getCompactionService(List<String> compactTables) {
CompactionService compactionService = new CompactionService(ozoneManager,
TimeUnit.MILLISECONDS,
TimeUnit.SECONDS.toMillis(SERVICE_INTERVAL),
TimeUnit.SECONDS.toMillis(60), compactTables) {
diff --git a/pom.xml b/pom.xml
index dba5db5c157..f06d57e84a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1972,6 +1972,7 @@
<allowedImports>
<!-- Allow non-RocksObject classes. -->
<allowedImport>org.rocksdb.ColumnFamilyDescriptor</allowedImport>
+
<allowedImport>org.rocksdb.CompactRangeOptions.BottommostLevelCompaction</allowedImport>
<allowedImport>org.rocksdb.CompactionStyle</allowedImport>
<allowedImport>org.rocksdb.KeyMayExist</allowedImport>
<allowedImport>org.rocksdb.HistogramData</allowedImport>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]