Skip to content

Commit 6906da4

Browse files
Add MariadbGtidListEvent class for parsing GTID List events
1 parent dc190cb commit 6906da4

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

pymysqlreplication/binlogstream.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
XidEvent, GtidEvent, StopEvent, XAPrepareEvent,
1414
BeginLoadQueryEvent, ExecuteLoadQueryEvent,
1515
HeartbeatLogEvent, NotImplementedEvent, MariadbGtidEvent,
16-
MariadbAnnotateRowsEvent, RandEvent, MariadbStartEncryptionEvent, RowsQueryLogEvent)
16+
MariadbAnnotateRowsEvent, RandEvent, MariadbStartEncryptionEvent, RowsQueryLogEvent,
17+
MariadbGtidListEvent)
1718
from .exceptions import BinLogNotEnabled
1819
from .gtid import GtidSet
1920
from .packet import BinLogPacketWrapper
@@ -624,6 +625,7 @@ def _allowed_event_list(self, only_events, ignored_events,
624625
MariadbAnnotateRowsEvent,
625626
RandEvent,
626627
MariadbStartEncryptionEvent,
628+
MariadbGtidListEvent
627629
))
628630
if ignored_events is not None:
629631
for e in ignored_events:

pymysqlreplication/event.py

+35-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,41 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
126126

127127
def _dump(self):
128128
super()._dump()
129-
print("SQL statement :", self.sql_statement)
129+
print("SQL statement :", self.sql_statement)
130+
131+
class MariadbGtidListEvent(BinLogEvent):
132+
"""
133+
GTID List event
134+
https://mariadb.com/kb/en/gtid_list_event/
135+
136+
Attributes:
137+
gtid_length: Number of GTIDs
138+
gtid_list: list of 'MariadbGtidObejct'
139+
140+
'MariadbGtidObejct' Attributes:
141+
domain_id: Replication Domain ID
142+
server_id: Server_ID
143+
gtid_seq_no: GTID sequence
144+
gtid: 'domain_id'+ 'server_id' + 'gtid_seq_no'
145+
"""
146+
def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs):
147+
148+
super(MariadbGtidListEvent, self).__init__(from_packet, event_size, table_map, ctl_connection, **kwargs)
149+
150+
class MariadbGtidObejct(BinLogEvent):
151+
"""
152+
Information class of elements in GTID list
153+
"""
154+
def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs):
155+
super(MariadbGtidObejct, self).__init__(from_packet, event_size, table_map, ctl_connection, **kwargs)
156+
self.domain_id = self.packet.read_uint32()
157+
self.server_id = self.packet.server_id
158+
self.gtid_seq_no = self.packet.read_uint64()
159+
self.gtid = "%d-%d-%d" % (self.domain_id, self.server_id, self.gtid_seq_no)
160+
161+
162+
self.gtid_length = self.packet.read_uint32()
163+
self.gtid_list = [MariadbGtidObejct(from_packet, event_size, table_map, ctl_connection, **kwargs) for i in range(self.gtid_length)]
130164

131165

132166
class RotateEvent(BinLogEvent):

pymysqlreplication/packet.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class BinLogPacketWrapper(object):
8989
constants.MARIADB_ANNOTATE_ROWS_EVENT: event.MariadbAnnotateRowsEvent,
9090
constants.MARIADB_BINLOG_CHECKPOINT_EVENT: event.NotImplementedEvent,
9191
constants.MARIADB_GTID_EVENT: event.MariadbGtidEvent,
92-
constants.MARIADB_GTID_GTID_LIST_EVENT: event.NotImplementedEvent,
92+
constants.MARIADB_GTID_GTID_LIST_EVENT: event.MariadbGtidListEvent,
9393
constants.MARIADB_START_ENCRYPTION_EVENT: event.MariadbStartEncryptionEvent
9494
}
9595

0 commit comments

Comments
 (0)