|
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 | + public static final String DECORATOR_SYNTAX_DEPRECATION_NOTICE = |
| 71 | + "Use of partition decorator syntax has been deprecated and will be removed in a future release."; |
| 72 | + |
59 | 73 | // 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 | 74 | public static final String TOPICS_CONFIG = SinkConnector.TOPICS_CONFIG;
|
61 | 75 | public static final String TOPICS_DEFAULT = "";
|
@@ -174,7 +188,7 @@ public class BigQuerySinkConfig extends AbstractConfig {
|
174 | 188 | private static final List<String> ENABLE_BATCH_DEFAULT = Collections.emptyList();
|
175 | 189 | private static final ConfigDef.Importance ENABLE_BATCH_IMPORTANCE = ConfigDef.Importance.LOW;
|
176 | 190 | private static final String ENABLE_BATCH_DOC =
|
177 |
| - "Beta Feature; use with caution: The sublist of topics to be batch loaded through GCS"; |
| 191 | + "The sublist of topics to be batch loaded through GCS."; |
178 | 192 | private static final ConfigDef.Type BATCH_LOAD_INTERVAL_SEC_TYPE = ConfigDef.Type.INT;
|
179 | 193 | private static final Integer BATCH_LOAD_INTERVAL_SEC_DEFAULT = 120;
|
180 | 194 | private static final ConfigDef.Importance BATCH_LOAD_INTERVAL_SEC_IMPORTANCE =
|
@@ -541,12 +555,31 @@ public class BigQuerySinkConfig extends AbstractConfig {
|
541 | 555 |
|
542 | 556 | protected BigQuerySinkConfig(ConfigDef config, Map<String, String> properties) {
|
543 | 557 | super(config, properties);
|
| 558 | + logDeprecationWarnings(); |
544 | 559 | }
|
545 | 560 |
|
546 | 561 | public BigQuerySinkConfig(Map<String, String> properties) {
|
547 | 562 | this(getConfig(), properties);
|
548 | 563 | }
|
549 | 564 |
|
| 565 | + private void logDeprecationWarnings() { |
| 566 | + if (!getList(ENABLE_BATCH_CONFIG).isEmpty()) { |
| 567 | + logger.warn( |
| 568 | + GCS_LOAD_DEPRECATION_NOTICE |
| 569 | + + " To disable this feature, remove the {} property from the connector configuration", |
| 570 | + ENABLE_BATCH_CONFIG |
| 571 | + ); |
| 572 | + } |
| 573 | + |
| 574 | + if (getBoolean(BIGQUERY_PARTITION_DECORATOR_CONFIG)) { |
| 575 | + logger.warn( |
| 576 | + DECORATOR_SYNTAX_DEPRECATION_NOTICE |
| 577 | + + " To disable this feature, set the {} property to false in the connector configuration", |
| 578 | + BIGQUERY_PARTITION_DECORATOR_CONFIG |
| 579 | + ); |
| 580 | + } |
| 581 | + } |
| 582 | + |
550 | 583 | /**
|
551 | 584 | * Return the ConfigDef object used to define this config's fields.
|
552 | 585 | *
|
@@ -579,25 +612,25 @@ public static ConfigDef getConfig() {
|
579 | 612 | ENABLE_BATCH_TYPE,
|
580 | 613 | ENABLE_BATCH_DEFAULT,
|
581 | 614 | ENABLE_BATCH_IMPORTANCE,
|
582 |
| - ENABLE_BATCH_DOC |
| 615 | + deprecatedGcsLoadDoc(ENABLE_BATCH_DOC) |
583 | 616 | ).define(
|
584 | 617 | BATCH_LOAD_INTERVAL_SEC_CONFIG,
|
585 | 618 | BATCH_LOAD_INTERVAL_SEC_TYPE,
|
586 | 619 | BATCH_LOAD_INTERVAL_SEC_DEFAULT,
|
587 | 620 | BATCH_LOAD_INTERVAL_SEC_IMPORTANCE,
|
588 |
| - BATCH_LOAD_INTERVAL_SEC_DOC |
| 621 | + deprecatedGcsLoadDoc(BATCH_LOAD_INTERVAL_SEC_DOC) |
589 | 622 | ).define(
|
590 | 623 | GCS_BUCKET_NAME_CONFIG,
|
591 | 624 | GCS_BUCKET_NAME_TYPE,
|
592 | 625 | GCS_BUCKET_NAME_DEFAULT,
|
593 | 626 | GCS_BUCKET_NAME_IMPORTANCE,
|
594 |
| - GCS_BUCKET_NAME_DOC |
| 627 | + deprecatedGcsLoadDoc(GCS_BUCKET_NAME_DOC) |
595 | 628 | ).define(
|
596 | 629 | GCS_FOLDER_NAME_CONFIG,
|
597 | 630 | GCS_FOLDER_NAME_TYPE,
|
598 | 631 | GCS_FOLDER_NAME_DEFAULT,
|
599 | 632 | GCS_FOLDER_NAME_IMPORTANCE,
|
600 |
| - GCS_FOLDER_NAME_DOC |
| 633 | + deprecatedGcsLoadDoc(GCS_FOLDER_NAME_DOC) |
601 | 634 | ).define(
|
602 | 635 | PROJECT_CONFIG,
|
603 | 636 | PROJECT_TYPE,
|
@@ -691,7 +724,7 @@ public static ConfigDef getConfig() {
|
691 | 724 | AUTO_CREATE_BUCKET_TYPE,
|
692 | 725 | AUTO_CREATE_BUCKET_DEFAULT,
|
693 | 726 | AUTO_CREATE_BUCKET_IMPORTANCE,
|
694 |
| - AUTO_CREATE_BUCKET_DOC |
| 727 | + deprecatedGcsLoadDoc(AUTO_CREATE_BUCKET_DOC) |
695 | 728 | ).define(
|
696 | 729 | ALLOW_NEW_BIGQUERY_FIELDS_CONFIG,
|
697 | 730 | ALLOW_NEW_BIGQUERY_FIELDS_TYPE,
|
@@ -776,13 +809,13 @@ public static ConfigDef getConfig() {
|
776 | 809 | BIGQUERY_MESSAGE_TIME_PARTITIONING_CONFIG_TYPE,
|
777 | 810 | BIGQUERY_MESSAGE_TIME_PARTITIONING_DEFAULT,
|
778 | 811 | BIGQUERY_MESSAGE_TIME_PARTITIONING_IMPORTANCE,
|
779 |
| - BIGQUERY_MESSAGE_TIME_PARTITIONING_DOC |
| 812 | + deprecatedPartitionSyntaxDoc(BIGQUERY_MESSAGE_TIME_PARTITIONING_DOC) |
780 | 813 | ).define(
|
781 | 814 | BIGQUERY_PARTITION_DECORATOR_CONFIG,
|
782 | 815 | BIGQUERY_PARTITION_DECORATOR_CONFIG_TYPE,
|
783 | 816 | BIGQUERY_PARTITION_DECORATOR_DEFAULT,
|
784 | 817 | BIGQUERY_PARTITION_DECORATOR_IMPORTANCE,
|
785 |
| - BIGQUERY_PARTITION_DECORATOR_DOC |
| 818 | + deprecatedPartitionSyntaxDoc(BIGQUERY_PARTITION_DECORATOR_DOC) |
786 | 819 | ).define(
|
787 | 820 | BIGQUERY_TIMESTAMP_PARTITION_FIELD_NAME_CONFIG,
|
788 | 821 | BIGQUERY_TIMESTAMP_PARTITION_FIELD_NAME_TYPE,
|
@@ -879,18 +912,6 @@ public boolean visible(String s, Map<String, Object> map) {
|
879 | 912 | );
|
880 | 913 | }
|
881 | 914 |
|
882 |
| - public static boolean upsertDeleteEnabled(Map<String, String> props) { |
883 |
| - String upsertStr = props.get(UPSERT_ENABLED_CONFIG); |
884 |
| - String deleteStr = props.get(DELETE_ENABLED_CONFIG); |
885 |
| - return Boolean.TRUE.toString().equalsIgnoreCase(upsertStr) |
886 |
| - || Boolean.TRUE.toString().equalsIgnoreCase(deleteStr); |
887 |
| - } |
888 |
| - |
889 |
| - public static boolean gcsBatchLoadingEnabled(Map<String, String> props) { |
890 |
| - String batchLoadStr = props.get(ENABLE_BATCH_CONFIG); |
891 |
| - return batchLoadStr != null && !batchLoadStr.isEmpty(); |
892 |
| - } |
893 |
| - |
894 | 915 | /**
|
895 | 916 | * Used in conjunction with {@link com.wepay.kafka.connect.bigquery.BigQuerySinkConnector#validate(Map)} to perform
|
896 | 917 | * preflight configuration checks. Simple validations that only require a single property value at a time (such as
|
@@ -936,13 +957,6 @@ public GcpClientBuilder.KeySource getKeySource() {
|
936 | 957 | }
|
937 | 958 | }
|
938 | 959 |
|
939 |
| - /** |
940 |
| - * Returns the keyfile |
941 |
| - */ |
942 |
| - public String getKeyFile() { |
943 |
| - return Optional.ofNullable(getPassword(KEYFILE_CONFIG)).map(Password::value).orElse(null); |
944 |
| - } |
945 |
| - |
946 | 960 | /**
|
947 | 961 | * Return a new instance of the configured Schema Converter.
|
948 | 962 | *
|
@@ -1134,4 +1148,17 @@ private static String header(String text) {
|
1134 | 1148 | return wrapper + "\n" + text + "\n" + wrapper + "\n";
|
1135 | 1149 | }
|
1136 | 1150 |
|
| 1151 | + private static String deprecatedGcsLoadDoc(String doc) { |
| 1152 | + |
| 1153 | + return deprecatedDoc(doc, GCS_LOAD_DEPRECATION_NOTICE); |
| 1154 | + } |
| 1155 | + |
| 1156 | + public static String deprecatedPartitionSyntaxDoc(String doc) { |
| 1157 | + return deprecatedDoc(doc, DECORATOR_SYNTAX_DEPRECATION_NOTICE); |
| 1158 | + } |
| 1159 | + |
| 1160 | + private static String deprecatedDoc(String doc, String notice) { |
| 1161 | + return DEPRECATED_DOC + " " + doc + " Warning: " + notice; |
| 1162 | + } |
| 1163 | + |
1137 | 1164 | }
|
0 commit comments