Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@
import org.apache.flink.cdc.connectors.oracle.source.OracleDataSourceOptions;
import org.apache.flink.cdc.connectors.oracle.source.config.OracleSourceConfig;
import org.apache.flink.cdc.connectors.oracle.source.config.OracleSourceConfigFactory;
import org.apache.flink.cdc.connectors.oracle.source.meta.offset.RedoLogOffset;
import org.apache.flink.cdc.connectors.oracle.table.OracleReadableMetaData;
import org.apache.flink.cdc.connectors.oracle.utils.OracleSchemaUtils;
import org.apache.flink.table.api.ValidationException;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
Expand All @@ -50,6 +52,7 @@
import static org.apache.flink.cdc.connectors.base.utils.ObjectUtils.doubleCompare;
import static org.apache.flink.cdc.connectors.oracle.source.OracleDataSourceOptions.METADATA_LIST;
import static org.apache.flink.cdc.connectors.oracle.source.OracleDataSourceOptions.SCAN_STARTUP_MODE;
import static org.apache.flink.cdc.connectors.oracle.source.OracleDataSourceOptions.SCAN_STARTUP_SPECIFIC_OFFSET_SCN;
import static org.apache.flink.cdc.debezium.table.DebeziumOptions.DEBEZIUM_OPTIONS_PREFIX;
import static org.apache.flink.cdc.debezium.utils.JdbcUrlUtils.PROPERTIES_PREFIX;
import static org.apache.flink.util.Preconditions.checkNotNull;
Expand All @@ -63,6 +66,7 @@ public class OracleDataSourceFactory implements DataSourceFactory {
private static final String SCAN_STARTUP_MODE_VALUE_INITIAL = "initial";
private static final String SCAN_STARTUP_MODE_VALUE_LATEST = "latest-offset";
private static final String SCAN_STARTUP_MODE_VALUE_SNAPSHOT = "snapshot";
private static final String SCAN_STARTUP_MODE_VALUE_SPECIFIC = "specific-offset";

@Override
public DataSource createDataSource(Context context) {
Expand Down Expand Up @@ -204,6 +208,7 @@ public Set<ConfigOption<?>> optionalOptions() {
options.add(OracleDataSourceOptions.LOG_MINING_STRATEGY);
options.add(OracleDataSourceOptions.DATABASE_CONNECTION_ADAPTER);
options.add(OracleDataSourceOptions.SCAN_STARTUP_MODE);
options.add(OracleDataSourceOptions.SCAN_STARTUP_SPECIFIC_OFFSET_SCN);
return options;
}

Expand Down Expand Up @@ -265,15 +270,30 @@ private static StartupOptions getStartupOptions(Configuration config) {
return StartupOptions.snapshot();
case SCAN_STARTUP_MODE_VALUE_LATEST:
return StartupOptions.latest();
case SCAN_STARTUP_MODE_VALUE_SPECIFIC:
Long scn = config.get(SCAN_STARTUP_SPECIFIC_OFFSET_SCN);
if (scn == null) {
throw new ValidationException(
String.format(
"Option '%s' is required when '%s' is '%s'.",
SCAN_STARTUP_SPECIFIC_OFFSET_SCN.key(),
SCAN_STARTUP_MODE.key(),
SCAN_STARTUP_MODE_VALUE_SPECIFIC));
}
Map<String, String> specificOffsetMap = new HashMap<>();
specificOffsetMap.put(RedoLogOffset.SCN_KEY, String.valueOf(scn));
specificOffsetMap.put(RedoLogOffset.COMMIT_SCN_KEY, String.valueOf(0L));
return StartupOptions.specificOffset(specificOffsetMap);

default:
throw new ValidationException(
String.format(
"Invalid value for option '%s'. Supported values are [%s, %s, %s], but was: %s",
"Invalid value for option '%s'. Supported values are [%s, %s, %s, %s], but was: %s",
SourceOptions.SCAN_STARTUP_MODE.key(),
SCAN_STARTUP_MODE_VALUE_INITIAL,
SCAN_STARTUP_MODE_VALUE_SNAPSHOT,
SCAN_STARTUP_MODE_VALUE_LATEST,
SCAN_STARTUP_MODE_VALUE_SPECIFIC,
modeString));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,15 @@ public class OracleDataSourceOptions {
.defaultValue("initial")
.withDescription(
"Optional startup mode for oracle CDC consumer, valid enumerations are "
+ "\"initial\", \"latest-offset\", \"snapshot\"");
+ "\"initial\", \"latest-offset\", \"snapshot\", \"specific-offset\"");

public static final ConfigOption<Long> SCAN_STARTUP_SPECIFIC_OFFSET_SCN =
ConfigOptions.key("scan.startup.specific-offset.scn")
.longType()
.noDefaultValue()
.withDescription(
"The specific SCN to start reading redo log from, "
+ "required when 'scan.startup.mode' is 'specific-offset'.");

@Experimental
public static final ConfigOption<Integer> CHUNK_META_GROUP_SIZE =
Expand Down