|
35 | 35 | import java.lang.reflect.Constructor;
|
36 | 36 | import java.lang.reflect.InvocationTargetException;
|
37 | 37 | import java.util.ArrayList;
|
| 38 | +import java.util.Arrays; |
38 | 39 | import java.util.Collections;
|
39 | 40 | import java.util.HashMap;
|
| 41 | +import java.util.HashSet; |
40 | 42 | import java.util.List;
|
41 | 43 | import java.util.Map;
|
42 | 44 | import java.util.Optional;
|
| 45 | +import java.util.Set; |
43 | 46 | import java.util.function.Function;
|
44 | 47 | import java.util.stream.Collectors;
|
45 | 48 | import java.util.stream.Stream;
|
|
51 | 54 | import org.apache.kafka.common.config.types.Password;
|
52 | 55 | import org.apache.kafka.connect.errors.ConnectException;
|
53 | 56 | import org.apache.kafka.connect.sink.SinkConnector;
|
| 57 | +import org.slf4j.Logger; |
| 58 | +import org.slf4j.LoggerFactory; |
54 | 59 |
|
55 | 60 | /**
|
56 | 61 | * Base class for connector and task configs; contains properties shared between the two of them.
|
57 | 62 | */
|
58 | 63 | public class BigQuerySinkConfig extends AbstractConfig {
|
| 64 | + |
| 65 | + private static final Logger logger = LoggerFactory.getLogger(BigQuerySinkConfig.class); |
| 66 | + |
| 67 | + public static final String DEPRECATED_DOC = "(DEPRECATED)"; |
| 68 | + public static final String GCS_LOAD_DEPRECATION_NOTICE = |
| 69 | + "GCS batch loading has been deprecated and will be removed in a future major release."; |
| 70 | + |
59 | 71 | // Values taken from https://github.com/apache/kafka/blob/1.1.1/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/SinkConnectorConfig.java#L33
|
60 | 72 | public static final String TOPICS_CONFIG = SinkConnector.TOPICS_CONFIG;
|
61 | 73 | public static final String TOPICS_DEFAULT = "";
|
@@ -172,7 +184,7 @@ public class BigQuerySinkConfig extends AbstractConfig {
|
172 | 184 | private static final List<String> ENABLE_BATCH_DEFAULT = Collections.emptyList();
|
173 | 185 | private static final ConfigDef.Importance ENABLE_BATCH_IMPORTANCE = ConfigDef.Importance.LOW;
|
174 | 186 | private static final String ENABLE_BATCH_DOC =
|
175 |
| - "Beta Feature; use with caution: The sublist of topics to be batch loaded through GCS"; |
| 187 | + "The sublist of topics to be batch loaded through GCS."; |
176 | 188 | private static final ConfigDef.Type BATCH_LOAD_INTERVAL_SEC_TYPE = ConfigDef.Type.INT;
|
177 | 189 | private static final Integer BATCH_LOAD_INTERVAL_SEC_DEFAULT = 120;
|
178 | 190 | private static final ConfigDef.Importance BATCH_LOAD_INTERVAL_SEC_IMPORTANCE =
|
@@ -535,12 +547,23 @@ public class BigQuerySinkConfig extends AbstractConfig {
|
535 | 547 |
|
536 | 548 | protected BigQuerySinkConfig(ConfigDef config, Map<String, String> properties) {
|
537 | 549 | super(config, properties);
|
| 550 | + logDeprecationWarnings(); |
538 | 551 | }
|
539 | 552 |
|
540 | 553 | public BigQuerySinkConfig(Map<String, String> properties) {
|
541 | 554 | this(getConfig(), properties);
|
542 | 555 | }
|
543 | 556 |
|
| 557 | + private void logDeprecationWarnings() { |
| 558 | + if (!getList(ENABLE_BATCH_CONFIG).isEmpty()) { |
| 559 | + logger.warn( |
| 560 | + GCS_LOAD_DEPRECATION_NOTICE |
| 561 | + + " To disable this feature, remove the {} property from the connector configuration", |
| 562 | + ENABLE_BATCH_CONFIG |
| 563 | + ); |
| 564 | + } |
| 565 | + } |
| 566 | + |
544 | 567 | /**
|
545 | 568 | * Return the ConfigDef object used to define this config's fields.
|
546 | 569 | *
|
@@ -573,25 +596,25 @@ public static ConfigDef getConfig() {
|
573 | 596 | ENABLE_BATCH_TYPE,
|
574 | 597 | ENABLE_BATCH_DEFAULT,
|
575 | 598 | ENABLE_BATCH_IMPORTANCE,
|
576 |
| - ENABLE_BATCH_DOC |
| 599 | + deprecatedGcsLoadDoc(ENABLE_BATCH_DOC) |
577 | 600 | ).define(
|
578 | 601 | BATCH_LOAD_INTERVAL_SEC_CONFIG,
|
579 | 602 | BATCH_LOAD_INTERVAL_SEC_TYPE,
|
580 | 603 | BATCH_LOAD_INTERVAL_SEC_DEFAULT,
|
581 | 604 | BATCH_LOAD_INTERVAL_SEC_IMPORTANCE,
|
582 |
| - BATCH_LOAD_INTERVAL_SEC_DOC |
| 605 | + deprecatedGcsLoadDoc(BATCH_LOAD_INTERVAL_SEC_DOC) |
583 | 606 | ).define(
|
584 | 607 | GCS_BUCKET_NAME_CONFIG,
|
585 | 608 | GCS_BUCKET_NAME_TYPE,
|
586 | 609 | GCS_BUCKET_NAME_DEFAULT,
|
587 | 610 | GCS_BUCKET_NAME_IMPORTANCE,
|
588 |
| - GCS_BUCKET_NAME_DOC |
| 611 | + deprecatedGcsLoadDoc(GCS_BUCKET_NAME_DOC) |
589 | 612 | ).define(
|
590 | 613 | GCS_FOLDER_NAME_CONFIG,
|
591 | 614 | GCS_FOLDER_NAME_TYPE,
|
592 | 615 | GCS_FOLDER_NAME_DEFAULT,
|
593 | 616 | GCS_FOLDER_NAME_IMPORTANCE,
|
594 |
| - GCS_FOLDER_NAME_DOC |
| 617 | + deprecatedGcsLoadDoc(GCS_FOLDER_NAME_DOC) |
595 | 618 | ).define(
|
596 | 619 | PROJECT_CONFIG,
|
597 | 620 | PROJECT_TYPE,
|
@@ -685,7 +708,7 @@ public static ConfigDef getConfig() {
|
685 | 708 | AUTO_CREATE_BUCKET_TYPE,
|
686 | 709 | AUTO_CREATE_BUCKET_DEFAULT,
|
687 | 710 | AUTO_CREATE_BUCKET_IMPORTANCE,
|
688 |
| - AUTO_CREATE_BUCKET_DOC |
| 711 | + deprecatedGcsLoadDoc(AUTO_CREATE_BUCKET_DOC) |
689 | 712 | ).define(
|
690 | 713 | ALLOW_NEW_BIGQUERY_FIELDS_CONFIG,
|
691 | 714 | ALLOW_NEW_BIGQUERY_FIELDS_TYPE,
|
@@ -867,18 +890,6 @@ public boolean visible(String s, Map<String, Object> map) {
|
867 | 890 | );
|
868 | 891 | }
|
869 | 892 |
|
870 |
| - public static boolean upsertDeleteEnabled(Map<String, String> props) { |
871 |
| - String upsertStr = props.get(UPSERT_ENABLED_CONFIG); |
872 |
| - String deleteStr = props.get(DELETE_ENABLED_CONFIG); |
873 |
| - return Boolean.TRUE.toString().equalsIgnoreCase(upsertStr) |
874 |
| - || Boolean.TRUE.toString().equalsIgnoreCase(deleteStr); |
875 |
| - } |
876 |
| - |
877 |
| - public static boolean gcsBatchLoadingEnabled(Map<String, String> props) { |
878 |
| - String batchLoadStr = props.get(ENABLE_BATCH_CONFIG); |
879 |
| - return batchLoadStr != null && !batchLoadStr.isEmpty(); |
880 |
| - } |
881 |
| - |
882 | 893 | /**
|
883 | 894 | * Used in conjunction with {@link com.wepay.kafka.connect.bigquery.BigQuerySinkConnector#validate(Map)} to perform
|
884 | 895 | * preflight configuration checks. Simple validations that only require a single property value at a time (such as
|
@@ -924,13 +935,6 @@ public GcpClientBuilder.KeySource getKeySource() {
|
924 | 935 | }
|
925 | 936 | }
|
926 | 937 |
|
927 |
| - /** |
928 |
| - * Returns the keyfile |
929 |
| - */ |
930 |
| - public String getKeyFile() { |
931 |
| - return Optional.ofNullable(getPassword(KEYFILE_CONFIG)).map(Password::value).orElse(null); |
932 |
| - } |
933 |
| - |
934 | 938 | /**
|
935 | 939 | * Return a new instance of the configured Schema Converter.
|
936 | 940 | *
|
@@ -1122,4 +1126,8 @@ private static String header(String text) {
|
1122 | 1126 | return wrapper + "\n" + text + "\n" + wrapper + "\n";
|
1123 | 1127 | }
|
1124 | 1128 |
|
| 1129 | + private static String deprecatedGcsLoadDoc(String doc) { |
| 1130 | + return DEPRECATED_DOC + " " + doc + " Warning: " + GCS_LOAD_DEPRECATION_NOTICE; |
| 1131 | + } |
| 1132 | + |
1125 | 1133 | }
|
0 commit comments