fix(cdc): keep stop failure diagnostics out of API responses - #172
Draft
seonghobae wants to merge 5 commits into
Draft
fix(cdc): keep stop failure diagnostics out of API responses#172seonghobae wants to merge 5 commits into
seonghobae wants to merge 5 commits into
Conversation
Contributor
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
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. Comment |
This was referenced Aug 10, 2026
This was referenced Aug 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Purpose
Close bounded confidentiality/control-boundary defects in the CDC start/stop API without changing Debezium lifecycle semantics. Protected stop failures historically returned raw
IOExceptiondiagnostics, while runtime failures duringstart()escaped the controller entirely. Database, offset-store, filesystem, broker, provider, or credential-adjacent diagnostics are not part of the public API contract.This remains a direct-
develop, two-file Draft limited toCdcControllerand its test. It does not overlap #139'sCdcServiceacknowledgement work, #141's graceful-stop completion decision, #170's slot probe, #171's DDL logging, or #190's service-log diagnostics.Exact current identity
develop@622e5e6c3d534f230c390f10e3832efadfc01825;fix/cdc-stop-safe-error-622e5e6;574b61152dd4bb8a6904fec3cdfa36e7cd9c382f;b00077e9afdd857566cd6c60e1f433117aa147fe;3a872c9eba23efc38bbbeb5ce3814d83788e0a2f;69dcccfe0a608e79ec1fea4098747943ab5aa86c;3aeb454e5e95b068344bf2a1388f078de9419dbb;Every gate/review from a predecessor source head is historical and does not transfer.
RCA / TDD
Stop diagnostic leak
Historical controller code appended
IOException.getMessage()to the HTTP 500 body. RED574b611...injects a credential-bearing JDBC shutdown diagnostic and requires stable bodyCDC process could not be stopped; hosted CI failed at that exact boundary. GREENb00077e...removes exception-derived response text without changing stop/lifecycle semantics.Start runtime failure boundary
Fresh source inspection then found
startCdc()invokedcdcService.start()with no failure boundary.CdcService.start()can surface runtime startup/configuration failures; a sensitive provider/configuration exception therefore escaped the controller entirely. This disproved the narrower hypothesis of anothergetMessage()concatenation: the actual defect was an absent runtime exception boundary.RED
3a872c9eba23efc38bbbeb5ce3814d83788e0a2fmakescdcService.start()throw anIllegalStateExceptioncarrying a credential-bearing PostgreSQL URL and requires HTTP 500 with stable bodyCDC process could not be started. CI31350143839, macOS job93339265195, executed synthetic mergeb6891ba37ea2da9f7331f35ec6e2f2e06444c3c7; CDC ran 107 tests with exactly the new start test erroring because the raw runtime exception escapedCdcController.startCdc.GREEN
69dcccfe0a608e79ec1fea4098747943ab5aa86ccatchesRuntimeExceptionaround startup, returns only the stable public error, deliberately does not catchError, and adds beginner-readable Javadoc to both start/stop control methods.Current-head hosted verification
For exact source head
69dcccfe0a608e79ec1fea4098747943ab5aa86c:31350324069: aggregate success on macOS/Ubuntu/Windows;31350324095: success;31350324056: success;31350324063: success;31350324057: aggregate success, not accepted as complete security evidence.CI macOS job
93339740489checked out synthetic merge3aeb454e5e95b068344bf2a1388f078de9419dbb, not literal source head. It ran ETL 275/275 green,CdcControllerTest7/7 green, CDC 107/107 green, gateway tests green and completed the full reactor successfully. The same log reproduces the protected JaCoCo false-green: report and check each sayAnalyzed bundle 'etl-service' with 0 classesfollowed by coverage checks met (#162/#164).Hard Trivy job
93339740495also checked out synthetic merge3aeb454e...and printedDependency version cannot be determined. Child dependencies will not be found.before returning zero CRITICAL/HIGH/MEDIUM findings. #196 owns this scanner-completeness defect. A zero-findings SARIF with explicitly incomplete Maven dependency resolution is non-passing under mightyETL acceptance despite the aggregate green conclusion.Source identity, scanner dependency-graph completeness, inherited dependency remediation (#160), and coverage non-vacuity are independent shared controls. None is patched or suppressed in this controller-only PR.
Review / merge boundary
Formal review/threads must be freshly re-read before any ready/merge transition. Keep Draft. Do not merge until the unchanged exact source head has accepted literal-source CI/security evidence, complete same-revision dependency/vulnerability evidence with no #196 incompleteness, non-vacuous owned-production coverage under #162/#164 or equivalent accepted repair, every current required dependency/SBOM/SAST/security gate passes, zero valid unresolved review findings remain, and qualifying independent non-author approval exists where governance requires it. No predecessor-head, other-PR, status-only, skipped-required, incomplete-scanner or synthetic-merge-only evidence transfers.