You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by el...@apache.org on 2020/10/09 12:39:56 UTC

[hadoop-ozone] branch master updated: HDDS-3814. Drop a column family through debug cli tool (#1083)

This is an automated email from the ASF dual-hosted git repository.

elek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 7704cb5  HDDS-3814. Drop a column family through debug cli tool (#1083)
7704cb5 is described below

commit 7704cb5f6920d6bbf6b446c28a2b3fe4408e0568
Author: maobaolong <ba...@tencent.com>
AuthorDate: Fri Oct 9 20:39:44 2020 +0800

    HDDS-3814. Drop a column family through debug cli tool (#1083)
---
 .../org/apache/hadoop/ozone/debug/DBScanner.java   | 18 ++---
 .../org/apache/hadoop/ozone/debug/DropTable.java   | 81 ++++++++++++++++++++++
 .../apache/hadoop/ozone/debug/RocksDBUtils.java    | 49 +++++++++++++
 3 files changed, 135 insertions(+), 13 deletions(-)

diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DBScanner.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DBScanner.java
index b1139df..1ceab42 100644
--- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DBScanner.java
+++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DBScanner.java
@@ -37,7 +37,6 @@ import com.google.gson.GsonBuilder;
 import org.kohsuke.MetaInfServices;
 import org.rocksdb.ColumnFamilyDescriptor;
 import org.rocksdb.ColumnFamilyHandle;
-import org.rocksdb.Options;
 import org.rocksdb.RocksDB;
 import org.rocksdb.RocksIterator;
 import picocli.CommandLine;
@@ -150,19 +149,12 @@ public class DBScanner implements Callable<Void>, SubcommandWithParent {
 
   @Override
   public Void call() throws Exception {
-    List<ColumnFamilyDescriptor> cfs = new ArrayList<>();
+    List<ColumnFamilyDescriptor> cfs =
+        RocksDBUtils.getColumnFamilyDescriptors(parent.getDbPath());
+
     final List<ColumnFamilyHandle> columnFamilyHandleList =
-            new ArrayList<>();
-    List<byte[]> cfList = null;
-    cfList = RocksDB.listColumnFamilies(new Options(),
-            parent.getDbPath());
-    if (cfList != null) {
-      for (byte[] b : cfList) {
-        cfs.add(new ColumnFamilyDescriptor(b));
-      }
-    }
-    RocksDB rocksDB = null;
-    rocksDB = RocksDB.openReadOnly(parent.getDbPath(),
+        new ArrayList<>();
+    RocksDB rocksDB = RocksDB.openReadOnly(parent.getDbPath(),
             cfs, columnFamilyHandleList);
     this.printAppropriateTable(columnFamilyHandleList,
            rocksDB, parent.getDbPath());
diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DropTable.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DropTable.java
new file mode 100644
index 0000000..161f1b2
--- /dev/null
+++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/DropTable.java
@@ -0,0 +1,81 @@
+/*
+ * 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.debug;
+
+import org.apache.hadoop.hdds.cli.SubcommandWithParent;
+import org.rocksdb.ColumnFamilyDescriptor;
+import org.rocksdb.ColumnFamilyHandle;
+import org.rocksdb.RocksDB;
+import picocli.CommandLine;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.Callable;
+
+/**
+ * Drop a column Family/Table in db.
+ */
+@CommandLine.Command(
+        name = "drop_column_family",
+        description = "drop column family in db."
+)
+public class DropTable implements Callable<Void>, SubcommandWithParent {
+
+  @CommandLine.Option(names = {"--column_family"},
+      description = "Table name")
+  private String tableName;
+
+  @CommandLine.ParentCommand
+  private RDBParser parent;
+
+  @Override
+  public Void call() throws Exception {
+    List<ColumnFamilyDescriptor> cfs =
+        RocksDBUtils.getColumnFamilyDescriptors(parent.getDbPath());
+    final List<ColumnFamilyHandle> columnFamilyHandleList =
+        new ArrayList<>();
+    try (RocksDB rocksDB = RocksDB.open(
+        parent.getDbPath(), cfs, columnFamilyHandleList)) {
+      byte[] nameBytes = tableName.getBytes(StandardCharsets.UTF_8);
+      ColumnFamilyHandle toBeDeletedCf = null;
+      for (ColumnFamilyHandle cf : columnFamilyHandleList) {
+        if (Arrays.equals(cf.getName(), nameBytes)) {
+          toBeDeletedCf = cf;
+          break;
+        }
+      }
+      if (toBeDeletedCf == null) {
+        System.err.println(tableName + " is not in a column family in DB "
+            + parent.getDbPath());
+      } else {
+        System.out.println(tableName + " will be deleted from DB "
+            + parent.getDbPath());
+        rocksDB.dropColumnFamily(toBeDeletedCf);
+      }
+    }
+    return null;
+  }
+
+  @Override
+  public Class<?> getParentType() {
+    return RDBParser.class;
+  }
+}
diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/RocksDBUtils.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/RocksDBUtils.java
new file mode 100644
index 0000000..24f6e21
--- /dev/null
+++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/RocksDBUtils.java
@@ -0,0 +1,49 @@
+/*
+ * 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.debug;
+
+import org.rocksdb.ColumnFamilyDescriptor;
+import org.rocksdb.Options;
+import org.rocksdb.RocksDB;
+import org.rocksdb.RocksDBException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * RocksDB specific utility functions.
+ */
+public final class RocksDBUtils {
+
+  /** Never constructed. **/
+  private RocksDBUtils() {
+  }
+
+  public static List<ColumnFamilyDescriptor> getColumnFamilyDescriptors(
+      String dbPath) throws RocksDBException {
+    List<ColumnFamilyDescriptor> cfs = new ArrayList<>();
+    List<byte[]> cfList = RocksDB.listColumnFamilies(new Options(), dbPath);
+    if (cfList != null) {
+      for (byte[] b : cfList) {
+        cfs.add(new ColumnFamilyDescriptor(b));
+      }
+    }
+    return cfs;
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: ozone-commits-help@hadoop.apache.org