Skip to content

AssertionError after db reconnection #631

Open
@etam

Description

@etam

We have:

  • a 3 node mariadb 10.6 galera cluster, that uses replication to follow another galera cluster.
  • a haproxy node
  • an application that connects to the database through haproxy and reads the replication log.

The scenario:

  • An update to database config causes the db nodes to be restarted one by one.
  • This obviously causes the application to lose connection and reconnect. Because it goes through haproxy it reconnects to a different db node.
  • After the reconnection, the AssertionError is raised:
AssertionError: Result length not requested length:
Expected=125.  Actual=51.  Position: 89.  Data Length: 140
[...]
  File "pymysqlreplication/row_event.py", line 565, in rows
    self._fetch_rows()
  File "pymysqlreplication/row_event.py", line 560, in _fetch_rows
    self.__rows.append(self._fetch_one_row())
  File "pymysqlreplication/row_event.py", line 621, in _fetch_one_row
    row["values"] = self._read_column_data(self.columns_present_bitmap)
  File "pymysqlreplication/row_event.py", line 148, in _read_column_data
    values[name] = self.__read_values_name(
  File "pymysqlreplication/row_event.py", line 216, in __read_values_name
    else self.__read_string(1, column)
  File "pymysqlreplication/row_event.py", line 322, in __read_string
    string = self.packet.read_length_coded_pascal_string(size)
  File "pymysqlreplication/packet.py", line 243, in read_length_coded_pascal_string
    return self.read(length)
  File "pymysqlreplication/packet.py", line 144, in read
    return self.packet.read(size)
  File "pymysql/protocol.py", line 73, in read
    raise AssertionError(error)

I have 12 samples right now. There are different values in "Expected=???. Actual=???. Position: ???. Data Length: ???" and in few cases instead of

  File "pymysqlreplication/row_event.py", line 216, in __read_values_name
    else self.__read_string(1, column)

there is

  File "pymysqlreplication/row_event.py", line 223, in __read_values_name
    return self.__read_string(column.length_size, column)

This might be a duplicate of #610 .

Unfortunately for now I don't have more data and I won't be restarting production db nodes just for this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions