mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
enhance: [StorageV2] Make datanode use non-singleton fs (#44418)
Related to #39173 According to the current design, datanode shall create fs from storage config in request instead of using singleton fs. This PR upgrade milvus-storage and make packed reader/writer compose new fs from storage config. --------- Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
This commit is contained in:
parent
febfeca5ff
commit
7b83314bf3
@ -456,6 +456,7 @@ SegmentGrowingImpl::load_column_group_data_internal(
|
||||
DEFAULT_FIELD_MAX_MEMORY_LIMIT,
|
||||
std::move(strategy),
|
||||
row_group_lists,
|
||||
fs,
|
||||
nullptr,
|
||||
infos.load_priority);
|
||||
});
|
||||
|
||||
@ -219,7 +219,8 @@ TEST_F(TestGrowingStorageV2, LoadWithStrategy) {
|
||||
channel,
|
||||
memory_limit,
|
||||
std::move(strategy),
|
||||
row_group_lists);
|
||||
row_group_lists,
|
||||
fs_);
|
||||
|
||||
// Verify each batch matches row group metadata
|
||||
std::shared_ptr<milvus::ArrowDataWrapper> wrapper;
|
||||
@ -253,7 +254,8 @@ TEST_F(TestGrowingStorageV2, LoadWithStrategy) {
|
||||
channel,
|
||||
memory_limit,
|
||||
std::move(strategy),
|
||||
row_group_lists);
|
||||
row_group_lists,
|
||||
fs_);
|
||||
|
||||
std::shared_ptr<milvus::ArrowDataWrapper> wrapper;
|
||||
int64_t total_rows = 0;
|
||||
@ -284,7 +286,8 @@ TEST_F(TestGrowingStorageV2, LoadWithStrategy) {
|
||||
channel,
|
||||
memory_limit,
|
||||
std::move(strategy),
|
||||
row_group_lists);
|
||||
row_group_lists,
|
||||
fs_);
|
||||
|
||||
total_rows = 0;
|
||||
std::vector<int64_t> selected_row_groups = {0, 2};
|
||||
|
||||
@ -150,14 +150,13 @@ LoadWithStrategy(const std::vector<std::string>& remote_files,
|
||||
int64_t memory_limit,
|
||||
std::unique_ptr<RowGroupSplitStrategy> strategy,
|
||||
const std::vector<std::vector<int64_t>>& row_group_lists,
|
||||
const milvus_storage::ArrowFileSystemPtr& fs,
|
||||
const std::shared_ptr<arrow::Schema> schema,
|
||||
milvus::proto::common::LoadPriority priority) {
|
||||
try {
|
||||
AssertInfo(remote_files.size() == row_group_lists.size(),
|
||||
"[StorageV2] Number of remote files must match number of "
|
||||
"row group lists");
|
||||
auto fs = milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
auto& pool =
|
||||
ThreadPools::GetThreadPool(milvus::PriorityForLoad(priority));
|
||||
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include <arrow/record_batch.h>
|
||||
#include <vector>
|
||||
#include "common/FieldData.h"
|
||||
#include "milvus-storage/filesystem/fs.h"
|
||||
|
||||
namespace milvus::segcore {
|
||||
|
||||
@ -84,6 +85,7 @@ LoadWithStrategy(const std::vector<std::string>& remote_files,
|
||||
int64_t memory_limit,
|
||||
std::unique_ptr<RowGroupSplitStrategy> strategy,
|
||||
const std::vector<std::vector<int64_t>>& row_group_lists,
|
||||
const milvus_storage::ArrowFileSystemPtr& fs,
|
||||
const std::shared_ptr<arrow::Schema> schema = nullptr,
|
||||
milvus::proto::common::LoadPriority priority =
|
||||
milvus::proto::common::LoadPriority::HIGH);
|
||||
|
||||
@ -14,13 +14,10 @@
|
||||
|
||||
#include "segcore/packed_reader_c.h"
|
||||
#include "milvus-storage/packed/reader.h"
|
||||
#include "milvus-storage/common/log.h"
|
||||
#include "milvus-storage/filesystem/fs.h"
|
||||
#include "milvus-storage/common/config.h"
|
||||
#include "parquet/encryption/encryption.h"
|
||||
#include "storage/PluginLoader.h"
|
||||
#include "storage/KeyRetriever.h"
|
||||
#include "log/Log.h"
|
||||
#include "storage/StorageV2FSCache.h"
|
||||
|
||||
#include <arrow/c/bridge.h>
|
||||
#include <arrow/filesystem/filesystem.h>
|
||||
@ -43,28 +40,26 @@ NewPackedReaderWithStorageConfig(char** paths,
|
||||
try {
|
||||
auto truePaths = std::vector<std::string>(paths, paths + num_paths);
|
||||
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.address = std::string(c_storage_config.address);
|
||||
conf.bucket_name = std::string(c_storage_config.bucket_name);
|
||||
conf.access_key_id = std::string(c_storage_config.access_key_id);
|
||||
conf.access_key_value = std::string(c_storage_config.access_key_value);
|
||||
conf.root_path = std::string(c_storage_config.root_path);
|
||||
conf.storage_type = std::string(c_storage_config.storage_type);
|
||||
conf.cloud_provider = std::string(c_storage_config.cloud_provider);
|
||||
conf.iam_endpoint = std::string(c_storage_config.iam_endpoint);
|
||||
conf.log_level = std::string(c_storage_config.log_level);
|
||||
conf.region = std::string(c_storage_config.region);
|
||||
conf.useSSL = c_storage_config.useSSL;
|
||||
conf.sslCACert = std::string(c_storage_config.sslCACert);
|
||||
conf.useIAM = c_storage_config.useIAM;
|
||||
conf.useVirtualHost = c_storage_config.useVirtualHost;
|
||||
conf.requestTimeoutMs = c_storage_config.requestTimeoutMs;
|
||||
conf.gcp_credential_json =
|
||||
std::string(c_storage_config.gcp_credential_json);
|
||||
conf.use_custom_part_upload = c_storage_config.use_custom_part_upload;
|
||||
milvus_storage::ArrowFileSystemSingleton::GetInstance().Init(conf);
|
||||
auto trueFs = milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
auto trueFs = milvus::storage::StorageV2FSCache::Instance().Get({
|
||||
std::string(c_storage_config.address),
|
||||
std::string(c_storage_config.bucket_name),
|
||||
std::string(c_storage_config.access_key_id),
|
||||
std::string(c_storage_config.access_key_value),
|
||||
std::string(c_storage_config.root_path),
|
||||
std::string(c_storage_config.storage_type),
|
||||
std::string(c_storage_config.cloud_provider),
|
||||
std::string(c_storage_config.iam_endpoint),
|
||||
std::string(c_storage_config.log_level),
|
||||
std::string(c_storage_config.region),
|
||||
c_storage_config.useSSL,
|
||||
std::string(c_storage_config.sslCACert),
|
||||
c_storage_config.useIAM,
|
||||
c_storage_config.useVirtualHost,
|
||||
c_storage_config.requestTimeoutMs,
|
||||
false,
|
||||
std::string(c_storage_config.gcp_credential_json),
|
||||
c_storage_config.use_custom_part_upload,
|
||||
});
|
||||
if (!trueFs) {
|
||||
return milvus::FailureCStatus(
|
||||
milvus::ErrorCode::FileReadFailed,
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
#include "milvus-storage/filesystem/fs.h"
|
||||
#include "storage/PluginLoader.h"
|
||||
#include "storage/KeyRetriever.h"
|
||||
#include "storage/Util.h"
|
||||
#include "storage/StorageV2FSCache.h"
|
||||
|
||||
#include <arrow/c/bridge.h>
|
||||
#include <arrow/filesystem/filesystem.h>
|
||||
@ -31,7 +31,6 @@
|
||||
#include <arrow/record_batch.h>
|
||||
#include <arrow/memory_pool.h>
|
||||
#include <arrow/device.h>
|
||||
#include <cstring>
|
||||
#include "common/EasyAssert.h"
|
||||
#include "common/type_c.h"
|
||||
#include "monitor/scope_metric.h"
|
||||
@ -54,28 +53,26 @@ NewPackedWriterWithStorageConfig(struct ArrowSchema* schema,
|
||||
auto storage_config = milvus_storage::StorageConfig();
|
||||
storage_config.part_size = part_upload_size;
|
||||
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.address = std::string(c_storage_config.address);
|
||||
conf.bucket_name = std::string(c_storage_config.bucket_name);
|
||||
conf.access_key_id = std::string(c_storage_config.access_key_id);
|
||||
conf.access_key_value = std::string(c_storage_config.access_key_value);
|
||||
conf.root_path = std::string(c_storage_config.root_path);
|
||||
conf.storage_type = std::string(c_storage_config.storage_type);
|
||||
conf.cloud_provider = std::string(c_storage_config.cloud_provider);
|
||||
conf.iam_endpoint = std::string(c_storage_config.iam_endpoint);
|
||||
conf.log_level = std::string(c_storage_config.log_level);
|
||||
conf.region = std::string(c_storage_config.region);
|
||||
conf.useSSL = c_storage_config.useSSL;
|
||||
conf.sslCACert = std::string(c_storage_config.sslCACert);
|
||||
conf.useIAM = c_storage_config.useIAM;
|
||||
conf.useVirtualHost = c_storage_config.useVirtualHost;
|
||||
conf.requestTimeoutMs = c_storage_config.requestTimeoutMs;
|
||||
conf.gcp_credential_json =
|
||||
std::string(c_storage_config.gcp_credential_json);
|
||||
conf.use_custom_part_upload = c_storage_config.use_custom_part_upload;
|
||||
milvus_storage::ArrowFileSystemSingleton::GetInstance().Init(conf);
|
||||
auto trueFs = milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
auto trueFs = milvus::storage::StorageV2FSCache::Instance().Get({
|
||||
std::string(c_storage_config.address),
|
||||
std::string(c_storage_config.bucket_name),
|
||||
std::string(c_storage_config.access_key_id),
|
||||
std::string(c_storage_config.access_key_value),
|
||||
std::string(c_storage_config.root_path),
|
||||
std::string(c_storage_config.storage_type),
|
||||
std::string(c_storage_config.cloud_provider),
|
||||
std::string(c_storage_config.iam_endpoint),
|
||||
std::string(c_storage_config.log_level),
|
||||
std::string(c_storage_config.region),
|
||||
c_storage_config.useSSL,
|
||||
std::string(c_storage_config.sslCACert),
|
||||
c_storage_config.useIAM,
|
||||
c_storage_config.useVirtualHost,
|
||||
c_storage_config.requestTimeoutMs,
|
||||
false,
|
||||
std::string(c_storage_config.gcp_credential_json),
|
||||
c_storage_config.use_custom_part_upload,
|
||||
});
|
||||
if (!trueFs) {
|
||||
return milvus::FailureCStatus(
|
||||
milvus::ErrorCode::FileReadFailed,
|
||||
@ -299,28 +296,26 @@ GetFileSizeWithStorageConfig(const char* path,
|
||||
SCOPE_CGO_CALL_METRIC();
|
||||
|
||||
try {
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.address = std::string(c_storage_config.address);
|
||||
conf.bucket_name = std::string(c_storage_config.bucket_name);
|
||||
conf.access_key_id = std::string(c_storage_config.access_key_id);
|
||||
conf.access_key_value = std::string(c_storage_config.access_key_value);
|
||||
conf.root_path = std::string(c_storage_config.root_path);
|
||||
conf.storage_type = std::string(c_storage_config.storage_type);
|
||||
conf.cloud_provider = std::string(c_storage_config.cloud_provider);
|
||||
conf.iam_endpoint = std::string(c_storage_config.iam_endpoint);
|
||||
conf.log_level = std::string(c_storage_config.log_level);
|
||||
conf.region = std::string(c_storage_config.region);
|
||||
conf.useSSL = c_storage_config.useSSL;
|
||||
conf.sslCACert = std::string(c_storage_config.sslCACert);
|
||||
conf.useIAM = c_storage_config.useIAM;
|
||||
conf.useVirtualHost = c_storage_config.useVirtualHost;
|
||||
conf.requestTimeoutMs = c_storage_config.requestTimeoutMs;
|
||||
conf.gcp_credential_json =
|
||||
std::string(c_storage_config.gcp_credential_json);
|
||||
conf.use_custom_part_upload = c_storage_config.use_custom_part_upload;
|
||||
milvus_storage::ArrowFileSystemSingleton::GetInstance().Init(conf);
|
||||
auto trueFs = milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
auto trueFs = milvus::storage::StorageV2FSCache::Instance().Get({
|
||||
std::string(c_storage_config.address),
|
||||
std::string(c_storage_config.bucket_name),
|
||||
std::string(c_storage_config.access_key_id),
|
||||
std::string(c_storage_config.access_key_value),
|
||||
std::string(c_storage_config.root_path),
|
||||
std::string(c_storage_config.storage_type),
|
||||
std::string(c_storage_config.cloud_provider),
|
||||
std::string(c_storage_config.iam_endpoint),
|
||||
std::string(c_storage_config.log_level),
|
||||
std::string(c_storage_config.region),
|
||||
c_storage_config.useSSL,
|
||||
std::string(c_storage_config.sslCACert),
|
||||
c_storage_config.useIAM,
|
||||
c_storage_config.useVirtualHost,
|
||||
c_storage_config.requestTimeoutMs,
|
||||
false,
|
||||
std::string(c_storage_config.gcp_credential_json),
|
||||
c_storage_config.use_custom_part_upload,
|
||||
});
|
||||
|
||||
if (!trueFs) {
|
||||
return milvus::FailureCStatus(
|
||||
|
||||
@ -234,6 +234,8 @@ GroupChunkTranslator::get_cells(const std::vector<cachinglayer::cid_t>& cids) {
|
||||
|
||||
auto& pool = ThreadPools::GetThreadPool(milvus::ThreadPoolPriority::MIDDLE);
|
||||
auto channel = std::make_shared<ArrowReaderChannel>();
|
||||
auto fs = milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
|
||||
auto load_future = pool.Submit([&]() {
|
||||
return LoadWithStrategy(insert_files_,
|
||||
@ -241,6 +243,7 @@ GroupChunkTranslator::get_cells(const std::vector<cachinglayer::cid_t>& cids) {
|
||||
DEFAULT_FIELD_MAX_MEMORY_LIMIT,
|
||||
std::move(strategy),
|
||||
row_group_lists,
|
||||
fs,
|
||||
nullptr,
|
||||
load_priority_);
|
||||
});
|
||||
|
||||
73
internal/core/src/storage/StorageV2FSCache.cpp
Normal file
73
internal/core/src/storage/StorageV2FSCache.cpp
Normal file
@ -0,0 +1,73 @@
|
||||
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
||||
//
|
||||
// Licensed 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
|
||||
|
||||
#include "storage/StorageV2FSCache.h"
|
||||
#include <future>
|
||||
#include <mutex>
|
||||
#include <shared_mutex>
|
||||
#include "milvus-storage/filesystem/fs.h"
|
||||
|
||||
namespace milvus::storage {
|
||||
|
||||
StorageV2FSCache&
|
||||
StorageV2FSCache::Instance() {
|
||||
static StorageV2FSCache instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
milvus_storage::ArrowFileSystemPtr
|
||||
StorageV2FSCache::Get(const Key& key) {
|
||||
auto it = concurrent_map_.find(key);
|
||||
if (it != concurrent_map_.end()) {
|
||||
return it->second.second.get();
|
||||
}
|
||||
|
||||
std::promise<milvus_storage::ArrowFileSystemPtr> p;
|
||||
std::shared_future<milvus_storage::ArrowFileSystemPtr> f = p.get_future();
|
||||
|
||||
auto iter = concurrent_map_.emplace(key, Value(std::move(p), f));
|
||||
if (!iter.second) {
|
||||
return iter.first->second.second.get();
|
||||
}
|
||||
|
||||
// singleflight create fs for one key
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.address = std::string(key.address);
|
||||
conf.bucket_name = std::string(key.bucket_name);
|
||||
conf.access_key_id = std::string(key.access_key_id);
|
||||
conf.access_key_value = std::string(key.access_key_value);
|
||||
conf.root_path = std::string(key.root_path);
|
||||
conf.storage_type = std::string(key.storage_type);
|
||||
conf.cloud_provider = std::string(key.cloud_provider);
|
||||
conf.iam_endpoint = std::string(key.iam_endpoint);
|
||||
conf.log_level = std::string(key.log_level);
|
||||
conf.region = std::string(key.region);
|
||||
conf.useSSL = key.useSSL;
|
||||
conf.sslCACert = std::string(key.sslCACert);
|
||||
conf.useIAM = key.useIAM;
|
||||
conf.useVirtualHost = key.useVirtualHost;
|
||||
conf.requestTimeoutMs = key.requestTimeoutMs;
|
||||
conf.gcp_credential_json = std::string(key.gcp_credential_json);
|
||||
conf.use_custom_part_upload = key.use_custom_part_upload;
|
||||
auto result = milvus_storage::CreateArrowFileSystem(conf);
|
||||
|
||||
if (!result.ok()) {
|
||||
iter.first->second.first.set_value(nullptr);
|
||||
std::unique_lock lck(mutex_);
|
||||
concurrent_map_.unsafe_erase(iter.first);
|
||||
return nullptr;
|
||||
}
|
||||
auto fs = result.value();
|
||||
iter.first->second.first.set_value(fs);
|
||||
return fs;
|
||||
}
|
||||
|
||||
} // namespace milvus::storage
|
||||
124
internal/core/src/storage/StorageV2FSCache.h
Normal file
124
internal/core/src/storage/StorageV2FSCache.h
Normal file
@ -0,0 +1,124 @@
|
||||
// Licensed to the LF AI & Data foundation 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.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <future>
|
||||
#include <shared_mutex>
|
||||
|
||||
#include "milvus-storage/filesystem/fs.h"
|
||||
#include <tbb/concurrent_unordered_map.h>
|
||||
|
||||
namespace milvus::storage {
|
||||
|
||||
// cache for storage v2 filesystem using storage config as key.
|
||||
class StorageV2FSCache {
|
||||
public:
|
||||
struct Key {
|
||||
std::string address;
|
||||
std::string bucket_name;
|
||||
std::string access_key_id;
|
||||
std::string access_key_value;
|
||||
std::string root_path;
|
||||
std::string storage_type;
|
||||
std::string cloud_provider;
|
||||
std::string iam_endpoint;
|
||||
std::string log_level;
|
||||
std::string region;
|
||||
bool useSSL = false;
|
||||
std::string sslCACert;
|
||||
bool useIAM = false;
|
||||
bool useVirtualHost = false;
|
||||
int64_t requestTimeoutMs = 3000;
|
||||
bool gcp_native_without_auth = false;
|
||||
std::string gcp_credential_json = "";
|
||||
bool use_custom_part_upload = true;
|
||||
|
||||
bool
|
||||
operator==(const Key& other) const {
|
||||
return address == other.address &&
|
||||
bucket_name == other.bucket_name &&
|
||||
access_key_id == other.access_key_id &&
|
||||
access_key_value == other.access_key_value &&
|
||||
root_path == other.root_path &&
|
||||
storage_type == other.storage_type &&
|
||||
cloud_provider == other.cloud_provider &&
|
||||
iam_endpoint == other.iam_endpoint &&
|
||||
log_level == other.log_level && region == other.region &&
|
||||
useSSL == other.useSSL && sslCACert == other.sslCACert &&
|
||||
useIAM == other.useIAM &&
|
||||
useVirtualHost == other.useVirtualHost &&
|
||||
requestTimeoutMs == other.requestTimeoutMs &&
|
||||
gcp_native_without_auth == other.gcp_native_without_auth &&
|
||||
gcp_credential_json == other.gcp_credential_json &&
|
||||
use_custom_part_upload == other.use_custom_part_upload;
|
||||
}
|
||||
};
|
||||
|
||||
struct KeyHasher {
|
||||
size_t
|
||||
operator()(const Key& k) const noexcept {
|
||||
size_t hash = 0;
|
||||
hash_combine(hash, k.address);
|
||||
hash_combine(hash, k.bucket_name);
|
||||
hash_combine(hash, k.access_key_id);
|
||||
hash_combine(hash, k.access_key_value);
|
||||
hash_combine(hash, k.root_path);
|
||||
hash_combine(hash, k.storage_type);
|
||||
hash_combine(hash, k.cloud_provider);
|
||||
hash_combine(hash, k.iam_endpoint);
|
||||
hash_combine(hash, k.log_level);
|
||||
hash_combine(hash, k.region);
|
||||
hash_combine(hash, k.useSSL);
|
||||
hash_combine(hash, k.sslCACert);
|
||||
hash_combine(hash, k.useIAM);
|
||||
hash_combine(hash, k.useVirtualHost);
|
||||
hash_combine(hash, k.requestTimeoutMs);
|
||||
hash_combine(hash, k.gcp_native_without_auth);
|
||||
hash_combine(hash, k.gcp_credential_json);
|
||||
hash_combine(hash, k.use_custom_part_upload);
|
||||
return hash;
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename T>
|
||||
void
|
||||
hash_combine(size_t& seed, const T& v) const {
|
||||
std::hash<T> hasher;
|
||||
seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
|
||||
}
|
||||
};
|
||||
|
||||
// singleflight item using promise and future
|
||||
using Value =
|
||||
std::pair<std::promise<milvus_storage::ArrowFileSystemPtr>,
|
||||
std::shared_future<milvus_storage::ArrowFileSystemPtr>>;
|
||||
|
||||
public:
|
||||
// returns singleton of StorageV2FSCache
|
||||
static StorageV2FSCache&
|
||||
Instance();
|
||||
|
||||
milvus_storage::ArrowFileSystemPtr
|
||||
Get(const Key& key);
|
||||
|
||||
virtual ~StorageV2FSCache() = default;
|
||||
|
||||
private:
|
||||
std::shared_mutex mutex_;
|
||||
tbb::concurrent_unordered_map<Key, Value, KeyHasher> concurrent_map_;
|
||||
};
|
||||
} // namespace milvus::storage
|
||||
@ -31,6 +31,7 @@
|
||||
#include "common/FieldData.h"
|
||||
#include "common/FieldDataInterface.h"
|
||||
#include "pb/common.pb.h"
|
||||
#include "storage/StorageV2FSCache.h"
|
||||
#ifdef AZURE_BUILD_DIR
|
||||
#include "storage/azure/AzureChunkManager.h"
|
||||
#endif
|
||||
@ -999,14 +1000,12 @@ CreateChunkManager(const StorageConfig& storage_config) {
|
||||
|
||||
milvus_storage::ArrowFileSystemPtr
|
||||
InitArrowFileSystem(milvus::storage::StorageConfig storage_config) {
|
||||
StorageV2FSCache::Key conf;
|
||||
if (storage_config.storage_type == "local") {
|
||||
std::string path(storage_config.root_path);
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.root_path = path;
|
||||
conf.storage_type = "local";
|
||||
milvus_storage::ArrowFileSystemSingleton::GetInstance().Init(conf);
|
||||
} else {
|
||||
milvus_storage::ArrowFileSystemConfig conf;
|
||||
conf.address = std::string(storage_config.address);
|
||||
conf.bucket_name = std::string(storage_config.bucket_name);
|
||||
conf.access_key_id = std::string(storage_config.access_key_id);
|
||||
@ -1025,10 +1024,8 @@ InitArrowFileSystem(milvus::storage::StorageConfig storage_config) {
|
||||
conf.gcp_credential_json =
|
||||
std::string(storage_config.gcp_credential_json);
|
||||
conf.use_custom_part_upload = true;
|
||||
milvus_storage::ArrowFileSystemSingleton::GetInstance().Init(conf);
|
||||
}
|
||||
return milvus_storage::ArrowFileSystemSingleton::GetInstance()
|
||||
.GetArrowFileSystem();
|
||||
return StorageV2FSCache::Instance().Get(conf);
|
||||
}
|
||||
|
||||
FieldDataPtr
|
||||
@ -1309,6 +1306,7 @@ GetFieldDatasFromStorageV2(std::vector<std::vector<std::string>>& remote_files,
|
||||
DEFAULT_FIELD_MAX_MEMORY_LIMIT,
|
||||
std::move(strategy),
|
||||
row_group_lists,
|
||||
fs,
|
||||
nullptr,
|
||||
milvus::proto::common::LoadPriority::HIGH);
|
||||
});
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
# Update milvus-storage_VERSION for the first occurrence
|
||||
milvus_add_pkg_config("milvus-storage")
|
||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "")
|
||||
set( milvus-storage_VERSION c27fe8e )
|
||||
set( milvus-storage_VERSION c4f2a3c )
|
||||
set( GIT_REPOSITORY "https://github.com/milvus-io/milvus-storage.git")
|
||||
message(STATUS "milvus-storage repo: ${GIT_REPOSITORY}")
|
||||
message(STATUS "milvus-storage version: ${milvus-storage_VERSION}")
|
||||
|
||||
@ -219,27 +219,27 @@ TEST_F(StorageUtilTest, TestInitArrowFileSystem) {
|
||||
ASSERT_NE(fs, nullptr);
|
||||
}
|
||||
|
||||
// Test remote storage configuration (Azure)
|
||||
{
|
||||
StorageConfig remote_config;
|
||||
remote_config.storage_type = "remote";
|
||||
remote_config.cloud_provider = "azure";
|
||||
remote_config.address = "core.windows.net";
|
||||
remote_config.bucket_name = "test-bucket";
|
||||
remote_config.access_key_id = "test-access-key";
|
||||
remote_config.access_key_value = "test-access-value";
|
||||
remote_config.root_path = "/tmp/milvus/remote_data";
|
||||
remote_config.iam_endpoint = "";
|
||||
remote_config.log_level = "error";
|
||||
remote_config.region = "";
|
||||
remote_config.useSSL = false;
|
||||
remote_config.sslCACert = "";
|
||||
remote_config.useIAM = false;
|
||||
remote_config.useVirtualHost = false;
|
||||
remote_config.requestTimeoutMs = 30000;
|
||||
remote_config.gcp_credential_json = "";
|
||||
// // Test remote storage configuration (Azure)
|
||||
// {
|
||||
// StorageConfig remote_config;
|
||||
// remote_config.storage_type = "remote";
|
||||
// remote_config.cloud_provider = "azure";
|
||||
// remote_config.address = "core.windows.net";
|
||||
// remote_config.bucket_name = "test-bucket";
|
||||
// remote_config.access_key_id = "test-access-key";
|
||||
// remote_config.access_key_value = "test-access-value";
|
||||
// remote_config.root_path = "/tmp/milvus/remote_data";
|
||||
// remote_config.iam_endpoint = "";
|
||||
// remote_config.log_level = "error";
|
||||
// remote_config.region = "";
|
||||
// remote_config.useSSL = false;
|
||||
// remote_config.sslCACert = "";
|
||||
// remote_config.useIAM = false;
|
||||
// remote_config.useVirtualHost = false;
|
||||
// remote_config.requestTimeoutMs = 30000;
|
||||
// remote_config.gcp_credential_json = "";
|
||||
|
||||
auto fs = InitArrowFileSystem(remote_config);
|
||||
ASSERT_NE(fs, nullptr);
|
||||
}
|
||||
// auto fs = InitArrowFileSystem(remote_config);
|
||||
// ASSERT_NE(fs, nullptr);
|
||||
// }
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user