pingcap / pingcap/tiflow

Compatibility Issue with MySQL Integration Test `default_value` in TiCDC When Using Go 1.23.2

Open
#11,639 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

affects-8.5 area/ticdc may-affects-5.4 may-affects-6.1 may-affects-6.5 may-affects-7.1 may-affects-7.5 may-affects-8.1 severity/major type/bug
Dominant language
Go
Stars
464
Forks
313
Avg merge
4d 7h
Merged PRs (30d)
14

Description

What did you do?

While working on upgrading TiCDC from Go 1.21.7 to Go 1.23.2, I encountered an issue where the MySQL integration test case default_value fails when compiled and run with Go 1.23.2, but passes successfully with Go 1.21.7. The failure happens despite no changes in the TiCDC codebase, as I only switched the Go version between test runs.

Details:

  • TiCDC version: Current master branch
  • Go versions tested: 1.21.7 (successful) and 1.23.2 (failure)
  • Go version management tool: gvm

The default_value test case is a part of TiCDC's MySQL integration test suite. Using Go 1.21.7, the case runs without any issues, but when I switch to Go 1.23.2, the same test case consistently fails. This suggests that there may be a breaking change or subtle behavior difference introduced in Go 1.23.2 that affects how TiCDC handles this test case, particularly around MySQL compatibility or the handling of default values in DDL operations.

Steps to Reproduce:

  1. Check out the latest master branch of TiCDC.
  2. Compile TiCDC (make integration_test_build) with Go 1.23.2 and run the MySQL integration tests (make integration_test CASE=default_value), focusing on the default_value case.
  3. Compile TiCDC with Go 1.21.7 and run the same test suite.
What did you expect to see?

CleanShot 2024-10-09 at 15 52 21@2x

The default_value test case passes when using compiled and run with Go 1.23.2.

What did you see instead?
  • Go 1.21.7: The default_value test passes without any issues.
  • Go 1.23.2: The same test fails, with no code changes made to TiCDC between runs.

Given that only the Go version was changed, I suspect that there may be an incompatibility between TiCDC and Go 1.23.2, possibly related to changes in how default values are handled in MySQL or Go's interaction with SQL types.

Versions of the cluster

TiCDC version (execute cdc version):

master

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the make integration_test_build and make integration_test CASE=default_value entry points on master, reproducing the failure under Go 1.23.2 and the passing result under Go 1.21.7. Compare the integration-test output and the default_value case behavior; the work is done when the case passes under Go 1.23.2 and the compatibility cause is addressed.

Written by the indexing model from the issue text.

Assessment

Tech stack
go, mysql
Domain
databases, testing-qa
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.