Skip to content

codec(ticdc): improve error logging for Debezium encoding failures#3963

Merged
ti-chi-bot[bot] merged 1 commit intopingcap:masterfrom
takaidohigasi:improve-debezium-error-logging
Mar 2, 2026
Merged

codec(ticdc): improve error logging for Debezium encoding failures#3963
ti-chi-bot[bot] merged 1 commit intopingcap:masterfrom
takaidohigasi:improve-debezium-error-logging

Conversation

@takaidohigasi
Copy link
Copy Markdown
Contributor

@takaidohigasi takaidohigasi commented Jan 8, 2026

What problem does this PR solve?

Issue Number: close #3964

When Debezium encoding fails, the current error log lacks context information, making it difficult to debug which table/column caused the issue.

Related tiflow PR: pingcap/tiflow#12484

What is changed and how it works?

Improve error logging for Debezium encoding failures by adding detailed context information.

When Debezium encoding fails, the error log now includes:

  • schema: database/schema name
  • table: table name
  • column: column name that caused the error
  • value: the actual value (truncated to 1024 bytes if too large)
  • commitTs: the commit timestamp of the event

The commitTs in the log can be used to skip problematic events using checkpoint override.

Before:

[ERROR] ["write Debezium field value meet error"] [error="..."]

After:

[ERROR] ["failed to write Debezium field value"]
  [schema=testdb] [table=users] [column=status]
  [value=...] [commitTs=12345] [error="..."]

Check List

Tests

  • Unit test

Questions

Will it cause performance regression or break compatibility?

No. This only affects error logging path which is not performance critical.

Do you need to update user documentation, design documentation or monitoring documentation?

No.

Release note

Add CDC error log contents when debezium sink was errored

Summary by CodeRabbit

  • Bug Fixes
    • Enhanced error logging for data field encoding operations with improved diagnostics, now capturing schema, table, and column context along with better readability of logged values.

@ti-chi-bot ti-chi-bot Bot added do-not-merge/needs-linked-issue do-not-merge/release-note-label-needed Indicates that a PR should not merge because it's missing one of the release note labels. contribution This PR is from a community contributor. first-time-contributor Indicates that the PR was contributed by an external member and is a first-time contributor. needs-ok-to-test Indicates a PR created by contributors and need ORG member send '/ok-to-test' to start testing. labels Jan 8, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Jan 8, 2026

Hi @takaidohigasi. Thanks for your PR.

I'm waiting for a pingcap member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Jan 8, 2026

Welcome @takaidohigasi!

It looks like this is your first PR to pingcap/ticdc 🎉.

I'm the bot to help you request reviewers, add labels and more, See available commands.

We want to make sure your contribution gets all the attention it needs!



Thank you, and welcome to pingcap/ticdc. 😃

@pingcap-cla-assistant
Copy link
Copy Markdown

pingcap-cla-assistant Bot commented Jan 8, 2026

CLA assistant check
All committers have signed the CLA.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @takaidohigasi, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the debugging experience for Debezium encoding issues by enriching error logs with crucial contextual details. Previously, error messages were generic, but now they provide specific information about the database, table, column, and value that caused the failure, along with the commit timestamp, making it much easier to pinpoint and resolve problems.

Highlights

  • Enhanced Debezium Error Logging: Improved error messages for Debezium encoding failures by including detailed contextual information such as schema, table, column, truncated value, and commit timestamp.
  • Function Signature Update: The writeDebeziumFieldValues function now accepts an additional commitTs parameter to facilitate more comprehensive error logging.
  • Value Truncation in Logs: Error logs now truncate the problematic value to 1024 bytes to prevent excessively long log entries, ensuring readability and manageability.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@ti-chi-bot ti-chi-bot Bot added size/S Denotes a PR that changes 10-29 lines, ignoring generated files. release-note-none Denotes a PR that doesn't merit a release note. do-not-merge/needs-triage-completed release-note Denotes a PR that will be considered when it comes time to generate release notes. and removed do-not-merge/release-note-label-needed Indicates that a PR should not merge because it's missing one of the release note labels. release-note-none Denotes a PR that doesn't merit a release note. do-not-merge/needs-linked-issue labels Jan 8, 2026
Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request significantly improves error logging for Debezium encoding failures by adding valuable context like schema, table, column, and the problematic value. This will make debugging much easier.

