Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-9175

PostgreSQL ReselectPostProcessor error handling strategy: retries

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False

      Which use case/requirement will be addressed by the proposed feature?

      Transient failures of `TOAST` re-selection:

      WARN [debezium-postgresconnector-{}-change-event-source-coordinator] [{}|{}] Failed to re-select row for table {} and key {} (io.debezium.processors.reselect.ReselectColumnsPostProcessor)
      org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend.
      at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:395)
      at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:498)
      at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:415)
      at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190)
      at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:134)
      at io.debezium.jdbc.JdbcConnection.prepareQuery(JdbcConnection.java:808)
      at io.debezium.jdbc.JdbcConnection.reselectColumns(JdbcConnection.java:1672)
      ...
      Caused by: java.net.SocketException: Connection reset
      at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:328)
      at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:355)
      at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:808)
      at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)

      There's currently no retry strategy. You have to perform a snapshot of the affected table as and when these failures occur.

      One workaround seems to be the use of the undocumented `custom.retriable.exception` property e.g. `Failed to re[-]select row`.

      Implementation ideas (optional)

      If it doesn't make sense to implement retries for the Post Processors as code, the existing undocumented property `custom.retriable.exception` seems to provide a stable workaround.

      Failing that, https://github.com/debezium/debezium/pull/5944 introduced error handling modes, can that be leveraged in conjunction with `errors.max.retries`?

              Unassigned Unassigned
              jonathono Jonathon Ogden (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: