MCPcopy Create free account
hub / github.com/ByConity/ByConity / readPayloadImpl

Method readPayloadImpl

src/Core/MySQL/MySQLReplication.cpp:920–1062  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

918 }
919
920 void MySQLFlavor::readPayloadImpl(ReadBuffer & payload)
921 {
922 if (payload.eof())
923 throw Exception("Attempt to read after EOF.", ErrorCodes::ATTEMPT_TO_READ_AFTER_EOF);
924
925 UInt16 header = static_cast<unsigned char>(*payload.position());
926 switch (header)
927 {
928 case PACKET_EOF:
929 throw ReplicationError("Master maybe lost", ErrorCodes::CANNOT_READ_ALL_DATA);
930 case PACKET_ERR:
931 ERRPacket err;
932 err.readPayloadWithUnpacked(payload);
933 throw ReplicationError(err.error_message, ErrorCodes::UNKNOWN_EXCEPTION);
934 }
935 // skip the generic response packets header flag.
936 payload.ignore(1);
937
938 MySQLBinlogEventReadBuffer event_payload(payload, checksum_signature_length);
939
940 EventHeader event_header;
941 event_header.parse(event_payload);
942
943 switch (event_header.type)
944 {
945 case FORMAT_DESCRIPTION_EVENT:
946 {
947 event = std::make_shared<FormatDescriptionEvent>(std::move(event_header));
948 event->parseEvent(event_payload);
949 position.update(event);
950 break;
951 }
952 case ROTATE_EVENT:
953 {
954 event = std::make_shared<RotateEvent>(std::move(event_header));
955 event->parseEvent(event_payload);
956 position.update(event);
957 break;
958 }
959 case QUERY_EVENT:
960 {
961 event = std::make_shared<QueryEvent>(std::move(event_header));
962 event->parseEvent(event_payload);
963 position.update(event);
964
965 auto query = std::static_pointer_cast<QueryEvent>(event);
966 switch (query->typ)
967 {
968 case QUERY_EVENT_MULTI_TXN_FLAG:
969 case QUERY_EVENT_XA:
970 /// Ignore queries that have no impact on the data.
971 case QUERY_SAVEPOINT:
972 {
973 event = std::make_shared<DryRunEvent>(std::move(query->header));
974 break;
975 }
976 default:
977 break;

Callers

nothing calls this directly

Calls 11

ReplicationErrorClass · 0.85
parseEventMethod · 0.80
ExceptionClass · 0.50
eofMethod · 0.45
positionMethod · 0.45
ignoreMethod · 0.45
parseMethod · 0.45
updateMethod · 0.45
atMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected