Skip to content

Commit 960b132

Browse files
serxaclaude
andcommitted
Use const char * for throttler name to prevent dangling references
Change `throttler_name` from `std::string_view` to `const char *` to prevent misuse with temporary `std::string` values. Unlike `std::string_view`, `const char *` has no implicit conversion from `std::string`, so passing a temporary is a compile error. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 7cec67c commit 960b132

2 files changed

Lines changed: 10 additions & 11 deletions

File tree

src/Common/Throttler.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace ErrorCodes
2727
/// Just 10^9.
2828
static constexpr auto NS = 1000000000UL;
2929

30-
Throttler::Throttler(std::string_view throttler_name_, size_t max_speed_, const ThrottlerPtr & parent_,
30+
Throttler::Throttler(const char * throttler_name_, size_t max_speed_, const ThrottlerPtr & parent_,
3131
ProfileEvents::Event event_amount_,
3232
ProfileEvents::Event event_sleep_us_)
3333
: throttler_name(throttler_name_)
@@ -40,13 +40,13 @@ Throttler::Throttler(std::string_view throttler_name_, size_t max_speed_, const
4040
, event_sleep_us(event_sleep_us_)
4141
{}
4242

43-
Throttler::Throttler(std::string_view throttler_name_, size_t max_speed_,
43+
Throttler::Throttler(const char * throttler_name_, size_t max_speed_,
4444
ProfileEvents::Event event_amount_,
4545
ProfileEvents::Event event_sleep_us_)
4646
: Throttler(throttler_name_, max_speed_, nullptr, event_amount_, event_sleep_us_)
4747
{}
4848

49-
Throttler::Throttler(std::string_view throttler_name_, size_t max_speed_, size_t limit_, const char * limit_exceeded_exception_message_, const ThrottlerPtr & parent_)
49+
Throttler::Throttler(const char * throttler_name_, size_t max_speed_, size_t limit_, const char * limit_exceeded_exception_message_, const ThrottlerPtr & parent_)
5050
: throttler_name(throttler_name_)
5151
, max_speed(max_speed_)
5252
, max_burst(max_speed_ * default_burst_seconds)

src/Common/Throttler.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include <Common/Logger.h>
55
#include <Common/ProfileEvents.h>
66
#include <mutex>
7-
#include <string_view>
87
#include <base/sleep.h>
98
#include <base/types.h>
109
#include <atomic>
@@ -21,33 +20,33 @@ class Throttler : public IThrottler
2120
public:
2221
static const size_t default_burst_seconds = 1;
2322

24-
Throttler(std::string_view throttler_name_, size_t max_speed_, size_t max_burst_, const ThrottlerPtr & parent_ = nullptr,
23+
Throttler(const char * throttler_name_, size_t max_speed_, size_t max_burst_, const ThrottlerPtr & parent_ = nullptr,
2524
ProfileEvents::Event event_amount_ = ProfileEvents::end(),
2625
ProfileEvents::Event event_sleep_us_ = ProfileEvents::end())
2726
: throttler_name(throttler_name_), max_speed(max_speed_), max_burst(max_burst_), limit_exceeded_exception_message(""), tokens(static_cast<double>(max_burst)), parent(parent_)
2827
, event_amount(event_amount_), event_sleep_us(event_sleep_us_)
2928
{}
3029

31-
Throttler(std::string_view throttler_name_, size_t max_speed_, size_t max_burst_,
30+
Throttler(const char * throttler_name_, size_t max_speed_, size_t max_burst_,
3231
ProfileEvents::Event event_amount_ = ProfileEvents::end(),
3332
ProfileEvents::Event event_sleep_us_ = ProfileEvents::end())
3433
: throttler_name(throttler_name_), max_speed(max_speed_), max_burst(max_burst_), limit_exceeded_exception_message(""), tokens(static_cast<double>(max_burst))
3534
, event_amount(event_amount_), event_sleep_us(event_sleep_us_)
3635
{}
3736

38-
explicit Throttler(std::string_view throttler_name_, size_t max_speed_, const ThrottlerPtr & parent_ = nullptr,
37+
explicit Throttler(const char * throttler_name_, size_t max_speed_, const ThrottlerPtr & parent_ = nullptr,
3938
ProfileEvents::Event event_amount_ = ProfileEvents::end(),
4039
ProfileEvents::Event event_sleep_us_ = ProfileEvents::end());
4140

42-
Throttler(std::string_view throttler_name_, size_t max_speed_,
41+
Throttler(const char * throttler_name_, size_t max_speed_,
4342
ProfileEvents::Event event_amount_,
4443
ProfileEvents::Event event_sleep_us_);
4544

46-
Throttler(std::string_view throttler_name_, size_t max_speed_, size_t max_burst_, size_t limit_, const char * limit_exceeded_exception_message_,
45+
Throttler(const char * throttler_name_, size_t max_speed_, size_t max_burst_, size_t limit_, const char * limit_exceeded_exception_message_,
4746
const ThrottlerPtr & parent_ = nullptr)
4847
: throttler_name(throttler_name_), max_speed(max_speed_), max_burst(max_burst_), limit(limit_), limit_exceeded_exception_message(limit_exceeded_exception_message_), tokens(static_cast<double>(max_burst)), parent(parent_) {}
4948

50-
Throttler(std::string_view throttler_name_, size_t max_speed_, size_t limit_, const char * limit_exceeded_exception_message_,
49+
Throttler(const char * throttler_name_, size_t max_speed_, size_t limit_, const char * limit_exceeded_exception_message_,
5150
const ThrottlerPtr & parent_ = nullptr);
5251

5352
/// Use `amount` tokens, sleeps if required or throws exception on limit overflow.
@@ -77,7 +76,7 @@ class Throttler : public IThrottler
7776
void throttleImpl(size_t amount, size_t & count_value, double & tokens_value, size_t & max_speed_value);
7877

7978
/// Human-readable name for logging (e.g. "backups_query", "remote_read_server")
80-
std::string_view throttler_name;
79+
const char * throttler_name;
8180
LoggerPtr log = getLogger("Throttler");
8281

8382
size_t count{0};

0 commit comments

Comments
 (0)