4141#include " runtime/workload_management/io_throttle.h"
4242#include " util/async_io.h"
4343#include " util/debug_points.h"
44+ #include " util/defer_op.h"
4445#include " util/doris_metrics.h"
4546
4647namespace doris {
4748namespace io {
4849
49- std::atomic_bool BeConfDataDirReader::be_config_data_dir_list_inited = false ;
50+ std::atomic_bool BeConfDataDirReader::be_config_data_dir_list_initing = false ;
5051
5152std::vector<doris::DataDirInfo> BeConfDataDirReader::be_config_data_dir_list;
5253
5354void BeConfDataDirReader::get_data_dir_by_file_path (io::Path* file_path,
5455 std::string* data_dir_arg) {
5556#ifndef BE_TEST
56- be_config_data_dir_list_inited .wait (false );
57+ be_config_data_dir_list_initing .wait (true );
5758#endif
5859 for (const auto & data_dir_info : be_config_data_dir_list) {
5960 if (data_dir_info.path .size () >= file_path->string ().size ()) {
@@ -70,6 +71,11 @@ void BeConfDataDirReader::init_be_conf_data_dir(
7071 const std::vector<doris::StorePath>& store_paths,
7172 const std::vector<doris::StorePath>& spill_store_paths,
7273 const std::vector<doris::CachePath>& cache_paths) {
74+ be_config_data_dir_list_initing.store (true );
75+ Defer defer {[]() {
76+ be_config_data_dir_list_initing.store (false , std::memory_order_release);
77+ be_config_data_dir_list_initing.notify_all ();
78+ }};
7379 for (int i = 0 ; i < store_paths.size (); i++) {
7480 DataDirInfo data_dir_info;
7581 data_dir_info.path = store_paths[i].path ;
@@ -101,8 +107,6 @@ void BeConfDataDirReader::init_be_conf_data_dir(
101107 [](const DataDirInfo& a, const DataDirInfo& b) {
102108 return a.path .length () > b.path .length ();
103109 });
104- be_config_data_dir_list_inited.store (true , std::memory_order_release);
105- be_config_data_dir_list_inited.notify_all ();
106110}
107111
108112LocalFileReader::LocalFileReader (Path path, size_t file_size, int fd)
0 commit comments