in xtable-core/src/main/java/org/apache/xtable/hudi/HudiConversionTarget.java [381:425]
public void commit() {
if (schema == null) {
try {
// reuse existing table schema if no schema is provided as part of this commit
schema = new TableSchemaResolver(metaClient).getTableAvroSchema();
} catch (Exception ex) {
throw new ReadException("Unable to read Hudi table schema", ex);
}
}
HoodieWriteConfig writeConfig =
getWriteConfig(
schema,
getNumInstantsToRetain(),
maxNumDeltaCommitsBeforeCompaction,
timelineRetentionInHours);
HoodieEngineContext engineContext = new HoodieJavaEngineContext(metaClient.getHadoopConf());
try (HoodieJavaWriteClient<?> writeClient =
new HoodieJavaWriteClient<>(engineContext, writeConfig)) {
writeClient.startCommitWithTime(instantTime, HoodieTimeline.REPLACE_COMMIT_ACTION);
metaClient
.getActiveTimeline()
.transitionReplaceRequestedToInflight(
new HoodieInstant(
HoodieInstant.State.REQUESTED,
HoodieTimeline.REPLACE_COMMIT_ACTION,
instantTime),
Option.empty());
writeClient.commit(
instantTime,
writeStatuses,
getExtraMetadata(),
HoodieTimeline.REPLACE_COMMIT_ACTION,
partitionToReplacedFileIds);
// if the metaclient was created before the table's first commit, we need to reload it to
// pick up the metadata table context
if (!metaClient.getTableConfig().isMetadataTableAvailable()) {
metaClient = HoodieTableMetaClient.reload(metaClient);
}
HoodieJavaTable<?> table =
HoodieJavaTable.create(writeClient.getConfig(), engineContext, metaClient);
// clean up old commits and archive them
markInstantsAsCleaned(table, writeClient.getConfig(), engineContext);
runArchiver(table, writeClient.getConfig(), engineContext);
}
}