the-other-tim-brown commented on code in PR #9482:
URL: https://github.com/apache/hudi/pull/9482#discussion_r1306318716
##########
hudi-gcp/src/main/java/org/apache/hudi/gcp/bigquery/BigQuerySyncTool.java:
##########
@@ -52,34 +57,55 @@ public class BigQuerySyncTool extends HoodieSyncTool {
private static final Logger LOG =
LoggerFactory.getLogger(BigQuerySyncTool.class);
- public final BigQuerySyncConfig config;
- public final String tableName;
- public final String manifestTableName;
- public final String versionsTableName;
- public final String snapshotViewName;
+ private final BigQuerySyncConfig config;
+ private final String tableName;
+ private final String manifestTableName;
+ private final String versionsTableName;
+ private final String snapshotViewName;
+ private final ManifestFileWriter manifestFileWriter;
+ private final HoodieBigQuerySyncClient bqSyncClient;
+ private final HoodieTableMetaClient metaClient;
+ private final BigQuerySchemaResolver bqSchemaResolver;
public BigQuerySyncTool(Properties props) {
- super(props);
+ // will build file writer, client, etc. from configs
+ this(props, null, null, null, null);
+ }
+
+ @VisibleForTesting // allows us to pass in mocks for the writer and client
+ BigQuerySyncTool(Properties properties, ManifestFileWriter
manifestFileWriter, HoodieBigQuerySyncClient providedBqSyncClient,
HoodieTableMetaClient providedMetaClient,
+ BigQuerySchemaResolver providedBqSchemaResolver) {
+ super(properties);
this.config = new BigQuerySyncConfig(props);
this.tableName = config.getString(BIGQUERY_SYNC_TABLE_NAME);
this.manifestTableName = tableName + "_manifest";
this.versionsTableName = tableName + "_versions";
this.snapshotViewName = tableName;
+ this.bqSyncClient = providedBqSyncClient == null ? new
HoodieBigQuerySyncClient(config) : providedBqSyncClient;
+ // reuse existing meta client if not provided (only test cases will
provide their own meta client)
Review Comment:
See my above question, dependency injection is a common practice but Hudi
makes it hard to follow this due to its constraints. Can we consider adopting
some patterns that are more friendly to testing so we can adopt unit testing
over functional testing in general?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]