The purpose of this change is to provide the same functionality for
when_needed snapshot for GTID enabled database like for non-GTID.
The non-GTID just relies on missing replication log to detect the
new snapshot needs to be triggered. This does not work in GTID
environment as we need to compare the GTIDs that are available on
the server with those we have already processed - stored in the
offsets.
If there is a set of GTIDs that were not replicated by Debezium
and at the same time have been already purged then we detect the
situation and trigger a new snapshot when required.
We thus
* Take all GTIDs ever processed by the server
* Filter out GTIDs that were processed by Debezium
* Compare them with purged GTID set
* If the interesction is not empty we know we have not replicated
transaction that have already been removed from the server
The SSL properties were being reset, and thus the authentication was failing on the second time.
When debezium connects to the database the first time in order to test the connections, the required parameters are all set. And thus the test passes.
After that the shutdown method is called that clears these properties, and the consecutive connection fails.
DBZ-1228: MySQL connection with client authentication does not work
Create and pass a socket factory that provides they keystore config
DBZ-1228: MySQL connection with client authentication does not work
Prevent forcing of SSL. Use SSL only if the required properties are set.
DBZ-1228: MySQL connection with client authentication does not work
Added better exception messages
This adds a small change to the postgres connector which
works around a problem when large databases take more
than a minute to refresh the schema
This works by creating a simple background thread that ensures we send
statusUpdate messages periodically
I considered if we could refresh the schema before we create the
replication connection but I believe we choose our offset in the log
and then get the schema in order to ensure we don't get out of sync with
any potential schema changes
This also makes some minor refactors to use a Duration instead of an
integer for the statusUpdateInterval