Skip to content

Commit c98358e

Browse files
authored
Fix read column Info from table map event (#440)
fix: #439 Here is how the scenario Goes: 1. There is a time difference between the event and the actual state of the database. 2. The actual database is dropped. 3. The python-replication-mysql application receives a table map event. 4. Since there is no cached result for the table_id, it tries to retrieve the database's column schema. 5. There are no column schema results from the database. 6. Packets containing information about the table map event's columns are still present. 7. The application exits the if statement, and the packets remain untouched. 8. Incorrect packets are inserted into the null_bitmask. ``` if self.table_id in table_map: self.column_schemas = table_map[self.table_id].column_schemas else: self.column_schemas = self._ctl_connection._get_table_information(self.schema, self.table) ordinal_pos_loc = 0 if len(self.column_schemas) != 0: # Read columns meta data column_types = bytearray(self.packet.read(self.column_count)) self.null_bitmask = self.packet.read((self.column_count + 7) / 8) #error packet goes here! ```
1 parent 3da071e commit c98358e

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

Diff for: pymysqlreplication/row_event.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,9 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
7979
#Body
8080
self.number_of_columns = self.packet.read_length_coded_binary()
8181
self.columns = self.table_map[self.table_id].columns
82+
column_schemas = self.table_map[self.table_id].column_schemas
8283

83-
if len(self.columns) == 0: # could not read the table metadata, probably already dropped
84+
if len(column_schemas) == 0: # could not read the table metadata, probably already dropped
8485
self.complete = False
8586
if self._fail_on_table_metadata_unavailable:
8687
raise TableMetadataUnavailableError(self.table)
@@ -624,7 +625,7 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
624625

625626
ordinal_pos_loc = 0
626627

627-
if len(self.column_schemas) != 0:
628+
if self.column_count != 0:
628629
# Read columns meta data
629630
column_types = bytearray(self.packet.read(self.column_count))
630631
self.packet.read_length_coded_binary()

0 commit comments

Comments
 (0)