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

morningman 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 98e80aa  [refactor] Replace boost::function with std::function (#5700)
98e80aa is described below

commit 98e80aa65e7111da7201525ec8ad0338da6f42bc
Author: Zhengguo Yang <[email protected]>
AuthorDate: Sun May 9 22:00:48 2021 +0800

    [refactor] Replace boost::function with std::function (#5700)
    
    Replace boost::function with std::function
---
 be/src/exec/aggregation_node.cpp                   |   1 -
 be/src/exec/exec_node.cpp                          |   7 +-
 be/src/exec/olap_scan_node.cpp                     |   2 +-
 be/src/exec/schema_scanner/schema_helper.cpp       |   1 -
 be/src/http/default_path_handlers.cpp              |  16 +--
 be/src/http/web_page_handler.h                     |   6 +-
 be/src/runtime/buffered_block_mgr2.cc              |   6 +-
 be/src/runtime/buffered_tuple_stream2.cc           |   2 -
 be/src/runtime/buffered_tuple_stream3.cc           |   2 -
 be/src/runtime/buffered_tuple_stream3.h            |   2 +-
 be/src/runtime/bufferpool/buffer_allocator.cc      |   4 +-
 be/src/runtime/bufferpool/buffer_pool.cc           |   9 +-
 be/src/runtime/bufferpool/buffer_pool_internal.h   |   2 +-
 be/src/runtime/client_cache.h                      |  11 +-
 be/src/runtime/data_stream_mgr.cpp                 |   1 -
 be/src/runtime/data_stream_recvr.cc                |   8 +-
 be/src/runtime/data_stream_sender.cpp              |  12 +-
 be/src/runtime/disk_io_mgr.cc                      |   2 +-
 be/src/runtime/disk_io_mgr.h                       |   2 +-
 be/src/runtime/dpp_sink.cpp                        |   2 +-
 be/src/runtime/fragment_mgr.cpp                    |  13 +-
 be/src/runtime/plan_fragment_executor.cpp          |  10 +-
 be/src/runtime/plan_fragment_executor.h            |   4 +-
 be/src/runtime/raw_value.cpp                       |   1 -
 be/src/runtime/raw_value.h                         |   1 -
 be/src/runtime/result_buffer_mgr.cpp               |   2 -
 .../runtime/routine_load/data_consumer_group.cpp   |  11 +-
 .../routine_load/routine_load_task_executor.cpp    |  26 ++--
 be/src/runtime/sorted_run_merger.h                 |   2 +-
 be/src/runtime/spill_sorter.cc                     |   9 +-
 be/src/runtime/thread_resource_mgr.h               |   4 +-
 be/src/util/hash_util.hpp                          | 132 ++++++++++++---------
 be/src/util/internal_queue.h                       |   4 +-
 be/src/util/priority_thread_pool.hpp               |   4 +-
 be/src/util/runtime_profile.h                      |   6 +-
 be/src/util/string_util.cpp                        |   3 +-
 be/src/util/string_util.h                          |   1 -
 be/src/util/thrift_rpc_helper.cpp                  |   1 -
 be/src/util/uid_util.h                             |   5 +-
 be/src/util/uuid_generator.h                       |   1 -
 be/test/runtime/buffered_block_mgr2_test.cpp       |   6 +-
 be/test/runtime/disk_io_mgr_test.cpp               |   2 +-
 be/test/runtime/thread_resource_mgr_test.cpp       |   4 +-
 be/test/util/blocking_queue_test.cpp               |   6 +-
 44 files changed, 182 insertions(+), 174 deletions(-)

diff --git a/be/src/exec/aggregation_node.cpp b/be/src/exec/aggregation_node.cpp
index 3edb36e..43e3bd8 100644
--- a/be/src/exec/aggregation_node.cpp
+++ b/be/src/exec/aggregation_node.cpp
@@ -21,7 +21,6 @@
 #include <math.h>
 #include <thrift/protocol/TDebugProtocol.h>
 
-#include <boost/functional/hash.hpp>
 #include <sstream>
 
 #include "exec/hash_table.hpp"
diff --git a/be/src/exec/exec_node.cpp b/be/src/exec/exec_node.cpp
index 298e707..675cb1e 100644
--- a/be/src/exec/exec_node.cpp
+++ b/be/src/exec/exec_node.cpp
@@ -169,13 +169,14 @@ Status ExecNode::prepare(RuntimeState* state) {
     _rows_returned_counter = ADD_COUNTER(_runtime_profile, "RowsReturned", 
TUnit::UNIT);
     _rows_returned_rate = runtime_profile()->add_derived_counter(
             ROW_THROUGHPUT_COUNTER, TUnit::UNIT_PER_SECOND,
-            boost::bind<int64_t>(&RuntimeProfile::units_per_second, 
_rows_returned_counter,
-                                 runtime_profile()->total_time_counter()),
+            std::bind<int64_t>(&RuntimeProfile::units_per_second, 
_rows_returned_counter,
+                               runtime_profile()->total_time_counter()),
             "");
     _mem_tracker = MemTracker::CreateTracker(_runtime_profile.get(), -1,
                                              "ExecNode:" + 
_runtime_profile->name(),
                                              state->instance_mem_tracker());
-    _expr_mem_tracker = MemTracker::CreateTracker(-1, "ExecNode:Exprs:" + 
_runtime_profile->name(), _mem_tracker);
+    _expr_mem_tracker = MemTracker::CreateTracker(-1, "ExecNode:Exprs:" + 
_runtime_profile->name(),
+                                                  _mem_tracker);
     _expr_mem_pool.reset(new MemPool(_expr_mem_tracker.get()));
     // TODO chenhao
     RETURN_IF_ERROR(Expr::prepare(_conjunct_ctxs, state, row_desc(), 
expr_mem_tracker()));
diff --git a/be/src/exec/olap_scan_node.cpp b/be/src/exec/olap_scan_node.cpp
index 8a8f386..b1099fb 100644
--- a/be/src/exec/olap_scan_node.cpp
+++ b/be/src/exec/olap_scan_node.cpp
@@ -1294,7 +1294,7 @@ void OlapScanNode::transfer_thread(RuntimeState* state) {
         auto iter = olap_scanners.begin();
         while (iter != olap_scanners.end()) {
             PriorityThreadPool::Task task;
-            task.work_function = boost::bind(&OlapScanNode::scanner_thread, 
this, *iter);
+            task.work_function = std::bind(&OlapScanNode::scanner_thread, 
this, *iter);
             task.priority = _nice;
             (*iter)->start_wait_worker_timer();
             if (thread_pool->offer(task)) {
diff --git a/be/src/exec/schema_scanner/schema_helper.cpp 
b/be/src/exec/schema_scanner/schema_helper.cpp
index 0824705..b0f9c08 100644
--- a/be/src/exec/schema_scanner/schema_helper.cpp
+++ b/be/src/exec/schema_scanner/schema_helper.cpp
@@ -17,7 +17,6 @@
 
 #include "exec/schema_scanner/schema_helper.h"
 
-#include <boost/functional/hash.hpp>
 #include <boost/thread/thread.hpp>
 #include <sstream>
 
diff --git a/be/src/http/default_path_handlers.cpp 
b/be/src/http/default_path_handlers.cpp
index b242675..d11991d 100644
--- a/be/src/http/default_path_handlers.cpp
+++ b/be/src/http/default_path_handlers.cpp
@@ -21,7 +21,6 @@
 #include <gperftools/malloc_extension.h>
 
 #include <boost/algorithm/string.hpp>
-#include <boost/bind/bind.hpp>
 #include <sstream>
 
 #include "agent/utils.h"
@@ -336,18 +335,21 @@ void add_default_path_handlers(WebPageHandler* 
web_page_handler,
     // TODO(yingchun): logs_handler is not implemented yet, so not show it on 
navigate bar
     web_page_handler->register_page("/logs", "Logs", logs_handler, false /* 
is_on_nav_bar */);
     web_page_handler->register_page("/varz", "Configs", config_handler, true 
/* is_on_nav_bar */);
-    web_page_handler->register_page(
-            "/memz", "Memory", boost::bind<void>(&mem_usage_handler, 
process_mem_tracker, boost::placeholders::_1, boost::placeholders::_2),
-            true /* is_on_nav_bar */);
+    web_page_handler->register_page("/memz", "Memory",
+                                    std::bind<void>(&mem_usage_handler, 
process_mem_tracker,
+                                                    std::placeholders::_1, 
std::placeholders::_2),
+                                    true /* is_on_nav_bar */);
     web_page_handler->register_page("/mem_tracker", "MemTracker", 
mem_tracker_handler,
                                     true /* is_on_nav_bar */);
     web_page_handler->register_page("/heap", "Heap Profile", heap_handler,
                                     true /* is_on_nav_bar */);
     web_page_handler->register_page("/cpu", "CPU Profile", cpu_handler, true 
/* is_on_nav_bar */);
     register_thread_display_page(web_page_handler);
-    web_page_handler->register_template_page("/tablets_page", "Tablets",
-                                             
boost::bind<void>(&display_tablets_callback, boost::placeholders::_1, 
boost::placeholders::_2),
-                                             true /* is_on_nav_bar */);
+    web_page_handler->register_template_page(
+            "/tablets_page", "Tablets",
+            std::bind<void>(&display_tablets_callback, std::placeholders::_1,
+                            std::placeholders::_2),
+            true /* is_on_nav_bar */);
 }
 
 } // namespace doris
diff --git a/be/src/http/web_page_handler.h b/be/src/http/web_page_handler.h
index bf47e00..c1863d9 100644
--- a/be/src/http/web_page_handler.h
+++ b/be/src/http/web_page_handler.h
@@ -18,7 +18,7 @@
 #ifndef DORIS_BE_SRC_COMMON_UTIL_WEB_PAGE_HANDLER_H
 #define DORIS_BE_SRC_COMMON_UTIL_WEB_PAGE_HANDLER_H
 
-#include <boost/function.hpp>
+#include <functional>
 #include <map>
 #include <mutex>
 #include <sstream>
@@ -37,9 +37,9 @@ class EvHttpServer;
 class WebPageHandler : public HttpHandler {
 public:
     typedef std::map<std::string, std::string> ArgumentMap;
-    typedef boost::function<void(const ArgumentMap& args, std::stringstream* 
output)>
+    typedef std::function<void(const ArgumentMap& args, std::stringstream* 
output)>
             PageHandlerCallback;
-    typedef boost::function<void(const ArgumentMap& args, EasyJson* output)>
+    typedef std::function<void(const ArgumentMap& args, EasyJson* output)>
             TemplatePageHandlerCallback;
 
     WebPageHandler(EvHttpServer* http_server);
diff --git a/be/src/runtime/buffered_block_mgr2.cc 
b/be/src/runtime/buffered_block_mgr2.cc
index 6fd97a8..9621092 100644
--- a/be/src/runtime/buffered_block_mgr2.cc
+++ b/be/src/runtime/buffered_block_mgr2.cc
@@ -39,8 +39,8 @@ using std::vector;
 using std::list;
 using std::endl;
 
-using boost::bind;
-using boost::mem_fn;
+using std::bind;
+using std::mem_fn;
 using std::lock_guard;
 using std::mutex;
 using boost::scoped_array;
@@ -783,7 +783,7 @@ Status BufferedBlockMgr2::write_unpinned_block(Block* 
block) {
         }
         disk_id %= _io_mgr->num_local_disks();
         DiskIoMgr::WriteRange::WriteDoneCallback callback = bind(
-                mem_fn(&BufferedBlockMgr2::write_complete), this, block, 
boost::placeholders::_1);
+                mem_fn(&BufferedBlockMgr2::write_complete), this, block, 
std::placeholders::_1);
         block->_write_range = _obj_pool.add(
                 new DiskIoMgr::WriteRange(tmp_file->path(), file_offset, 
disk_id, callback));
         block->_tmp_file = tmp_file;
diff --git a/be/src/runtime/buffered_tuple_stream2.cc 
b/be/src/runtime/buffered_tuple_stream2.cc
index 6400830..b127e9f 100644
--- a/be/src/runtime/buffered_tuple_stream2.cc
+++ b/be/src/runtime/buffered_tuple_stream2.cc
@@ -17,8 +17,6 @@
 
 #include "runtime/buffered_tuple_stream2.h"
 
-#include <boost/bind/bind.hpp>
-
 #include "runtime/descriptors.h"
 #include "runtime/row_batch.h"
 #include "runtime/tuple_row.h"
diff --git a/be/src/runtime/buffered_tuple_stream3.cc 
b/be/src/runtime/buffered_tuple_stream3.cc
index 1267987..2ea57a7 100644
--- a/be/src/runtime/buffered_tuple_stream3.cc
+++ b/be/src/runtime/buffered_tuple_stream3.cc
@@ -17,8 +17,6 @@
 
 #include <gutil/strings/substitute.h>
 
-#include <boost/bind/bind.hpp>
-
 #include "runtime/buffered_tuple_stream3.inline.h"
 #include "runtime/bufferpool/reservation_tracker.h"
 //#include "runtime/collection_value.h"
diff --git a/be/src/runtime/buffered_tuple_stream3.h 
b/be/src/runtime/buffered_tuple_stream3.h
index 21b7f49..8aaf8f0 100644
--- a/be/src/runtime/buffered_tuple_stream3.h
+++ b/be/src/runtime/buffered_tuple_stream3.h
@@ -18,8 +18,8 @@
 #ifndef DORIS_BE_RUNTIME_BUFFERED_TUPLE_STREAM_H
 #define DORIS_BE_RUNTIME_BUFFERED_TUPLE_STREAM_H
 
-#include <boost/function.hpp>
 #include <boost/scoped_ptr.hpp>
+#include <functional>
 #include <set>
 #include <vector>
 
diff --git a/be/src/runtime/bufferpool/buffer_allocator.cc 
b/be/src/runtime/bufferpool/buffer_allocator.cc
index 8dbdb45..a3bbe4c 100644
--- a/be/src/runtime/bufferpool/buffer_allocator.cc
+++ b/be/src/runtime/bufferpool/buffer_allocator.cc
@@ -17,7 +17,6 @@
 
 #include "runtime/bufferpool/buffer_allocator.h"
 
-#include <boost/bind/bind.hpp>
 #include <mutex>
 
 #include "common/atomic.h"
@@ -721,7 +720,8 @@ std::string BufferPool::FreeBufferArena::DebugString() {
            << " free buffers: " << lists.num_free_buffers.load()
            << " low water mark: " << lists.low_water_mark
            << " clean pages: " << lists.num_clean_pages.load() << " ";
-        lists.clean_pages.iterate(boost::bind<bool>(Page::DebugStringCallback, 
&ss, boost::placeholders::_1));
+        lists.clean_pages.iterate(
+                std::bind<bool>(Page::DebugStringCallback, &ss, 
std::placeholders::_1));
         ss << "\n";
     }
     return ss.str();
diff --git a/be/src/runtime/bufferpool/buffer_pool.cc 
b/be/src/runtime/bufferpool/buffer_pool.cc
index f2749e4..5fe0aed 100644
--- a/be/src/runtime/bufferpool/buffer_pool.cc
+++ b/be/src/runtime/bufferpool/buffer_pool.cc
@@ -15,7 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-#include <boost/bind/bind.hpp>
 #include <limits>
 #include <sstream>
 
@@ -700,11 +699,13 @@ string BufferPool::Client::DebugString() {
        << " in_flight_write_bytes: " << in_flight_write_pages_.bytes()
        << " reservation: " << reservation_.DebugString();
     ss << "\n  " << pinned_pages_.size() << " pinned pages: ";
-    pinned_pages_.iterate(boost::bind<bool>(Page::DebugStringCallback, &ss, 
boost::placeholders::_1));
+    pinned_pages_.iterate(std::bind<bool>(Page::DebugStringCallback, &ss, 
std::placeholders::_1));
     ss << "\n  " << dirty_unpinned_pages_.size() << " dirty unpinned pages: ";
-    dirty_unpinned_pages_.iterate(boost::bind<bool>(Page::DebugStringCallback, 
&ss, boost::placeholders::_1));
+    dirty_unpinned_pages_.iterate(
+            std::bind<bool>(Page::DebugStringCallback, &ss, 
std::placeholders::_1));
     ss << "\n  " << in_flight_write_pages_.size() << " in flight write pages: 
";
-    
in_flight_write_pages_.iterate(boost::bind<bool>(Page::DebugStringCallback, 
&ss, boost::placeholders::_1));
+    in_flight_write_pages_.iterate(
+            std::bind<bool>(Page::DebugStringCallback, &ss, 
std::placeholders::_1));
     return ss.str();
 }
 
diff --git a/be/src/runtime/bufferpool/buffer_pool_internal.h 
b/be/src/runtime/bufferpool/buffer_pool_internal.h
index fdfc105..b2362d0 100644
--- a/be/src/runtime/bufferpool/buffer_pool_internal.h
+++ b/be/src/runtime/bufferpool/buffer_pool_internal.h
@@ -113,7 +113,7 @@ public:
         return page;
     }
 
-    void iterate(boost::function<bool(Page*)> fn) { list_.iterate(fn); }
+    void iterate(std::function<bool(Page*)> fn) { list_.iterate(fn); }
     bool contains(Page* page) { return list_.contains(page); }
     Page* tail() { return list_.tail(); }
     bool empty() const { return list_.empty(); }
diff --git a/be/src/runtime/client_cache.h b/be/src/runtime/client_cache.h
index 9ca3672..4211e1e 100644
--- a/be/src/runtime/client_cache.h
+++ b/be/src/runtime/client_cache.h
@@ -18,7 +18,6 @@
 #ifndef DORIS_BE_RUNTIME_CLIENT_CACHE_H
 #define DORIS_BE_RUNTIME_CLIENT_CACHE_H
 
-#include <boost/bind/bind.hpp>
 #include <list>
 #include <mutex>
 #include <string>
@@ -60,7 +59,7 @@ public:
     ~ClientCacheHelper();
     // Callback method which produces a client object when one cannot be
     // found in the cache. Supplied by the ClientCache wrapper.
-    typedef boost::function<ThriftClientImpl*(const TNetworkAddress& hostport, 
void** client_key)>
+    typedef std::function<ThriftClientImpl*(const TNetworkAddress& hostport, 
void** client_key)>
             client_factory;
 
     // Return client for specific host/port in 'client'. If a client
@@ -192,14 +191,14 @@ public:
 
     ClientCache() : _client_cache_helper() {
         _client_factory =
-                
boost::bind<ThriftClientImpl*>(boost::mem_fn(&ClientCache::make_client), this,
-                                               boost::placeholders::_1, 
boost::placeholders::_2);
+                
std::bind<ThriftClientImpl*>(std::mem_fn(&ClientCache::make_client), this,
+                                             std::placeholders::_1, 
std::placeholders::_2);
     }
 
     ClientCache(int max_cache_size) : _client_cache_helper(max_cache_size) {
         _client_factory =
-                
boost::bind<ThriftClientImpl*>(boost::mem_fn(&ClientCache::make_client), this,
-                                               boost::placeholders::_1, 
boost::placeholders::_2);
+                
std::bind<ThriftClientImpl*>(std::mem_fn(&ClientCache::make_client), this,
+                                             std::placeholders::_1, 
std::placeholders::_2);
     }
 
     // Close all clients connected to the supplied address, (e.g., in
diff --git a/be/src/runtime/data_stream_mgr.cpp 
b/be/src/runtime/data_stream_mgr.cpp
index b8f43d1..32ff126 100644
--- a/be/src/runtime/data_stream_mgr.cpp
+++ b/be/src/runtime/data_stream_mgr.cpp
@@ -17,7 +17,6 @@
 
 #include "runtime/data_stream_mgr.h"
 
-#include <boost/functional/hash.hpp>
 #include <boost/thread/thread.hpp>
 #include <iostream>
 
diff --git a/be/src/runtime/data_stream_recvr.cc 
b/be/src/runtime/data_stream_recvr.cc
index b1f4443..fd3a536 100644
--- a/be/src/runtime/data_stream_recvr.cc
+++ b/be/src/runtime/data_stream_recvr.cc
@@ -44,7 +44,7 @@ using boost::scoped_ptr;
 using std::unique_lock;
 using std::try_lock;
 using std::lock_guard;
-using boost::mem_fn;
+using std::mem_fn;
 
 namespace doris {
 
@@ -366,7 +366,7 @@ Status DataStreamRecvr::create_merger(const 
TupleRowComparator& less_than) {
 
     for (int i = 0; i < _sender_queues.size(); ++i) {
         child_input_batch_suppliers.emplace_back(
-                bind(mem_fn(&SenderQueue::get_batch), _sender_queues[i], 
boost::placeholders::_1));
+                bind(mem_fn(&SenderQueue::get_batch), _sender_queues[i], 
std::placeholders::_1));
     }
     RETURN_IF_ERROR(_merger->prepare(child_input_batch_suppliers));
     return Status::OK();
@@ -403,12 +403,12 @@ Status DataStreamRecvr::create_parallel_merger(const 
TupleRowComparator& less_th
         vector<SortedRunMerger::RunBatchSupplier> input_batch_suppliers;
         for (int j = i; j < std::min((size_t)i + step, _sender_queues.size()); 
++j) {
             
input_batch_suppliers.emplace_back(bind(mem_fn(&SenderQueue::get_batch),
-                                                    _sender_queues[j], 
boost::placeholders::_1));
+                                                    _sender_queues[j], 
std::placeholders::_1));
         }
         child_merger->prepare(input_batch_suppliers);
 
         
child_input_batch_suppliers.emplace_back(bind(mem_fn(&SortedRunMerger::get_batch),
-                                                      child_merger.get(), 
boost::placeholders::_1));
+                                                      child_merger.get(), 
std::placeholders::_1));
         _child_mergers.emplace_back(std::move(child_merger));
     }
     RETURN_IF_ERROR(_merger->prepare(child_input_batch_suppliers, true));
diff --git a/be/src/runtime/data_stream_sender.cpp 
b/be/src/runtime/data_stream_sender.cpp
index 9b9f60a..343baf5 100644
--- a/be/src/runtime/data_stream_sender.cpp
+++ b/be/src/runtime/data_stream_sender.cpp
@@ -47,8 +47,8 @@
 #include "service/backend_options.h"
 #include "service/brpc.h"
 #include "util/brpc_stub_cache.h"
-#include "util/defer_op.h"
 #include "util/debug_util.h"
+#include "util/defer_op.h"
 #include "util/network_util.h"
 #include "util/ref_count_closure.h"
 #include "util/thrift_client.h"
@@ -468,9 +468,9 @@ Status DataStreamSender::prepare(RuntimeState* state) {
           << "])";
     _profile = _pool->add(new RuntimeProfile(title.str()));
     SCOPED_TIMER(_profile->total_time_counter());
-    _mem_tracker = MemTracker::CreateTracker(_profile, -1,
-                                             "DataStreamSender:" + 
print_id(state->fragment_instance_id()),
-                                             state->instance_mem_tracker());
+    _mem_tracker = MemTracker::CreateTracker(
+            _profile, -1, "DataStreamSender:" + 
print_id(state->fragment_instance_id()),
+            state->instance_mem_tracker());
 
     if (_part_type == TPartitionType::UNPARTITIONED || _part_type == 
TPartitionType::RANDOM) {
         // Randomize the order we open/transmit to channels to avoid 
thundering herd problems.
@@ -492,8 +492,8 @@ Status DataStreamSender::prepare(RuntimeState* state) {
     _serialize_batch_timer = ADD_TIMER(profile(), "SerializeBatchTime");
     _overall_throughput = profile()->add_derived_counter(
             "OverallThroughput", TUnit::BYTES_PER_SECOND,
-            boost::bind<int64_t>(&RuntimeProfile::units_per_second, 
_bytes_sent_counter,
-                                 profile()->total_time_counter()),
+            std::bind<int64_t>(&RuntimeProfile::units_per_second, 
_bytes_sent_counter,
+                               profile()->total_time_counter()),
             "");
     for (int i = 0; i < _channels.size(); ++i) {
         RETURN_IF_ERROR(_channels[i]->init(state));
diff --git a/be/src/runtime/disk_io_mgr.cc b/be/src/runtime/disk_io_mgr.cc
index 73ed8f2..9841022 100644
--- a/be/src/runtime/disk_io_mgr.cc
+++ b/be/src/runtime/disk_io_mgr.cc
@@ -387,7 +387,7 @@ Status DiskIoMgr::init(const std::shared_ptr<MemTracker>& 
process_mem_tracker) {
             // _disk_thread_group.AddThread(new Thread("disk-io-mgr", ss.str(),
             //             &DiskIoMgr::work_loop, this, _disk_queues[i]));
             _disk_thread_group.add_thread(
-                    new boost::thread(boost::bind(&DiskIoMgr::work_loop, this, 
_disk_queues[i])));
+                    new boost::thread(std::bind(&DiskIoMgr::work_loop, this, 
_disk_queues[i])));
         }
     }
     _request_context_cache.reset(new RequestContextCache(this));
diff --git a/be/src/runtime/disk_io_mgr.h b/be/src/runtime/disk_io_mgr.h
index 9806b78..89c487b 100644
--- a/be/src/runtime/disk_io_mgr.h
+++ b/be/src/runtime/disk_io_mgr.h
@@ -507,7 +507,7 @@ public:
         // (TStatusCode::CANCELLED). The callback is only invoked if this 
WriteRange was
         // successfully added (i.e. add_write_range() succeeded). No locks are 
held while
         // the callback is invoked.
-        typedef boost::function<void(const Status&)> WriteDoneCallback;
+        typedef std::function<void(const Status&)> WriteDoneCallback;
         WriteRange(const std::string& file, int64_t file_offset, int disk_id,
                    WriteDoneCallback callback);
 
diff --git a/be/src/runtime/dpp_sink.cpp b/be/src/runtime/dpp_sink.cpp
index 309a0c0..32eee41 100644
--- a/be/src/runtime/dpp_sink.cpp
+++ b/be/src/runtime/dpp_sink.cpp
@@ -912,7 +912,7 @@ Status DppSink::finish(RuntimeState* state) {
     for (auto& iter : _translator_map) {
         for (auto& trans : iter.second) {
             state->exec_env()->etl_thread_pool()->offer(
-                    boost::bind<void>(&DppSink::process, this, state, trans, 
&latch));
+                    std::bind<void>(&DppSink::process, this, state, trans, 
&latch));
         }
     }
 
diff --git a/be/src/runtime/fragment_mgr.cpp b/be/src/runtime/fragment_mgr.cpp
index bc22aee..e7914d5 100644
--- a/be/src/runtime/fragment_mgr.cpp
+++ b/be/src/runtime/fragment_mgr.cpp
@@ -20,7 +20,6 @@
 #include <gperftools/profiler.h>
 #include <thrift/protocol/TDebugProtocol.h>
 
-#include <boost/bind/bind.hpp>
 #include <memory>
 #include <sstream>
 
@@ -167,9 +166,9 @@ FragmentExecState::FragmentExecState(const TUniqueId& 
query_id,
           _fragment_instance_id(fragment_instance_id),
           _backend_num(backend_num),
           _exec_env(exec_env),
-          _executor(exec_env, 
boost::bind<void>(boost::mem_fn(&FragmentExecState::coordinator_callback),
-                                              this, boost::placeholders::_1, 
boost::placeholders::_2,
-                                              boost::placeholders::_3)),
+          _executor(exec_env, 
std::bind<void>(std::mem_fn(&FragmentExecState::coordinator_callback),
+                                              this, std::placeholders::_1, 
std::placeholders::_2,
+                                              std::placeholders::_3)),
           _timeout_second(-1),
           _fragments_ctx(fragments_ctx) {
     _start_time = DateTimeValue::local_time();
@@ -184,9 +183,9 @@ FragmentExecState::FragmentExecState(const TUniqueId& 
query_id,
           _backend_num(backend_num),
           _exec_env(exec_env),
           _coord_addr(coord_addr),
-          _executor(exec_env, 
boost::bind<void>(boost::mem_fn(&FragmentExecState::coordinator_callback),
-                                              this, boost::placeholders::_1, 
boost::placeholders::_2,
-                                              boost::placeholders::_3)),
+          _executor(exec_env, 
std::bind<void>(std::mem_fn(&FragmentExecState::coordinator_callback),
+                                              this, std::placeholders::_1, 
std::placeholders::_2,
+                                              std::placeholders::_3)),
           _timeout_second(-1) {
     _start_time = DateTimeValue::local_time();
 }
diff --git a/be/src/runtime/plan_fragment_executor.cpp 
b/be/src/runtime/plan_fragment_executor.cpp
index b3dd97d..2af9cb8 100644
--- a/be/src/runtime/plan_fragment_executor.cpp
+++ b/be/src/runtime/plan_fragment_executor.cpp
@@ -105,8 +105,8 @@ Status PlanFragmentExecutor::prepare(const 
TExecPlanFragmentParams& request,
 
     _average_thread_tokens = profile()->add_sampling_counter(
             "AverageThreadTokens",
-            
boost::bind<int64_t>(boost::mem_fn(&ThreadResourceMgr::ResourcePool::num_threads),
-                                 _runtime_state->resource_pool()));
+            
std::bind<int64_t>(std::mem_fn(&ThreadResourceMgr::ResourcePool::num_threads),
+                               _runtime_state->resource_pool()));
 
     // if (_exec_env->process_mem_tracker() != NULL) {
     //     // we have a global limit
@@ -241,7 +241,7 @@ Status PlanFragmentExecutor::open() {
     // may block
     // TODO: if no report thread is started, make sure to send a final profile
     // at end, otherwise the coordinator hangs in case we finish w/ an error
-    if (!_report_status_cb.empty() && config::status_report_interval > 0) {
+    if (_report_status_cb && config::status_report_interval > 0) {
         std::unique_lock<std::mutex> l(_report_thread_lock);
         _report_thread = boost::thread(&PlanFragmentExecutor::report_profile, 
this);
         // make sure the thread started up, otherwise report_profile() might 
get into a race
@@ -353,7 +353,7 @@ void PlanFragmentExecutor::_collect_query_statistics() {
 
 void PlanFragmentExecutor::report_profile() {
     VLOG_FILE << "report_profile(): instance_id=" << 
_runtime_state->fragment_instance_id();
-    DCHECK(!_report_status_cb.empty());
+    DCHECK(_report_status_cb);
     std::unique_lock<std::mutex> l(_report_thread_lock);
     // tell Open() that we started
     _report_thread_started_cv.notify_one();
@@ -400,7 +400,7 @@ void PlanFragmentExecutor::report_profile() {
 }
 
 void PlanFragmentExecutor::send_report(bool done) {
-    if (_report_status_cb.empty()) {
+    if (!_report_status_cb) {
         return;
     }
 
diff --git a/be/src/runtime/plan_fragment_executor.h 
b/be/src/runtime/plan_fragment_executor.h
index 2ad9e8a..85311ba 100644
--- a/be/src/runtime/plan_fragment_executor.h
+++ b/be/src/runtime/plan_fragment_executor.h
@@ -18,9 +18,9 @@
 #ifndef DORIS_BE_RUNTIME_PLAN_FRAGMENT_EXECUTOR_H
 #define DORIS_BE_RUNTIME_PLAN_FRAGMENT_EXECUTOR_H
 
-#include <boost/function.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <condition_variable>
+#include <functional>
 #include <vector>
 
 #include "common/object_pool.h"
@@ -75,7 +75,7 @@ public:
     // Note: this does not take a const RuntimeProfile&, because it might need 
to call
     // functions like PrettyPrint() or to_thrift(), neither of which is const
     // because they take locks.
-    typedef boost::function<void(const Status& status, RuntimeProfile* 
profile, bool done)>
+    typedef std::function<void(const Status& status, RuntimeProfile* profile, 
bool done)>
             report_status_callback;
 
     // report_status_cb, if !empty(), is used to report the accumulated profile
diff --git a/be/src/runtime/raw_value.cpp b/be/src/runtime/raw_value.cpp
index 2fc1a8a..4bdf7cb 100644
--- a/be/src/runtime/raw_value.cpp
+++ b/be/src/runtime/raw_value.cpp
@@ -17,7 +17,6 @@
 
 #include "runtime/raw_value.h"
 
-#include <boost/functional/hash.hpp>
 #include <sstream>
 
 #include "olap/utils.h"
diff --git a/be/src/runtime/raw_value.h b/be/src/runtime/raw_value.h
index 18a7f5c..761e59e 100644
--- a/be/src/runtime/raw_value.h
+++ b/be/src/runtime/raw_value.h
@@ -18,7 +18,6 @@
 #ifndef DORIS_BE_RUNTIME_RAW_VALUE_H
 #define DORIS_BE_RUNTIME_RAW_VALUE_H
 
-#include <boost/functional/hash.hpp>
 #include <string>
 
 #include "common/logging.h"
diff --git a/be/src/runtime/result_buffer_mgr.cpp 
b/be/src/runtime/result_buffer_mgr.cpp
index b1e74bd..3076e0f 100644
--- a/be/src/runtime/result_buffer_mgr.cpp
+++ b/be/src/runtime/result_buffer_mgr.cpp
@@ -17,8 +17,6 @@
 
 #include "runtime/result_buffer_mgr.h"
 
-#include <boost/bind/bind.hpp>
-
 #include "gen_cpp/PaloInternalService_types.h"
 #include "gen_cpp/types.pb.h"
 #include "runtime/buffer_control_block.h"
diff --git a/be/src/runtime/routine_load/data_consumer_group.cpp 
b/be/src/runtime/routine_load/data_consumer_group.cpp
index d3ffad8..b81cfab 100644
--- a/be/src/runtime/routine_load/data_consumer_group.cpp
+++ b/be/src/runtime/routine_load/data_consumer_group.cpp
@@ -67,7 +67,7 @@ Status KafkaDataConsumerGroup::start_all(StreamLoadContext* 
ctx) {
     Status result_st = Status::OK();
     // start all consumers
     for (auto& consumer : _consumers) {
-        if (!_thread_pool.offer(boost::bind<void>(
+        if (!_thread_pool.offer(std::bind<void>(
                     &KafkaDataConsumerGroup::actual_consume, this, consumer, 
&_queue,
                     ctx->max_interval_s * 1000, [this, &result_st](const 
Status& st) {
                         std::unique_lock<std::mutex> lock(_mutex);
@@ -86,7 +86,8 @@ Status KafkaDataConsumerGroup::start_all(StreamLoadContext* 
ctx) {
                          << ", group id: " << _grp_id;
             return Status::InternalError("failed to submit data consumer");
         } else {
-            VLOG_CRITICAL << "submit a data consumer: " << consumer->id() << 
", group id: " << _grp_id;
+            VLOG_CRITICAL << "submit a data consumer: " << consumer->id()
+                          << ", group id: " << _grp_id;
         }
     }
 
@@ -163,8 +164,8 @@ Status KafkaDataConsumerGroup::start_all(StreamLoadContext* 
ctx) {
         bool res = _queue.blocking_get(&msg);
         if (res) {
             VLOG_NOTICE << "get kafka message"
-                    << ", partition: " << msg->partition() << ", offset: " << 
msg->offset()
-                    << ", len: " << msg->len();
+                        << ", partition: " << msg->partition() << ", offset: " 
<< msg->offset()
+                        << ", len: " << msg->len();
 
             (kafka_pipe.get()->*append_data)(static_cast<const 
char*>(msg->payload()),
                                              static_cast<size_t>(msg->len()));
@@ -174,7 +175,7 @@ Status KafkaDataConsumerGroup::start_all(StreamLoadContext* 
ctx) {
                 left_bytes -= msg->len();
                 cmt_offset[msg->partition()] = msg->offset();
                 VLOG_NOTICE << "consume partition[" << msg->partition() << " - 
" << msg->offset()
-                        << "]";
+                            << "]";
             } else {
                 // failed to append this msg, we must stop
                 LOG(WARNING) << "failed to append msg to pipe. grp: " << 
_grp_id;
diff --git a/be/src/runtime/routine_load/routine_load_task_executor.cpp 
b/be/src/runtime/routine_load/routine_load_task_executor.cpp
index 661ef57..6d40c9d 100644
--- a/be/src/runtime/routine_load/routine_load_task_executor.cpp
+++ b/be/src/runtime/routine_load/routine_load_task_executor.cpp
@@ -169,19 +169,19 @@ Status RoutineLoadTaskExecutor::submit_task(const 
TRoutineLoadTask& task) {
     _task_map[ctx->id] = ctx;
 
     // offer the task to thread pool
-    if 
(!_thread_pool.offer(boost::bind<void>(&RoutineLoadTaskExecutor::exec_task, 
this, ctx,
-                                              &_data_consumer_pool, 
[this](StreamLoadContext* ctx) {
-                                                  std::unique_lock<std::mutex> 
l(_lock);
-                                                  _task_map.erase(ctx->id);
-                                                  LOG(INFO) << "finished 
routine load task "
-                                                            << ctx->brief() << 
", status: "
-                                                            << 
ctx->status.get_error_msg()
-                                                            << ", current 
tasks num: "
-                                                            << 
_task_map.size();
-                                                  if (ctx->unref()) {
-                                                      delete ctx;
-                                                  }
-                                              }))) {
+    if 
(!_thread_pool.offer(std::bind<void>(&RoutineLoadTaskExecutor::exec_task, this, 
ctx,
+                                            &_data_consumer_pool, 
[this](StreamLoadContext* ctx) {
+                                                std::unique_lock<std::mutex> 
l(_lock);
+                                                _task_map.erase(ctx->id);
+                                                LOG(INFO) << "finished routine 
load task "
+                                                          << ctx->brief() << 
", status: "
+                                                          << 
ctx->status.get_error_msg()
+                                                          << ", current tasks 
num: "
+                                                          << _task_map.size();
+                                                if (ctx->unref()) {
+                                                    delete ctx;
+                                                }
+                                            }))) {
         // failed to submit task, clear and return
         LOG(WARNING) << "failed to submit routine load task: " << ctx->brief();
         _task_map.erase(ctx->id);
diff --git a/be/src/runtime/sorted_run_merger.h 
b/be/src/runtime/sorted_run_merger.h
index d361bb1..a08ea8c 100644
--- a/be/src/runtime/sorted_run_merger.h
+++ b/be/src/runtime/sorted_run_merger.h
@@ -46,7 +46,7 @@ public:
     // Function that returns the next batch of rows from an input sorted run. 
The batch
     // is owned by the supplier (i.e. not SortedRunMerger). eos is indicated 
by an NULL
     // batch being returned.
-    typedef boost::function<Status(RowBatch**)> RunBatchSupplier;
+    typedef std::function<Status(RowBatch**)> RunBatchSupplier;
 
     SortedRunMerger(const TupleRowComparator& compare_less_than, 
RowDescriptor* row_desc,
                     RuntimeProfile* profile, bool deep_copy_input);
diff --git a/be/src/runtime/spill_sorter.cc b/be/src/runtime/spill_sorter.cc
index 25c9dd5..4d5d655 100644
--- a/be/src/runtime/spill_sorter.cc
+++ b/be/src/runtime/spill_sorter.cc
@@ -17,7 +17,6 @@
 
 #include "runtime/spill_sorter.h"
 
-#include <boost/mem_fn.hpp>
 #include <sstream>
 #include <string>
 
@@ -32,9 +31,9 @@ using std::deque;
 using std::string;
 using std::vector;
 
-using boost::bind;
-using boost::function;
-using boost::mem_fn;
+using std::bind;
+using std::function;
+using std::mem_fn;
 using boost::scoped_ptr;
 
 namespace doris {
@@ -1319,7 +1318,7 @@ Status SpillSorter::create_merger(int num_runs) {
         // Run::get_next_batch() is used by the merger to retrieve a batch of 
rows to merge
         // from this run.
         merge_runs.push_back(
-                bind<Status>(mem_fn(&Run::get_next_batch), run, 
boost::placeholders::_1));
+                bind<Status>(mem_fn(&Run::get_next_batch), run, 
std::placeholders::_1));
         _sorted_runs.pop_front();
         _merging_runs.push_back(run);
     }
diff --git a/be/src/runtime/thread_resource_mgr.h 
b/be/src/runtime/thread_resource_mgr.h
index 7f84824..ca8840e 100644
--- a/be/src/runtime/thread_resource_mgr.h
+++ b/be/src/runtime/thread_resource_mgr.h
@@ -20,10 +20,10 @@
 
 #include <stdlib.h>
 
-#include <boost/function.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/thread/thread.hpp>
+#include <functional>
 #include <list>
 #include <mutex>
 
@@ -76,7 +76,7 @@ public:
     // variable semantics).
     // TODO: this is manageable now since it just needs to call into the io
     // mgr.  What's the best model for something more general.
-    typedef boost::function<void(ResourcePool*)> thread_available_cb;
+    typedef std::function<void(ResourcePool*)> thread_available_cb;
 
     // Pool abstraction for a single resource pool.
     // TODO: this is not quite sufficient going forward.  We need a hierarchy 
of pools,
diff --git a/be/src/util/hash_util.hpp b/be/src/util/hash_util.hpp
index ccbc79b..7d053a1 100644
--- a/be/src/util/hash_util.hpp
+++ b/be/src/util/hash_util.hpp
@@ -18,8 +18,8 @@
 #ifndef DORIS_BE_SRC_COMMON_UTIL_HASH_UTIL_HPP
 #define DORIS_BE_SRC_COMMON_UTIL_HASH_UTIL_HPP
 
-#include "common/logging.h"
 #include "common/compiler_util.h"
+#include "common/logging.h"
 
 // For cross compiling with clang, we need to be able to generate an IR file 
with
 // no sse instructions.  Attempting to load a precompiled IR file that contains
@@ -29,9 +29,10 @@
 #include <nmmintrin.h>
 #endif
 #include <zlib.h>
+
+#include "gen_cpp/Types_types.h"
 #include "util/cpu_info.h"
 #include "util/murmur_hash3.h"
-#include "gen_cpp/Types_types.h"
 
 namespace doris {
 
@@ -134,27 +135,33 @@ public:
 
         const uint32_t c1 = 0xcc9e2d51;
         const uint32_t c2 = 0x1b873593;
-        const uint32_t * blocks = (const uint32_t *)(data + nblocks * 4);
+        const uint32_t* blocks = (const uint32_t*)(data + nblocks * 4);
 
-        for(int i = -nblocks; i; i++) {
+        for (int i = -nblocks; i; i++) {
             uint32_t k1 = blocks[i];
 
             k1 *= c1;
-            k1 = rotl32(k1,15);
+            k1 = rotl32(k1, 15);
             k1 *= c2;
 
             h1 ^= k1;
-            h1 = rotl32(h1,13);
+            h1 = rotl32(h1, 13);
             h1 = h1 * 5 + 0xe6546b64;
         }
 
-        const uint8_t * tail = (const uint8_t*)(data + nblocks * 4);
+        const uint8_t* tail = (const uint8_t*)(data + nblocks * 4);
         uint32_t k1 = 0;
-        switch(len & 3) {
-            case 3: k1 ^= tail[2] << 16;
-            case 2: k1 ^= tail[1] << 8;
-            case 1: k1 ^= tail[0];
-                k1 *= c1; k1 = rotl32(k1,15); k1 *= c2; h1 ^= k1;
+        switch (len & 3) {
+        case 3:
+            k1 ^= tail[2] << 16;
+        case 2:
+            k1 ^= tail[1] << 8;
+        case 1:
+            k1 ^= tail[0];
+            k1 *= c1;
+            k1 = rotl32(k1, 15);
+            k1 *= c2;
+            h1 ^= k1;
         };
 
         h1 ^= len;
@@ -182,21 +189,21 @@ public:
 
         const uint8_t* data2 = reinterpret_cast<const uint8_t*>(data);
         switch (len & 7) {
-            case 7:
-                h ^= uint64_t(data2[6]) << 48;
-            case 6:
-                h ^= uint64_t(data2[5]) << 40;
-            case 5:
-                h ^= uint64_t(data2[4]) << 32;
-            case 4:
-                h ^= uint64_t(data2[3]) << 24;
-            case 3:
-                h ^= uint64_t(data2[2]) << 16;
-            case 2:
-                h ^= uint64_t(data2[1]) << 8;
-            case 1:
-                h ^= uint64_t(data2[0]);
-                h *= MURMUR_PRIME;
+        case 7:
+            h ^= uint64_t(data2[6]) << 48;
+        case 6:
+            h ^= uint64_t(data2[5]) << 40;
+        case 5:
+            h ^= uint64_t(data2[4]) << 32;
+        case 4:
+            h ^= uint64_t(data2[3]) << 24;
+        case 3:
+            h ^= uint64_t(data2[2]) << 16;
+        case 2:
+            h ^= uint64_t(data2[1]) << 8;
+        case 1:
+            h ^= uint64_t(data2[0]);
+            h *= MURMUR_PRIME;
         }
 
         h ^= h >> MURMUR_R;
@@ -207,7 +214,7 @@ public:
 
     // default values recommended by http://isthe.com/chongo/tech/comp/fnv/
     static const uint32_t FNV_PRIME = 0x01000193; //   16777619
-    static const uint32_t FNV_SEED = 0x811C9DC5; // 2166136261
+    static const uint32_t FNV_SEED = 0x811C9DC5;  // 2166136261
     static const uint64_t FNV64_PRIME = 1099511628211UL;
     static const uint64_t FNV64_SEED = 14695981039346656037UL;
     static const uint64_t MURMUR_PRIME = 0xc6a4a7935bd1e995ULL;
@@ -243,24 +250,24 @@ public:
     // Our hash function is MurmurHash2, 64 bit version.
     // It was modified in order to provide the same result in
     // big and little endian archs (endian neutral).
-    static uint64_t murmur_hash64A (const void* key, int32_t len, unsigned int 
seed) {
+    static uint64_t murmur_hash64A(const void* key, int32_t len, unsigned int 
seed) {
         const uint64_t m = MURMUR_PRIME;
         const int r = 47;
         uint64_t h = seed ^ (len * m);
-        const uint8_t *data = (const uint8_t *)key;
-        const uint8_t *end = data + (len-(len&7));
+        const uint8_t* data = (const uint8_t*)key;
+        const uint8_t* end = data + (len - (len & 7));
 
-        while(data != end) {
+        while (data != end) {
             uint64_t k;
 #if (BYTE_ORDER == BIG_ENDIAN)
-            k = (uint64_t) data[0];
-            k |= (uint64_t) data[1] << 8;
-            k |= (uint64_t) data[2] << 16;
-            k |= (uint64_t) data[3] << 24;
-            k |= (uint64_t) data[4] << 32;
-            k |= (uint64_t) data[5] << 40;
-            k |= (uint64_t) data[6] << 48;
-            k |= (uint64_t) data[7] << 56;
+            k = (uint64_t)data[0];
+            k |= (uint64_t)data[1] << 8;
+            k |= (uint64_t)data[2] << 16;
+            k |= (uint64_t)data[3] << 24;
+            k |= (uint64_t)data[4] << 32;
+            k |= (uint64_t)data[5] << 40;
+            k |= (uint64_t)data[6] << 48;
+            k |= (uint64_t)data[7] << 56;
 #else
             k = *((uint64_t*)data);
 #endif
@@ -273,15 +280,22 @@ public:
             data += 8;
         }
 
-        switch(len & 7) {
-            case 7: h ^= (uint64_t)data[6] << 48;
-            case 6: h ^= (uint64_t)data[5] << 40;
-            case 5: h ^= (uint64_t)data[4] << 32;
-            case 4: h ^= (uint64_t)data[3] << 24;
-            case 3: h ^= (uint64_t)data[2] << 16;
-            case 2: h ^= (uint64_t)data[1] << 8;
-            case 1: h ^= (uint64_t)data[0];
-                h *= m;
+        switch (len & 7) {
+        case 7:
+            h ^= (uint64_t)data[6] << 48;
+        case 6:
+            h ^= (uint64_t)data[5] << 40;
+        case 5:
+            h ^= (uint64_t)data[4] << 32;
+        case 4:
+            h ^= (uint64_t)data[3] << 24;
+        case 3:
+            h ^= (uint64_t)data[2] << 16;
+        case 2:
+            h ^= (uint64_t)data[1] << 8;
+        case 1:
+            h ^= (uint64_t)data[0];
+            h *= m;
         };
 
         h ^= h >> r;
@@ -323,14 +337,20 @@ public:
         murmur_hash3_x64_64(data, bytes, seed, &hash);
         return hash;
 #endif
-
+    }
+    // hash_combine is the same with boost hash_combine,
+    // except replace boost::hash with std::hash 
+    template <class T>
+    static inline void hash_combine(std::size_t& seed, const T& v) {
+        std::hash<T> hasher;
+        seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
     }
 };
 
-}
+} // namespace doris
 
 namespace std {
-template<>
+template <>
 struct hash<doris::TUniqueId> {
     std::size_t operator()(const doris::TUniqueId& id) const {
         std::size_t seed = 0;
@@ -340,7 +360,7 @@ struct hash<doris::TUniqueId> {
     }
 };
 
-template<>
+template <>
 struct hash<doris::TNetworkAddress> {
     size_t operator()(const doris::TNetworkAddress& address) const {
         std::size_t seed = 0;
@@ -352,7 +372,7 @@ struct hash<doris::TNetworkAddress> {
 
 #if !defined(IR_COMPILE) && __GNUC__ < 6
 // Cause this is builtin function
-template<>
+template <>
 struct hash<__int128> {
     std::size_t operator()(const __int128& val) const {
         return doris::HashUtil::hash(&val, sizeof(val), 0);
@@ -360,7 +380,7 @@ struct hash<__int128> {
 };
 #endif
 
-template<>
+template <>
 struct hash<std::pair<doris::TUniqueId, int64_t>> {
     size_t operator()(const std::pair<doris::TUniqueId, int64_t>& pair) const {
         size_t seed = 0;
@@ -371,6 +391,6 @@ struct hash<std::pair<doris::TUniqueId, int64_t>> {
     }
 };
 
-}
+} // namespace std
 
 #endif
diff --git a/be/src/util/internal_queue.h b/be/src/util/internal_queue.h
index 8338ee7..64d0c3c 100644
--- a/be/src/util/internal_queue.h
+++ b/be/src/util/internal_queue.h
@@ -18,7 +18,7 @@
 #ifndef DORIS_BE_SRC_UTIL_INTERNAL_QUEUE_H
 #define DORIS_BE_SRC_UTIL_INTERNAL_QUEUE_H
 
-#include <boost/function.hpp>
+#include <functional>
 #include <mutex>
 
 #include "util/fake_lock.h"
@@ -240,7 +240,7 @@ public:
     // Iterate over elements of queue, calling 'fn' for each element. If 'fn' 
returns
     // false, terminate iteration. It is invalid to call other InternalQueue 
methods
     // from 'fn'.
-    void iterate(boost::function<bool(T*)> fn) {
+    void iterate(std::function<bool(T*)> fn) {
         std::lock_guard<LockType> lock(lock_);
         for (Node* current = head_; current != NULL; current = 
current->next_node) {
             if (!fn(reinterpret_cast<T*>(current))) return;
diff --git a/be/src/util/priority_thread_pool.hpp 
b/be/src/util/priority_thread_pool.hpp
index 18d15eb..b391453 100644
--- a/be/src/util/priority_thread_pool.hpp
+++ b/be/src/util/priority_thread_pool.hpp
@@ -33,7 +33,7 @@ public:
     // Signature of a work-processing function. Takes the integer id of the 
thread which is
     // calling it (ids run from 0 to num_threads - 1) and a reference to the 
item to
     // process.
-    typedef boost::function<void()> WorkFunction;
+    typedef std::function<void()> WorkFunction;
 
     struct Task {
     public:
@@ -57,7 +57,7 @@ public:
             : _work_queue(queue_size), _shutdown(false) {
         for (int i = 0; i < num_threads; ++i) {
             _threads.create_thread(
-                    
boost::bind<void>(boost::mem_fn(&PriorityThreadPool::work_thread), this, i));
+                    
std::bind<void>(std::mem_fn(&PriorityThreadPool::work_thread), this, i));
         }
     }
 
diff --git a/be/src/util/runtime_profile.h b/be/src/util/runtime_profile.h
index b0b9416..7b562ee 100644
--- a/be/src/util/runtime_profile.h
+++ b/be/src/util/runtime_profile.h
@@ -21,9 +21,9 @@
 #include <sys/resource.h>
 #include <sys/time.h>
 
-#include <boost/function.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <boost/thread/thread.hpp>
+#include <functional>
 #include <iostream>
 #include <mutex>
 
@@ -187,7 +187,7 @@ public:
         AtomicInt64 current_value_;
     };
 
-    typedef boost::function<int64_t()> DerivedCounterFunction;
+    typedef std::function<int64_t()> DerivedCounterFunction;
 
     // A DerivedCounter also has a name and type, but the value is computed.
     // Do not call Set() and Update().
@@ -392,7 +392,7 @@ public:
 
     // Function that returns a counter metric.
     // Note: this function should not block (or take a long time).
-    typedef boost::function<int64_t()> SampleFn;
+    typedef std::function<int64_t()> SampleFn;
 
     // Add a rate counter to the current profile based on src_counter with 
name.
     // The rate counter is updated periodically based on the src counter.
diff --git a/be/src/util/string_util.cpp b/be/src/util/string_util.cpp
index dc29a96..bbd3077 100644
--- a/be/src/util/string_util.cpp
+++ b/be/src/util/string_util.cpp
@@ -18,6 +18,7 @@
 #include "util/string_util.h"
 
 #include "gutil/strings/split.h"
+#include "util/hash_util.hpp"
 
 namespace doris {
 
@@ -25,7 +26,7 @@ size_t hash_of_path(const std::string& identifier, const 
std::string& path) {
     size_t hash = std::hash<std::string>()(identifier);
     std::vector<std::string> path_parts = strings::Split(path, "/", 
strings::SkipWhitespace());
     for (auto& part : path_parts) {
-        boost::hash_combine<std::string>(hash, part);
+        HashUtil::hash_combine<std::string>(hash, part);
     }
     return hash;
 }
diff --git a/be/src/util/string_util.h b/be/src/util/string_util.h
index 0f1a51a..5f15ed4 100644
--- a/be/src/util/string_util.h
+++ b/be/src/util/string_util.h
@@ -19,7 +19,6 @@
 
 #include <boost/algorithm/string.hpp>
 #include <boost/algorithm/string/case_conv.hpp> // to_lower_copy
-#include <boost/functional/hash.hpp>
 #include <map>
 #include <set>
 #include <string>
diff --git a/be/src/util/thrift_rpc_helper.cpp 
b/be/src/util/thrift_rpc_helper.cpp
index f6d51e3..63918ab 100644
--- a/be/src/util/thrift_rpc_helper.cpp
+++ b/be/src/util/thrift_rpc_helper.cpp
@@ -17,7 +17,6 @@
 
 #include "util/thrift_rpc_helper.h"
 
-#include <boost/functional/hash.hpp>
 #include <boost/thread/thread.hpp>
 #include <sstream>
 
diff --git a/be/src/util/uid_util.h b/be/src/util/uid_util.h
index 3979a9a..8a5a89a 100644
--- a/be/src/util/uid_util.h
+++ b/be/src/util/uid_util.h
@@ -18,7 +18,6 @@
 #ifndef DORIS_BE_SRC_UTIL_UID_UTIL_H
 #define DORIS_BE_SRC_UTIL_UID_UTIL_H
 
-#include <boost/functional/hash.hpp>
 #include <ostream>
 #include <string>
 
@@ -145,8 +144,8 @@ struct UniqueId {
 // This function must be called 'hash_value' to be picked up by boost.
 inline std::size_t hash_value(const doris::TUniqueId& id) {
     std::size_t seed = 0;
-    boost::hash_combine(seed, id.lo);
-    boost::hash_combine(seed, id.hi);
+    HashUtil::hash_combine(seed, id.lo);
+    HashUtil::hash_combine(seed, id.hi);
     return seed;
 }
 
diff --git a/be/src/util/uuid_generator.h b/be/src/util/uuid_generator.h
index 5d3aab0..0a78ca9 100644
--- a/be/src/util/uuid_generator.h
+++ b/be/src/util/uuid_generator.h
@@ -17,7 +17,6 @@
 
 #pragma once
 
-#include <boost/functional/hash.hpp>
 #include <boost/uuid/uuid.hpp>
 #include <boost/uuid/uuid_generators.hpp>
 #include <boost/uuid/uuid_io.hpp>
diff --git a/be/test/runtime/buffered_block_mgr2_test.cpp 
b/be/test/runtime/buffered_block_mgr2_test.cpp
index 1e34e8c..bf2cfd4 100644
--- a/be/test/runtime/buffered_block_mgr2_test.cpp
+++ b/be/test/runtime/buffered_block_mgr2_test.cpp
@@ -529,8 +529,8 @@ protected:
 
         boost::thread_group workers;
         for (int i = 0; i < num_threads; ++i) {
-            thread* t = new 
boost::thread(boost::bind(&BufferedBlockMgrTest::TestRandomInternalImpl,
-                                                      this, state, block_mgr, 
max_num_buffers, i));
+            thread* t = new 
boost::thread(std::bind(&BufferedBlockMgrTest::TestRandomInternalImpl,
+                                                    this, state, block_mgr, 
max_num_buffers, i));
             workers.add_thread(t);
         }
         workers.join_all();
@@ -561,7 +561,7 @@ protected:
                                                       _test_env->exec_env());
         for (int i = 0; i < num_threads; ++i) {
             thread* t = new boost::thread(
-                    boost::bind(&BufferedBlockMgrTest::CreateDestroyThread, 
this, i, shared_state));
+                    std::bind(&BufferedBlockMgrTest::CreateDestroyThread, 
this, i, shared_state));
             workers.add_thread(t);
         }
         workers.join_all();
diff --git a/be/test/runtime/disk_io_mgr_test.cpp 
b/be/test/runtime/disk_io_mgr_test.cpp
index cc55459..f1a64e3 100644
--- a/be/test/runtime/disk_io_mgr_test.cpp
+++ b/be/test/runtime/disk_io_mgr_test.cpp
@@ -36,7 +36,7 @@ using std::list;
 using std::lock_guard;
 using std::unique_lock;
 using std::mutex;
-using boost::mem_fn;
+using std::mem_fn;
 using std::condition_variable;
 using boost::scoped_ptr;
 using boost::thread;
diff --git a/be/test/runtime/thread_resource_mgr_test.cpp 
b/be/test/runtime/thread_resource_mgr_test.cpp
index c96f358..711852f 100644
--- a/be/test/runtime/thread_resource_mgr_test.cpp
+++ b/be/test/runtime/thread_resource_mgr_test.cpp
@@ -49,7 +49,7 @@ TEST(ThreadResourceMgr, BasicTest) {
 
     ThreadResourceMgr::ResourcePool* c1 = mgr.register_pool();
     c1->set_thread_available_cb(
-            boost::bind<void>(boost::mem_fn(&NotifiedCounter::Notify), 
&counter1, _1));
+            std::bind<void>(std::mem_fn(&NotifiedCounter::Notify), &counter1, 
_1));
     c1->acquire_thread_token();
     c1->acquire_thread_token();
     c1->acquire_thread_token();
@@ -76,7 +76,7 @@ TEST(ThreadResourceMgr, BasicTest) {
     // Register a new consumer, quota is cut in half
     ThreadResourceMgr::ResourcePool* c2 = mgr.register_pool();
     c2->set_thread_available_cb(
-            boost::bind<void>(boost::mem_fn(&NotifiedCounter::Notify), 
&counter2, _1));
+            std::bind<void>(std::mem_fn(&NotifiedCounter::Notify), &counter2, 
_1));
     EXPECT_FALSE(c1->try_acquire_thread_token());
     EXPECT_EQ(c1->num_threads(), 3);
     c1->acquire_thread_token();
diff --git a/be/test/util/blocking_queue_test.cpp 
b/be/test/util/blocking_queue_test.cpp
index 4dbf1b4..94dcd8c 100644
--- a/be/test/util/blocking_queue_test.cpp
+++ b/be/test/util/blocking_queue_test.cpp
@@ -92,15 +92,15 @@ public:
     void Run() {
         for (int i = 0; i < _nthreads; ++i) {
             _threads.push_back(boost::shared_ptr<boost::thread>(
-                    new 
boost::thread(boost::bind(&MultiThreadTest::inserter_thread, this, i))));
+                    new 
boost::thread(std::bind(&MultiThreadTest::inserter_thread, this, i))));
             _threads.push_back(boost::shared_ptr<boost::thread>(
-                    new 
boost::thread(boost::bind(&MultiThreadTest::RemoverThread, this))));
+                    new 
boost::thread(std::bind(&MultiThreadTest::RemoverThread, this))));
         }
 
         // We add an extra thread to ensure that there aren't enough elements 
in
         // the queue to go around.  This way, we test removal after shutdown.
         _threads.push_back(boost::shared_ptr<boost::thread>(
-                new boost::thread(boost::bind(&MultiThreadTest::RemoverThread, 
this))));
+                new boost::thread(std::bind(&MultiThreadTest::RemoverThread, 
this))));
 
         for (int i = 0; i < _threads.size(); ++i) {
             _threads[i]->join();

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

Reply via email to