New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
reclaim_timer::report() is marked noexcept, but its implementation throws #18099
Labels
Backport candidate
backport/5.2
Issues that should be backported to 5.2 branch once they'll be fixed
backport/5.4
Issues that should be backported to 5.4 branch once they'll be fixed
Field-Tier1
Urgent issues as per FieldEngineering request
Milestone
Comments
tchaikov
added a commit
to tchaikov/scylladb
that referenced
this issue
Mar 29, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes scylladb#18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
tchaikov
added
backport/5.2
Issues that should be backported to 5.2 branch once they'll be fixed
backport/5.4
Issues that should be backported to 5.4 branch once they'll be fixed
labels
Mar 29, 2024
tchaikov
added a commit
to tchaikov/scylladb
that referenced
this issue
Mar 29, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes scylladb#18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
tchaikov
added a commit
to tchaikov/scylladb
that referenced
this issue
Mar 30, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes scylladb#18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
mergify bot
pushed a commit
that referenced
this issue
Apr 1, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes #18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> (cherry picked from commit bcecd8b)
mergify bot
pushed a commit
that referenced
this issue
Apr 1, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes #18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> (cherry picked from commit bcecd8b)
This was referenced Apr 1, 2024
denesb
pushed a commit
that referenced
this issue
Apr 2, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes #18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> Closes #18100 (cherry picked from commit fcf7ca5)
denesb
pushed a commit
that referenced
this issue
Apr 2, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes #18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> Closes #18100 (cherry picked from commit fcf7ca5)
dgarcia360
pushed a commit
to dgarcia360/scylla
that referenced
this issue
Apr 30, 2024
before this change, `reclaim_timer::report()` calls ```c++ fmt::format(", at {}", current_backtrace()) ``` which allocates a `std::string` on heap, so it can fail and throw. in that case, `std::terminate()` is called. but at that moment, the reason why `reclaim_timer::report()` gets called is that we fail to reclaim memory for the caller. so we are more likely to run into this issue. anyway, we should not allocate memory in this path. in this change, a dedicated printer is created so that we don't format to a temporary `std::string`, and instead write directly to the buffer of logger. this avoids the memory allocation. Fixes scylladb#18099 Signed-off-by: Kefu Chai <kefu.chai@scylladb.com> Closes scylladb#18100
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Backport candidate
backport/5.2
Issues that should be backported to 5.2 branch once they'll be fixed
backport/5.4
Issues that should be backported to 5.4 branch once they'll be fixed
Field-Tier1
Urgent issues as per FieldEngineering request
reclaim_timer::report()
callsfmt::format(", at {}", current_backtrace())
, which allocates astd::string
on heap, so it can fail and throw. in that case,std::terminate()
is called. and at that moment, the reason whyreclaim_timer::report()
gets called is that we fail to reclaim memory for the caller. so this is more likely to run into this issue. we should not allocate memory here.The text was updated successfully, but these errors were encountered: