When clog_to_monitors is disabled, "last_log" still keeps increasing by
get_next_seq() if OSD writes info to clog
But "last_log_sent" doesn't increase, if we disable clog_to_monitors for
a bit longer and then re-enabling it, the num_unsent could be bigger than
log_queue_size(), it will trigger an assertion in _get_mon_log_message
We need to reset last_log_sent to last_log before updating clog_to_monitors
Signed-off-by: Gerald Yang <gerald.yang@canonical.com>
(cherry picked from commit
294ddf9ba779d40b0bc859e55f5287379c75624f)
{
}
-void LogChannel::set_log_to_monitors(bool v) {
- log_to_monitors = v;
+void LogChannel::set_log_to_monitors(bool v)
+{
+ if (log_to_monitors != v) {
+ parent->reset();
+ log_to_monitors = v;
+ }
}
void LogChannel::update_config(map<string,string> &log_to_monitors,
return entry.seq;
}
+void LogClient::reset()
+{
+ std::lock_guard l(log_lock);
+ if (log_queue.size()) {
+ log_queue.clear();
+ }
+ last_log_sent = last_log;
+}
+
uint64_t LogClient::get_next_seq()
{
std::lock_guard l(log_lock);
const EntityName& get_myname();
entity_name_t get_myrank();
version_t queue(LogEntry &entry);
+ void reset();
private:
ceph::ref_t<Message> _get_mon_log_message();