Files
doris/be/src/olap/storage_policy.cpp
pengxiangyu 6a1e3d3435 [fix](cooldown)Fix bug for single cooldown compaction, add remote meta (#16812)
* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction

* fix bug, add remote meta for compaction
2023-02-17 15:13:06 +08:00

126 lines
4.3 KiB
C++

// Licensed to the Apache Software Foundation (ASF) 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.
#include "olap/storage_policy.h"
#include <mutex>
#include <unordered_map>
#include "util/lock.h"
namespace doris {
struct StoragePolicyMgr {
std::mutex mtx;
std::unordered_map<int64_t, StoragePolicyPtr> map;
};
static StoragePolicyMgr s_storage_policy_mgr;
Status get_remote_file_system(int64_t storage_policy_id,
std::shared_ptr<io::RemoteFileSystem>* fs) {
auto storage_policy = get_storage_policy(storage_policy_id);
if (storage_policy == nullptr) {
return Status::InternalError("could not find storage_policy, storage_policy_id={}",
storage_policy_id);
}
auto resource = get_storage_resource(storage_policy->resource_id);
*fs = std::static_pointer_cast<io::RemoteFileSystem>(resource.fs);
if (*fs == nullptr) {
return Status::InternalError("could not find resource, resouce_id={}",
storage_policy->resource_id);
}
DCHECK(atol((*fs)->id().c_str()) == storage_policy->resource_id);
DCHECK((*fs)->type() != io::FileSystemType::LOCAL);
return Status::OK();
}
StoragePolicyPtr get_storage_policy(int64_t id) {
std::lock_guard lock(s_storage_policy_mgr.mtx);
if (auto it = s_storage_policy_mgr.map.find(id); it != s_storage_policy_mgr.map.end()) {
return it->second;
}
return nullptr;
}
void put_storage_policy(int64_t id, StoragePolicyPtr policy) {
std::lock_guard lock(s_storage_policy_mgr.mtx);
s_storage_policy_mgr.map[id] = std::move(policy);
}
void delete_storage_policy(int64_t id) {
std::lock_guard lock(s_storage_policy_mgr.mtx);
s_storage_policy_mgr.map.erase(id);
}
std::vector<std::pair<int64_t, int64_t>> get_storage_policy_ids() {
std::vector<std::pair<int64_t, int64_t>> res;
res.reserve(s_storage_policy_mgr.map.size());
std::lock_guard lock(s_storage_policy_mgr.mtx);
for (auto& [id, policy] : s_storage_policy_mgr.map) {
res.emplace_back(id, policy->version);
}
return res;
}
struct StorageResouceMgr {
doris::Mutex mtx;
std::unordered_map<int64_t, StorageResource> map;
};
static StorageResouceMgr s_storage_resource_mgr;
io::FileSystemSPtr get_filesystem(const std::string& resource_id) {
int64_t id = std::atol(resource_id.c_str());
std::lock_guard lock(s_storage_resource_mgr.mtx);
if (auto it = s_storage_resource_mgr.map.find(id); it != s_storage_resource_mgr.map.end()) {
return it->second.fs;
}
return nullptr;
}
StorageResource get_storage_resource(int64_t resource_id) {
std::lock_guard lock(s_storage_resource_mgr.mtx);
if (auto it = s_storage_resource_mgr.map.find(resource_id);
it != s_storage_resource_mgr.map.end()) {
return it->second;
}
return StorageResource {nullptr, -1};
}
void put_storage_resource(int64_t resource_id, StorageResource resource) {
std::lock_guard lock(s_storage_resource_mgr.mtx);
s_storage_resource_mgr.map[resource_id] = std::move(resource);
}
void delete_storage_resource(int64_t resource_id) {
std::lock_guard lock(s_storage_resource_mgr.mtx);
s_storage_resource_mgr.map.erase(resource_id);
}
std::vector<std::pair<int64_t, int64_t>> get_storage_resource_ids() {
std::vector<std::pair<int64_t, int64_t>> res;
res.reserve(s_storage_resource_mgr.map.size());
std::lock_guard lock(s_storage_resource_mgr.mtx);
for (auto& [id, resource] : s_storage_resource_mgr.map) {
res.emplace_back(id, resource.version);
}
return res;
}
} // namespace doris