You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2017/01/11 01:01:20 UTC

[28/50] incubator-quickstep git commit: Refactored the database init code.

Refactored the database init code.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/f673f945
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/f673f945
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/f673f945

Branch: refs/heads/quickstep_partition_parser_support
Commit: f673f94561e104c62d0441f1ded04737e23b0ba0
Parents: 54e0654
Author: Zuyu Zhang <zu...@apache.org>
Authored: Sun Nov 20 23:55:22 2016 -0800
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Sun Nov 20 23:55:22 2016 -0800

----------------------------------------------------------------------
 cli/CMakeLists.txt           |  8 +++-
 cli/DefaultsConfigurator.cpp | 77 +++++++++++++++++++++++++++++++++++++++
 cli/DefaultsConfigurator.hpp | 10 +++++
 cli/QuickstepCli.cpp         | 36 +-----------------
 4 files changed, 94 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f673f945/cli/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt
index 9847787..9b62af9 100644
--- a/cli/CMakeLists.txt
+++ b/cli/CMakeLists.txt
@@ -75,7 +75,7 @@ else()
                         quickstep_utility_Macros)
 endif()
 
-add_library(quickstep_cli_DefaultsConfigurator ../empty_src.cpp DefaultsConfigurator.hpp)
+add_library(quickstep_cli_DefaultsConfigurator DefaultsConfigurator.cpp DefaultsConfigurator.hpp)
 add_library(quickstep_cli_InputParserUtil InputParserUtil.cpp InputParserUtil.hpp)
 add_library(quickstep_cli_PrintToScreen PrintToScreen.cpp PrintToScreen.hpp)
 
