Commit Graph

2021 Commits

Author SHA1 Message Date
Debezium Builder
7dcd94d19e [maven-release-plugin] prepare release v2.6.0.Final 2024-04-02 07:38:53 +00:00
mfvitale
213456c5af DBZ-7497 Properties related to configuration based snapshot mode are now optional 2024-03-28 08:59:54 +01:00
mfvitale
ee5f25ccc9 DBZ-7497 Add a configuration based snapshot modes configurable via connector properties 2024-03-28 08:59:54 +01:00
Debezium Builder
4df18d9f43 [maven-release-plugin] prepare for next development iteration 2024-03-25 09:57:05 +00:00
Debezium Builder
9656da1fad [maven-release-plugin] prepare release v2.6.0.CR1 2024-03-25 09:57:04 +00:00
mfvitale
8a6e7e93fa DBZ-7308 Manage when snapshot service is not available for connectors not supporting it 2024-03-25 05:46:46 +01:00
mfvitale
662a0518ac DBZ-7308 Fix MySQL tests 2024-03-25 05:46:46 +01:00
mfvitale
c7a28021a6 DBZ-7308 Remove connector specific SnapshotLockProvider and SnapshotterServiceProvider 2024-03-25 05:46:46 +01:00
mfvitale
60a0b1b5c3 DBZ-7308 tableLockingStatement from SnapshotLock interface now takes just one table in input 2024-03-25 05:46:46 +01:00
mfvitale
ae9009303c DBZ-7308 Move getSnapshottingTask to RelationalSnapshotChangeEventSource 2024-03-25 05:46:46 +01:00
mfvitale
265ba0f6e6 DBZ-7308 Check if configured snapshot mode permits streaming before starting it. 2024-03-25 05:46:46 +01:00
Jiri Pechanec
13b5224579 DBZ-7660 Reduce the severity as it is usually false positive 2024-03-22 08:42:52 +01:00
Chris Cranford
3a66a45632 DBZ-7596 Support reselection of ARRAY schema types 2024-03-18 13:44:14 +01:00
Chris Cranford
0e267d8ef6 DBZ-7596 Support reselection of PostgreSQL hstore values 2024-03-18 13:44:14 +01:00
mfvitale
71256cf1bc DBZ-7616 Honor the message.key.columns order while building query for incremental snapshot 2024-03-14 08:08:51 +01:00
harveyyue
48c67e40fb DBZ-7618 Implement Versioned interfaces in Transformation and Converter plugins 2024-03-14 06:35:42 +01:00
Chris Cranford
0ca302ab6b DBZ-7611 Only parse signal table collection id once 2024-03-12 08:55:14 +01:00
Chris Cranford
062155d573 DBZ-7611 Exclude signal table from re-selection 2024-03-12 08:55:14 +01:00
Chris Cranford
118fa1d293 DBZ-7615 Fix struct resolution for micro/nano second envelope time 2024-03-11 06:02:43 +01:00
Debezium Builder
2fb8fc3004 [maven-release-plugin] prepare for next development iteration 2024-03-06 07:47:33 +00:00
Debezium Builder
cd46b2b998 [maven-release-plugin] prepare release v2.6.0.Beta1 2024-03-06 07:47:33 +00:00
mfvitale
2d06d847c3 DBZ-7303 Add tests for Always, When Needed and Custom snapshot mode for SQLServer connector 2024-03-04 11:17:06 +01:00
mfvitale
9ad4273791 DBZ-7303 Align snapshot modes for SqlServer connector 2024-03-04 11:17:06 +01:00
Chris Cranford
648db88868 DBZ-3401 Add new hybrid mining strategy 2024-03-03 00:46:23 -05:00
mfvitale
c942bd26d1 DBZ-7461 Revisit snapshot modes behavior when snapshot already completed 2024-03-01 14:12:31 +01:00
mfvitale
ce17bdcce6 DBZ-7461 Add generic properties for redo log archive and retention 2024-03-01 14:12:31 +01:00
mfvitale
4ade54351f DBZ-7461 Rename SCHEMA_ONLY_RECOVERY to RECOVERY and SCHEMA_ONLY to NO_DATA 2024-03-01 14:12:31 +01:00
mfvitale
211675a355 DBZ-7461 Rename shouldSnapshot to shouldSnapshotData 2024-03-01 14:12:31 +01:00
mfvitale
562c999da4 DBZ-7461 Move out-of-the-box snapshotters to core 2024-03-01 14:12:31 +01:00
mfvitale
371905f135 DBZ-7461 Move snapshot mode validation logic to BaseSourceTask 2024-03-01 14:12:31 +01:00
mfvitale
b1a907757d DBZ-7461 Support WhenNeededSnapshotter for Oracle 2024-03-01 14:12:31 +01:00
mfvitale
1f52b81b6d DBZ-7461 Support AlwaysSnapshotter for MySQL 2024-03-01 14:12:31 +01:00
James Johnston
3d93516b53 DBZ-5071 Create new RowValueConstructorChunkQueryBuilder
The default query builder has maximum SQL compatibility, but the query
plans it makes are not always optimal, especially in the case of
multi-column keys.  For example, PostgreSQL is unable to to effectively
create a query plan that does index scanning when faced with such a
query.

