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