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

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


The following commit(s) were added to refs/heads/master by this push:
     new 13a45ab73 feat(log): Redacted user key-values printed in logs (#1598)
13a45ab73 is described below

commit 13a45ab73fc99b4b87d7683a7cc0d4b67c1ee98f
Author: Samunroyu <[email protected]>
AuthorDate: Wed Oct 18 20:23:57 2023 +0800

    feat(log): Redacted user key-values printed in logs (#1598)
    
    https://github.com/apache/incubator-pegasus/issues/1575
    
    User key-values will be redacted if encryption enabled.
---
 src/base/pegasus_utils.h                       | 23 +++++++
 src/base/test/redact_sensitive_string_test.cpp | 69 +++++++++++++++++++++
 src/geo/lib/geo_client.cpp                     | 59 +++++++++---------
 src/server/hotkey_collector.cpp                |  6 +-
 src/server/pegasus_server_impl.cpp             | 84 +++++++++++++-------------
 src/server/pegasus_server_write.cpp            |  4 +-
 src/server/pegasus_write_service_impl.h        | 14 ++---
 src/server/rocksdb_wrapper.cpp                 | 12 ++--
 8 files changed, 183 insertions(+), 88 deletions(-)

diff --git a/src/base/pegasus_utils.h b/src/base/pegasus_utils.h
index b52120968..20c65b926 100644
--- a/src/base/pegasus_utils.h
+++ b/src/base/pegasus_utils.h
@@ -28,8 +28,11 @@
 #include <string>
 #include <vector>
 
+#include "utils/flags.h"
 #include "utils/string_view.h"
 
+DSN_DECLARE_bool(encrypt_data_at_rest);
+
 namespace dsn {
 class rpc_address;
 } // namespace dsn
@@ -40,6 +43,7 @@ namespace utils {
 // it's seconds since 2016.01.01-00:00:00 GMT
 const uint32_t epoch_begin = 1451606400;
 inline uint32_t epoch_now() { return time(nullptr) - epoch_begin; }
+const static std::string kRedactedString = "<redacted>";
 
 // extract "host" from rpc_address
 void addr2host(const ::dsn::rpc_address &addr, char *str, int len);
@@ -97,6 +101,15 @@ std::string c_escape_string(const T &src, bool 
always_escape = false)
     return s;
 }
 
+template <class T>
+std::string c_escape_sensitive_string(const T &src, bool always_escape = false)
+{
+    if (FLAGS_encrypt_data_at_rest) {
+        return kRedactedString;
+    }
+    return c_escape_string(src, always_escape);
+}
+
 // ----------------------------------------------------------------------
 // c_unescape_string()
 //    Copies 'src' to 'dest', unescaping '0xFF'-style escape sequences to
@@ -106,6 +119,16 @@ std::string c_escape_string(const T &src, bool 
always_escape = false)
 // ----------------------------------------------------------------------
 int c_unescape_string(const std::string &src, std::string &dest);
 
+template <class T>
+const std::string &redact_sensitive_string(const T &src)
+{
+    if (FLAGS_encrypt_data_at_rest) {
+        return kRedactedString;
+    } else {
+        return src;
+    }
+}
+
 inline dsn::string_view to_string_view(rocksdb::Slice s) { return {s.data(), 
s.size()}; }
 
 inline rocksdb::Slice to_rocksdb_slice(dsn::string_view s) { return {s.data(), 
s.size()}; }
diff --git a/src/base/test/redact_sensitive_string_test.cpp 
b/src/base/test/redact_sensitive_string_test.cpp
new file mode 100644
index 000000000..d0bbcd7c6
--- /dev/null
+++ b/src/base/test/redact_sensitive_string_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * 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.
+ */
+
+// IWYU pragma: no_include <gtest/gtest-message.h>
+// IWYU pragma: no_include <gtest/gtest-test-part.h>
+#include <gtest/gtest.h>
+#include <string>
+
+#include "base/pegasus_utils.h"
+
+const std::string test_string = "pegasus";
+
+TEST(pegasus_utils, redact_sensitive_string)
+{
+    FLAGS_encrypt_data_at_rest = true;
+    auto result_string = pegasus::utils::redact_sensitive_string(test_string);
+    ASSERT_EQ(pegasus::utils::kRedactedString, result_string);
+}
+
+TEST(pegasus_utils, redact_sensitive_string_with_encrypt)
+{
+    FLAGS_encrypt_data_at_rest = false;
+    auto result_string = pegasus::utils::redact_sensitive_string(test_string);
+    ASSERT_EQ("pegasus", result_string);
+}
+
+TEST(pegasus_utils, c_escape_sensitive_string_with_no_encrypt_and_escape)
+{
+    FLAGS_encrypt_data_at_rest = false;
+    auto result_string = 
pegasus::utils::c_escape_sensitive_string(test_string, false);
+    ASSERT_EQ("pegasus", result_string);
+}
+
+TEST(pegasus_utils, c_escape_sensitive_string_with_no_encrypt)
+{
+    FLAGS_encrypt_data_at_rest = false;
+    auto result_string = 
pegasus::utils::c_escape_sensitive_string(test_string, true);
+    ASSERT_EQ("\\x70\\x65\\x67\\x61\\x73\\x75\\x73", result_string);
+}
+
+TEST(pegasus_utils, c_escape_sensitive_string_with_encrypt)
+{
+    FLAGS_encrypt_data_at_rest = true;
+    auto result_string = 
pegasus::utils::c_escape_sensitive_string(test_string, false);
+    ASSERT_EQ(pegasus::utils::kRedactedString, result_string);
+}
+
+TEST(pegasus_utils, c_escape_sensitive_string_with_encrypt_and_escape)
+{
+    FLAGS_encrypt_data_at_rest = true;
+    auto result_string = 
pegasus::utils::c_escape_sensitive_string(test_string, true);
+    ASSERT_EQ(pegasus::utils::kRedactedString, result_string);
+}
diff --git a/src/geo/lib/geo_client.cpp b/src/geo/lib/geo_client.cpp
index 0d4927695..31953fa81 100644
--- a/src/geo/lib/geo_client.cpp
+++ b/src/geo/lib/geo_client.cpp
@@ -138,8 +138,8 @@ int geo_client::set(const std::string &hash_key,
     auto async_set_callback = [&](int ec_, pegasus_client::internal_info 
&&info_) {
         if (ec_ != PERR_OK) {
             LOG_ERROR("set data failed. hash_key={}, sort_key={}, error={}",
-                      hash_key,
-                      sort_key,
+                      utils::redact_sensitive_string(hash_key),
+                      utils::redact_sensitive_string(sort_key),
                       get_error_string(ec_));
             ret = ec_;
         }
@@ -186,8 +186,8 @@ void geo_client::async_set(const std::string &hash_key,
                     if (ec_ != PERR_OK) {
                         LOG_ERROR("set {} data failed. hash_key={}, 
sort_key={}, error={}",
                                   data_type_ == DataType::common ? "common" : 
"geo",
-                                  hash_key,
-                                  sort_key,
+                                  utils::redact_sensitive_string(hash_key),
+                                  utils::redact_sensitive_string(sort_key),
                                   get_error_string(ec_));
                         *ret = ec_;
                     }
@@ -238,8 +238,8 @@ int geo_client::get(const std::string &hash_key,
             lng_degrees = lng_degrees_;
         } else {
             LOG_WARNING("get data failed. hash_key={}, sort_key={}, error={}",
-                        hash_key,
-                        sort_key,
+                        utils::redact_sensitive_string(hash_key),
+                        utils::redact_sensitive_string(sort_key),
                         get_error_string(ec_));
         }
         ret = ec_;
@@ -269,8 +269,8 @@ void geo_client::async_get(const std::string &hash_key,
             S2LatLng latlng;
             if (!_codec.decode_from_value(value_, latlng)) {
                 LOG_ERROR("decode_from_value failed. hash_key={}, sort_key={}, 
value={}",
-                          hash_key,
-                          sort_key,
+                          utils::redact_sensitive_string(hash_key),
+                          utils::redact_sensitive_string(sort_key),
                           value_);
                 cb(PERR_GEO_DECODE_VALUE_ERROR, id, 0, 0);
                 return;
@@ -290,8 +290,8 @@ int geo_client::del(const std::string &hash_key,
     auto async_del_callback = [&](int ec_, pegasus_client::internal_info 
&&info_) {
         if (ec_ != PERR_OK) {
             LOG_ERROR("del data failed. hash_key={}, sort_key={}, error={}",
-                      hash_key,
-                      sort_key,
+                      utils::redact_sensitive_string(hash_key),
+                      utils::redact_sensitive_string(sort_key),
                       get_error_string(ec_));
             ret = ec_;
         }
@@ -358,8 +358,8 @@ void geo_client::async_del(const std::string &hash_key,
                     if (ec__ != PERR_OK) {
                         LOG_ERROR("del {} data failed. hash_key={}, 
sort_key={}, error={}",
                                   data_type_ == DataType::common ? "common" : 
"geo",
-                                  hash_key,
-                                  sort_key,
+                                  utils::redact_sensitive_string(hash_key),
+                                  utils::redact_sensitive_string(sort_key),
                                   get_error_string(ec_));
                         *ret = ec__;
                     }
@@ -391,8 +391,8 @@ int geo_client::set_geo_data(const std::string &hash_key,
         if (ec_ != PERR_OK) {
             ret = ec_;
             LOG_ERROR("set geo data failed. hash_key={}, sort_key={}, 
error={}",
-                      hash_key,
-                      sort_key,
+                      utils::redact_sensitive_string(hash_key),
+                      utils::redact_sensitive_string(sort_key),
                       get_error_string(ec_));
         }
         set_completed.notify();
@@ -521,8 +521,8 @@ void geo_client::async_search_radial(const std::string 
&hash_key,
         ](int ec_, std::string &&value_, pegasus_client::internal_info &&) 
mutable {
             if (ec_ != PERR_OK) {
                 LOG_ERROR("get failed. hash_key={}, sort_key={}, error={}",
-                          hash_key,
-                          sort_key,
+                          utils::redact_sensitive_string(hash_key),
+                          utils::redact_sensitive_string(sort_key),
                           get_error_string(ec_));
                 cb(ec_, {});
                 return;
@@ -531,8 +531,8 @@ void geo_client::async_search_radial(const std::string 
&hash_key,
             S2LatLng latlng;
             if (!_codec.decode_from_value(value_, latlng)) {
                 LOG_ERROR("decode_from_value failed. hash_key={}, sort_key={}, 
value={}",
-                          hash_key,
-                          sort_key,
+                          utils::redact_sensitive_string(hash_key),
+                          utils::redact_sensitive_string(sort_key),
                           value_);
                 cb(ec_, {});
                 return;
@@ -726,8 +726,8 @@ bool geo_client::generate_geo_keys(const std::string 
&hash_key,
     S2LatLng latlng;
     if (!_codec.decode_from_value(value, latlng)) {
         LOG_ERROR("decode_from_value failed. hash_key={}, sort_key={}, 
value={}",
-                  hash_key,
-                  sort_key,
+                  utils::redact_sensitive_string(hash_key),
+                  utils::redact_sensitive_string(sort_key),
                   value);
         return false;
     }
@@ -919,7 +919,8 @@ void 
geo_client::do_scan(pegasus_client::pegasus_scanner_wrapper scanner_wrapper
             if (distance <= S2Earth::ToMeters(cap_ptr->radius())) {
                 std::string origin_hash_key, origin_sort_key;
                 if (!restore_origin_keys(geo_sort_key, origin_hash_key, 
origin_sort_key)) {
-                    LOG_ERROR("restore_origin_keys failed. geo_sort_key={}", 
geo_sort_key);
+                    LOG_ERROR("restore_origin_keys failed. geo_sort_key={}",
+                              utils::redact_sensitive_string(geo_sort_key));
                     cb();
                     return;
                 }
@@ -955,10 +956,10 @@ int geo_client::distance(const std::string &hash_key1,
             LOG_ERROR(
                 "get distance failed. hash_key1={}, sort_key1={}, 
hash_key2={}, sort_key2={}, "
                 "error={}",
-                hash_key1,
-                sort_key1,
-                hash_key2,
-                sort_key2,
+                utils::redact_sensitive_string(hash_key1),
+                utils::redact_sensitive_string(sort_key1),
+                utils::redact_sensitive_string(hash_key2),
+                utils::redact_sensitive_string(sort_key2),
                 get_error_string(ec_));
             ret = ec_;
         }
@@ -988,10 +989,10 @@ void geo_client::async_distance(const std::string 
&hash_key1,
         if (ec_ != PERR_OK) {
             LOG_ERROR("get data failed. hash_key1={}, sort_key1={}, 
hash_key2={}, sort_key2={}, "
                       "error={}",
-                      hash_key1,
-                      sort_key1,
-                      hash_key2,
-                      sort_key2,
+                      utils::redact_sensitive_string(hash_key1),
+                      utils::redact_sensitive_string(sort_key1),
+                      utils::redact_sensitive_string(hash_key2),
+                      utils::redact_sensitive_string(sort_key2),
                       get_error_string(ec_));
             *ret = ec_;
         }
diff --git a/src/server/hotkey_collector.cpp b/src/server/hotkey_collector.cpp
index 0574652f2..026851e2b 100644
--- a/src/server/hotkey_collector.cpp
+++ b/src/server/hotkey_collector.cpp
@@ -196,7 +196,7 @@ inline void hotkey_collector::change_state_by_result()
         if (!_result.hot_hash_key.empty()) {
             change_state_to_finished();
             LOG_ERROR_PREFIX("Find the hotkey: {}",
-                             
pegasus::utils::c_escape_string(_result.hot_hash_key));
+                             
pegasus::utils::c_escape_sensitive_string(_result.hot_hash_key));
         }
         break;
     default:
@@ -277,7 +277,7 @@ void 
hotkey_collector::on_start_detect(dsn::replication::detect_hotkey_response
         hint = fmt::format("{} hotkey result has been found: {}, you can send 
a stop rpc to "
                            "restart hotkey detection",
                            dsn::enum_to_string(_hotkey_type),
-                           
pegasus::utils::c_escape_string(_result.hot_hash_key));
+                           
pegasus::utils::c_escape_sensitive_string(_result.hot_hash_key));
         break;
     case hotkey_collector_state::STOPPED:
         change_state_to_coarse_detecting();
@@ -314,7 +314,7 @@ void 
hotkey_collector::query_result(dsn::replication::detect_hotkey_response &re
         LOG_INFO_PREFIX(hint);
     } else {
         resp.err = dsn::ERR_OK;
-        
resp.__set_hotkey_result(pegasus::utils::c_escape_string(_result.hot_hash_key));
+        
resp.__set_hotkey_result(pegasus::utils::c_escape_sensitive_string(_result.hot_hash_key));
     }
 }
 
diff --git a/src/server/pegasus_server_impl.cpp 
b/src/server/pegasus_server_impl.cpp
index 9bc325ba9..975effe70 100644
--- a/src/server/pegasus_server_impl.cpp
+++ b/src/server/pegasus_server_impl.cpp
@@ -369,8 +369,8 @@ void pegasus_server_impl::on_get(get_rpc rpc)
             LOG_ERROR_PREFIX("rocksdb get failed for get from {}: hash_key = 
\"{}\", sort_key = "
                              "\"{}\", error = {}",
                              rpc.remote_address(),
-                             ::pegasus::utils::c_escape_string(hash_key),
-                             ::pegasus::utils::c_escape_string(sort_key),
+                             
::pegasus::utils::c_escape_sensitive_string(hash_key),
+                             
::pegasus::utils::c_escape_sensitive_string(sort_key),
                              status.ToString());
         } else if (!status.IsNotFound()) {
             LOG_ERROR_PREFIX("rocksdb get failed for get from {}: error = {}",
@@ -393,8 +393,8 @@ void pegasus_server_impl::on_get(get_rpc rpc)
                            "hash_key = {}, sort_key = {}, return = {}, "
                            "value_size = {}, time_used = {} ns",
                            rpc.remote_address(),
-                           ::pegasus::utils::c_escape_string(hash_key),
-                           ::pegasus::utils::c_escape_string(sort_key),
+                           
::pegasus::utils::c_escape_sensitive_string(hash_key),
+                           
::pegasus::utils::c_escape_sensitive_string(sort_key),
                            status.ToString(),
                            value.size(),
                            time_used);
@@ -508,17 +508,17 @@ void pegasus_server_impl::on_multi_get(multi_get_rpc rpc)
                     "sort_key_filter_pattern = \"{}\", final_start = \"{}\" 
({}), final_stop = "
                     "\"{}\" ({})",
                     rpc.remote_address(),
-                    ::pegasus::utils::c_escape_string(request.hash_key),
-                    ::pegasus::utils::c_escape_string(request.start_sortkey),
+                    
::pegasus::utils::c_escape_sensitive_string(request.hash_key),
+                    
::pegasus::utils::c_escape_sensitive_string(request.start_sortkey),
                     request.start_inclusive ? "inclusive" : "exclusive",
-                    ::pegasus::utils::c_escape_string(request.stop_sortkey),
+                    
::pegasus::utils::c_escape_sensitive_string(request.stop_sortkey),
                     request.stop_inclusive ? "inclusive" : "exclusive",
                     
::dsn::apps::_filter_type_VALUES_TO_NAMES.find(request.sort_key_filter_type)
                         ->second,
-                    
::pegasus::utils::c_escape_string(request.sort_key_filter_pattern),
-                    ::pegasus::utils::c_escape_string(start),
+                    
::pegasus::utils::c_escape_sensitive_string(request.sort_key_filter_pattern),
+                    ::pegasus::utils::c_escape_sensitive_string(start),
                     start_inclusive ? "inclusive" : "exclusive",
-                    ::pegasus::utils::c_escape_string(stop),
+                    ::pegasus::utils::c_escape_sensitive_string(stop),
                     stop_inclusive ? "inclusive" : "exclusive");
             }
             resp.error = rocksdb::Status::kOk;
@@ -685,7 +685,7 @@ void pegasus_server_impl::on_multi_get(multi_get_rpc rpc)
                 LOG_ERROR_PREFIX("rocksdb scan failed for multi_get from {}: 
hash_key = \"{}\", "
                                  "reverse = {}, error = {}",
                                  rpc.remote_address(),
-                                 
::pegasus::utils::c_escape_string(request.hash_key),
+                                 
::pegasus::utils::c_escape_sensitive_string(request.hash_key),
                                  request.reverse ? "true" : "false",
                                  it->status().ToString());
             } else {
@@ -730,12 +730,13 @@ void pegasus_server_impl::on_multi_get(multi_get_rpc rpc)
             // print log
             if (!status.ok()) {
                 if (FLAGS_rocksdb_verbose_log) {
-                    LOG_ERROR_PREFIX("rocksdb get failed for multi_get from 
{}: hash_key = \"{}\", "
-                                     "sort_key = \"{}\", error = {}",
-                                     rpc.remote_address(),
-                                     
::pegasus::utils::c_escape_string(request.hash_key),
-                                     
::pegasus::utils::c_escape_string(request.sort_keys[i]),
-                                     status.ToString());
+                    LOG_ERROR_PREFIX(
+                        "rocksdb get failed for multi_get from {}: hash_key = 
\"{}\", "
+                        "sort_key = \"{}\", error = {}",
+                        rpc.remote_address(),
+                        
::pegasus::utils::c_escape_sensitive_string(request.hash_key),
+                        
::pegasus::utils::c_escape_sensitive_string(request.sort_keys[i]),
+                        status.ToString());
                 } else if (!status.IsNotFound()) {
                     LOG_ERROR_PREFIX("rocksdb get failed for multi_get from 
{}: error = {}",
                                      rpc.remote_address(),
@@ -803,13 +804,13 @@ void pegasus_server_impl::on_multi_get(multi_get_rpc rpc)
             "result_count = {}, result_size = {}, iteration_count = {}, "
             "expire_count = {}, filter_count = {}, time_used = {} ns",
             rpc.remote_address(),
-            ::pegasus::utils::c_escape_string(request.hash_key),
-            ::pegasus::utils::c_escape_string(request.start_sortkey),
+            ::pegasus::utils::c_escape_sensitive_string(request.hash_key),
+            ::pegasus::utils::c_escape_sensitive_string(request.start_sortkey),
             request.start_inclusive ? "inclusive" : "exclusive",
-            ::pegasus::utils::c_escape_string(request.stop_sortkey),
+            ::pegasus::utils::c_escape_sensitive_string(request.stop_sortkey),
             request.stop_inclusive ? "inclusive" : "exclusive",
             
::dsn::apps::_filter_type_VALUES_TO_NAMES.find(request.sort_key_filter_type)->second,
-            ::pegasus::utils::c_escape_string(request.sort_key_filter_pattern),
+            
::pegasus::utils::c_escape_sensitive_string(request.sort_key_filter_pattern),
             request.max_kv_count,
             request.max_kv_size,
             request.reverse ? "true" : "false",
@@ -894,8 +895,8 @@ void pegasus_server_impl::on_batch_get(batch_get_rpc rpc)
                     LOG_ERROR_PREFIX(
                         "rocksdb data expired for batch_get from {}, hash_key 
= {}, sort_key = {}",
                         rpc.remote_address().to_string(),
-                        pegasus::utils::c_escape_string(hash_key),
-                        pegasus::utils::c_escape_string(sort_key));
+                        pegasus::utils::c_escape_sensitive_string(hash_key),
+                        pegasus::utils::c_escape_sensitive_string(sort_key));
                 }
                 continue;
             }
@@ -1011,7 +1012,7 @@ void 
pegasus_server_impl::on_sortkey_count(sortkey_count_rpc rpc)
             LOG_ERROR_PREFIX(
                 "rocksdb scan failed for sortkey_count from {}: hash_key = 
\"{}\", error = {}",
                 rpc.remote_address(),
-                ::pegasus::utils::c_escape_string(hash_key),
+                ::pegasus::utils::c_escape_sensitive_string(hash_key),
                 it->status().ToString());
         } else {
             LOG_ERROR_PREFIX("rocksdb scan failed for sortkey_count from {}: 
error = {}",
@@ -1071,8 +1072,8 @@ void pegasus_server_impl::on_ttl(ttl_rpc rpc)
             LOG_ERROR_PREFIX("rocksdb get failed for ttl from {}: hash_key = 
\"{}\", sort_key = "
                              "\"{}\", error = {}",
                              rpc.remote_address(),
-                             ::pegasus::utils::c_escape_string(hash_key),
-                             ::pegasus::utils::c_escape_string(sort_key),
+                             
::pegasus::utils::c_escape_sensitive_string(hash_key),
+                             
::pegasus::utils::c_escape_sensitive_string(sort_key),
                              status.ToString());
         } else if (!status.IsNotFound()) {
             LOG_ERROR_PREFIX("rocksdb get failed for ttl from {}: error = {}",
@@ -1181,9 +1182,9 @@ void pegasus_server_impl::on_get_scanner(get_scanner_rpc 
rpc)
             LOG_WARNING_PREFIX("empty key range for get_scanner from {}: 
start_key = \"{}\" ({}), "
                                "stop_key = \"{}\" ({})",
                                rpc.remote_address(),
-                               
::pegasus::utils::c_escape_string(request.start_key),
+                               
::pegasus::utils::c_escape_sensitive_string(request.start_key),
                                request.start_inclusive ? "inclusive" : 
"exclusive",
-                               
::pegasus::utils::c_escape_string(request.stop_key),
+                               
::pegasus::utils::c_escape_sensitive_string(request.stop_key),
                                request.stop_inclusive ? "inclusive" : 
"exclusive");
         }
         resp.error = rocksdb::Status::kOk;
@@ -1288,9 +1289,9 @@ void pegasus_server_impl::on_get_scanner(get_scanner_rpc 
rpc)
                              "({}), stop_key = \"{}\" ({}), batch_size = {}, 
read_count = {}, "
                              "error = {}",
                              rpc.remote_address(),
-                             ::pegasus::utils::c_escape_string(start),
+                             
::pegasus::utils::c_escape_sensitive_string(start),
                              request.start_inclusive ? "inclusive" : 
"exclusive",
-                             ::pegasus::utils::c_escape_string(stop),
+                             ::pegasus::utils::c_escape_sensitive_string(stop),
                              request.stop_inclusive ? "inclusive" : 
"exclusive",
                              batch_count,
                              count,
@@ -1459,7 +1460,7 @@ void pegasus_server_impl::on_scan(scan_rpc rpc)
                                  "\"{}\" ({}), batch_size = {}, read_count = 
{}, error = {}",
                                  rpc.remote_address(),
                                  request.context_id,
-                                 ::pegasus::utils::c_escape_string(stop),
+                                 
::pegasus::utils::c_escape_sensitive_string(stop),
                                  stop_inclusive ? "inclusive" : "exclusive",
                                  batch_count,
                                  count,
@@ -3449,31 +3450,32 @@ std::string 
pegasus_server_impl::dump_write_request(dsn::message_ex *request)
         ::dsn::blob hash_key, sort_key;
         pegasus_restore_key(put.key, hash_key, sort_key);
         return fmt::format("put: hash_key={}, sort_key={}",
-                           pegasus::utils::c_escape_string(hash_key),
-                           pegasus::utils::c_escape_string(sort_key));
+                           pegasus::utils::c_escape_sensitive_string(hash_key),
+                           
pegasus::utils::c_escape_sensitive_string(sort_key));
     }
 
     if (rpc_code == dsn::apps::RPC_RRDB_RRDB_MULTI_PUT) {
         auto multi_put = multi_put_rpc(request).request();
         return fmt::format("multi_put: hash_key={}, multi_put_count={}",
-                           pegasus::utils::c_escape_string(multi_put.hash_key),
+                           
pegasus::utils::c_escape_sensitive_string(multi_put.hash_key),
                            multi_put.kvs.size());
     }
 
     if (rpc_code == dsn::apps::RPC_RRDB_RRDB_CHECK_AND_SET) {
         auto check_and_set = check_and_set_rpc(request).request();
         return fmt::format("check_and_set: hash_key={}, check_sort_key={}, 
set_sort_key={}",
-                           
pegasus::utils::c_escape_string(check_and_set.hash_key),
-                           
pegasus::utils::c_escape_string(check_and_set.check_sort_key),
-                           
pegasus::utils::c_escape_string(check_and_set.set_sort_key));
+                           
pegasus::utils::c_escape_sensitive_string(check_and_set.hash_key),
+                           
pegasus::utils::c_escape_sensitive_string(check_and_set.check_sort_key),
+                           
pegasus::utils::c_escape_sensitive_string(check_and_set.set_sort_key));
     }
 
     if (rpc_code == dsn::apps::RPC_RRDB_RRDB_CHECK_AND_MUTATE) {
         auto check_and_mutate = check_and_mutate_rpc(request).request();
-        return fmt::format("check_and_mutate: hash_key={}, check_sort_key={}, 
set_value_count={}",
-                           
pegasus::utils::c_escape_string(check_and_mutate.hash_key),
-                           
pegasus::utils::c_escape_string(check_and_mutate.check_sort_key),
-                           check_and_mutate.mutate_list.size());
+        return fmt::format(
+            "check_and_mutate: hash_key={}, check_sort_key={}, 
set_value_count={}",
+            
pegasus::utils::c_escape_sensitive_string(check_and_mutate.hash_key),
+            
pegasus::utils::c_escape_sensitive_string(check_and_mutate.check_sort_key),
+            check_and_mutate.mutate_list.size());
     }
 
     return "default";
diff --git a/src/server/pegasus_server_write.cpp 
b/src/server/pegasus_server_write.cpp
index 1c6399cc2..b00f016ed 100644
--- a/src/server/pegasus_server_write.cpp
+++ b/src/server/pegasus_server_write.cpp
@@ -172,8 +172,8 @@ void pegasus_server_write::request_key_check(int64_t decree,
                          "decree: {}, code: {}, hash_key: {}, sort_key: {}",
                          decree,
                          msg->local_rpc_code.to_string(),
-                         utils::c_escape_string(hash_key),
-                         utils::c_escape_string(sort_key));
+                         utils::c_escape_sensitive_string(hash_key),
+                         utils::c_escape_sensitive_string(sort_key));
     }
 }
 
diff --git a/src/server/pegasus_write_service_impl.h 
b/src/server/pegasus_write_service_impl.h
index 69b71c6ba..fa4c44e4a 100644
--- a/src/server/pegasus_write_service_impl.h
+++ b/src/server/pegasus_write_service_impl.h
@@ -217,7 +217,7 @@ public:
                     LOG_ERROR_PREFIX("incr failed: decree = {}, error = "
                                      "old value \"{}\" is not an integer or 
out of range",
                                      decree,
-                                     utils::c_escape_string(old_value));
+                                     
utils::c_escape_sensitive_string(old_value));
                     resp.error = rocksdb::Status::kInvalidArgument;
                     // we should write empty record to update rocksdb's last 
flushed decree
                     return empty_put(decree);
@@ -290,8 +290,8 @@ public:
             LOG_ERROR_ROCKSDB("Error to GetCheckValue for CheckAndSet decree: 
{}, hash_key: {}, "
                               "check_sort_key: {}",
                               decree,
-                              utils::c_escape_string(update.hash_key),
-                              utils::c_escape_string(update.check_sort_key));
+                              
utils::c_escape_sensitive_string(update.hash_key),
+                              
utils::c_escape_sensitive_string(update.check_sort_key));
             resp.error = err;
             return resp.error;
         }
@@ -410,8 +410,8 @@ public:
             LOG_ERROR_ROCKSDB("Error to GetCheckValue for CheckAndMutate 
decree: {}, hash_key: {}, "
                               "check_sort_key: {}",
                               decree,
-                              utils::c_escape_string(update.hash_key),
-                              utils::c_escape_string(update.check_sort_key));
+                              
utils::c_escape_sensitive_string(update.hash_key),
+                              
utils::c_escape_sensitive_string(update.check_sort_key));
             resp.error = err;
             return resp.error;
         }
@@ -650,7 +650,7 @@ private:
                 LOG_ERROR_PREFIX("check failed: decree = {}, error = "
                                  "check value \"{}\" is not an integer or out 
of range",
                                  decree,
-                                 utils::c_escape_string(value));
+                                 utils::c_escape_sensitive_string(value));
                 invalid_argument = true;
                 return false;
             }
@@ -660,7 +660,7 @@ private:
                 LOG_ERROR_PREFIX("check failed: decree = {}, error = "
                                  "check operand \"{}\" is not an integer or 
out of range",
                                  decree,
-                                 utils::c_escape_string(check_operand));
+                                 
utils::c_escape_sensitive_string(check_operand));
                 invalid_argument = true;
                 return false;
             }
diff --git a/src/server/rocksdb_wrapper.cpp b/src/server/rocksdb_wrapper.cpp
index 59cd199d2..3fe882a42 100644
--- a/src/server/rocksdb_wrapper.cpp
+++ b/src/server/rocksdb_wrapper.cpp
@@ -96,8 +96,8 @@ int rocksdb_wrapper::get(dsn::string_view raw_key, /*out*/ 
db_get_context *ctx)
     LOG_ERROR_ROCKSDB("Get",
                       s.ToString(),
                       "hash_key: {}, sort_key: {}",
-                      utils::c_escape_string(hash_key),
-                      utils::c_escape_string(sort_key));
+                      utils::c_escape_sensitive_string(hash_key),
+                      utils::c_escape_sensitive_string(sort_key));
     return s.code();
 }
 
@@ -156,8 +156,8 @@ int rocksdb_wrapper::write_batch_put_ctx(const 
db_write_context &ctx,
                           s.ToString(),
                           "decree: {}, hash_key: {}, sort_key: {}, expire_ts: 
{}",
                           ctx.decree,
-                          utils::c_escape_string(hash_key),
-                          utils::c_escape_string(sort_key),
+                          utils::c_escape_sensitive_string(hash_key),
+                          utils::c_escape_sensitive_string(sort_key),
                           expire_sec);
     }
     return s.code();
@@ -203,8 +203,8 @@ int rocksdb_wrapper::write_batch_delete(int64_t decree, 
dsn::string_view raw_key
                           s.ToString(),
                           "decree: {}, hash_key: {}, sort_key: {}",
                           decree,
-                          utils::c_escape_string(hash_key),
-                          utils::c_escape_string(sort_key));
+                          utils::c_escape_sensitive_string(hash_key),
+                          utils::c_escape_sensitive_string(sort_key));
     }
     return s.code();
 }


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

Reply via email to