DBZ-5136 reintroduce the CommonOffsetContext class and refactor common functionality into it
This commit is contained in:
parent
2d72dae649
commit
c64b8af31a
@ -12,12 +12,11 @@
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
import org.bson.BsonDocument;
|
import org.bson.BsonDocument;
|
||||||
|
|
||||||
import io.debezium.connector.SnapshotRecord;
|
import io.debezium.connector.SnapshotRecord;
|
||||||
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
|
||||||
import io.debezium.pipeline.txmetadata.TransactionContext;
|
import io.debezium.pipeline.txmetadata.TransactionContext;
|
||||||
import io.debezium.schema.DataCollectionId;
|
import io.debezium.schema.DataCollectionId;
|
||||||
|
|
||||||
@ -26,7 +25,7 @@
|
|||||||
*
|
*
|
||||||
* @author Chris Cranford
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
public class MongoDbOffsetContext implements OffsetContext {
|
public class MongoDbOffsetContext extends CommonOffsetContext {
|
||||||
|
|
||||||
private final SourceInfo sourceInfo;
|
private final SourceInfo sourceInfo;
|
||||||
private final TransactionContext transactionContext;
|
private final TransactionContext transactionContext;
|
||||||
@ -55,6 +54,11 @@ void stopReplicaSetSnapshot(String replicaSetName) {
|
|||||||
sourceInfo.stopInitialSync(replicaSetName);
|
sourceInfo.stopInitialSync(replicaSetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return sourceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
// Any common framework API that needs to call this function should be provided with a ReplicaSetOffsetContext
|
// Any common framework API that needs to call this function should be provided with a ReplicaSetOffsetContext
|
||||||
@ -66,11 +70,6 @@ public Schema getSourceInfoSchema() {
|
|||||||
return sourceInfo.schema();
|
return sourceInfo.schema();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return sourceInfo.struct();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSnapshotRunning() {
|
public boolean isSnapshotRunning() {
|
||||||
return sourceInfo.isSnapshot() && sourceInfo.isSnapshotRunning();
|
return sourceInfo.isSnapshot() && sourceInfo.isSnapshotRunning();
|
||||||
@ -85,26 +84,11 @@ public void preSnapshotStart() {
|
|||||||
public void preSnapshotCompletion() {
|
public void preSnapshotCompletion() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
sourceInfo.setSnapshot(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TransactionContext getTransactionContext() {
|
public TransactionContext getTransactionContext() {
|
||||||
return transactionContext;
|
return transactionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.INCREMENTAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return incrementalSnapshotContext;
|
return incrementalSnapshotContext;
|
||||||
|
@ -9,14 +9,13 @@
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
import org.bson.BsonDocument;
|
import org.bson.BsonDocument;
|
||||||
import org.bson.BsonTimestamp;
|
import org.bson.BsonTimestamp;
|
||||||
|
|
||||||
import com.mongodb.client.model.changestream.ChangeStreamDocument;
|
import com.mongodb.client.model.changestream.ChangeStreamDocument;
|
||||||
|
|
||||||
import io.debezium.annotation.ThreadSafe;
|
import io.debezium.annotation.ThreadSafe;
|
||||||
import io.debezium.connector.SnapshotRecord;
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
import io.debezium.pipeline.spi.OffsetContext;
|
||||||
import io.debezium.pipeline.txmetadata.TransactionContext;
|
import io.debezium.pipeline.txmetadata.TransactionContext;
|
||||||
@ -32,7 +31,7 @@
|
|||||||
* @author Chris Cranford
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
public class ReplicaSetOffsetContext implements OffsetContext {
|
public class ReplicaSetOffsetContext extends CommonOffsetContext {
|
||||||
|
|
||||||
private final MongoDbOffsetContext offsetContext;
|
private final MongoDbOffsetContext offsetContext;
|
||||||
private final String replicaSetName;
|
private final String replicaSetName;
|
||||||
@ -47,6 +46,11 @@ public ReplicaSetOffsetContext(MongoDbOffsetContext offsetContext, ReplicaSet re
|
|||||||
this.incrementalSnapshotContext = incrementalSnapshotContext;
|
this.incrementalSnapshotContext = incrementalSnapshotContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return offsetContext.getSourceInfoObject();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ -60,21 +64,11 @@ public Schema getSourceInfoSchema() {
|
|||||||
return offsetContext.getSourceInfoSchema();
|
return offsetContext.getSourceInfoSchema();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return offsetContext.getSourceInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSnapshotRunning() {
|
public boolean isSnapshotRunning() {
|
||||||
return offsetContext.isSnapshotRunning();
|
return offsetContext.isSnapshotRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
offsetContext.markSnapshotRecord(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void preSnapshotStart() {
|
public void preSnapshotStart() {
|
||||||
offsetContext.preSnapshotStart();
|
offsetContext.preSnapshotStart();
|
||||||
@ -85,11 +79,6 @@ public void preSnapshotCompletion() {
|
|||||||
offsetContext.preSnapshotCompletion();
|
offsetContext.preSnapshotCompletion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
offsetContext.postSnapshotCompletion();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void event(DataCollectionId collectionId, Instant timestamp) {
|
public void event(DataCollectionId collectionId, Instant timestamp) {
|
||||||
// Not used by the ReplicaSetOffsetContext, see readEvent and oplogEvent
|
// Not used by the ReplicaSetOffsetContext, see readEvent and oplogEvent
|
||||||
@ -130,11 +119,6 @@ public String lastResumeToken() {
|
|||||||
return sourceInfo.lastResumeToken(replicaSetName);
|
return sourceInfo.lastResumeToken(replicaSetName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
offsetContext.incrementalSnapshotEvents();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return offsetContext.getIncrementalSnapshotContext();
|
return offsetContext.getIncrementalSnapshotContext();
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
import org.apache.kafka.connect.errors.ConnectException;
|
import org.apache.kafka.connect.errors.ConnectException;
|
||||||
|
|
||||||
import io.debezium.connector.SnapshotRecord;
|
import io.debezium.connector.SnapshotRecord;
|
||||||
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
import io.debezium.pipeline.spi.OffsetContext;
|
||||||
@ -22,7 +22,7 @@
|
|||||||
import io.debezium.relational.TableId;
|
import io.debezium.relational.TableId;
|
||||||
import io.debezium.schema.DataCollectionId;
|
import io.debezium.schema.DataCollectionId;
|
||||||
|
|
||||||
public class MySqlOffsetContext implements OffsetContext {
|
public class MySqlOffsetContext extends CommonOffsetContext {
|
||||||
|
|
||||||
private static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
private static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
||||||
public static final String EVENTS_TO_SKIP_OFFSET_KEY = "event";
|
public static final String EVENTS_TO_SKIP_OFFSET_KEY = "event";
|
||||||
@ -67,6 +67,11 @@ public MySqlOffsetContext(MySqlConnectorConfig connectorConfig, boolean snapshot
|
|||||||
sourceInfo);
|
sourceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return sourceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
final Map<String, Object> offset = offsetUsingPosition(restartRowsToSkip);
|
final Map<String, Object> offset = offsetUsingPosition(restartRowsToSkip);
|
||||||
@ -109,11 +114,6 @@ public Schema getSourceInfoSchema() {
|
|||||||
return sourceInfoSchema;
|
return sourceInfoSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return sourceInfo.struct();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSnapshotRunning() {
|
public boolean isSnapshotRunning() {
|
||||||
return sourceInfo.isSnapshot() && !snapshotCompleted;
|
return sourceInfo.isSnapshot() && !snapshotCompleted;
|
||||||
@ -134,11 +134,6 @@ public void preSnapshotCompletion() {
|
|||||||
snapshotCompleted = true;
|
snapshotCompleted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setTransactionId() {
|
private void setTransactionId() {
|
||||||
// use GTID if it is available
|
// use GTID if it is available
|
||||||
if (sourceInfo.getCurrentGtid() != null) {
|
if (sourceInfo.getCurrentGtid() != null) {
|
||||||
@ -221,11 +216,6 @@ private long longOffsetValue(Map<String, ?> values, String key) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
sourceInfo.setSnapshot(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void event(DataCollectionId tableId, Instant timestamp) {
|
public void event(DataCollectionId tableId, Instant timestamp) {
|
||||||
sourceInfo.setSourceTime(timestamp);
|
sourceInfo.setSourceTime(timestamp);
|
||||||
@ -249,11 +239,6 @@ public TransactionContext getTransactionContext() {
|
|||||||
return transactionContext;
|
return transactionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.INCREMENTAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return incrementalSnapshotContext;
|
return incrementalSnapshotContext;
|
||||||
|
@ -13,16 +13,15 @@
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
|
|
||||||
import io.debezium.connector.SnapshotRecord;
|
import io.debezium.connector.SnapshotRecord;
|
||||||
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
|
||||||
import io.debezium.pipeline.txmetadata.TransactionContext;
|
import io.debezium.pipeline.txmetadata.TransactionContext;
|
||||||
import io.debezium.relational.TableId;
|
import io.debezium.relational.TableId;
|
||||||
import io.debezium.schema.DataCollectionId;
|
import io.debezium.schema.DataCollectionId;
|
||||||
|
|
||||||
public class OracleOffsetContext implements OffsetContext {
|
public class OracleOffsetContext extends CommonOffsetContext {
|
||||||
|
|
||||||
public static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
public static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
||||||
public static final String SNAPSHOT_PENDING_TRANSACTIONS_KEY = "snapshot_pending_tx";
|
public static final String SNAPSHOT_PENDING_TRANSACTIONS_KEY = "snapshot_pending_tx";
|
||||||
@ -156,6 +155,11 @@ public static Builder create() {
|
|||||||
return new Builder();
|
return new Builder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return sourceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
if (sourceInfo.isSnapshot()) {
|
if (sourceInfo.isSnapshot()) {
|
||||||
@ -204,11 +208,6 @@ public Schema getSourceInfoSchema() {
|
|||||||
return sourceInfoSchema;
|
return sourceInfoSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return sourceInfo.struct();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setScn(Scn scn) {
|
public void setScn(Scn scn) {
|
||||||
sourceInfo.setScn(scn);
|
sourceInfo.setScn(scn);
|
||||||
}
|
}
|
||||||
@ -273,11 +272,6 @@ public void preSnapshotCompletion() {
|
|||||||
snapshotCompleted = true;
|
snapshotCompleted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder("OracleOffsetContext [scn=").append(getScn());
|
StringBuilder sb = new StringBuilder("OracleOffsetContext [scn=").append(getScn());
|
||||||
@ -294,11 +288,6 @@ public String toString() {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
sourceInfo.setSnapshot(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void event(DataCollectionId tableId, Instant timestamp) {
|
public void event(DataCollectionId tableId, Instant timestamp) {
|
||||||
sourceInfo.tableEvent((TableId) tableId);
|
sourceInfo.tableEvent((TableId) tableId);
|
||||||
@ -320,11 +309,6 @@ public TransactionContext getTransactionContext() {
|
|||||||
return transactionContext;
|
return transactionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.INCREMENTAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return incrementalSnapshotContext;
|
return incrementalSnapshotContext;
|
||||||
|
@ -11,7 +11,6 @@
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
import org.apache.kafka.connect.errors.ConnectException;
|
import org.apache.kafka.connect.errors.ConnectException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -20,6 +19,7 @@
|
|||||||
import io.debezium.connector.postgresql.connection.Lsn;
|
import io.debezium.connector.postgresql.connection.Lsn;
|
||||||
import io.debezium.connector.postgresql.connection.PostgresConnection;
|
import io.debezium.connector.postgresql.connection.PostgresConnection;
|
||||||
import io.debezium.connector.postgresql.spi.OffsetState;
|
import io.debezium.connector.postgresql.spi.OffsetState;
|
||||||
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
import io.debezium.pipeline.spi.OffsetContext;
|
||||||
@ -29,7 +29,7 @@
|
|||||||
import io.debezium.time.Conversions;
|
import io.debezium.time.Conversions;
|
||||||
import io.debezium.util.Clock;
|
import io.debezium.util.Clock;
|
||||||
|
|
||||||
public class PostgresOffsetContext implements OffsetContext {
|
public class PostgresOffsetContext extends CommonOffsetContext {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PostgresSnapshotChangeEventSource.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(PostgresSnapshotChangeEventSource.class);
|
||||||
|
|
||||||
public static final String LAST_COMPLETELY_PROCESSED_LSN_KEY = "lsn_proc";
|
public static final String LAST_COMPLETELY_PROCESSED_LSN_KEY = "lsn_proc";
|
||||||
@ -67,6 +67,11 @@ private PostgresOffsetContext(PostgresConnectorConfig connectorConfig, Lsn lsn,
|
|||||||
this.incrementalSnapshotContext = incrementalSnapshotContext;
|
this.incrementalSnapshotContext = incrementalSnapshotContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return sourceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
Map<String, Object> result = new HashMap<>();
|
Map<String, Object> result = new HashMap<>();
|
||||||
@ -100,11 +105,6 @@ public Schema getSourceInfoSchema() {
|
|||||||
return sourceInfoSchema;
|
return sourceInfoSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return sourceInfo.struct();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSnapshotRunning() {
|
public boolean isSnapshotRunning() {
|
||||||
return sourceInfo.isSnapshot();
|
return sourceInfo.isSnapshot();
|
||||||
@ -121,11 +121,6 @@ public void preSnapshotCompletion() {
|
|||||||
lastSnapshotRecord = true;
|
lastSnapshotRecord = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateWalPosition(Lsn lsn, Lsn lastCompletelyProcessedLsn, Instant commitTime, Long txId, Long xmin, TableId tableId) {
|
public void updateWalPosition(Lsn lsn, Lsn lastCompletelyProcessedLsn, Instant commitTime, Long txId, Long xmin, TableId tableId) {
|
||||||
this.lastCompletelyProcessedLsn = lastCompletelyProcessedLsn;
|
this.lastCompletelyProcessedLsn = lastCompletelyProcessedLsn;
|
||||||
sourceInfo.update(lsn, commitTime, txId, xmin, tableId);
|
sourceInfo.update(lsn, commitTime, txId, xmin, tableId);
|
||||||
@ -258,11 +253,6 @@ public OffsetState asOffsetState() {
|
|||||||
sourceInfo.isSnapshot());
|
sourceInfo.isSnapshot());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
sourceInfo.setSnapshot(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void event(DataCollectionId tableId, Instant instant) {
|
public void event(DataCollectionId tableId, Instant instant) {
|
||||||
sourceInfo.update(instant, (TableId) tableId);
|
sourceInfo.update(instant, (TableId) tableId);
|
||||||
@ -273,11 +263,6 @@ public TransactionContext getTransactionContext() {
|
|||||||
return transactionContext;
|
return transactionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.INCREMENTAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return incrementalSnapshotContext;
|
return incrementalSnapshotContext;
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.kafka.connect.data.Schema;
|
import org.apache.kafka.connect.data.Schema;
|
||||||
import org.apache.kafka.connect.data.Struct;
|
|
||||||
|
|
||||||
import io.debezium.connector.SnapshotRecord;
|
import io.debezium.connector.SnapshotRecord;
|
||||||
|
import io.debezium.pipeline.CommonOffsetContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.IncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
import io.debezium.pipeline.source.snapshot.incremental.SignalBasedIncrementalSnapshotContext;
|
||||||
import io.debezium.pipeline.spi.OffsetContext;
|
import io.debezium.pipeline.spi.OffsetContext;
|
||||||
@ -20,7 +20,7 @@
|
|||||||
import io.debezium.schema.DataCollectionId;
|
import io.debezium.schema.DataCollectionId;
|
||||||
import io.debezium.util.Collect;
|
import io.debezium.util.Collect;
|
||||||
|
|
||||||
public class SqlServerOffsetContext implements OffsetContext {
|
public class SqlServerOffsetContext extends CommonOffsetContext {
|
||||||
|
|
||||||
private static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
private static final String SNAPSHOT_COMPLETED_KEY = "snapshot_completed";
|
||||||
|
|
||||||
@ -60,6 +60,11 @@ public SqlServerOffsetContext(SqlServerConnectorConfig connectorConfig, TxLogPos
|
|||||||
this(connectorConfig, position, snapshot, snapshotCompleted, 1, new TransactionContext(), new SignalBasedIncrementalSnapshotContext<>());
|
this(connectorConfig, position, snapshot, snapshotCompleted, 1, new TransactionContext(), new SignalBasedIncrementalSnapshotContext<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SourceInfo getSourceInfoObject() {
|
||||||
|
return sourceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ?> getOffset() {
|
public Map<String, ?> getOffset() {
|
||||||
if (sourceInfo.isSnapshot()) {
|
if (sourceInfo.isSnapshot()) {
|
||||||
@ -82,11 +87,6 @@ public Schema getSourceInfoSchema() {
|
|||||||
return sourceInfoSchema;
|
return sourceInfoSchema;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Struct getSourceInfo() {
|
|
||||||
return sourceInfo.struct();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TxLogPosition getChangePosition() {
|
public TxLogPosition getChangePosition() {
|
||||||
return TxLogPosition.valueOf(sourceInfo.getCommitLsn(), sourceInfo.getChangeLsn());
|
return TxLogPosition.valueOf(sourceInfo.getCommitLsn(), sourceInfo.getChangeLsn());
|
||||||
}
|
}
|
||||||
@ -127,11 +127,6 @@ public void preSnapshotCompletion() {
|
|||||||
snapshotCompleted = true;
|
snapshotCompleted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void postSnapshotCompletion() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class Loader implements OffsetContext.Loader<SqlServerOffsetContext> {
|
public static class Loader implements OffsetContext.Loader<SqlServerOffsetContext> {
|
||||||
|
|
||||||
private final SqlServerConnectorConfig connectorConfig;
|
private final SqlServerConnectorConfig connectorConfig;
|
||||||
@ -168,11 +163,6 @@ public String toString() {
|
|||||||
"]";
|
"]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void markSnapshotRecord(SnapshotRecord record) {
|
|
||||||
sourceInfo.setSnapshot(record);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void event(DataCollectionId tableId, Instant timestamp) {
|
public void event(DataCollectionId tableId, Instant timestamp) {
|
||||||
sourceInfo.setSourceTime(timestamp);
|
sourceInfo.setSourceTime(timestamp);
|
||||||
@ -184,11 +174,6 @@ public TransactionContext getTransactionContext() {
|
|||||||
return transactionContext;
|
return transactionContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void incrementalSnapshotEvents() {
|
|
||||||
sourceInfo.setSnapshot(SnapshotRecord.INCREMENTAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
public IncrementalSnapshotContext<?> getIncrementalSnapshotContext() {
|
||||||
return incrementalSnapshotContext;
|
return incrementalSnapshotContext;
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright Debezium Authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*/
|
||||||
|
package io.debezium.pipeline;
|
||||||
|
|
||||||
|
import org.apache.kafka.connect.data.Struct;
|
||||||
|
|
||||||
|
import io.debezium.connector.SnapshotRecord;
|
||||||
|
import io.debezium.connector.common.BaseSourceInfo;
|
||||||
|
import io.debezium.pipeline.spi.OffsetContext;
|
||||||
|
|
||||||
|
public abstract class CommonOffsetContext implements OffsetContext {
|
||||||
|
|
||||||
|
public abstract BaseSourceInfo getSourceInfoObject();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Struct getSourceInfo() {
|
||||||
|
return getSourceInfoObject().struct();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markSnapshotRecord(SnapshotRecord record) {
|
||||||
|
getSourceInfoObject().setSnapshot(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postSnapshotCompletion() {
|
||||||
|
getSourceInfoObject().setSnapshot(SnapshotRecord.FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void incrementalSnapshotEvents() {
|
||||||
|
getSourceInfoObject().setSnapshot(SnapshotRecord.INCREMENTAL);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user