Skip to content

Commit

Permalink
HDDS-11746. Add option to pass DBDefinition for RDPParser commands
Browse files Browse the repository at this point in the history
  • Loading branch information
tejaskriya committed Dec 17, 2024
1 parent 3648b59 commit a890c9c
Show file tree
Hide file tree
Showing 8 changed files with 62 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import org.apache.hadoop.hdds.StringUtils;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.utils.db.DBColumnFamilyDefinition;
import org.apache.hadoop.hdds.utils.db.LongCodec;
import org.apache.hadoop.hdds.utils.CollectionUtils;
Expand Down Expand Up @@ -79,6 +80,10 @@ public DatanodeSchemaOneDBDefinition(String dbPath,
super(dbPath, config);
}

public DatanodeSchemaOneDBDefinition(String dbPath) {
super(dbPath, new OzoneConfiguration());
}

@Override
public DBColumnFamilyDefinition<String, BlockData>
getBlockDataColumnFamily() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import com.google.common.primitives.Longs;
import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.DeletedBlocksTransaction;
import org.apache.hadoop.hdds.utils.db.DBColumnFamilyDefinition;
import org.apache.hadoop.hdds.utils.db.DBDefinition;
Expand Down Expand Up @@ -124,6 +125,10 @@ public DatanodeSchemaThreeDBDefinition(String dbPath,
LAST_CHUNK_INFO.setCfOptions(cfOptions);
}

public DatanodeSchemaThreeDBDefinition(String dbPath) {
super(dbPath, new OzoneConfiguration());
}

@Override
public Map<String, DBColumnFamilyDefinition<?, ?>> getMap() {
return COLUMN_FAMILIES;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package org.apache.hadoop.ozone.container.metadata;

import org.apache.hadoop.hdds.conf.ConfigurationSource;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
import org.apache.hadoop.hdds.utils.db.DBColumnFamilyDefinition;
import org.apache.hadoop.hdds.utils.db.DBDefinition;
import org.apache.hadoop.hdds.utils.db.FixedLengthStringCodec;
Expand Down Expand Up @@ -79,6 +80,10 @@ public DatanodeSchemaTwoDBDefinition(String dbPath,
super(dbPath, config);
}

public DatanodeSchemaTwoDBDefinition(String dbPath) {
super(dbPath, new OzoneConfiguration());
}

private static final Map<String, DBColumnFamilyDefinition<?, ?>>
COLUMN_FAMILIES = DBColumnFamilyDefinition.newUnmodifiableMap(
BLOCK_DATA,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ protected SCMDBDefinition(Map<String, DBColumnFamilyDefinition<?, ?>> map) {
super(map);
}

public SCMDBDefinition() {
this(COLUMN_FAMILIES);
}

@Override
public String getName() {
return "scm.db";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package org.apache.hadoop.ozone.debug;

import java.lang.reflect.Constructor;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -98,6 +99,36 @@ public static DBDefinition getDefinition(Path dbPath,
return getDefinition(dbName);
}

public static DBDefinition getDefinition(Path dbName, ConfigurationSource config, String overrideDBDef) {
if (overrideDBDef == null) {
return getDefinition(dbName, config);
}
try {
Class<?> clazz = Class.forName(overrideDBDef);
if (DBDefinition.class.isAssignableFrom(clazz)) {
DBDefinition instance;
try {
Constructor<?> noParamConstructor = clazz.getDeclaredConstructor();
noParamConstructor.setAccessible(true);
instance = (DBDefinition) noParamConstructor.newInstance();
} catch (NoSuchMethodException e) {
Constructor<?> stringParamConstructor = clazz.getDeclaredConstructor(String.class);
stringParamConstructor.setAccessible(true);
instance = (DBDefinition) stringParamConstructor.newInstance(dbName.toAbsolutePath().toString());
}
return instance;
} else {
System.err.println("Class does not implement DBDefinition: " + overrideDBDef);
}
} catch (ClassNotFoundException e) {
System.err.println("Class not found: " + overrideDBDef);
} catch (InstantiationException | IllegalAccessException | NoSuchMethodException |
SecurityException | java.lang.reflect.InvocationTargetException e) {
System.err.println("Error creating instance: " + e.getMessage());
}
return null;
}

private static DBDefinition getReconDBDefinition(String dbName) {
if (dbName.startsWith(RECON_CONTAINER_KEY_DB)) {
return new ReconDBDefinition(dbName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,7 @@ private boolean printTable(List<ColumnFamilyHandle> columnFamilyHandleList,
dbPath = removeTrailingSlashIfNeeded(dbPath);
DBDefinitionFactory.setDnDBSchemaVersion(dnDBSchemaVersion);
DBDefinition dbDefinition = DBDefinitionFactory.getDefinition(
Paths.get(dbPath), new OzoneConfiguration());
Paths.get(dbPath), new OzoneConfiguration(), parent.getDbDefinition());
if (dbDefinition == null) {
err().println("Error: Incorrect DB Path");
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ public class RDBParser implements Callable<Void>, DebugSubcommand {
description = "Database File Path")
private String dbPath;

@CommandLine.Option(names = {"--schema"},
description = "DBDefinition of the database")
private String dbDefinition;

public String getDbPath() {
return dbPath;
}
Expand All @@ -59,6 +63,10 @@ public void setDbPath(String dbPath) {
this.dbPath = dbPath;
}

public String getDbDefinition() {
return dbDefinition;
}

@Override
public Void call() throws Exception {
GenericCli.missingSubcommand(spec);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public Void call() throws Exception {

String dbPath = parent.getDbPath();
Map<String, Object> fields = new HashMap<>();
success = getValueFields(dbPath, fields, depth, tableName, dnDBSchemaVersion);
success = getValueFields(dbPath, fields, depth, tableName, dnDBSchemaVersion, parent.getDbDefinition());

out().println(JsonUtils.toJsonStringWithDefaultPrettyPrinter(fields));

Expand All @@ -100,11 +100,11 @@ public Void call() throws Exception {
}

public static boolean getValueFields(String dbPath, Map<String, Object> valueSchema, int d, String table,
String dnDBSchemaVersion) {
String dnDBSchemaVersion, String dbDef) {

dbPath = removeTrailingSlashIfNeeded(dbPath);
DBDefinitionFactory.setDnDBSchemaVersion(dnDBSchemaVersion);
DBDefinition dbDefinition = DBDefinitionFactory.getDefinition(Paths.get(dbPath), new OzoneConfiguration());
DBDefinition dbDefinition = DBDefinitionFactory.getDefinition(Paths.get(dbPath), new OzoneConfiguration(), dbDef);
if (dbDefinition == null) {
err().println("Error: Incorrect DB Path");
return false;
Expand Down

0 comments on commit a890c9c

Please sign in to comment.