replay: only keep one init_data in merged events (#26863)

don't merge init_data
This commit is contained in:
Dean Lee
2023-01-03 03:57:51 +08:00
committed by GitHub
parent 922bedaf47
commit b5a2dfa93e
+6 -2
View File
@@ -269,8 +269,12 @@ void Replay::mergeSegments(const SegmentMap::iterator &begin, const SegmentMap::
new_events_->reserve(new_events_size);
for (int n : segments_need_merge) {
const auto &e = segments_[n]->log->events;
auto middle = new_events_->insert(new_events_->end(), e.begin(), e.end());
std::inplace_merge(new_events_->begin(), middle, new_events_->end(), Event::lessThan());
if (e.size() > 0) {
auto insert_from = e.begin();
if (new_events_->size() > 0 && (*insert_from)->which == cereal::Event::Which::INIT_DATA) ++insert_from;
auto middle = new_events_->insert(new_events_->end(), insert_from, e.end());
std::inplace_merge(new_events_->begin(), middle, new_events_->end(), Event::lessThan());
}
}
updateEvents([&]() {