Skip to content

Commit

Permalink
feat: set operator vector to set
Browse files Browse the repository at this point in the history
  • Loading branch information
huerni committed Mar 6, 2025
1 parent 0e44e23 commit 2bf96e4
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 64 deletions.
47 changes: 26 additions & 21 deletions src/CraneCtld/AccountManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ CraneExpected<void> AccountManager::AddUserAllowedPartition(

CraneExpectedRich<void> AccountManager::SetUserAllowedPartition(
uint32_t uid, const std::string& username, const std::string& account,
const std::vector<std::string>& partition_list) {
const std::unordered_set<std::string>& partition_list) {
util::write_lock_guard user_guard(m_rw_user_mutex_);
util::read_lock_guard account_guard(m_rw_account_mutex_);

Expand Down Expand Up @@ -639,8 +639,8 @@ CraneExpected<void> AccountManager::AddUserAllowedQos(

CraneExpectedRich<void> AccountManager::SetUserAllowedQos(
uint32_t uid, const std::string& username, const std::string& partition,
const std::string& account, std::vector<std::string>&& qos_list,
bool force) {
const std::string& account, const std::string& default_qos,
std::unordered_set<std::string>&& qos_list, bool force) {
util::write_lock_guard user_guard(m_rw_user_mutex_);
util::read_lock_guard account_guard(m_rw_account_mutex_);
util::read_lock_guard qos_guard(m_rw_qos_mutex_);
Expand All @@ -663,8 +663,8 @@ CraneExpectedRich<void> AccountManager::SetUserAllowedQos(
CheckSetUserAllowedQosNoLock_(p, account_ptr, partition, qos_list, force);
if (!rich_result) return rich_result;

return SetUserAllowedQos_(*p, *account_ptr, partition, std::move(qos_list),
force);
return SetUserAllowedQos_(*p, *account_ptr, partition, default_qos,
std::move(qos_list), force);
}

CraneExpected<void> AccountManager::DeleteUserAllowedPartition(
Expand Down Expand Up @@ -807,7 +807,7 @@ CraneExpected<void> AccountManager::ModifyAccount(

CraneExpectedRich<void> AccountManager::SetAccountAllowedPartition(
uint32_t uid, const std::string& account_name,
std::vector<std::string>&& partition_list, bool force) {
std::unordered_set<std::string>&& partition_list, bool force) {
CraneExpected<void> result{};
{
util::read_lock_guard user_guard(m_rw_user_mutex_);
Expand Down Expand Up @@ -838,7 +838,8 @@ CraneExpectedRich<void> AccountManager::SetAccountAllowedPartition(

CraneExpectedRich<void> AccountManager::SetAccountAllowedQos(
uint32_t uid, const std::string& account_name,
std::vector<std::string>&& qos_list, bool force) {
const std::string& default_qos, std::unordered_set<std::string>&& qos_list,
bool force) {
CraneExpected<void> result{};
{
util::read_lock_guard user_guard(m_rw_user_mutex_);
Expand All @@ -862,7 +863,8 @@ CraneExpectedRich<void> AccountManager::SetAccountAllowedQos(

auto rich_result = CheckSetAccountAllowedQosNoLock_(account, qos_list, force);
return !rich_result ? rich_result
: SetAccountAllowedQos_(*account, std::move(qos_list));
: SetAccountAllowedQos_(*account, default_qos,
std::move(qos_list));
}

CraneExpected<void> AccountManager::ModifyQos(
Expand Down Expand Up @@ -1173,7 +1175,8 @@ CraneExpected<void> AccountManager::CheckAddUserAllowedPartitionNoLock_(
}

CraneExpectedRich<void> AccountManager::CheckSetUserAllowedPartitionNoLock_(
const Account* account, const std::vector<std::string>& partition_list) {
const Account* account,
const std::unordered_set<std::string>& partition_list) {
for (const auto& partition : partition_list) {
auto result =
CheckPartitionIsAllowedNoLock_(account, partition, false, true);
Expand Down Expand Up @@ -1223,7 +1226,7 @@ CraneExpected<void> AccountManager::CheckAddUserAllowedQosNoLock_(

CraneExpectedRich<void> AccountManager::CheckSetUserAllowedQosNoLock_(
const User* user, const Account* account, const std::string& partition,
const std::vector<std::string>& qos_list, bool force) {
const std::unordered_set<std::string>& qos_list, bool force) {
for (const auto& qos : qos_list) {
auto result = CheckQosIsAllowedNoLock_(account, qos, false, true);
if (!result)
Expand Down Expand Up @@ -1361,8 +1364,8 @@ CraneExpected<void> AccountManager::CheckSetAccountDescriptionNoLock_(
}

CraneExpectedRich<void> AccountManager::CheckSetAccountAllowedPartitionNoLock_(
const Account* account, const std::vector<std::string>& partition_list,
bool force) {
const Account* account,
const std::unordered_set<std::string>& partition_list, bool force) {
for (const auto& partition : partition_list) {
auto result =
CheckPartitionIsAllowedNoLock_(account, partition, true, false);
Expand All @@ -1382,7 +1385,7 @@ CraneExpectedRich<void> AccountManager::CheckSetAccountAllowedPartitionNoLock_(
}

CraneExpectedRich<void> AccountManager::CheckSetAccountAllowedQosNoLock_(
const Account* account, const std::vector<std::string>& qos_list,
const Account* account, const std::unordered_set<std::string>& qos_list,
bool force) {
for (const auto& qos : qos_list) {
auto result = CheckQosIsAllowedNoLock_(account, qos, true, false);
Expand Down Expand Up @@ -2103,7 +2106,7 @@ CraneExpected<void> AccountManager::SetUserDefaultQos_(

CraneExpectedRich<void> AccountManager::SetUserAllowedPartition_(
const User& user, const Account& account,
const std::vector<std::string>& partition_list) {
const std::unordered_set<std::string>& partition_list) {
const std::string& name = user.name;
const std::string& account_name = account.name;

Expand Down Expand Up @@ -2138,7 +2141,8 @@ CraneExpectedRich<void> AccountManager::SetUserAllowedPartition_(

CraneExpectedRich<void> AccountManager::SetUserAllowedQos_(
const User& user, const Account& account, const std::string& partition,
std::vector<std::string>&& qos_list, bool force) {
const std::string& default_qos, std::unordered_set<std::string>&& qos_list,
bool force) {
const std::string& name = user.name;
const std::string& account_name = account.name;

Expand All @@ -2148,7 +2152,7 @@ CraneExpectedRich<void> AccountManager::SetUserAllowedQos_(
for (auto& [par, pair] : res_user.account_to_attrs_map[account_name]
.allowed_partition_qos_map) {
if (!ranges::contains(qos_list, pair.first))
pair.first = qos_list.empty() ? "" : qos_list.front();
pair.first = qos_list.empty() ? "" : default_qos;
pair.second.assign(std::make_move_iterator(qos_list.begin()),
std::make_move_iterator(qos_list.end()));
}
Expand All @@ -2158,7 +2162,7 @@ CraneExpectedRich<void> AccountManager::SetUserAllowedQos_(
.allowed_partition_qos_map.find(partition);

if (!ranges::contains(qos_list, iter->second.first))
iter->second.first = qos_list.empty() ? "" : qos_list.front();
iter->second.first = qos_list.empty() ? "" : default_qos;

iter->second.second.assign(std::make_move_iterator(qos_list.begin()),
std::make_move_iterator(qos_list.end()));
Expand Down Expand Up @@ -2342,7 +2346,7 @@ CraneExpected<void> AccountManager::SetAccountDefaultQos_(
}

CraneExpectedRich<void> AccountManager::SetAccountAllowedPartition_(
const Account& account, std::vector<std::string>&& partition_list) {
const Account& account, std::unordered_set<std::string>&& partition_list) {
const std::string& name = account.name;

std::list<std::string> deleted_partition;
Expand Down Expand Up @@ -2384,7 +2388,8 @@ CraneExpectedRich<void> AccountManager::SetAccountAllowedPartition_(
}

CraneExpectedRich<void> AccountManager::SetAccountAllowedQos_(
const Account& account, std::vector<std::string>&& qos_list) {
const Account& account, const std::string& default_qos,
std::unordered_set<std::string>&& qos_list) {
const std::string& name = account.name;

std::list<std::string> deleted_qos;
Expand Down Expand Up @@ -2413,7 +2418,7 @@ CraneExpectedRich<void> AccountManager::SetAccountAllowedQos_(
if (temp.default_qos.empty()) {
g_db_client->UpdateEntityOne(MongodbClient::EntityType::ACCOUNT,
"$set", name, "default_qos",
qos_list.front());
default_qos);
}

g_db_client->UpdateEntityOne(MongodbClient::EntityType::ACCOUNT,
Expand All @@ -2437,7 +2442,7 @@ CraneExpectedRich<void> AccountManager::SetAccountAllowedQos_(

if (!add_qos.empty()) {
if (account.default_qos.empty()) {
m_account_map_[name]->default_qos = qos_list.front();
m_account_map_[name]->default_qos = default_qos;
}
m_account_map_[name]->allowed_qos_list.assign(
std::make_move_iterator(qos_list.begin()),
Expand Down
38 changes: 20 additions & 18 deletions src/CraneCtld/AccountManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,20 +97,18 @@ class AccountManager {

CraneExpectedRich<void> SetUserAllowedPartition(
uint32_t uid, const std::string& username, const std::string& account,
const std::vector<std::string>& partition_list);
const std::unordered_set<std::string>& partition_list);

CraneExpected<void> AddUserAllowedQos(uint32_t uid,
const std::string& username,
const std::string& partition,
const std::string& account,
const std::string& new_qos);

CraneExpectedRich<void> SetUserAllowedQos(uint32_t uid,
const std::string& username,
const std::string& partition,
const std::string& account,
std::vector<std::string>&& qos_list,
bool force);
CraneExpectedRich<void> SetUserAllowedQos(
uint32_t uid, const std::string& username, const std::string& partition,
const std::string& account, const std::string& default_qos,
std::unordered_set<std::string>&& qos_list, bool force);

CraneExpected<void> DeleteUserAllowedPartition(uint32_t uid,
const std::string& name,
Expand All @@ -127,11 +125,12 @@ class AccountManager {

CraneExpectedRich<void> SetAccountAllowedPartition(
uint32_t uid, const std::string& account_name,
std::vector<std::string>&& partition_list, bool force);
std::unordered_set<std::string>&& partition_list, bool force);

CraneExpectedRich<void> SetAccountAllowedQos(
uint32_t uid, const std::string& account_name,
std::vector<std::string>&& qos_list, bool force);
const std::string& default_qos,
std::unordered_set<std::string>&& qos_list, bool force);

CraneExpected<void> ModifyQos(uint32_t uid, const std::string& name,
crane::grpc::ModifyField modify_field,
Expand Down Expand Up @@ -185,13 +184,14 @@ class AccountManager {
CraneExpected<void> CheckAddUserAllowedPartitionNoLock_(
const User* user, const Account* account, const std::string& partition);
CraneExpectedRich<void> CheckSetUserAllowedPartitionNoLock_(
const Account* account, const std::vector<std::string>& partition_list);
const Account* account,
const std::unordered_set<std::string>& partition_list);
CraneExpected<void> CheckAddUserAllowedQosNoLock_(
const User* user, const Account* account, const std::string& partition,
const std::string& qos_str);
CraneExpectedRich<void> CheckSetUserAllowedQosNoLock_(
const User* user, const Account* account, const std::string& partition,
const std::vector<std::string>& qos_list, bool force);
const std::unordered_set<std::string>& qos_list, bool force);
CraneExpected<void> CheckSetUserDefaultQosNoLock_(
const User& user, const std::string& account,
const std::string& partition, const std::string& qos);
Expand All @@ -212,10 +212,10 @@ class AccountManager {
const std::string& qos);
CraneExpected<void> CheckSetAccountDescriptionNoLock_(const Account* account);
CraneExpectedRich<void> CheckSetAccountAllowedPartitionNoLock_(
const Account* account, const std::vector<std::string>& partition_list,
bool force);
const Account* account,
const std::unordered_set<std::string>& partition_list, bool force);
CraneExpectedRich<void> CheckSetAccountAllowedQosNoLock_(
const Account* account, const std::vector<std::string>& qos_list,
const Account* account, const std::unordered_set<std::string>& qos_list,
bool force);
CraneExpected<void> CheckSetAccountDefaultQosNoLock_(const Account* account,
const std::string& qos);
Expand Down Expand Up @@ -298,10 +298,11 @@ class AccountManager {
const std::string& qos);
CraneExpectedRich<void> SetUserAllowedPartition_(
const User& user, const Account& account,
const std::vector<std::string>& partition_list);
const std::unordered_set<std::string>& partition_list);
CraneExpectedRich<void> SetUserAllowedQos_(
const User& user, const Account& account, const std::string& partition,
std::vector<std::string>&& qos_list, bool force);
const std::string& default_qos,
std::unordered_set<std::string>&& qos_list, bool force);

CraneExpected<void> DeleteUserAllowedPartition_(const User& user,
const std::string& account,
Expand All @@ -322,9 +323,10 @@ class AccountManager {
CraneExpected<void> SetAccountDefaultQos_(const Account& account,
const std::string& qos);
CraneExpectedRich<void> SetAccountAllowedPartition_(
const Account& account, std::vector<std::string>&& partition_list);
const Account& account, std::unordered_set<std::string>&& partition_list);
CraneExpectedRich<void> SetAccountAllowedQos_(
const Account& account, std::vector<std::string>&& qos_list);
const Account& account, const std::string& default_qos,
std::unordered_set<std::string>&& qos_list);

CraneExpected<void> DeleteAccountAllowedPartition_(
const Account& account, const std::string& partition);
Expand Down
43 changes: 18 additions & 25 deletions src/CraneCtld/CtldGrpcServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -441,13 +441,9 @@ grpc::Status CraneCtldServiceImpl::ModifyAccount(
if (request->type() == crane::grpc::OperationType::Overwrite &&
request->modify_field() ==
crane::grpc::ModifyField::Partition) { // SetAccountAllowedPartition
std::unordered_set<std::string> unique_set;
std::vector<std::string> partition_list;
partition_list.reserve(request->value_list_size());
for (const auto &partition_name : request->value_list()) {
if (unique_set.insert(partition_name).second)
partition_list.emplace_back(partition_name);
}
std::unordered_set<std::string> partition_list{
request->value_list().begin(), request->value_list().end()};

auto rich_res = g_account_manager->SetAccountAllowedPartition(
request->uid(), request->name(), std::move(partition_list),
request->force());
Expand All @@ -456,15 +452,13 @@ grpc::Status CraneCtldServiceImpl::ModifyAccount(
} else if (request->type() == crane::grpc::OperationType::Overwrite &&
request->modify_field() ==
crane::grpc::ModifyField::Qos) { // SetAccountAllowedQos
std::unordered_set<std::string> unique_set;
std::vector<std::string> qos_list;
qos_list.reserve(request->value_list_size());
for (const auto &qos_name : request->value_list()) {
if (unique_set.insert(qos_name).second) qos_list.emplace_back(qos_name);
}

std::unordered_set<std::string> qos_list{request->value_list().begin(),
request->value_list().end()};
std::string default_qos = "";
if (!request->value_list().empty()) default_qos = request->value_list()[0];
auto rich_res = g_account_manager->SetAccountAllowedQos(
request->uid(), request->name(), std::move(qos_list), request->force());
request->uid(), request->name(), default_qos, std::move(qos_list),
request->force());
if (!rich_res)
response->mutable_rich_error_list()->Add()->CopyFrom(rich_res.error());
} else { // other operations
Expand Down Expand Up @@ -547,8 +541,8 @@ grpc::Status CraneCtldServiceImpl::ModifyUser(
}
}
} else if (request->type() == crane::grpc::OperationType::Overwrite) {
std::vector<std::string> partition_list{request->value_list().begin(),
request->value_list().end()};
std::unordered_set<std::string> partition_list{
request->value_list().begin(), request->value_list().end()};
auto rich_res = g_account_manager->SetUserAllowedPartition(
request->uid(), request->name(), request->account(),
partition_list);
Expand All @@ -570,16 +564,15 @@ grpc::Status CraneCtldServiceImpl::ModifyUser(
}
}
} else if (request->type() == crane::grpc::OperationType::Overwrite) {
std::unordered_set<std::string> unique_set;
std::vector<std::string> qos_list;
qos_list.reserve(request->value_list_size());
for (const auto &qos_name : request->value_list()) {
if (unique_set.insert(qos_name).second)
qos_list.emplace_back(qos_name);
}
std::unordered_set<std::string> qos_list{request->value_list().begin(),
request->value_list().end()};
std::string default_qos = "";
if (!request->value_list().empty())
default_qos = request->value_list()[0];
auto rich_res = g_account_manager->SetUserAllowedQos(
request->uid(), request->name(), request->partition(),
request->account(), std::move(qos_list), request->force());
request->account(), default_qos, std::move(qos_list),
request->force());
if (!rich_res)
response->mutable_rich_error_list()->Add()->CopyFrom(
rich_res.error());
Expand Down

0 comments on commit 2bf96e4

Please sign in to comment.