goiri commented on a change in pull request #3532:
URL: https://github.com/apache/hadoop/pull/3532#discussion_r726268863



##########
File path: 
hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tools/hdfs-delete-snapshot/hdfs-delete-snapshot.cc
##########
@@ -0,0 +1,133 @@
+/*
+  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.
+*/
+
+#include <iostream>
+#include <memory>
+#include <ostream>
+#include <sstream>
+#include <string>
+
+#include "hdfs-delete-snapshot.h"
+#include "tools_common.h"
+
+namespace hdfs::tools {
+DeleteSnapshot::DeleteSnapshot(const int argc, char **argv)
+    : HdfsTool(argc, argv) {}
+
+bool DeleteSnapshot::Initialize() {
+  auto add_options = opt_desc_.add_options();
+  add_options("help,h", "Show the help for hdfs_deleteSnapshot");
+  add_options("path", po::value<std::string>(),
+              "The path to the directory that is snapshot-able");
+  add_options("name", po::value<std::string>(), "The name of the snapshot");
+
+  // Register "path" and "name" as positional arguments.
+  // We allow only two arguments to be passed to this tool. An exception is
+  // thrown if more than two arguments are passed.
+  pos_opt_desc_.add("path", 1);
+  pos_opt_desc_.add("name", 1);
+
+  po::store(po::command_line_parser(argc_, argv_)
+                .options(opt_desc_)
+                .positional(pos_opt_desc_)
+                .run(),
+            opt_val_);
+  po::notify(opt_val_);
+  return true;
+}
+
+bool DeleteSnapshot::ValidateConstraints() const {
+  // Only "help" is allowed as single argument
+  if (argc_ == 2) {
+    if (opt_val_.count("help") > 0) {
+      return true;
+    }
+    return false;
+  }
+
+  // Rest of the cases must contain more than 1 argument on the command line
+  return argc_ > 2;
+}
+
+std::string DeleteSnapshot::GetDescription() const {
+  std::stringstream desc;
+  desc << "Usage: hdfs_deleteSnapshot [OPTION] PATH NAME" << std::endl
+       << std::endl
+       << "Delete a snapshot NAME from a snapshot-able directory." << std::endl
+       << "This operation requires owner privilege of the snapshot-able "
+          "directory."
+       << std::endl
+       << std::endl
+       << "  -h        display this help and exit" << std::endl
+       << std::endl
+       << "Examples:" << std::endl
+       << "hdfs_deleteSnapshot hdfs://localhost.localdomain:8020/dir 
mySnapshot"
+       << std::endl
+       << "hdfs_deleteSnapshot /dir1/dir2 mySnapshot" << std::endl;
+  return desc.str();
+}
+
+bool DeleteSnapshot::Do() {
+  if (!Initialize()) {
+    std::cerr << "Unable to initialize HDFS delete snapshot tool" << std::endl;
+    return false;
+  }
+
+  if (!ValidateConstraints()) {
+    std::cout << GetDescription();
+    return false;
+  }
+
+  if (opt_val_.count("help") > 0) {

Review comment:
       This used to be `h` or `?`

##########
File path: 
hadoop-hdfs-project/hadoop-hdfs-native-client/src/main/native/libhdfspp/tools/hdfs_deleteSnapshot.cc
##########
@@ -1,87 +0,0 @@
-/*
-  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.
-*/
-
-#include <google/protobuf/stubs/common.h>
-#include <unistd.h>
-#include "tools_common.h"
-
-void usage(){
-  std::cout << "Usage: hdfs_deleteSnapshot [OPTION] PATH NAME"
-      << std::endl
-      << std::endl << "Delete a snapshot NAME from a snapshottable directory."
-      << std::endl << "This operation requires owner privilege of the 
snapshottable directory."
-      << std::endl
-      << std::endl << "  -h        display this help and exit"
-      << std::endl
-      << std::endl << "Examples:"
-      << std::endl << "hdfs_deleteSnapshot 
hdfs://localhost.localdomain:8020/dir mySnapshot"
-      << std::endl << "hdfs_deleteSnapshot /dir1/dir2 mySnapshot"
-      << std::endl;
-}
-
-int main(int argc, char *argv[]) {
-  //We should have at least 2 arguments
-  if (argc < 2) {
-    usage();
-    exit(EXIT_FAILURE);
-  }
-
-  int input;
-
-  //Using GetOpt to read in the values
-  opterr = 0;
-  while ((input = getopt(argc, argv, "h")) != -1) {

Review comment:
       Was `getopt` the only non compatible thing?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to