My review includes one main suggestion to make the new logging code more robust. It addresses a potential panic when converting data to a string and improves the readability of logged binary data. Overall, this is a great enhancement.

Comment thread pkg/sink/codec/debezium/codec.go Outdated
@takaidohigasi
Copy link
Copy Markdown
Contributor Author

Thanks for the review! I've addressed both concerns:

  1. Panic recovery: Added defer/recover pattern around datum.String() to handle potential panics from corrupted data
  2. Binary data hex encoding: Added hex encoding for binary column types (BLOB, VARBINARY, etc.) using hex.EncodeToString(datum.GetBytes()) for better readability

The updated code now safely handles both edge cases. See commit 260de85.

@ti-chi-bot ti-chi-bot Bot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. do-not-merge/needs-triage-completed and removed size/S Denotes a PR that changes 10-29 lines, ignoring generated files. do-not-merge/needs-linked-issue labels Jan 8, 2026
@wk989898
Copy link
Copy Markdown
Collaborator

wk989898 commented Jan 8, 2026

/ok-to-test

@ti-chi-bot ti-chi-bot Bot added ok-to-test Indicates a PR is ready to be tested. and removed needs-ok-to-test Indicates a PR created by contributors and need ORG member send '/ok-to-test' to start testing. labels Jan 8, 2026
Comment thread pkg/sink/codec/debezium/codec.go Outdated
datum := row.GetDatum(i, ft)
valueStr := func() (s string) {
defer func() {
if r := recover(); r != nil {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the recover is not necessary

Add detailed error logging when Debezium field value encoding fails.
The error log now includes:
- Schema name
- Table name
- Column name
- Value (truncated to 1024 chars if too large, hex-encoded for binary types)
- Commit timestamp

This helps diagnose encoding issues like enum columns with invalid
string values (e.g., issue #12474 in tiflow).

Additionally, added panic recovery and hex encoding for binary types
to ensure safe and readable error logging.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@takaidohigasi takaidohigasi force-pushed the improve-debezium-error-logging branch from 260de85 to 0aed4e6 Compare February 3, 2026 14:36
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 3, 2026

📝 Walkthrough

Walkthrough

Enhanced error logging in Debezium codec by adding commitTs parameter to writeDebeziumFieldValues and enriching error context with schema, table, column, value details, and hex-encoded representation for binary types.

Changes

Cohort / File(s) Summary
Debezium Error Logging Enhancement
pkg/sink/codec/debezium/codec.go
Modified writeDebeziumFieldValues signature to accept commitTs uint64 parameter. Updated all call sites in EncodeValue (insert, delete, update event branches) to propagate commitTs. Enhanced error handling to compute loggable value strings with hex-encoding for binary types, truncation for long values, and log context including schema, table, column, and commitTs. Added encoding/hex import.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 A field writes true, with context bright,
No more shall errors hide from sight!
With hex-encoded values traced,
And timestamps perfectly placed,
Our logs now tell the tale just right!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'codec(ticdc): improve error logging for Debezium encoding failures' accurately reflects the main change: enhancing error logging with detailed context during Debezium encoding failures.
Description check ✅ Passed The description thoroughly covers the problem, solution, and impact with before/after examples, test information, and release notes following the repository template.
Linked Issues check ✅ Passed All coding objectives from #3964 are met: error logs now include schema, table, column, value (hex-encoded for binary types, truncated to 1024 bytes), and commitTs with proper error handling.
Out of Scope Changes check ✅ Passed All changes are directly aligned with issue #3964 objectives: adding commitTs parameter, improving error logging context, and hex-encoding binary values.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Important

Action Needed: IP Allowlist Update

If your organization protects your Git platform with IP whitelisting, please add the new CodeRabbit IP address to your allowlist:

  • 136.113.208.247/32 (new)
  • 34.170.211.100/32
  • 35.222.179.152/32

Failure to add the new IP will result in interrupted reviews.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@pkg/sink/codec/debezium/codec.go`:
- Around line 66-75: The switch handling column types in
pkg/sink/codec/debezium/codec.go is missing mysql.TypeVarchar, so VARBINARY
columns aren't being hex-encoded like other binary types; update the switch case
that currently lists mysql.TypeTinyBlob, mysql.TypeMediumBlob,
mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString to
also include mysql.TypeVarchar and keep the existing
mysql.HasBinaryFlag(ft.GetFlag()) branch that sets valueStr =
hex.EncodeToString(datum.GetBytes()) (using ft, datum, valueStr) so behavior
matches the encoding logic used later (lines ~523-531).
- Around line 61-86: The value extraction and conversion logic (using
colInfo.FieldType, row.GetDatum(i, ft), datum.String(), and hex.EncodeToString)
can panic on corrupted datum; wrap the entire datum access and string/byte
conversion in a small panic-recovery block (defer + recover) so any panic sets
valueStr to a safe placeholder like "<corrupt value - panic recovered>" (and
optionally capture the panic error/stack into a separate log field), then
continue to apply truncation and call log.Error as before; ensure the recovery
scope covers both datum.GetBytes()/datum.String() paths and does not swallow
unrelated panics.

Comment on lines +61 to +86
// Get value for logging with truncation
ft := &colInfo.FieldType
datum := row.GetDatum(i, ft)
var valueStr string
// Use hex encoding for binary types for better readability
switch ft.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
const maxValueLen = 1024
if len(valueStr) > maxValueLen {
valueStr = valueStr[:maxValueLen] + "...(truncated)"
}
log.Error("failed to write Debezium field value",
zap.String("schema", tableInfo.GetSchemaName()),
zap.String("table", tableInfo.GetTableName()),
zap.String("column", colInfo.Name.O),
zap.String("value", valueStr),
zap.Uint64("commitTs", commitTs),
zap.Error(err))
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Potential panic from datum.String() on corrupted data.

The PR discussion mentions adding defer/recover around datum.String() to handle potential panics from corrupted data, but I don't see that protection in this code. If datum.String() panics, it will crash the encoding process.

Consider wrapping the value extraction in a recovery mechanism:

🛡️ Proposed fix to add panic recovery
 			// Get value for logging with truncation
 			ft := &colInfo.FieldType
 			datum := row.GetDatum(i, ft)
-			var valueStr string
-			// Use hex encoding for binary types for better readability
-			switch ft.GetType() {
-			case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
-				if mysql.HasBinaryFlag(ft.GetFlag()) {
-					valueStr = hex.EncodeToString(datum.GetBytes())
-				} else {
+			var valueStr string
+			// Use hex encoding for binary types for better readability
+			func() {
+				defer func() {
+					if r := recover(); r != nil {
+						valueStr = fmt.Sprintf("<panic: %v>", r)
+					}
+				}()
+				switch ft.GetType() {
+				case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
+					if mysql.HasBinaryFlag(ft.GetFlag()) {
+						valueStr = hex.EncodeToString(datum.GetBytes())
+					} else {
+						valueStr = datum.String()
+					}
+				default:
 					valueStr = datum.String()
 				}
-			default:
-				valueStr = datum.String()
-			}
+			}()
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Get value for logging with truncation
ft := &colInfo.FieldType
datum := row.GetDatum(i, ft)
var valueStr string
// Use hex encoding for binary types for better readability
switch ft.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
const maxValueLen = 1024
if len(valueStr) > maxValueLen {
valueStr = valueStr[:maxValueLen] + "...(truncated)"
}
log.Error("failed to write Debezium field value",
zap.String("schema", tableInfo.GetSchemaName()),
zap.String("table", tableInfo.GetTableName()),
zap.String("column", colInfo.Name.O),
zap.String("value", valueStr),
zap.Uint64("commitTs", commitTs),
zap.Error(err))
// Get value for logging with truncation
ft := &colInfo.FieldType
datum := row.GetDatum(i, ft)
var valueStr string
// Use hex encoding for binary types for better readability
func() {
defer func() {
if r := recover(); r != nil {
valueStr = fmt.Sprintf("<panic: %v>", r)
}
}()
switch ft.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
}()
const maxValueLen = 1024
if len(valueStr) > maxValueLen {
valueStr = valueStr[:maxValueLen] + "...(truncated)"
}
log.Error("failed to write Debezium field value",
zap.String("schema", tableInfo.GetSchemaName()),
zap.String("table", tableInfo.GetTableName()),
zap.String("column", colInfo.Name.O),
zap.String("value", valueStr),
zap.Uint64("commitTs", commitTs),
zap.Error(err))
🤖 Prompt for AI Agents
In `@pkg/sink/codec/debezium/codec.go` around lines 61 - 86, The value extraction
and conversion logic (using colInfo.FieldType, row.GetDatum(i, ft),
datum.String(), and hex.EncodeToString) can panic on corrupted datum; wrap the
entire datum access and string/byte conversion in a small panic-recovery block
(defer + recover) so any panic sets valueStr to a safe placeholder like
"<corrupt value - panic recovered>" (and optionally capture the panic
error/stack into a separate log field), then continue to apply truncation and
call log.Error as before; ensure the recovery scope covers both
datum.GetBytes()/datum.String() paths and does not swallow unrelated panics.

Comment on lines +66 to +75
switch ft.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Missing mysql.TypeVarchar in binary type check.

The switch statement doesn't include mysql.TypeVarchar, but this type can also be binary (VARBINARY). The main encoding logic at lines 523-531 includes mysql.TypeVarchar for binary handling. For consistency, VARBINARY columns should also be hex-encoded in error logs.

🔧 Proposed fix to include TypeVarchar
 			switch ft.GetType() {
-			case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
+			case mysql.TypeVarchar, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
 				if mysql.HasBinaryFlag(ft.GetFlag()) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
switch ft.GetType() {
case mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
switch ft.GetType() {
case mysql.TypeVarchar, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString:
if mysql.HasBinaryFlag(ft.GetFlag()) {
valueStr = hex.EncodeToString(datum.GetBytes())
} else {
valueStr = datum.String()
}
default:
valueStr = datum.String()
}
🤖 Prompt for AI Agents
In `@pkg/sink/codec/debezium/codec.go` around lines 66 - 75, The switch handling
column types in pkg/sink/codec/debezium/codec.go is missing mysql.TypeVarchar,
so VARBINARY columns aren't being hex-encoded like other binary types; update
the switch case that currently lists mysql.TypeTinyBlob, mysql.TypeMediumBlob,
mysql.TypeLongBlob, mysql.TypeBlob, mysql.TypeVarString, mysql.TypeString to
also include mysql.TypeVarchar and keep the existing
mysql.HasBinaryFlag(ft.GetFlag()) branch that sets valueStr =
hex.EncodeToString(datum.GetBytes()) (using ft, datum, valueStr) so behavior
matches the encoding logic used later (lines ~523-531).

@ti-chi-bot ti-chi-bot Bot added needs-1-more-lgtm Indicates a PR needs 1 more LGTM. approved labels Feb 11, 2026
@wk989898
Copy link
Copy Markdown
Collaborator

/check-issue-triage-complete

@wk989898
Copy link
Copy Markdown
Collaborator

/test kafka

@ti-chi-bot ti-chi-bot Bot added lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Feb 27, 2026
@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Feb 27, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: 3AceShowHand, wk989898

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:
  • OWNERS [3AceShowHand,wk989898]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ti-chi-bot
Copy link
Copy Markdown

ti-chi-bot Bot commented Feb 27, 2026

[LGTM Timeline notifier]

Timeline:

  • 2026-02-11 10:07:41.995547551 +0000 UTC m=+13015.075538246: ☑️ agreed by wk989898.
  • 2026-02-27 09:02:34.938368709 +0000 UTC m=+378.857534805: ☑️ agreed by 3AceShowHand.

@ti-chi-bot ti-chi-bot Bot merged commit e382ce8 into pingcap:master Mar 2, 2026
19 checks passed
tenfyzhong pushed a commit that referenced this pull request Mar 18, 2026
…3963)

close #3964

(cherry picked from commit e382ce8)
Signed-off-by: tenfyzhong <tenfy@tenfy.cn>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved contribution This PR is from a community contributor. first-time-contributor Indicates that the PR was contributed by an external member and is a first-time contributor. lgtm ok-to-test Indicates a PR is ready to be tested. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improve error logging for Debezium encoding failures

3 participants