From 373b36174ec12d84ff5b155521c47dc3d8f46ed7 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 13:21:01 +0900 Subject: [PATCH 1/4] test(cdc): prove production-safe observability defaults --- .../CdcObservabilityProfileContractTest.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java diff --git a/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java b/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java new file mode 100644 index 00000000..7d65162d --- /dev/null +++ b/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java @@ -0,0 +1,37 @@ +package com.xtrmetl.cdc.config; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ClassPathResource; + +import java.util.Properties; + +import static org.junit.jupiter.api.Assertions.assertNull; + +/** + * Guards the deployable CDC configuration against silently enabling local-debug observability. + */ +class CdcObservabilityProfileContractTest { + + @Test + void baseConfigurationDoesNotForceDebugLoggingOrFullTraceSampling() { + Properties properties = load("application.yml"); + + assertNull(properties.getProperty("management.tracing.sampling.probability"), + "base CDC configuration must retain Spring Boot's bounded default sampling policy"); + assertNull(properties.getProperty("logging.level.com.xtrmetl"), + "base CDC configuration must not force application DEBUG logging"); + assertNull(properties.getProperty("logging.level.org.springframework.web"), + "base CDC configuration must not force Spring Web DEBUG logging"); + } + + private static Properties load(String resourceName) { + YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); + yaml.setResources(new ClassPathResource(resourceName)); + Properties properties = yaml.getObject(); + if (properties == null) { + throw new IllegalStateException("Could not load " + resourceName); + } + return properties; + } +} From 787a1a7bb009b5fa6958218b1db86d658863ee4f Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 13:23:16 +0900 Subject: [PATCH 2/4] fix(cdc): make base observability production-safe --- cdc-service/src/main/resources/application.yml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cdc-service/src/main/resources/application.yml b/cdc-service/src/main/resources/application.yml index b299ebc9..ca4fcb9f 100644 --- a/cdc-service/src/main/resources/application.yml +++ b/cdc-service/src/main/resources/application.yml @@ -46,9 +46,6 @@ xtrmetl: ddl-blocked-prefixes: ${REPLICA_DDL_BLOCKED_PREFIXES:DROP TABLE,DROP SCHEMA,DROP DATABASE,TRUNCATE} management: - tracing: - sampling: - probability: 1.0 zipkin: tracing: endpoint: http://${ZIPKIN_HOST:localhost}:9412/api/v2/spans @@ -69,10 +66,5 @@ eureka: logging: level: root: INFO - com: - xtrmetl: DEBUG io: debezium: INFO - org: - springframework: - web: DEBUG From a9cf226a77fcaf9c3eb6bab52ede9100f20dc678 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 14:07:01 +0900 Subject: [PATCH 3/4] test(ops): preserve local CDC observability profile --- .../CdcObservabilityProfileContractTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java b/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java index 7d65162d..6520b32c 100644 --- a/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java +++ b/cdc-service/src/test/java/com/xtrmetl/cdc/config/CdcObservabilityProfileContractTest.java @@ -6,7 +6,9 @@ import java.util.Properties; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Guards the deployable CDC configuration against silently enabling local-debug observability. @@ -25,6 +27,19 @@ void baseConfigurationDoesNotForceDebugLoggingOrFullTraceSampling() { "base CDC configuration must not force Spring Web DEBUG logging"); } + @Test + void localProfileExplicitlyRestoresDeveloperVerboseObservability() { + ClassPathResource localProfile = new ClassPathResource("application-local.yml"); + assertTrue(localProfile.exists(), + "local CDC profile must preserve the opt-in developer observability contract"); + + Properties properties = load("application-local.yml"); + assertEquals("local", properties.getProperty("spring.config.activate.on-profile")); + assertEquals("1.0", properties.getProperty("management.tracing.sampling.probability")); + assertEquals("DEBUG", properties.getProperty("logging.level.com.xtrmetl")); + assertEquals("DEBUG", properties.getProperty("logging.level.org.springframework.web")); + } + private static Properties load(String resourceName) { YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean(); yaml.setResources(new ClassPathResource(resourceName)); From 099fe8a142134e72d4558eea6d5cc10e5fbe2628 Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Tue, 11 Aug 2026 14:15:11 +0900 Subject: [PATCH 4/4] fix(ops): restore opt-in local CDC observability --- .../src/main/resources/application-local.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 cdc-service/src/main/resources/application-local.yml diff --git a/cdc-service/src/main/resources/application-local.yml b/cdc-service/src/main/resources/application-local.yml new file mode 100644 index 00000000..8b1aaf12 --- /dev/null +++ b/cdc-service/src/main/resources/application-local.yml @@ -0,0 +1,17 @@ +spring: + config: + activate: + on-profile: local + +management: + tracing: + sampling: + probability: 1.0 + +logging: + level: + com: + xtrmetl: DEBUG + org: + springframework: + web: DEBUG