DBZ-5042 Add abstract partition with DB name

DB names is used by logging facilities. As the DB name is required only
for relational DBs, also this abstract class is provided only for
relational DB connectors.

Use this abstract class for SQL server connector, where DB name logging
is already implemented.
This commit is contained in:
Vojtech Juranek 2022-05-13 14:17:58 +02:00 committed by Chris Cranford
parent c067e20fbe
commit 5550057034
2 changed files with 34 additions and 9 deletions

View File

@ -18,21 +18,20 @@
import io.debezium.config.Configuration; import io.debezium.config.Configuration;
import io.debezium.pipeline.spi.Partition; import io.debezium.pipeline.spi.Partition;
import io.debezium.relational.AbstractPartition;
import io.debezium.util.Collect; import io.debezium.util.Collect;
import io.debezium.util.LoggingContext;
public class SqlServerPartition implements Partition { public class SqlServerPartition extends AbstractPartition implements Partition {
private static final String SERVER_PARTITION_KEY = "server"; private static final String SERVER_PARTITION_KEY = "server";
private static final String DATABASE_PARTITION_KEY = "database"; private static final String DATABASE_PARTITION_KEY = "database";
private final String serverName; private final String serverName;
private final String databaseName;
private final Map<String, String> sourcePartition; private final Map<String, String> sourcePartition;
private final int hashCode; private final int hashCode;
public SqlServerPartition(String serverName, String databaseName, boolean multiPartitionMode) { public SqlServerPartition(String serverName, String databaseName, boolean multiPartitionMode) {
super(databaseName);
this.serverName = serverName; this.serverName = serverName;
this.databaseName = databaseName;
this.sourcePartition = Collect.hashMapOf(SERVER_PARTITION_KEY, serverName); this.sourcePartition = Collect.hashMapOf(SERVER_PARTITION_KEY, serverName);
if (multiPartitionMode) { if (multiPartitionMode) {
@ -47,11 +46,6 @@ public Map<String, String> getSourcePartition() {
return sourcePartition; return sourcePartition;
} }
@Override
public Map<String, String> getLoggingContext() {
return Collections.singletonMap(LoggingContext.DATABASE_NAME, databaseName);
}
/** /**
* Returns the SQL Server database name corresponding to the partition. * Returns the SQL Server database name corresponding to the partition.
*/ */

View File

@ -0,0 +1,31 @@
/*
* 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.relational;
import java.util.Collections;
import java.util.Map;
import io.debezium.pipeline.spi.Partition;
import io.debezium.util.LoggingContext;
/**
* An abstract implementation of {@link io.debezium.pipeline.spi.Partition} which provides default facilities for logging.
*
* @author vjuranek
*/
public abstract class AbstractPartition implements Partition {
protected final String databaseName;
public AbstractPartition(String databaseName) {
this.databaseName = databaseName;
}
@Override
public Map<String, String> getLoggingContext() {
return Collections.singletonMap(LoggingContext.DATABASE_NAME, databaseName);
}
}