Support scheduled message IDs in logging.

GitOrigin-RevId: 4641da410f4cc5c683bfdc2dd67de5dea153fc26
This commit is contained in:
levlam 2019-11-26 22:35:16 +03:00
parent 917a3af6ac
commit 67e007eebd
2 changed files with 33 additions and 7 deletions

View File

@ -63,8 +63,7 @@ MessageType MessageId::get_type() const {
} }
} }
ServerMessageId MessageId::get_server_message_id() const { ServerMessageId MessageId::get_server_message_id_force() const {
CHECK(id == 0 || is_server());
return ServerMessageId(narrow_cast<int32>(id >> SERVER_ID_SHIFT)); return ServerMessageId(narrow_cast<int32>(id >> SERVER_ID_SHIFT));
} }
@ -84,18 +83,36 @@ MessageId MessageId::get_next_message_id(MessageType type) const {
} }
StringBuilder &operator<<(StringBuilder &string_builder, MessageId message_id) { StringBuilder &operator<<(StringBuilder &string_builder, MessageId message_id) {
if (message_id.is_scheduled()) {
string_builder << "scheduled ";
if (!message_id.is_valid_scheduled()) {
return string_builder << "invalid message " << message_id.get();
}
if (message_id.is_scheduled_server()) {
return string_builder << "server message " << message_id.get_scheduled_server_message_id_force();
}
if (message_id.is_local()) {
return string_builder << "local message " << message_id.get_scheduled_server_message_id_force();
}
if (message_id.is_yet_unsent()) {
return string_builder << "yet unsent message " << message_id.get_scheduled_server_message_id_force();
}
return string_builder << "bugged message " << message_id.get();
}
if (!message_id.is_valid()) { if (!message_id.is_valid()) {
return string_builder << "invalid message " << message_id.get(); return string_builder << "invalid message " << message_id.get();
} }
if (message_id.is_server()) { if (message_id.is_server()) {
return string_builder << "server message " << (message_id.get() >> MessageId::SERVER_ID_SHIFT); return string_builder << "server message " << message_id.get_server_message_id_force().get();
} }
if (message_id.is_local()) { if (message_id.is_local()) {
return string_builder << "local message " << (message_id.get() >> MessageId::SERVER_ID_SHIFT) << '.' return string_builder << "local message " << message_id.get_server_message_id_force().get() << '.'
<< (message_id.get() & MessageId::FULL_TYPE_MASK); << (message_id.get() & MessageId::FULL_TYPE_MASK);
} }
if (message_id.is_yet_unsent()) { if (message_id.is_yet_unsent()) {
return string_builder << "yet unsent message " << (message_id.get() >> MessageId::SERVER_ID_SHIFT) << '.' return string_builder << "yet unsent message " << message_id.get_server_message_id_force().get() << '.'
<< (message_id.get() & MessageId::FULL_TYPE_MASK); << (message_id.get() & MessageId::FULL_TYPE_MASK);
} }
return string_builder << "bugged message " << message_id.get(); return string_builder << "bugged message " << message_id.get();

View File

@ -40,6 +40,12 @@ class MessageId {
// |-------30-------|----18---|1|--2-| // |-------30-------|----18---|1|--2-|
// |send_date-2**30 |server_id|1|type| // |send_date-2**30 |server_id|1|type|
ServerMessageId get_server_message_id_force() const;
int32 get_scheduled_server_message_id_force() const {
return static_cast<int32>((id >> 3) & ((1 << 18) - 1));
}
public: public:
MessageId() = default; MessageId() = default;
@ -95,7 +101,10 @@ class MessageId {
return (id & SHORT_TYPE_MASK) == 0; return (id & SHORT_TYPE_MASK) == 0;
} }
ServerMessageId get_server_message_id() const; ServerMessageId get_server_message_id() const {
CHECK(id == 0 || is_server());
return get_server_message_id_force();
}
// returns greatest server message id not bigger than this message id // returns greatest server message id not bigger than this message id
MessageId get_prev_server_message_id() const { MessageId get_prev_server_message_id() const {
@ -111,7 +120,7 @@ class MessageId {
int32 get_scheduled_server_message_id() const { int32 get_scheduled_server_message_id() const {
CHECK(is_scheduled_server()); CHECK(is_scheduled_server());
return static_cast<int32>((id >> 3) & ((1 << 18) - 1)); return get_scheduled_server_message_id_force();
} }
bool operator==(const MessageId &other) const { bool operator==(const MessageId &other) const {