Update binlog name/position/gtid based on the event type.
| 848 | |
| 849 | /// Update binlog name/position/gtid based on the event type. |
| 850 | void Position::update(BinlogEventPtr event) |
| 851 | { |
| 852 | switch (event->header.type) |
| 853 | { |
| 854 | case FORMAT_DESCRIPTION_EVENT: { |
| 855 | binlog_pos = event->header.log_pos; |
| 856 | break; |
| 857 | } |
| 858 | case QUERY_EVENT: { |
| 859 | auto query = std::static_pointer_cast<QueryEvent>(event); |
| 860 | if (query->transaction_complete && pending_gtid) |
| 861 | { |
| 862 | gtid_sets.update(*pending_gtid); |
| 863 | pending_gtid.reset(); |
| 864 | } |
| 865 | binlog_pos = event->header.log_pos; |
| 866 | break; |
| 867 | } |
| 868 | case XID_EVENT: { |
| 869 | if (pending_gtid) |
| 870 | { |
| 871 | gtid_sets.update(*pending_gtid); |
| 872 | pending_gtid.reset(); |
| 873 | } |
| 874 | binlog_pos = event->header.log_pos; |
| 875 | break; |
| 876 | } |
| 877 | case ROTATE_EVENT: { |
| 878 | auto rotate = std::static_pointer_cast<RotateEvent>(event); |
| 879 | binlog_name = rotate->next_binlog; |
| 880 | binlog_pos = event->header.log_pos; |
| 881 | break; |
| 882 | } |
| 883 | case GTID_EVENT: { |
| 884 | if (pending_gtid) |
| 885 | gtid_sets.update(*pending_gtid); |
| 886 | auto gtid_event = std::static_pointer_cast<GTIDEvent>(event); |
| 887 | binlog_pos = event->header.log_pos; |
| 888 | gtid_sets.update(gtid_event->gtid); |
| 889 | break; |
| 890 | } |
| 891 | default: |
| 892 | throw ReplicationError("Position update with unsupported event", ErrorCodes::LOGICAL_ERROR); |
| 893 | } |
| 894 | } |
| 895 | |
| 896 | void Position::update(UInt64 binlog_pos_, const String & binlog_name_, const String & gtid_sets_) |
| 897 | { |
no test coverage detected