event_large_threshold = g_conf().get_val<uint64_t>("mds_log_event_large_threshold");
events_per_segment = g_conf().get_val<uint64_t>("mds_log_events_per_segment");
pause = g_conf().get_val<bool>("mds_log_pause");
- major_segment_event_ratio = g_conf().get_val<uint64_t>("mds_log_major_segment_event_ratio");
max_segments = g_conf().get_val<uint64_t>("mds_log_max_segments");
max_events = g_conf().get_val<int64_t>("mds_log_max_events");
skip_corrupt_events = g_conf().get_val<bool>("mds_log_skip_corrupt_events");
skip_unbounded_events = g_conf().get_val<bool>("mds_log_skip_unbounded_events");
log_warn_factor = g_conf().get_val<double>("mds_log_warn_factor");
+ minor_segments_per_major_segment = g_conf().get_val<uint64_t>("mds_log_minor_segments_per_major_segment");
upkeep_thread = std::thread(&MDLog::log_trim_upkeep, this);
}
ceph_assert(!mds_is_shutting_down);
event_seq++;
- events_since_last_major_segment++;
if (auto sb = dynamic_cast<SegmentBoundary*>(le); sb) {
auto ls = _start_new_segment(sb);
if (sb->is_major_segment_boundary()) {
major_segments.insert(ls->seq);
logger->set(l_mdl_segmjr, major_segments.size());
- events_since_last_major_segment = 0;
+ minor_segments_since_last_major_segment = 0;
+ } else {
+ ++minor_segments_since_last_major_segment;
}
}
uint64_t period = journaler->get_layout_period();
auto ls = get_current_segment();
// start a new segment?
- if (events_since_last_major_segment > events_per_segment*major_segment_event_ratio) {
+ if (minor_segments_since_last_major_segment > minor_segments_per_major_segment) {
dout(10) << __func__ << ": starting new major segment, current " << *ls << dendl;
auto sle = mds->mdcache->create_subtree_map();
_submit_entry(sle, NULL);
}
le->set_start_off(pos);
- events_since_last_major_segment++;
if (auto sb = dynamic_cast<SegmentBoundary*>(le.get()); sb) {
auto seq = sb->get_seq();
if (seq > 0) {
if (sb->is_major_segment_boundary()) {
major_segments.insert(event_seq);
logger->set(l_mdl_segmjr, major_segments.size());
- events_since_last_major_segment = 0;
+ minor_segments_since_last_major_segment = 0;
+ } else {
+ ++minor_segments_since_last_major_segment;
}
} else {
event_seq++;
if (changed.count("mds_log_events_per_segment")) {
events_per_segment = g_conf().get_val<uint64_t>("mds_log_events_per_segment");
}
- if (changed.count("mds_log_major_segment_event_ratio")) {
- major_segment_event_ratio = g_conf().get_val<uint64_t>("mds_log_major_segment_event_ratio");
- }
if (changed.count("mds_log_max_events")) {
max_events = g_conf().get_val<int64_t>("mds_log_max_events");
}
if (changed.count("mds_log_warn_factor")) {
log_warn_factor = g_conf().get_val<double>("mds_log_warn_factor");
}
+ if (changed.count("mds_log_minor_segments_per_major_segment")) {
+ minor_segments_per_major_segment = g_conf().get_val<uint64_t>("mds_log_minor_segments_per_major_segment");
+ }
}
bool debug_subtrees;
std::atomic_uint64_t event_large_threshold; // accessed by submit thread
uint64_t events_per_segment;
- uint64_t major_segment_event_ratio;
int64_t max_events;
uint64_t max_segments;
+ uint64_t minor_segments_per_major_segment;
bool pause;
bool skip_corrupt_events;
bool skip_unbounded_events;
std::set<uint64_t> major_segments;
std::set<LogSegment*> expired_segments;
std::set<LogSegment*> expiring_segments;
- uint64_t events_since_last_major_segment = 0;
+ uint64_t minor_segments_since_last_major_segment = 0;
double log_warn_factor;
// log trimming decay counter