4646
4747namespace doris {
4848namespace io {
49-
50- std::atomic_bool BeConfDataDirReader::be_config_data_dir_list_initing = false ;
49+ // 1: initing 2: inited 0: before init
50+ std::atomic_int BeConfDataDirReader::be_config_data_dir_list_state = 0 ;
5151
5252std::vector<doris::DataDirInfo> BeConfDataDirReader::be_config_data_dir_list;
5353
5454void BeConfDataDirReader::get_data_dir_by_file_path (io::Path* file_path,
5555 std::string* data_dir_arg) {
56- #ifndef BE_TEST
57- be_config_data_dir_list_initing.wait (true );
58- #endif
56+ int state = be_config_data_dir_list_state.load (std::memory_order_acquire);
57+ if (state == 0 ) [[unlikely]] {
58+ return ;
59+ } else if (state == 1 ) [[unlikely]] {
60+ be_config_data_dir_list_state.wait (1 );
61+ }
62+
5963 for (const auto & data_dir_info : be_config_data_dir_list) {
6064 if (data_dir_info.path .size () >= file_path->string ().size ()) {
6165 continue ;
@@ -71,10 +75,10 @@ void BeConfDataDirReader::init_be_conf_data_dir(
7175 const std::vector<doris::StorePath>& store_paths,
7276 const std::vector<doris::StorePath>& spill_store_paths,
7377 const std::vector<doris::CachePath>& cache_paths) {
74- be_config_data_dir_list_initing .store (true );
78+ be_config_data_dir_list_state .store (1 , std::memory_order_release );
7579 Defer defer {[]() {
76- be_config_data_dir_list_initing .store (false , std::memory_order_release);
77- be_config_data_dir_list_initing .notify_all ();
80+ be_config_data_dir_list_state .store (2 , std::memory_order_release);
81+ be_config_data_dir_list_state .notify_all ();
7882 }};
7983 for (int i = 0 ; i < store_paths.size (); i++) {
8084 DataDirInfo data_dir_info;
0 commit comments