You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zh...@apache.org on 2019/11/25 01:32:51 UTC

[incubator-doris] branch master updated: Replace boost::split() with strings::Split() in storage options (#2277)

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

zhaoc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 1a97bac  Replace boost::split() with strings::Split() in storage options (#2277)
1a97bac is described below

commit 1a97bacc3204adbf01b2580a2cfa2bb87271defa
Author: LingBin <li...@gmail.com>
AuthorDate: Sun Nov 24 19:32:41 2019 -0600

    Replace boost::split() with strings::Split() in storage options (#2277)
---
 be/src/olap/options.cpp | 75 +++++++++++++++++++++++++++++--------------------
 1 file changed, 44 insertions(+), 31 deletions(-)

diff --git a/be/src/olap/options.cpp b/be/src/olap/options.cpp
index 58f1ae1..8717ae3 100644
--- a/be/src/olap/options.cpp
+++ b/be/src/olap/options.cpp
@@ -17,26 +17,35 @@
 
 #include "olap/options.h"
 
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/split.hpp>
+#include <algorithm>
 
 #include "common/logging.h"
-
 #include "olap/utils.h"
 
+#include "gutil/strings/split.h"
+
 namespace doris {
 
+static std::string CAPACITY_UC = "CAPACITY";
+static std::string MEDIUM_UC = "MEDIUM";
+static std::string SSD_UC = "SSD";
+static std::string HDD_UC = "HDD";
+
+// TODO: should be a general util method
+std::string to_upper(const std::string& str) {
+    std::string out = str;
+    std::transform(out.begin(), out.end(), out.begin(), ::toupper);
+    return out;
+}
+
 // compatible with old multi path configuration:
-// /path1,2014;/path2,2048
+// /path1,1024;/path2,2048
 OLAPStatus parse_root_path(const std::string& root_path, StorePath* path) {
     try {
-        std::vector<std::string> tmp_vec;
-        boost::split(tmp_vec, root_path, boost::is_any_of(","),
-                     boost::token_compress_on);
+        std::vector<std::string> tmp_vec = strings::Split(root_path, ",", strings::SkipWhitespace());
 
         // parse root path name
-        boost::trim(tmp_vec[0]);
+        StripWhiteSpace(&tmp_vec[0]);
         tmp_vec[0].erase(tmp_vec[0].find_last_not_of("/") + 1);
         if (tmp_vec[0].empty() || tmp_vec[0][0] != '/') {
             LOG(WARNING) << "invalid store path. path=" << tmp_vec[0];
@@ -45,33 +54,38 @@ OLAPStatus parse_root_path(const std::string& root_path, StorePath* path) {
         path->path = tmp_vec[0];
 
         // parse root path capacity and storage medium
-        std::string capacity_str, medium_str;
+        std::string capacity_str;
+        std::string medium_str;
 
         boost::filesystem::path boost_path = tmp_vec[0];
-        std::string extension =
-            boost::filesystem::canonical(boost_path).extension().string();
+        std::string extension = boost::filesystem::canonical(boost_path).extension().string();
         if (!extension.empty()) {
-            medium_str = extension.substr(1);
+            medium_str = to_upper(extension.substr(1));
         }
 
         for (int i = 1; i < tmp_vec.size(); i++) {
             // <property>:<value> or <value>
-            std::string property, value;
-            std::size_t found = tmp_vec[i].find(':');
-            if (found != std::string::npos) {
-                property = boost::trim_copy(tmp_vec[i].substr(0, found));
-                value = boost::trim_copy(tmp_vec[i].substr(found + 1));
+            std::string property;
+            std::string value;
+            std::pair<std::string, std::string> pair = strings::Split(
+                    tmp_vec[i], strings::delimiter::Limit(":", 1));
+            if (!pair.second.empty()) {
+                property = to_upper(pair.first);
+                value = pair.second;
             } else {
                 // <value> only supports setting capacity
-                property = "capacity";
-                value = boost::trim_copy(tmp_vec[i]);
+                property = CAPACITY_UC;
+                value = tmp_vec[i];
             }
-            if (boost::iequals(property, "capacity")) {
+
+            StripWhiteSpace(&property);
+            StripWhiteSpace(&value);
+            if (property == CAPACITY_UC) {
                 capacity_str = value;
-            } else if (boost::iequals(property, "medium")) {
+            } else if (property == MEDIUM_UC) {
                 // property 'medium' has a higher priority than the extension of
                 // path, so it can override medium_str
-                medium_str = value;
+                medium_str = to_upper(value);
             } else {
                 LOG(WARNING) << "invalid property of store path, " << property;
                 return OLAP_ERR_INPUT_PARAMETER_ERROR;
@@ -80,8 +94,8 @@ OLAPStatus parse_root_path(const std::string& root_path, StorePath* path) {
 
         path->capacity_bytes = -1;
         if (!capacity_str.empty()) {
-            if (!valid_signed_number<int64_t>(capacity_str) ||
-                strtol(capacity_str.c_str(), NULL, 10) < 0) {
+            if (!valid_signed_number<int64_t>(capacity_str)
+                    || strtol(capacity_str.c_str(), NULL, 10) < 0) {
                 LOG(WARNING) << "invalid capacity of store path, capacity="
                              << capacity_str;
                 return OLAP_ERR_INPUT_PARAMETER_ERROR;
@@ -92,9 +106,9 @@ OLAPStatus parse_root_path(const std::string& root_path, StorePath* path) {
 
         path->storage_medium = TStorageMedium::HDD;
         if (!medium_str.empty()) {
-            if (boost::iequals(medium_str, "ssd")) {
+            if (medium_str == SSD_UC) {
                 path->storage_medium = TStorageMedium::SSD;
-            } else if (boost::iequals(medium_str, "hdd")) {
+            } else if (medium_str == HDD_UC) {
                 path->storage_medium = TStorageMedium::HDD;
             } else {
                 LOG(WARNING) << "invalid storage medium. medium=" << medium_str;
@@ -112,10 +126,9 @@ OLAPStatus parse_root_path(const std::string& root_path, StorePath* path) {
 OLAPStatus parse_conf_store_paths(const std::string& config_path,
                                   std::vector<StorePath>* paths) {
     try {
-        std::vector<std::string> item_vec;
-        boost::split(item_vec, config_path, boost::is_any_of(";"),
-                     boost::token_compress_on);
-        for (auto& item : item_vec) {
+        std::vector<std::string> path_vec = strings::Split(
+                config_path, ";", strings::SkipWhitespace());
+        for (auto& item : path_vec) {
             StorePath path;
             auto res = parse_root_path(item, &path);
             if (res != OLAP_SUCCESS) {


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