@@ -106,10 +106,14 @@ target_link_libraries(quickstep_cli_CommandExecutor
                       quickstep_utility_SqlError)
 
 target_link_libraries(quickstep_cli_DefaultsConfigurator
+                      glog
+                      quickstep_catalog_Catalog
+                      quickstep_catalog_Catalog_proto
+                      quickstep_catalog_CatalogDatabase
                       quickstep_utility_Macros)
 if(QUICKSTEP_HAVE_LIBNUMA)
   target_link_libraries(quickstep_cli_DefaultsConfigurator
-                      ${LIBNUMA_LIBRARY})
+                        ${LIBNUMA_LIBRARY})
 endif()
 target_link_libraries(quickstep_cli_Flags
                       quickstep_cli_DefaultsConfigurator

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f673f945/cli/DefaultsConfigurator.cpp
----------------------------------------------------------------------
diff --git a/cli/DefaultsConfigurator.cpp b/cli/DefaultsConfigurator.cpp
new file mode 100644
index 0000000..355031c
--- /dev/null
+++ b/cli/DefaultsConfigurator.cpp
@@ -0,0 +1,77 @@
+/**
+ * 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 "cli/DefaultsConfigurator.hpp"
+
+#include "cli/CliConfig.h"  // For QUICKSTEP_OS_WINDOWS.
+
+#ifdef QUICKSTEP_OS_WINDOWS
+#include <experimental/filesystem>
+#else
+#include <cstdlib>
+#endif  // QUICKSTEP_OS_WINDOWS
+
+#include <fstream>
+#include <string>
+
+#include "catalog/Catalog.hpp"
+#include "catalog/Catalog.pb.h"
+#include "catalog/CatalogDatabase.hpp"
+
+#include "glog/logging.h"
+
+using std::string;
+
+namespace quickstep {
+
+void DefaultsConfigurator::InitializeDefaultDatabase(const string &storage_path, const string &catalog_path) {
+  // TODO(jmp): Refactor the code in this file!
+  LOG(INFO) << "Initializing the database, creating a new catalog file and storage directory";
+
+  // Create the directory
+  // TODO(jmp): At some point, likely in C++-17, we will just have the
+  //            filesystem path, and we can clean this up
+#ifdef QUICKSTEP_OS_WINDOWS
+  CHECK(std::experimental::filesystem::create_directories(storage_path))
+      << "Failed when attempting to create the directory: " << storage_path
+      << "\nCheck if the directory already exists. If so, delete it or move it before initializing";
+#else
+  {
+    const string path_name = "mkdir " + storage_path;
+    CHECK(std::system(path_name.c_str()))
+         << "Failed when attempting to create the directory: " << storage_path;
+  }
+#endif  // QUICKSTEP_OS_WINDOWS
+
+  // Create the default catalog file.
+  std::ofstream catalog_file(catalog_path.c_str());
+  CHECK(catalog_file.good())
+      << "ERROR: Unable to open " << catalog_path << " for writing.";
+
+  Catalog catalog;
+  catalog.addDatabase(new CatalogDatabase(nullptr, "default"));
+
+  CHECK(catalog.getProto().SerializeToOstream(&catalog_file))
+      << "ERROR: Unable to serialize catalog proto to file " << catalog_path;
+
+  // Close the catalog file - it will be reopened below by the QueryProcessor.
+  catalog_file.close();
+}
+
+}  // namespace quickstep

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f673f945/cli/DefaultsConfigurator.hpp
----------------------------------------------------------------------
diff --git a/cli/DefaultsConfigurator.hpp b/cli/DefaultsConfigurator.hpp
index 4fd62ac..4b534d6 100644
--- a/cli/DefaultsConfigurator.hpp
+++ b/cli/DefaultsConfigurator.hpp
@@ -27,6 +27,7 @@
 #endif  // QUICKSTEP_HAVE_LIBNUMA
 
 #include <cstddef>
+#include <string>
 #include <thread>  // NOLINT(build/c++11)
 
 #ifdef QUICKSTEP_HAVE_LIBNUMA
@@ -106,6 +107,15 @@ class DefaultsConfigurator {
     return 1;
   }
 
+  /**
+   * @brief Initialize the default database with no relations.
+   *
+   * @param storage_path The filesystem directory to store catalog.
+   * @param catalog_path The full path of the catalog file.
+   **/
+  static void InitializeDefaultDatabase(const std::string &storage_path,
+                                        const std::string &catalog_path);
+
  private:
   /**
    * @brief Private constructor to disable instantiation of the class.

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f673f945/cli/QuickstepCli.cpp
----------------------------------------------------------------------
diff --git a/cli/QuickstepCli.cpp b/cli/QuickstepCli.cpp
index 6a7c500..465793c 100644
--- a/cli/QuickstepCli.cpp
+++ b/cli/QuickstepCli.cpp
@@ -216,41 +216,7 @@ int main(int argc, char* argv[]) {
   string catalog_path(FLAGS_storage_path);
   catalog_path.append(kCatalogFilename);
   if (quickstep::FLAGS_initialize_db) {  // Initialize the database
-    // TODO(jmp): Refactor the code in this file!
-    LOG(INFO) << "Initializing the database, creating a new catalog file and storage directory\n";
-
-    // Create the directory
-    // TODO(jmp): At some point, likely in C++-17, we will just have the
-    //            filesystem path, and we can clean this up
-#ifdef QUICKSTEP_OS_WINDOWS
-    std::filesystem::create_directories(FLAGS_storage_path);
-    LOG(FATAL) << "Failed when attempting to create the directory: " << FLAGS_storage_path << "\n";
-    LOG(FATAL) << "Check if the directory already exists. If so, delete it or move it before initializing \n";
-#else
-    {
-      string path_name = "mkdir " + FLAGS_storage_path;
-      if (std::system(path_name.c_str())) {
-        LOG(FATAL) << "Failed when attempting to create the directory: " << FLAGS_storage_path << "\n";
-      }
-    }
-#endif
-
-    // Create the default catalog file.
-    std::ofstream catalog_file(catalog_path);
-    if (!catalog_file.good()) {
-      LOG(FATAL) << "ERROR: Unable to open " << kCatalogFilename << " for writing.\n";
-    }
-
-    quickstep::Catalog catalog;
-    catalog.addDatabase(new quickstep::CatalogDatabase(nullptr, "default"));
-
-    if (!catalog.getProto().SerializeToOstream(&catalog_file)) {
-      LOG(FATAL) << "ERROR: Unable to serialize catalog proto to file " << kCatalogFilename;
-      return 1;
-    }
-
-    // Close the catalog file - it will be reopened below by the QueryProcessor.
-    catalog_file.close();
+    DefaultsConfigurator::InitializeDefaultDatabase(FLAGS_storage_path, catalog_path);
   }
 
   // Setup QueryProcessor, including CatalogDatabase.