This commit is contained in:
Andrea Cavalli 2022-04-30 02:14:44 +02:00
parent 654a62d7b8
commit 88a1add102
3 changed files with 16 additions and 30 deletions

View File

@ -938,8 +938,8 @@ public sealed abstract class AbstractRocksDBColumn<T extends RocksDB> implements
return newData; return newData;
} }
protected int getLastLevel() { protected int getLevels() {
return RocksDBUtils.getLastLevel(db, cfh); return RocksDBUtils.getLevels(db, cfh);
} }
@Override @Override

View File

@ -270,9 +270,9 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase {
.map(v -> v.compression().getType()) .map(v -> v.compression().getType())
.toList()); .toList());
} else { } else {
columnFamilyOptions.setNumLevels(6); columnFamilyOptions.setNumLevels(7);
List<CompressionType> compressionTypes = new ArrayList<>(6); List<CompressionType> compressionTypes = new ArrayList<>(7);
for (int i = 0; i < 6; i++) { for (int i = 0; i < 7; i++) {
if (i < 2) { if (i < 2) {
compressionTypes.add(CompressionType.NO_COMPRESSION); compressionTypes.add(CompressionType.NO_COMPRESSION);
} else { } else {
@ -561,17 +561,8 @@ public class LLLocalKeyValueDatabase implements LLKeyValueDatabase {
return paths.size() - 1; return paths.size() - 1;
} }
public int getLastLevel(Column column) { public int getLevels(Column column) {
return databaseOptions return RocksDBUtils.getLevels(db, handles.get(column));
.columnOptions()
.stream()
.filter(namedColumnOptions -> namedColumnOptions.columnName().equals(column.name()))
.findFirst()
.map(NamedColumnOptions::levels)
.filter(levels -> !levels.isEmpty())
.or(() -> Optional.of(databaseOptions.defaultColumnOptions().levels()).filter(levels -> !levels.isEmpty()))
.map(List::size)
.orElse(6);
} }
public List<String> getColumnFiles(Column column, boolean excludeLastLevel) { public List<String> getColumnFiles(Column column, boolean excludeLastLevel) {

View File

@ -21,21 +21,16 @@ import reactor.core.scheduler.Schedulers;
public class RocksDBUtils { public class RocksDBUtils {
public static int getLastLevel(RocksDB db, ColumnFamilyHandle cfh) { public static int getLevels(RocksDB db, ColumnFamilyHandle cfh) {
var lastLevel = db.numberLevels(cfh); return db.numberLevels(cfh);
if (lastLevel == 0) {
return 6;
} else {
return lastLevel;
}
} }
public static List<String> getColumnFiles(RocksDB db, ColumnFamilyHandle cfh, boolean excludeLastLevel) { public static List<String> getColumnFiles(RocksDB db, ColumnFamilyHandle cfh, boolean excludeLastLevel) {
List<String> files = new ArrayList<>(); List<String> files = new ArrayList<>();
var meta = db.getColumnFamilyMetaData(cfh); var meta = db.getColumnFamilyMetaData(cfh);
var lastLevel = excludeLastLevel ? getLastLevel(db, cfh) : -1; var lastLevelId = excludeLastLevel ? (getLevels(db, cfh) - 1) : -1;
for (LevelMetaData level : meta.levels()) { for (LevelMetaData level : meta.levels()) {
if (!excludeLastLevel || level.level() < lastLevel) { if (!excludeLastLevel || level.level() < lastLevelId) {
for (SstFileMetaData file : level.files()) { for (SstFileMetaData file : level.files()) {
if (file.fileName().endsWith(".sst")) { if (file.fileName().endsWith(".sst")) {
files.add(file.fileName()); files.add(file.fileName());
@ -65,23 +60,23 @@ public class RocksDBUtils {
} else { } else {
partitions = List.of(filesToCompact); partitions = List.of(filesToCompact);
} }
int finalBottommostLevel = getLastLevel(db, cfh); int finalBottommostLevelId = getLevels(db, cfh) - 1;
Mono.whenDelayError(partitions.stream().map(partition -> Mono.<Void>fromCallable(() -> { Mono.whenDelayError(partitions.stream().map(partition -> Mono.<Void>fromCallable(() -> {
logger.info("Compacting {} files in database {} in column family {} to level {}", logger.info("Compacting {} files in database {} in column family {} to level {}",
partition.size(), partition.size(),
logDbName, logDbName,
new String(cfh.getName(), StandardCharsets.UTF_8), new String(cfh.getName(), StandardCharsets.UTF_8),
finalBottommostLevel finalBottommostLevelId
); );
if (!partition.isEmpty()) { if (!partition.isEmpty()) {
var coi = new CompactionJobInfo(); var coi = new CompactionJobInfo();
try { try {
db.compactFiles(co, cfh, partition, finalBottommostLevel, volumeId, coi); db.compactFiles(co, cfh, partition, finalBottommostLevelId, volumeId, coi);
logger.info("Compacted {} files in database {} in column family {} to level {}: {}", logger.info("Compacted {} files in database {} in column family {} to level {}: {}",
partition.size(), partition.size(),
logDbName, logDbName,
new String(cfh.getName(), StandardCharsets.UTF_8), new String(cfh.getName(), StandardCharsets.UTF_8),
finalBottommostLevel, finalBottommostLevelId,
coi.status().getCodeString() coi.status().getCodeString()
); );
} catch (Throwable ex) { } catch (Throwable ex) {
@ -89,7 +84,7 @@ public class RocksDBUtils {
partition.size(), partition.size(),
logDbName, logDbName,
new String(cfh.getName(), StandardCharsets.UTF_8), new String(cfh.getName(), StandardCharsets.UTF_8),
finalBottommostLevel, finalBottommostLevelId,
ex ex
); );
} }