Some databases support the concept of row value constructors.  In
these cases, we can use these as an alternative to make a much more
simple and easier to understand query.  Not only is it easier for
humans to understand, but most importantly, the query planner also gets
the hint and finally uses the relevant multi-column index!  This commit
starts out with support for PostgreSQL and MySQL.
2024-02-29 13:36:26 +01:00
James Johnston
f632fa081e DBZ-5071 Correctly handle NULL values in incremental snapshots
It turns out that the existing code for chunking a table when taking
an incremental snapshot was buggy and did not correctly handle NULL
values when building the chunk query.  An example of such a situation
would be when the user has specified "message.key.columns" to reference
a column that is part of a PostgreSQL UNIQUE INDEX that was created with
the NULLS NOT DISTINCT option.

This commit updates the new AbstractChunkQueryBuilder so that it checks
whether a key column is optional.  If it is, then additional will
appropriately consider NULL values when generating a chunk query using
"IS [NOT] NULL" clauses.

One complication is that different database engines have different
sorting behavior of ORDER BY.  It is apparently not well-defined by the
SQL standard.  Some databases consider NULL values to be higher than any
non-NULL values, and others consider them to be lower.

To handle this situation, a new nullsSortLast() function is added to the
JdbcConnection class.  By default, it returns an empty value, indicating
that the behavior of the database engine is unknown.  When an optional
field is encountered by AbstractChunkQueryBuilder in this situation, we
throw an error because we don't actually know how to correctly chunk the
query: there's no safe assumption that can be made here.

Derived JdbcConnection classes can then override the nullsSortLast
function, and return a value indicating the actual behavior of that
database engine.  When this is done, the AbstractChunkQueryBuilder then
knows how to correctly build a chunk query that can handle NULL values.

To help test this, new tests have been added to
AbstractIncrementalSnapshotTest.  First, the existing insertsWithoutPks
test has been moved and deduplicated from MySQL and PostgreSQL so that
the test case can be reused on other engines.  Second, a new
insertsWithoutPksAndNull test is run, which inserts data with NULL
values in the message key columns.  To demonstrate that chunk queries
are being correctly generated for practically every case, the
INCREMENTAL_SNAPSHOT_CHUNK_SIZE is set to 1 so that NULL values are not
returned in the middle of a chunk, which can cause us to skip testing
the code we need to test.
2024-02-29 13:36:26 +01:00
James Johnston
9352957244 DBZ-5071 Refactor buildChunkQuery into ChunkQueryBuilder
This commit prepares the way for further dialect-specific improvements
to incremental snapshot chunk queries by extracting the buildChunkQuery
and related functions behind a new ChunkQueryBuilder interface.  The
implementation is mostly in an AbstractChunkQueryBuilder, and a
DefaultChunkQueryBuilder inherits from that.

