Open
Conversation
The 14 integration tests each start a fresh Oracle Free container (~40s startup each). With shuffled test ordering, earlier tests consumed ~9.9 of the 10-minute budget, leaving only ~6 seconds for TestIntegrationOracleDBCDCSnapshotSchema which was killed immediately. Bump to 30m to provide sufficient headroom for the full test suite. Fixes CON-405
Oracle emits LOB_TRIM (op 11) before LOB_WRITE for certain LOB column types (e.g. out-of-line VARCHAR MAX). Without processing LOB_TRIM, the LOB locator state is never established and subsequent LOB_WRITE events are dropped, causing the column to be silently absent from streaming records. Add OpLobTrim to the query filter and handle it alongside OpSelectLobLocator since both share the same SQL structure. Fixes CON-408
The deferred EndSession call in ReadChanges used the parent context which is already cancelled during shutdown. The go-ora driver's ExecContext races internally when given a cancelled context: StartContext spawns a goroutine that writes the session break flag while the main goroutine reads it. Fixes CON-421
The TRUNCATE TABLE RPCN.CDC_CHECKPOINT_CACHE between the lob_enabled=false and lob_enabled=true subtests fails with ORA-00942 if the first subtest exits early (before stream.Run creates the table lazily via Connect()). Replace MustExec with a plain Exec that ignores the error since there is nothing to clean up if the table was never created. Fixes CON-423
The outer test declares a shared *service.Stream that both subtests assign to. If the lob_enabled=true subtest fails during Build(), the shared variable is nil and the outer StopWithin panics. Add a nil guard before calling StopWithin. Fixes CON-424
Use context.Background() for BeginTx to prevent database/sql from spawning an awaitDone goroutine that calls Rollback on context cancellation. The go-ora v2 driver has an unsynchronized field in Session.BreakConnection/IsBreak that causes a data race when two concurrent Rollback calls occur. Transaction lifetime is already managed manually via defer and explicit Rollback. Fixes CON-388
The Oracle GENERATED ALWAYS AS IDENTITY sequence persists across test runs because CreateTableWithSupplementalLoggingIfNotExists skips table recreation when the table already exists. Assert message structure and VAL value without assuming ID=1. Fixes CON-436
Oracle does not emit SELECT_LOB_LOCATOR events for BASICFILE out-of-line LOBs (DISABLE STORAGE IN ROW). LOB_WRITE fragments arrived without a preceding locator and were silently discarded, causing the assembled CDC record to be missing those columns. When LOB_WRITE arrives without an active locator, search the transaction's buffered DML events for a LOB-init UPDATE with EMPTY_CLOB()/EMPTY_BLOB() placeholders. Use the UPDATE's column name and WHERE-clause PK values to create a synthetic locator so subsequent LOB_WRITE fragments are accumulated and merged into the correct DML event at commit time. Fixes CON-408
BASICFILE LOB columns with DISABLE STORAGE IN ROW emit NULL in the
INSERT SQL_REDO instead of EMPTY_CLOB()/EMPTY_BLOB(), so the LOB
column is absent from the parsed INSERT event's Data map. The
existing inference logic only searched LOB-init UPDATEs for empty
placeholders, so LOB_WRITE fragments for these INSERTs arrived
without an active locator and were dropped — leaving the column
missing from the streamed CDC record.
Extend inferLOBLocator to also walk INSERT events in the transaction
buffer. For INSERTs, iterate the table's known LOB columns and treat
any column that is either absent from Data or present with an empty
[]byte{} placeholder as a candidate. The INSERT's non-LOB columns
are used as the PK so the accumulated LOB data is merged into the
correct row even after earlier LOB columns have been overwritten.
Fixes CON-441
|
Commits Review LGTM |
Contributor
|
Will review these shortly |
squiidz
approved these changes
May 4, 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.
Commits
Jira