diff --git a/be/src/olap/rowset/rowset_meta.cpp b/be/src/olap/rowset/rowset_meta.cpp index 137f5c745cee43..0e6c76476b86b7 100644 --- a/be/src/olap/rowset/rowset_meta.cpp +++ b/be/src/olap/rowset/rowset_meta.cpp @@ -22,6 +22,7 @@ #include #include +#include "cloud/cloud_storage_engine.h" #include "common/logging.h" #include "google/protobuf/util/message_differencer.h" #include "io/fs/file_writer.h" @@ -112,16 +113,23 @@ Result RowsetMeta::remote_storage_resource() { } if (!_storage_resource.fs) { - // not initialized yet - auto storage_resource = get_storage_resource(resource_id()); - if (storage_resource) { + if (auto storage_resource = get_storage_resource(resource_id())) { _storage_resource = std::move(storage_resource->first); } else { + if (config::is_cloud_mode()) { + // When creating a new cluster or creating a storage resource, BE may not sync storage resource, + // at the moment a query is coming, the BetaRowsetReader call loadSegment and use this method + // to get the storage resource, so we need to sync storage resource here. + ExecEnv::GetInstance()->storage_engine().to_cloud().sync_storage_vault(); + if (auto retry_resource = get_storage_resource(resource_id())) { + _storage_resource = std::move(retry_resource->first); + return &_storage_resource; + } + } return ResultError(Status::InternalError("cannot find storage resource. resource_id={}", resource_id())); } } - return &_storage_resource; }