The chunk builders are instantiated by JdbcConnection via a new
chunkQueryBuilder function.  The base class uses the default, but
derived JdbcConnection classes could use a dialect-specific chunk query
builder.
2024-02-29 13:36:26 +01:00
Chris Cranford
66e23613ce DBZ-7072 Retry Oracle Flashback-based snapshot queries 2024-02-29 13:33:10 +01:00
ani-sha
cb81f75481 DBZ-6858 Add suggestions from code review 2024-02-29 11:55:51 +01:00
ani-sha
7feeed855f DBZ-6858 Simplify metadata logic 2024-02-29 11:55:51 +01:00
ani-sha
3bb5cb4c8e DBZ-6858 Use SignalMetadata class to provide open/close timestamps 2024-02-29 11:55:51 +01:00
ani-sha
f8cd1a6353 DBZ-6858 Timestamp metadata for watermarking signals 2024-02-29 11:55:51 +01:00
Chris Cranford
f7bacc64f1 DBZ-7534 Guarantee per-thread parallel snapshot dispatch order 2024-02-23 13:56:26 -05:00
rkerner
1e69e40ec2 DBZ-7416 Fix duplicate SMTs sometimes returned by Kafka Connect. Moved deduplication from Map to LinkedHashSet.
+ minor fixes added for cleanup and centralization of common code

