Store std::string instead of BufferSlice in BinlogEvent

This commit is contained in:
Arseny Smirnov 2023-02-08 13:43:25 +01:00
parent fb854c93a8
commit cde74133a6
3 changed files with 9 additions and 22 deletions

View File

@ -139,7 +139,8 @@ class BinlogReader {
} }
event->debug_info_ = BinlogDebugInfo{__FILE__, __LINE__}; event->debug_info_ = BinlogDebugInfo{__FILE__, __LINE__};
event->init(input_->cut_head(size_).move_as_buffer_slice()); auto buffer_slice = input_->cut_head(size_).move_as_buffer_slice();
event->init(buffer_slice.as_slice().str());
TRY_STATUS(event->validate()); TRY_STATUS(event->validate());
offset_ += size_; offset_ += size_;
event->offset_ = offset_; event->offset_ = offset_;
@ -333,14 +334,7 @@ void Binlog::do_event(BinlogEvent &&event) {
} }
VLOG(binlog) << "Write binlog event: " << format::cond(state_ == State::Reindex, "[reindex] ") VLOG(binlog) << "Write binlog event: " << format::cond(state_ == State::Reindex, "[reindex] ")
<< event.public_to_string(); << event.public_to_string();
switch (encryption_type_) { buffer_writer_.append(as_slice(event.raw_event_));
case EncryptionType::None:
buffer_writer_.append(event.raw_event_.clone());
break;
case EncryptionType::AesCtr:
buffer_writer_.append(as_slice(event.raw_event_));
break;
}
} }
if (event.type_ < 0) { if (event.type_ < 0) {
@ -652,7 +646,6 @@ void Binlog::do_reindex() {
fd_events_ = 0; fd_events_ = 0;
reset_encryption(); reset_encryption();
processor_->for_each([&](BinlogEvent &event) { processor_->for_each([&](BinlogEvent &event) {
event.realloc();
do_event(std::move(event)); // NB: no move is actually happens do_event(std::move(event)); // NB: no move is actually happens
}); });
need_sync_ = start_size != 0; // must sync creation of the file if it is non-empty need_sync_ = start_size != 0; // must sync creation of the file if it is non-empty

View File

@ -14,7 +14,7 @@
namespace td { namespace td {
void BinlogEvent::init(BufferSlice &&raw_event) { void BinlogEvent::init(string raw_event) {
TlParser parser(as_slice(raw_event)); TlParser parser(as_slice(raw_event));
size_ = static_cast<uint32>(parser.fetch_int()); size_ = static_cast<uint32>(parser.fetch_int());
LOG_CHECK(size_ == raw_event.size()) << size_ << ' ' << raw_event.size() << debug_info_; LOG_CHECK(size_ == raw_event.size()) << size_ << ' ' << raw_event.size() << debug_info_;
@ -71,8 +71,4 @@ BufferSlice BinlogEvent::create_raw(uint64 id, int32 type, int32 flags, const St
return raw_event; return raw_event;
} }
void BinlogEvent::realloc() {
raw_event_ = raw_event_.copy();
}
} // namespace td } // namespace td

View File

@ -62,7 +62,7 @@ struct BinlogEvent {
uint64 extra_ = 0; uint64 extra_ = 0;
uint32 crc32_ = 0; uint32 crc32_ = 0;
BufferSlice raw_event_; string raw_event_;
BinlogDebugInfo debug_info_; BinlogDebugInfo debug_info_;
@ -78,20 +78,20 @@ struct BinlogEvent {
BinlogEvent clone() const { BinlogEvent clone() const {
BinlogEvent result; BinlogEvent result;
result.debug_info_ = BinlogDebugInfo{__FILE__, __LINE__}; result.debug_info_ = BinlogDebugInfo{__FILE__, __LINE__};
result.init(raw_event_.clone()); result.init(raw_event_);
result.validate().ensure(); result.validate().ensure();
return result; return result;
} }
BufferSlice data_as_buffer_slice() const { BufferSlice data_as_buffer_slice() const {
return raw_event_.from_slice(get_data()); return BufferSlice(get_data());
} }
BinlogEvent() = default; BinlogEvent() = default;
BinlogEvent(BufferSlice &&raw_event, BinlogDebugInfo info) { BinlogEvent(BufferSlice &&raw_event, BinlogDebugInfo info) {
debug_info_ = info; debug_info_ = info;
init(std::move(raw_event)); init(raw_event.as_slice().str());
} }
static BufferSlice create_raw(uint64 id, int32 type, int32 flags, const Storer &storer); static BufferSlice create_raw(uint64 id, int32 type, int32 flags, const Storer &storer);
@ -101,11 +101,9 @@ struct BinlogEvent {
<< tag("data", get_data().size()) << "]" << debug_info_; << tag("data", get_data().size()) << "]" << debug_info_;
} }
void init(BufferSlice &&raw_event); void init(string raw_event);
Status validate() const TD_WARN_UNUSED_RESULT; Status validate() const TD_WARN_UNUSED_RESULT;
void realloc();
}; };
inline StringBuilder &operator<<(StringBuilder &sb, const BinlogEvent &event) { inline StringBuilder &operator<<(StringBuilder &sb, const BinlogEvent &event) {