From 2c886bdccee80513136098004fd76f6c8930a364 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 9 Aug 2026 21:11:57 +0900 Subject: [PATCH 1/3] test: stop auto-discovering MySQL CDC scaffold --- .../java/com/xtrmetl/cdc/spi/CdcSourceRegistryTest.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cdc-service/src/test/java/com/xtrmetl/cdc/spi/CdcSourceRegistryTest.java b/cdc-service/src/test/java/com/xtrmetl/cdc/spi/CdcSourceRegistryTest.java index 020f6329..e3fdb752 100644 --- a/cdc-service/src/test/java/com/xtrmetl/cdc/spi/CdcSourceRegistryTest.java +++ b/cdc-service/src/test/java/com/xtrmetl/cdc/spi/CdcSourceRegistryTest.java @@ -3,6 +3,7 @@ import com.xtrmetl.cdc.service.CdcService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ObjectProvider; +import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @@ -44,7 +45,12 @@ void postgresSpiStartAndStopDelegateToCdcService() throws Exception { } @Test - void registersScaffoldSourcesWhenProvided() { + void mysqlScaffoldIsNotAutoDiscoveredAsAProductionSource() { + assertFalse(MysqlDebeziumCdcSource.class.isAnnotationPresent(Component.class)); + } + + @Test + void registersScaffoldSourcesWhenProvidedExplicitly() { CdcSourceRegistry registry = new CdcSourceRegistry(List.of( new PostgresDebeziumCdcSource(), new MysqlDebeziumCdcSource(), From 9f64725bf20379d583a53149f2724a9513973994 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 9 Aug 2026 21:15:00 +0900 Subject: [PATCH 2/3] fix(cdc): stop auto-discovering MySQL scaffold --- .../java/com/xtrmetl/cdc/spi/MysqlDebeziumCdcSource.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/cdc-service/src/main/java/com/xtrmetl/cdc/spi/MysqlDebeziumCdcSource.java b/cdc-service/src/main/java/com/xtrmetl/cdc/spi/MysqlDebeziumCdcSource.java index f3624891..59a96d0e 100644 --- a/cdc-service/src/main/java/com/xtrmetl/cdc/spi/MysqlDebeziumCdcSource.java +++ b/cdc-service/src/main/java/com/xtrmetl/cdc/spi/MysqlDebeziumCdcSource.java @@ -1,13 +1,14 @@ package com.xtrmetl.cdc.spi; -import org.springframework.stereotype.Component; - import java.util.Set; /** - * Scaffold for MySQL binlog CDC via Debezium. Not on the classpath / not started. + * Non-production reference scaffold for a future MySQL binlog CDC integration via Debezium. + * + *

This type is intentionally not a Spring component. Production source discovery must not + * advertise MySQL until the connector dependency, lifecycle, offsets/history, prerequisites, + * recovery and realistic integration behavior are implemented and verified.

*/ -@Component public final class MysqlDebeziumCdcSource extends AbstractScaffoldCdcSource { public static final String ID = "mysql-debezium"; From 3b501f823fa0d3d93a5a95c714efdd79242a8a58 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 9 Aug 2026 21:15:33 +0900 Subject: [PATCH 3/3] docs(cdc): mark MySQL scaffold non-discoverable --- docs/cdc/any-to-any-cdc.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/cdc/any-to-any-cdc.md b/docs/cdc/any-to-any-cdc.md index ea38607b..0c56628d 100644 --- a/docs/cdc/any-to-any-cdc.md +++ b/docs/cdc/any-to-any-cdc.md @@ -55,7 +55,8 @@ Package: `com.xtrmetl.cdc.spi` - `CdcSourceConnector` — lifecycle + start/stop capture - `SourceCapabilities` — declares engine (debezium/logminer/… ), databases supported - `PostgresDebeziumCdcSource` — adapter wrapping existing `CdcService` configuration surface -- `CdcSourceRegistry` — discovery; exposed via `GET /api/cdc/sources` and status payload +- `CdcSourceRegistry` — production discovery; exposed via `GET /api/cdc/sources` and status payload +- `MysqlDebeziumCdcSource` — non-production reference scaffold only; intentionally not a Spring component until real MySQL CDC support is implemented ## Target SPI (Java) @@ -79,11 +80,11 @@ xtrmetl: ``` - **Declared** in `application.yml` / `XtrmetlProperties.Cdc.sources` and reported on `GET /api/cdc/status` as `configuredSources` via `CdcSourceFactory`. -- **Registered types:** +- **Production-discovered types:** | Type id | Status | |:--------|:-------| | `postgres-debezium` | **Live** — SPI `start`/`stop` delegates to `CdcService` | - | `mysql-debezium` | Scaffold only (no connector JAR) | + | `mysql-debezium` | **Not registered** — reference scaffold only; configured use resolves as unknown source type | | `sqlserver-debezium` | Scaffold only (no connector JAR) | - **Live engine:** still a single Debezium Postgres path in `CdcService` (multi-source start not implemented). - Targets remain: Kafka (live raw publish) + optional JDBC replica (`replica.enabled`).