closes https://issues.redhat.com/browse/DBZ-7416
2024-02-22 13:34:08 -05:00
Jiri Pechanec
68b6591142 DBZ-7416 Fix duplicate SMTs sometimes returned by Kafka Connect. Moved deduplication from Map to LinkedHashSet.
closes https://issues.redhat.com/browse/DBZ-7416
2024-02-22 13:34:08 -05:00
mfvitale
08e46815e4 DBZ-7508 Exit from readChunk after createDataEventsForTable if snapshot is not running anymore 2024-02-22 12:13:37 -05:00
Chris Cranford
4c15d2bd3f DBZ-6236 Fix test failures 2024-02-22 00:14:26 -05:00
Chris Cranford
0516c0cdbb DBZ-6236 Reset ErrorHandler retry counter on successful poll 2024-02-22 00:14:26 -05:00
mfvitale
7ed5649e07 DBZ-7302 Implement Snapshotter for Oracle 2024-02-20 14:45:59 +01:00
mfvitale
7a0ee72b31 DBZ-7302 Improve Snapshotter and SnapshotQuery Java docs 2024-02-20 14:45:59 +01:00
mfvitale
9fe60a698d DBZ-7302 Move snapshot.locking.mode.custom.name, snapshot.query.mode and snapshot.query.mode.custom.name to CommonConnectorConfig 2024-02-20 14:45:59 +01:00
harveyyue
82f5e6ea77 DBZ-7480 Allow special characters in signal table name 2024-02-19 11:43:20 +01:00
Vojtech Juranek
ae53895cd8 DBZ-7495 Define constant for executor shutdown timeout
Unify executor shutdown timeout for executor services in the code base.
2024-02-19 08:45:33 +01:00
jchipmunk
79763211cb DBZ-7479 Refactor code to support re-selection without flashback
Because OracleConnection uses flashback query (AS OF SCN) to re-select row, it is potentially possible to get "ORA-01555 Snapshot too old" error, which can be solved by performing reselection without flashback to get at least its latest row state.
2024-02-17 11:21:45 -05:00
jchipmunk
f50aa7a987 DBZ-7479 PreparedStatement leak in Oracle ReselectColumnsProcessor
Each time, Oracle connector creates a new instance of PreparedStatement because value of commit SCN is added directly to SQL query to reselect column values.
2024-02-17 11:21:45 -05:00
Chris Cranford
6862d04987 DBZ-7107 Add micro/nano second timestamps to source info block 2024-02-16 12:52:20 +01:00
Chris Cranford
f9971cf9cc DBZ-7107 Bump envelope schema from version 1 to 2 2024-02-16 12:52:20 +01:00
Chris Cranford
659fc8df4e DBZ-7107 Fix SerdeTest failure 2024-02-16 12:52:20 +01:00
Chris Cranford
cac38fc484 DBZ-7107 Introduce micro/nano second based envelope timestamps 2024-02-16 12:52:20 +01:00
Chris Cranford
09e1bf1df0 DBZ-7488 Skip re-selection on r (read) events 2024-02-16 12:33:33 +01:00
Debezium Builder
10e327602c [maven-release-plugin] prepare for next development iteration 2024-02-13 09:20:04 +00:00
Debezium Builder
0c5b05738c [maven-release-plugin] prepare release v2.6.0.Alpha2 2024-02-13 09:20:04 +00:00
mfvitale
cb5a4d7a1a DBZ-7481 SnapshotterServiceProvider will check if snapshot mode class is related to the running connector. 2024-02-13 08:42:34 +01:00
Sergey Ivanov
d96c30ef3f DBZ-7437: ReselectColumnsPostProcessor filter not use exclude predicate. 2024-02-06 12:27:55 +01:00
mfvitale
a8a07e35f1 DBZ-7301 Implement SnapshotLock for MySQL connector 2024-02-06 07:12:42 +01:00
mfvitale
1cdf2836dd DBZ-7301 Implement Snapshotter for MySQL connector 2024-02-06 07:12:42 +01:00
mfvitale
c9458f4f58 DBZ-7300 Snapshotter, SnapshotLock and SnapshotQuery are now services registered in the ServiceRegistry 2024-02-06 07:12:42 +01:00
mfvitale
d0e4ad7e14 DBZ-7441 Postpone SignalProcessor start after streaming is initialized
This will avoid that channels that not depends on the event streaming like the 'source' channel, will start processing signals before the IncrementalSnapshotChangeEventSource is initialized.
2024-02-05 14:06:40 +01:00
mfvitale
881442de3d DBZ-7300 Fix duplicate field assignment for CONNECTOR_SNAPSHOT group 2024-02-02 13:41:45 +01:00
mfvitale
3b92786a41 DBZ-7300 Snapshotter, SnapshotLock and SnapshotQuery are now services registered in the ServiceRegistry 2024-02-02 13:41:45 +01:00
mfvitale
fa338b61c4 DBZ-7436 Add empty statistics for SingleDuration to avoid NPE 2024-02-02 12:36:24 +01:00
Chris Cranford
2bfa92e6af DBZ-7429 Resolve primary key values from after struct 2024-01-31 12:05:07 +01:00
Fiore Mario Vitale
1c93a92b84 DBZ-7421 Change access modifier for SnapshotDataCollection to private
Co-authored-by: Jiri Pechanec <jpechane@redhat.com>
2024-01-31 11:05:04 +01:00
mfvitale
f9034f2108 DBZ-7421 Encapsulate data collection queue and its json version into a dedicated class 2024-01-31 11:05:04 +01:00
mfvitale
81298865a5 DBZ-7421 Improve incremental snapshot performance with increasing number of collections to snapshot 2024-01-31 11:05:04 +01:00
nicholas-fwang
d710ee6b9f DBZ-7143 Rollback ValueConverter and handle when parse default value 2024-01-29 13:48:19 +01:00
nicholas-fwang
5aae5f51f4 DBZ-7143 Move event converting failure handler to ValueConverter interface. 2024-01-29 13:48:19 +01:00
nicholas-fwang
2bdeec099a DBZ-7143 Add document for event.converting.failure.handling.mode 2024-01-29 13:48:19 +01:00
nicholas-fwang
7d99605886 DBZ-7143 Add case when EventConvertingFailureHandlingMode is null 2024-01-29 13:48:19 +01:00
nicholas-fwang
4f2bbb023a DBZ-7143 fix checkstyle format 2024-01-29 13:48:19 +01:00
nicholas-fwang
3a5f35594c DBZ-7143 Add description of event.converting.failure.handling.mode 2024-01-29 13:48:19 +01:00
nicholas-fwang
57a46943af DBZ-7143 throw exception in JdbcValueConverters 2024-01-29 13:48:19 +01:00
nicholas-fwang
eeea0f1e70 DBZ-7143 Add event.converting.failure.handling.mode option 2024-01-29 13:48:19 +01:00
Animesh Kumar
2f8114029e DBZ-7380 Offset transaction id only when it's non null 2024-01-24 15:32:34 +01:00
ani-sha
5be134eb42 DBZ-7022 Use prefix names from Envelope class 2024-01-22 10:49:38 +01:00
ani-sha
78a54a3ff7 DBZ-7022 Adjust prefix names, simplify null check 2024-01-22 10:49:38 +01:00
ani-sha
17d3df62c0 DBZ-7022 Allow conversion of source block timestamp fields 2024-01-22 10:49:38 +01:00
Debezium Builder
65d63ed42d [maven-release-plugin] prepare for next development iteration 2024-01-21 10:12:45 +00:00
Debezium Builder
485fa82a8f [maven-release-plugin] prepare release v2.6.0.Alpha1 2024-01-21 10:12:44 +00:00
Chris Cranford
c1b7e68319 DBZ-7358 Use relational table primary key by default
This fix uses the relational table primary key by default; however, as a
user can define `message.key.columns` to even override the primary key
configuration or to handle keyless tables, the user can override the
`reselect.use.event.key` option with `true` so use the event key fields
instead for the re-select so that keyless tables can also participate
with the column reselection process.
2024-01-18 05:53:37 +01:00
Jiri Pechanec
4332240d6c DBZ-7340 Upgrade Groovy and GraalJS to the latest 2023 version 2024-01-17 12:50:21 +01:00
Peter Hamer
a4e660f979 DBZ-7347 use identifiers for initial snapshot notifications 2024-01-17 09:42:27 +01:00
“vsantonastaso”
c045fab3dd DBZ-7249 Add Notification ID in log channel 2024-01-12 06:34:48 +01:00
Roman Kudryashov
0c80f1f38d DBZ-7284 Provide config option to customize CloudEvents.data schema name 2024-01-11 13:20:35 +01:00
Jakub Cechacek
5dbe073d3b DBZ-7260 Offset value conversion extracted into common util class 2024-01-11 09:58:24 +01:00
mfvitale
20fbe73bc8 DBZ-7311 Use a more meaningful name for identify an on demand blocking snapshot 2024-01-08 12:52:03 +01:00
mfvitale
47cbdee526 DBZ-7311 Permits to execute a blocking snapshot even if snapshot.mode=never 2024-01-08 12:52:03 +01:00
Chris Cranford
84fe328a91 DBZ-7315 Introduce trimmed variant helpers 2024-01-05 10:52:32 +01:00
Mickael Maison
70e7186868 DBZ-7298 Add service loader manifests for all Connect plugins
Add manifests for source/sink connectors, converters and transformations.
2024-01-04 09:22:29 +01:00
mfvitale
b770ed4a31 DBZ-7256 Enhance logs for incremental snapshot 2024-01-03 09:19:05 +01:00
Debezium Builder
3853d20f44 [maven-release-plugin] prepare for next development iteration 2023-12-21 06:52:01 +00:00
Debezium Builder
5d35e9caaa [maven-release-plugin] prepare release v2.5.0.Final 2023-12-21 06:52:01 +00:00