]>
git.proxmox.com Git - ceph.git/blob - ceph/src/common/config_values.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 #include "config_values.h"
6 #include "crimson/common/log.h"
9 ConfigValues::set_value_result_t
10 ConfigValues::set_value(const std::string_view key
,
11 Option::value_t
&& new_value
,
14 if (auto p
= values
.find(key
); p
!= values
.end()) {
15 auto q
= p
->second
.find(level
);
16 if (q
!= p
->second
.end()) {
17 if (new_value
== q
->second
) {
20 q
->second
= std::move(new_value
);
22 p
->second
[level
] = std::move(new_value
);
24 if (p
->second
.rbegin()->first
> level
) {
25 // there was a higher priority value; no effect
28 return SET_HAVE_EFFECT
;
31 values
[key
][level
] = std::move(new_value
);
32 return SET_HAVE_EFFECT
;
36 int ConfigValues::rm_val(const std::string_view key
, int level
)
38 auto i
= values
.find(key
);
39 if (i
== values
.end()) {
42 auto j
= i
->second
.find(level
);
43 if (j
== i
->second
.end()) {
46 bool matters
= (j
->first
== i
->second
.rbegin()->first
);
49 return SET_HAVE_EFFECT
;
55 std::pair
<Option::value_t
, bool>
56 ConfigValues::get_value(const std::string_view name
, int level
) const
58 auto p
= values
.find(name
);
59 if (p
!= values
.end() && !p
->second
.empty()) {
60 // use highest-priority value available (see CONF_*)
62 return {p
->second
.rbegin()->second
, true};
63 } else if (auto found
= p
->second
.find(level
);
64 found
!= p
->second
.end()) {
65 return {found
->second
, true};
68 return {Option::value_t
{}, false};
71 void ConfigValues::set_logging(int which
, const char* val
)
74 int r
= sscanf(val
, "%d/%d", &log
, &gather
);
79 subsys
.set_log_level(which
, log
);
80 subsys
.set_gather_level(which
, gather
);
82 crimson::get_logger(which
).set_level(crimson::to_log_level(log
));
87 bool ConfigValues::contains(const std::string_view key
) const
89 return values
.count(key
);