|
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