[HUDI-1315] Adding builder for HoodieTableMetaClient initialization (#2534)
This commit is contained in:
committed by
GitHub
parent
0d91c451b0
commit
c9fcf964b2
@@ -85,8 +85,8 @@ public class HoodieCLI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void refreshTableMetadata() {
|
public static void refreshTableMetadata() {
|
||||||
setTableMetaClient(new HoodieTableMetaClient(HoodieCLI.conf, basePath, false, HoodieCLI.consistencyGuardConfig,
|
setTableMetaClient(HoodieTableMetaClient.builder().setConf(HoodieCLI.conf).setBasePath(basePath).setLoadActiveTimelineOnLoad(false).setConsistencyGuardConfig(HoodieCLI.consistencyGuardConfig)
|
||||||
Option.of(layoutVersion)));
|
.setLayoutVersion(Option.of(layoutVersion)).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void connectTo(String basePath, Integer layoutVersion) {
|
public static void connectTo(String basePath, Integer layoutVersion) {
|
||||||
|
|||||||
@@ -401,7 +401,7 @@ public class CommitsCommand implements CommandMarker {
|
|||||||
public String compareCommits(@CliOption(key = {"path"}, help = "Path of the table to compare to") final String path) {
|
public String compareCommits(@CliOption(key = {"path"}, help = "Path of the table to compare to") final String path) {
|
||||||
|
|
||||||
HoodieTableMetaClient source = HoodieCLI.getTableMetaClient();
|
HoodieTableMetaClient source = HoodieCLI.getTableMetaClient();
|
||||||
HoodieTableMetaClient target = new HoodieTableMetaClient(HoodieCLI.conf, path);
|
HoodieTableMetaClient target = HoodieTableMetaClient.builder().setConf(HoodieCLI.conf).setBasePath(path).build();
|
||||||
HoodieTimeline targetTimeline = target.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
HoodieTimeline targetTimeline = target.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
||||||
HoodieTimeline sourceTimeline = source.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
HoodieTimeline sourceTimeline = source.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
||||||
String targetLatestCommit =
|
String targetLatestCommit =
|
||||||
@@ -426,7 +426,7 @@ public class CommitsCommand implements CommandMarker {
|
|||||||
|
|
||||||
@CliCommand(value = "commits sync", help = "Compare commits with another Hoodie table")
|
@CliCommand(value = "commits sync", help = "Compare commits with another Hoodie table")
|
||||||
public String syncCommits(@CliOption(key = {"path"}, help = "Path of the table to compare to") final String path) {
|
public String syncCommits(@CliOption(key = {"path"}, help = "Path of the table to compare to") final String path) {
|
||||||
HoodieCLI.syncTableMetadata = new HoodieTableMetaClient(HoodieCLI.conf, path);
|
HoodieCLI.syncTableMetadata = HoodieTableMetaClient.builder().setConf(HoodieCLI.conf).setBasePath(path).build();
|
||||||
HoodieCLI.state = HoodieCLI.CLIState.SYNC;
|
HoodieCLI.state = HoodieCLI.CLIState.SYNC;
|
||||||
return "Load sync state between " + HoodieCLI.getTableMetaClient().getTableConfig().getTableName() + " and "
|
return "Load sync state between " + HoodieCLI.getTableMetaClient().getTableConfig().getTableName() + " and "
|
||||||
+ HoodieCLI.syncTableMetadata.getTableConfig().getTableName();
|
+ HoodieCLI.syncTableMetadata.getTableConfig().getTableName();
|
||||||
|
|||||||
@@ -237,7 +237,7 @@ public class FileSystemViewCommand implements CommandMarker {
|
|||||||
boolean includeMaxInstant, boolean includeInflight, boolean excludeCompaction) throws IOException {
|
boolean includeMaxInstant, boolean includeInflight, boolean excludeCompaction) throws IOException {
|
||||||
HoodieTableMetaClient client = HoodieCLI.getTableMetaClient();
|
HoodieTableMetaClient client = HoodieCLI.getTableMetaClient();
|
||||||
HoodieTableMetaClient metaClient =
|
HoodieTableMetaClient metaClient =
|
||||||
new HoodieTableMetaClient(client.getHadoopConf(), client.getBasePath(), true);
|
HoodieTableMetaClient.builder().setConf(client.getHadoopConf()).setBasePath(client.getBasePath()).setLoadActiveTimelineOnLoad(true).build();
|
||||||
FileSystem fs = HoodieCLI.fs;
|
FileSystem fs = HoodieCLI.fs;
|
||||||
String globPath = String.format("%s/%s/*", client.getBasePath(), globRegex);
|
String globPath = String.format("%s/%s/*", client.getBasePath(), globRegex);
|
||||||
List<FileStatus> statuses = FSUtils.getGlobStatusExcludingMetaFolder(fs, new Path(globPath));
|
List<FileStatus> statuses = FSUtils.getGlobStatusExcludingMetaFolder(fs, new Path(globPath));
|
||||||
|
|||||||
@@ -402,8 +402,10 @@ public class SparkMain {
|
|||||||
*/
|
*/
|
||||||
protected static int upgradeOrDowngradeTable(JavaSparkContext jsc, String basePath, String toVersion) {
|
protected static int upgradeOrDowngradeTable(JavaSparkContext jsc, String basePath, String toVersion) {
|
||||||
HoodieWriteConfig config = getWriteConfig(basePath);
|
HoodieWriteConfig config = getWriteConfig(basePath);
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), config.getBasePath(), false,
|
HoodieTableMetaClient metaClient =
|
||||||
config.getConsistencyGuardConfig(), Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion())));
|
HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(config.getBasePath())
|
||||||
|
.setLoadActiveTimelineOnLoad(false).setConsistencyGuardConfig(config.getConsistencyGuardConfig())
|
||||||
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))).build();
|
||||||
try {
|
try {
|
||||||
new SparkUpgradeDowngrade(metaClient, config, new HoodieSparkEngineContext(jsc)).run(metaClient, HoodieTableVersion.valueOf(toVersion), config, new HoodieSparkEngineContext(jsc), null);
|
new SparkUpgradeDowngrade(metaClient, config, new HoodieSparkEngineContext(jsc)).run(metaClient, HoodieTableVersion.valueOf(toVersion), config, new HoodieSparkEngineContext(jsc), null);
|
||||||
LOG.info(String.format("Table at \"%s\" upgraded / downgraded to version \"%s\".", basePath, toVersion));
|
LOG.info(String.format("Table at \"%s\" upgraded / downgraded to version \"%s\".", basePath, toVersion));
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ public class TableCommand implements CommandMarker {
|
|||||||
|
|
||||||
boolean existing = false;
|
boolean existing = false;
|
||||||
try {
|
try {
|
||||||
new HoodieTableMetaClient(HoodieCLI.conf, path);
|
HoodieTableMetaClient.builder().setConf(HoodieCLI.conf).setBasePath(path).build();
|
||||||
existing = true;
|
existing = true;
|
||||||
} catch (TableNotFoundException dfe) {
|
} catch (TableNotFoundException dfe) {
|
||||||
// expected
|
// expected
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ class DedupeSparkJob(basePath: String,
|
|||||||
val tmpTableName = s"htbl_${System.currentTimeMillis()}"
|
val tmpTableName = s"htbl_${System.currentTimeMillis()}"
|
||||||
val dedupeTblName = s"${tmpTableName}_dupeKeys"
|
val dedupeTblName = s"${tmpTableName}_dupeKeys"
|
||||||
|
|
||||||
val metadata = new HoodieTableMetaClient(fs.getConf, basePath)
|
val metadata = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(basePath).build()
|
||||||
|
|
||||||
val allFiles = fs.listStatus(new org.apache.hadoop.fs.Path(s"$basePath/$duplicatedPartitionPath"))
|
val allFiles = fs.listStatus(new org.apache.hadoop.fs.Path(s"$basePath/$duplicatedPartitionPath"))
|
||||||
val fsView = new HoodieTableFileSystemView(metadata, metadata.getActiveTimeline.getCommitTimeline.filterCompletedInstants(), allFiles)
|
val fsView = new HoodieTableFileSystemView(metadata, metadata.getActiveTimeline.getCommitTimeline.filterCompletedInstants(), allFiles)
|
||||||
@@ -184,7 +184,7 @@ class DedupeSparkJob(basePath: String,
|
|||||||
}
|
}
|
||||||
|
|
||||||
def fixDuplicates(dryRun: Boolean = true) = {
|
def fixDuplicates(dryRun: Boolean = true) = {
|
||||||
val metadata = new HoodieTableMetaClient(fs.getConf, basePath)
|
val metadata = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(basePath).build()
|
||||||
|
|
||||||
val allFiles = fs.listStatus(new Path(s"$basePath/$duplicatedPartitionPath"))
|
val allFiles = fs.listStatus(new Path(s"$basePath/$duplicatedPartitionPath"))
|
||||||
val fsView = new HoodieTableFileSystemView(metadata, metadata.getActiveTimeline.getCommitTimeline.filterCompletedInstants(), allFiles)
|
val fsView = new HoodieTableFileSystemView(metadata, metadata.getActiveTimeline.getCommitTimeline.filterCompletedInstants(), allFiles)
|
||||||
|
|||||||
@@ -128,9 +128,9 @@ public abstract class AbstractHoodieClient implements Serializable, AutoCloseabl
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) {
|
protected HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) {
|
||||||
return new HoodieTableMetaClient(hadoopConf, config.getBasePath(), loadActiveTimelineOnLoad,
|
return HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(config.getBasePath())
|
||||||
config.getConsistencyGuardConfig(),
|
.setLoadActiveTimelineOnLoad(loadActiveTimelineOnLoad).setConsistencyGuardConfig(config.getConsistencyGuardConfig())
|
||||||
Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion())));
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Option<EmbeddedTimelineService> getTimelineServer() {
|
public Option<EmbeddedTimelineService> getTimelineServer() {
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ public abstract class HoodieBackedTableMetadataWriter implements HoodieTableMeta
|
|||||||
ValidationUtils.checkArgument(!this.metadataWriteConfig.useFileListingMetadata(), "File listing cannot be used for Metadata Table");
|
ValidationUtils.checkArgument(!this.metadataWriteConfig.useFileListingMetadata(), "File listing cannot be used for Metadata Table");
|
||||||
|
|
||||||
initRegistry();
|
initRegistry();
|
||||||
HoodieTableMetaClient datasetMetaClient = new HoodieTableMetaClient(hadoopConf, datasetWriteConfig.getBasePath());
|
HoodieTableMetaClient datasetMetaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(datasetWriteConfig.getBasePath()).build();
|
||||||
initialize(engineContext, datasetMetaClient);
|
initialize(engineContext, datasetMetaClient);
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
// This is always called even in case the table was created for the first time. This is because
|
// This is always called even in case the table was created for the first time. This is because
|
||||||
|
|||||||
@@ -43,13 +43,10 @@ public abstract class HoodieFlinkTable<T extends HoodieRecordPayload>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends HoodieRecordPayload> HoodieFlinkTable<T> create(HoodieWriteConfig config, HoodieFlinkEngineContext context) {
|
public static <T extends HoodieRecordPayload> HoodieFlinkTable<T> create(HoodieWriteConfig config, HoodieFlinkEngineContext context) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(
|
HoodieTableMetaClient metaClient =
|
||||||
context.getHadoopConf().get(),
|
HoodieTableMetaClient.builder().setConf(context.getHadoopConf().get()).setBasePath(config.getBasePath())
|
||||||
config.getBasePath(),
|
.setLoadActiveTimelineOnLoad(true).setConsistencyGuardConfig(config.getConsistencyGuardConfig())
|
||||||
true,
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))).build();
|
||||||
config.getConsistencyGuardConfig(),
|
|
||||||
Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))
|
|
||||||
);
|
|
||||||
return HoodieFlinkTable.create(config, context, metaClient);
|
return HoodieFlinkTable.create(config, context, metaClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,13 +42,10 @@ public abstract class HoodieJavaTable<T extends HoodieRecordPayload>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends HoodieRecordPayload> HoodieJavaTable<T> create(HoodieWriteConfig config, HoodieEngineContext context) {
|
public static <T extends HoodieRecordPayload> HoodieJavaTable<T> create(HoodieWriteConfig config, HoodieEngineContext context) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(
|
HoodieTableMetaClient metaClient =
|
||||||
context.getHadoopConf().get(),
|
HoodieTableMetaClient.builder().setConf(context.getHadoopConf().get()).setBasePath(config.getBasePath())
|
||||||
config.getBasePath(),
|
.setLoadActiveTimelineOnLoad(true).setConsistencyGuardConfig(config.getConsistencyGuardConfig())
|
||||||
true,
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))).build();
|
||||||
config.getConsistencyGuardConfig(),
|
|
||||||
Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))
|
|
||||||
);
|
|
||||||
return HoodieJavaTable.create(config, (HoodieJavaEngineContext) context, metaClient);
|
return HoodieJavaTable.create(config, (HoodieJavaEngineContext) context, metaClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ public class HoodieReadClient<T extends HoodieRecordPayload> implements Serializ
|
|||||||
this.hadoopConf = context.getHadoopConf().get();
|
this.hadoopConf = context.getHadoopConf().get();
|
||||||
final String basePath = clientConfig.getBasePath();
|
final String basePath = clientConfig.getBasePath();
|
||||||
// Create a Hoodie table which encapsulated the commits and files visible
|
// Create a Hoodie table which encapsulated the commits and files visible
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
this.hoodieTable = HoodieSparkTable.create(clientConfig, context, metaClient);
|
this.hoodieTable = HoodieSparkTable.create(clientConfig, context, metaClient);
|
||||||
this.index = SparkHoodieIndex.createIndex(clientConfig);
|
this.index = SparkHoodieIndex.createIndex(clientConfig);
|
||||||
this.sqlContextOpt = Option.empty();
|
this.sqlContextOpt = Option.empty();
|
||||||
@@ -199,7 +199,7 @@ public class HoodieReadClient<T extends HoodieRecordPayload> implements Serializ
|
|||||||
*/
|
*/
|
||||||
public List<Pair<String, HoodieCompactionPlan>> getPendingCompactions() {
|
public List<Pair<String, HoodieCompactionPlan>> getPendingCompactions() {
|
||||||
HoodieTableMetaClient metaClient =
|
HoodieTableMetaClient metaClient =
|
||||||
new HoodieTableMetaClient(hadoopConf, hoodieTable.getMetaClient().getBasePath(), true);
|
HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(hoodieTable.getMetaClient().getBasePath()).setLoadActiveTimelineOnLoad(true).build();
|
||||||
return CompactionUtils.getAllPendingCompactionPlans(metaClient).stream()
|
return CompactionUtils.getAllPendingCompactionPlans(metaClient).stream()
|
||||||
.map(
|
.map(
|
||||||
instantWorkloadPair -> Pair.of(instantWorkloadPair.getKey().getTimestamp(), instantWorkloadPair.getValue()))
|
instantWorkloadPair -> Pair.of(instantWorkloadPair.getKey().getTimestamp(), instantWorkloadPair.getValue()))
|
||||||
|
|||||||
@@ -42,13 +42,10 @@ public abstract class HoodieSparkTable<T extends HoodieRecordPayload>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends HoodieRecordPayload> HoodieSparkTable<T> create(HoodieWriteConfig config, HoodieEngineContext context) {
|
public static <T extends HoodieRecordPayload> HoodieSparkTable<T> create(HoodieWriteConfig config, HoodieEngineContext context) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(
|
HoodieTableMetaClient metaClient =
|
||||||
context.getHadoopConf().get(),
|
HoodieTableMetaClient.builder().setConf(context.getHadoopConf().get()).setBasePath(config.getBasePath())
|
||||||
config.getBasePath(),
|
.setLoadActiveTimelineOnLoad(true).setConsistencyGuardConfig(config.getConsistencyGuardConfig())
|
||||||
true,
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))).build();
|
||||||
config.getConsistencyGuardConfig(),
|
|
||||||
Option.of(new TimelineLayoutVersion(config.getTimelineLayoutVersion()))
|
|
||||||
);
|
|
||||||
return HoodieSparkTable.create(config, (HoodieSparkEngineContext) context, metaClient);
|
return HoodieSparkTable.create(config, (HoodieSparkEngineContext) context, metaClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
int expNumRepairs) throws Exception {
|
int expNumRepairs) throws Exception {
|
||||||
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles =
|
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles =
|
||||||
validateUnSchedulePlan(client, ingestionInstant, compactionInstant, numEntriesPerInstant, expNumRepairs, true);
|
validateUnSchedulePlan(client, ingestionInstant, compactionInstant, numEntriesPerInstant, expNumRepairs, true);
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
List<ValidationOpResult> result = client.validateCompactionPlan(metaClient, compactionInstant, 1);
|
List<ValidationOpResult> result = client.validateCompactionPlan(metaClient, compactionInstant, 1);
|
||||||
if (expNumRepairs > 0) {
|
if (expNumRepairs > 0) {
|
||||||
assertTrue(result.stream().anyMatch(r -> !r.isSuccess()), "Expect some failures in validation");
|
assertTrue(result.stream().anyMatch(r -> !r.isSuccess()), "Expect some failures in validation");
|
||||||
@@ -176,7 +176,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
* @param compactionInstant Compaction Instant
|
* @param compactionInstant Compaction Instant
|
||||||
*/
|
*/
|
||||||
private void ensureValidCompactionPlan(String compactionInstant) throws Exception {
|
private void ensureValidCompactionPlan(String compactionInstant) throws Exception {
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
// Ensure compaction-plan is good to begin with
|
// Ensure compaction-plan is good to begin with
|
||||||
List<ValidationOpResult> validationResults = client.validateCompactionPlan(metaClient, compactionInstant, 1);
|
List<ValidationOpResult> validationResults = client.validateCompactionPlan(metaClient, compactionInstant, 1);
|
||||||
assertFalse(validationResults.stream().anyMatch(v -> !v.isSuccess()),
|
assertFalse(validationResults.stream().anyMatch(v -> !v.isSuccess()),
|
||||||
@@ -234,7 +234,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
// Check suggested rename operations
|
// Check suggested rename operations
|
||||||
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles =
|
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles =
|
||||||
client.getRenamingActionsForUnschedulingCompactionPlan(metaClient, compactionInstant, 1, Option.empty(), false);
|
client.getRenamingActionsForUnschedulingCompactionPlan(metaClient, compactionInstant, 1, Option.empty(), false);
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
|
|
||||||
// Log files belonging to file-slices created because of compaction request must be renamed
|
// Log files belonging to file-slices created because of compaction request must be renamed
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
|
|
||||||
client.unscheduleCompactionPlan(compactionInstant, false, 1, false);
|
client.unscheduleCompactionPlan(compactionInstant, false, 1, false);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
final HoodieTableFileSystemView newFsView =
|
final HoodieTableFileSystemView newFsView =
|
||||||
new HoodieTableFileSystemView(metaClient, metaClient.getCommitsAndCompactionTimeline());
|
new HoodieTableFileSystemView(metaClient, metaClient.getCommitsAndCompactionTimeline());
|
||||||
// Expect all file-slice whose base-commit is same as compaction commit to contain no new Log files
|
// Expect all file-slice whose base-commit is same as compaction commit to contain no new Log files
|
||||||
@@ -306,7 +306,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
// Check suggested rename operations
|
// Check suggested rename operations
|
||||||
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles = client
|
List<Pair<HoodieLogFile, HoodieLogFile>> renameFiles = client
|
||||||
.getRenamingActionsForUnschedulingCompactionOperation(metaClient, compactionInstant, op, Option.empty(), false);
|
.getRenamingActionsForUnschedulingCompactionOperation(metaClient, compactionInstant, op, Option.empty(), false);
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
|
|
||||||
// Log files belonging to file-slices created because of compaction request must be renamed
|
// Log files belonging to file-slices created because of compaction request must be renamed
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ public class TestCompactionAdminClient extends HoodieClientTestBase {
|
|||||||
// Call the main unschedule API
|
// Call the main unschedule API
|
||||||
client.unscheduleCompactionFileId(op.getFileGroupId(), false, false);
|
client.unscheduleCompactionFileId(op.getFileGroupId(), false, false);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
final HoodieTableFileSystemView newFsView =
|
final HoodieTableFileSystemView newFsView =
|
||||||
new HoodieTableFileSystemView(metaClient, metaClient.getCommitsAndCompactionTimeline());
|
new HoodieTableFileSystemView(metaClient, metaClient.getCommitsAndCompactionTimeline());
|
||||||
// Expect all file-slice whose base-commit is same as compaction commit to contain no new Log files
|
// Expect all file-slice whose base-commit is same as compaction commit to contain no new Log files
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
|
|
||||||
final HoodieWriteConfig cfg = hoodieWriteConfig;
|
final HoodieWriteConfig cfg = hoodieWriteConfig;
|
||||||
final String instantTime = "007";
|
final String instantTime = "007";
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(basePath).build();
|
||||||
String basePathStr = basePath;
|
String basePathStr = basePath;
|
||||||
HoodieTable table = getHoodieTable(metaClient, cfg);
|
HoodieTable table = getHoodieTable(metaClient, cfg);
|
||||||
jsc.parallelize(Arrays.asList(1)).map(e -> {
|
jsc.parallelize(Arrays.asList(1)).map(e -> {
|
||||||
@@ -894,7 +894,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
assertNoWriteErrors(statuses);
|
assertNoWriteErrors(statuses);
|
||||||
|
|
||||||
assertEquals(2, statuses.size(), "2 files needs to be committed.");
|
assertEquals(2, statuses.size(), "2 files needs to be committed.");
|
||||||
HoodieTableMetaClient metadata = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metadata = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
|
|
||||||
HoodieTable table = getHoodieTable(metadata, config);
|
HoodieTable table = getHoodieTable(metadata, config);
|
||||||
BaseFileOnlyView fileSystemView = table.getBaseFileOnlyView();
|
BaseFileOnlyView fileSystemView = table.getBaseFileOnlyView();
|
||||||
@@ -1001,7 +1001,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
+ readRowKeysFromParquet(hadoopConf, new Path(basePath, statuses.get(1).getStat().getPath())).size(),
|
+ readRowKeysFromParquet(hadoopConf, new Path(basePath, statuses.get(1).getStat().getPath())).size(),
|
||||||
"file should contain 340 records");
|
"file should contain 340 records");
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
HoodieTable table = getHoodieTable(metaClient, config);
|
HoodieTable table = getHoodieTable(metaClient, config);
|
||||||
List<HoodieBaseFile> files = table.getBaseFileOnlyView()
|
List<HoodieBaseFile> files = table.getBaseFileOnlyView()
|
||||||
.getLatestBaseFilesBeforeOrOn(testPartitionPath, commitTime3).collect(Collectors.toList());
|
.getLatestBaseFilesBeforeOrOn(testPartitionPath, commitTime3).collect(Collectors.toList());
|
||||||
@@ -1428,7 +1428,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
|
|
||||||
HoodieWriteConfig cfg = getConfigBuilder().withAutoCommit(false).build();
|
HoodieWriteConfig cfg = getConfigBuilder().withAutoCommit(false).build();
|
||||||
try (SparkRDDWriteClient client = getHoodieWriteClient(cfg);) {
|
try (SparkRDDWriteClient client = getHoodieWriteClient(cfg);) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
HoodieSparkTable table = HoodieSparkTable.create(cfg, context, metaClient);
|
HoodieSparkTable table = HoodieSparkTable.create(cfg, context, metaClient);
|
||||||
|
|
||||||
String instantTime = "000";
|
String instantTime = "000";
|
||||||
@@ -1533,7 +1533,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@ValueSource(booleans = {true, false})
|
@ValueSource(booleans = {true, false})
|
||||||
public void testConsistencyCheckDuringFinalize(boolean enableOptimisticConsistencyGuard) throws Exception {
|
public void testConsistencyCheckDuringFinalize(boolean enableOptimisticConsistencyGuard) throws Exception {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
String instantTime = "000";
|
String instantTime = "000";
|
||||||
HoodieWriteConfig cfg = getConfigBuilder().withAutoCommit(false).withConsistencyGuardConfig(ConsistencyGuardConfig.newBuilder()
|
HoodieWriteConfig cfg = getConfigBuilder().withAutoCommit(false).withConsistencyGuardConfig(ConsistencyGuardConfig.newBuilder()
|
||||||
.withEnableOptimisticConsistencyGuard(enableOptimisticConsistencyGuard).build()).build();
|
.withEnableOptimisticConsistencyGuard(enableOptimisticConsistencyGuard).build()).build();
|
||||||
@@ -1559,7 +1559,7 @@ public class TestHoodieClientOnCopyOnWriteStorage extends HoodieClientTestBase {
|
|||||||
|
|
||||||
private void testRollbackAfterConsistencyCheckFailureUsingFileList(boolean rollbackUsingMarkers, boolean enableOptimisticConsistencyGuard) throws Exception {
|
private void testRollbackAfterConsistencyCheckFailureUsingFileList(boolean rollbackUsingMarkers, boolean enableOptimisticConsistencyGuard) throws Exception {
|
||||||
String instantTime = "000";
|
String instantTime = "000";
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
HoodieWriteConfig cfg = !enableOptimisticConsistencyGuard ? getConfigBuilder().withRollbackUsingMarkers(rollbackUsingMarkers).withAutoCommit(false)
|
HoodieWriteConfig cfg = !enableOptimisticConsistencyGuard ? getConfigBuilder().withRollbackUsingMarkers(rollbackUsingMarkers).withAutoCommit(false)
|
||||||
.withConsistencyGuardConfig(ConsistencyGuardConfig.newBuilder().withConsistencyCheckEnabled(true)
|
.withConsistencyGuardConfig(ConsistencyGuardConfig.newBuilder().withConsistencyCheckEnabled(true)
|
||||||
.withMaxConsistencyCheckIntervalMs(1).withInitialConsistencyCheckIntervalMs(1).withEnableOptimisticConsistencyGuard(enableOptimisticConsistencyGuard).build()).build() :
|
.withMaxConsistencyCheckIntervalMs(1).withInitialConsistencyCheckIntervalMs(1).withEnableOptimisticConsistencyGuard(enableOptimisticConsistencyGuard).build()).build() :
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class TestMultiFS extends HoodieClientTestHarness {
|
|||||||
|
|
||||||
// Read from hdfs
|
// Read from hdfs
|
||||||
FileSystem fs = FSUtils.getFs(dfsBasePath, HoodieTestUtils.getDefaultHadoopConf());
|
FileSystem fs = FSUtils.getFs(dfsBasePath, HoodieTestUtils.getDefaultHadoopConf());
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(fs.getConf(), dfsBasePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(dfsBasePath).build();
|
||||||
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
||||||
Dataset<Row> readRecords = HoodieClientTestUtils.readCommit(dfsBasePath, sqlContext, timeline, readCommitTime);
|
Dataset<Row> readRecords = HoodieClientTestUtils.readCommit(dfsBasePath, sqlContext, timeline, readCommitTime);
|
||||||
assertEquals(readRecords.count(), records.size(), "Should contain 100 records");
|
assertEquals(readRecords.count(), records.size(), "Should contain 100 records");
|
||||||
@@ -112,7 +112,7 @@ public class TestMultiFS extends HoodieClientTestHarness {
|
|||||||
|
|
||||||
LOG.info("Reading from path: " + tablePath);
|
LOG.info("Reading from path: " + tablePath);
|
||||||
fs = FSUtils.getFs(tablePath, HoodieTestUtils.getDefaultHadoopConf());
|
fs = FSUtils.getFs(tablePath, HoodieTestUtils.getDefaultHadoopConf());
|
||||||
metaClient = new HoodieTableMetaClient(fs.getConf(), tablePath);
|
metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).build();
|
||||||
timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
||||||
Dataset<Row> localReadRecords =
|
Dataset<Row> localReadRecords =
|
||||||
HoodieClientTestUtils.readCommit(tablePath, sqlContext, timeline, writeCommitTime);
|
HoodieClientTestUtils.readCommit(tablePath, sqlContext, timeline, writeCommitTime);
|
||||||
|
|||||||
@@ -118,13 +118,13 @@ public class TestHoodieBackedMetadata extends HoodieClientTestHarness {
|
|||||||
|
|
||||||
// Metadata table should not exist until created for the first time
|
// Metadata table should not exist until created for the first time
|
||||||
assertFalse(fs.exists(new Path(metadataTableBasePath)), "Metadata table should not exist");
|
assertFalse(fs.exists(new Path(metadataTableBasePath)), "Metadata table should not exist");
|
||||||
assertThrows(TableNotFoundException.class, () -> new HoodieTableMetaClient(hadoopConf, metadataTableBasePath));
|
assertThrows(TableNotFoundException.class, () -> HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(metadataTableBasePath).build());
|
||||||
|
|
||||||
// Metadata table is not created if disabled by config
|
// Metadata table is not created if disabled by config
|
||||||
try (SparkRDDWriteClient client = new SparkRDDWriteClient(engineContext, getWriteConfig(true, false))) {
|
try (SparkRDDWriteClient client = new SparkRDDWriteClient(engineContext, getWriteConfig(true, false))) {
|
||||||
client.startCommitWithTime("001");
|
client.startCommitWithTime("001");
|
||||||
assertFalse(fs.exists(new Path(metadataTableBasePath)), "Metadata table should not be created");
|
assertFalse(fs.exists(new Path(metadataTableBasePath)), "Metadata table should not be created");
|
||||||
assertThrows(TableNotFoundException.class, () -> new HoodieTableMetaClient(hadoopConf, metadataTableBasePath));
|
assertThrows(TableNotFoundException.class, () -> HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(metadataTableBasePath).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Metadata table created when enabled by config & sync is called
|
// Metadata table created when enabled by config & sync is called
|
||||||
@@ -565,8 +565,8 @@ public class TestHoodieBackedMetadata extends HoodieClientTestHarness {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HoodieTableMetaClient metadataMetaClient = new HoodieTableMetaClient(hadoopConf, metadataTableBasePath);
|
HoodieTableMetaClient metadataMetaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(metadataTableBasePath).build();
|
||||||
HoodieTableMetaClient datasetMetaClient = new HoodieTableMetaClient(hadoopConf, config.getBasePath());
|
HoodieTableMetaClient datasetMetaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(config.getBasePath()).build();
|
||||||
HoodieActiveTimeline metadataTimeline = metadataMetaClient.getActiveTimeline();
|
HoodieActiveTimeline metadataTimeline = metadataMetaClient.getActiveTimeline();
|
||||||
// check that there are compactions.
|
// check that there are compactions.
|
||||||
assertTrue(metadataTimeline.getCommitTimeline().filterCompletedInstants().countInstants() > 0);
|
assertTrue(metadataTimeline.getCommitTimeline().filterCompletedInstants().countInstants() > 0);
|
||||||
@@ -869,7 +869,7 @@ public class TestHoodieBackedMetadata extends HoodieClientTestHarness {
|
|||||||
|
|
||||||
// Metadata table should be in sync with the dataset
|
// Metadata table should be in sync with the dataset
|
||||||
assertTrue(metadata(client).isInSync());
|
assertTrue(metadata(client).isInSync());
|
||||||
HoodieTableMetaClient metadataMetaClient = new HoodieTableMetaClient(hadoopConf, metadataTableBasePath);
|
HoodieTableMetaClient metadataMetaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(metadataTableBasePath).build();
|
||||||
|
|
||||||
// Metadata table is MOR
|
// Metadata table is MOR
|
||||||
assertEquals(metadataMetaClient.getTableType(), HoodieTableType.MERGE_ON_READ, "Metadata Table should be MOR");
|
assertEquals(metadataMetaClient.getTableType(), HoodieTableType.MERGE_ON_READ, "Metadata Table should be MOR");
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
**/
|
**/
|
||||||
protected void validateDeltaCommit(String latestDeltaCommit, final Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> fgIdToCompactionOperation,
|
protected void validateDeltaCommit(String latestDeltaCommit, final Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> fgIdToCompactionOperation,
|
||||||
HoodieWriteConfig cfg) {
|
HoodieWriteConfig cfg) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable table = getHoodieTable(metaClient, cfg);
|
HoodieTable table = getHoodieTable(metaClient, cfg);
|
||||||
List<FileSlice> fileSliceList = getCurrentLatestFileSlices(table);
|
List<FileSlice> fileSliceList = getCurrentLatestFileSlices(table);
|
||||||
fileSliceList.forEach(fileSlice -> {
|
fileSliceList.forEach(fileSlice -> {
|
||||||
@@ -109,7 +109,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
List<HoodieRecord> records, HoodieWriteConfig cfg, boolean insertFirst, List<String> expPendingCompactionInstants)
|
List<HoodieRecord> records, HoodieWriteConfig cfg, boolean insertFirst, List<String> expPendingCompactionInstants)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
List<Pair<String, HoodieCompactionPlan>> pendingCompactions = readClient.getPendingCompactions();
|
List<Pair<String, HoodieCompactionPlan>> pendingCompactions = readClient.getPendingCompactions();
|
||||||
List<String> gotPendingCompactionInstants =
|
List<String> gotPendingCompactionInstants =
|
||||||
pendingCompactions.stream().map(pc -> pc.getKey()).sorted().collect(Collectors.toList());
|
pendingCompactions.stream().map(pc -> pc.getKey()).sorted().collect(Collectors.toList());
|
||||||
@@ -131,7 +131,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
client.commit(firstInstant, statuses);
|
client.commit(firstInstant, statuses);
|
||||||
}
|
}
|
||||||
assertNoWriteErrors(statusList);
|
assertNoWriteErrors(statusList);
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
||||||
List<HoodieBaseFile> dataFilesToRead = getCurrentLatestBaseFiles(hoodieTable);
|
List<HoodieBaseFile> dataFilesToRead = getCurrentLatestBaseFiles(hoodieTable);
|
||||||
assertTrue(dataFilesToRead.stream().findAny().isPresent(),
|
assertTrue(dataFilesToRead.stream().findAny().isPresent(),
|
||||||
@@ -142,7 +142,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
int numRecords = records.size();
|
int numRecords = records.size();
|
||||||
for (String instantTime : deltaInstants) {
|
for (String instantTime : deltaInstants) {
|
||||||
records = dataGen.generateUpdates(instantTime, numRecords);
|
records = dataGen.generateUpdates(instantTime, numRecords);
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(instantTime, records, client, metaClient, cfg, false);
|
createNextDeltaCommit(instantTime, records, client, metaClient, cfg, false);
|
||||||
validateDeltaCommit(instantTime, fgIdToCompactionOperation, cfg);
|
validateDeltaCommit(instantTime, fgIdToCompactionOperation, cfg);
|
||||||
}
|
}
|
||||||
@@ -150,7 +150,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void moveCompactionFromRequestedToInflight(String compactionInstantTime, HoodieWriteConfig cfg) {
|
protected void moveCompactionFromRequestedToInflight(String compactionInstantTime, HoodieWriteConfig cfg) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieInstant compactionInstant = HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime);
|
HoodieInstant compactionInstant = HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime);
|
||||||
metaClient.getActiveTimeline().transitionCompactionRequestedToInflight(compactionInstant);
|
metaClient.getActiveTimeline().transitionCompactionRequestedToInflight(compactionInstant);
|
||||||
HoodieInstant instant = metaClient.getActiveTimeline().reload().filterPendingCompactionTimeline().getInstants()
|
HoodieInstant instant = metaClient.getActiveTimeline().reload().filterPendingCompactionTimeline().getInstants()
|
||||||
@@ -160,7 +160,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
|
|
||||||
protected void scheduleCompaction(String compactionInstantTime, SparkRDDWriteClient client, HoodieWriteConfig cfg) {
|
protected void scheduleCompaction(String compactionInstantTime, SparkRDDWriteClient client, HoodieWriteConfig cfg) {
|
||||||
client.scheduleCompactionAtInstant(compactionInstantTime, Option.empty());
|
client.scheduleCompactionAtInstant(compactionInstantTime, Option.empty());
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieInstant instant = metaClient.getActiveTimeline().filterPendingCompactionTimeline().lastInstant().get();
|
HoodieInstant instant = metaClient.getActiveTimeline().filterPendingCompactionTimeline().lastInstant().get();
|
||||||
assertEquals(compactionInstantTime, instant.getTimestamp(), "Last compaction instant must be the one set");
|
assertEquals(compactionInstantTime, instant.getTimestamp(), "Last compaction instant must be the one set");
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// verify that there is a commit
|
// verify that there is a commit
|
||||||
table = getHoodieTable(new HoodieTableMetaClient(hadoopConf, cfg.getBasePath(), true), cfg);
|
table = getHoodieTable(HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).setLoadActiveTimelineOnLoad(true).build(), cfg);
|
||||||
HoodieTimeline timeline = table.getMetaClient().getCommitTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = table.getMetaClient().getCommitTimeline().filterCompletedInstants();
|
||||||
String latestCompactionCommitTime = timeline.lastInstant().get().getTimestamp();
|
String latestCompactionCommitTime = timeline.lastInstant().get().getTimestamp();
|
||||||
assertEquals(latestCompactionCommitTime, compactionInstantTime,
|
assertEquals(latestCompactionCommitTime, compactionInstantTime,
|
||||||
@@ -214,7 +214,7 @@ public class CompactionTestBase extends HoodieClientTestBase {
|
|||||||
"Compacted files should not show up in latest slices");
|
"Compacted files should not show up in latest slices");
|
||||||
|
|
||||||
// verify that there is a commit
|
// verify that there is a commit
|
||||||
table = getHoodieTable(new HoodieTableMetaClient(hadoopConf, cfg.getBasePath(), true), cfg);
|
table = getHoodieTable(HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).setLoadActiveTimelineOnLoad(true).build(), cfg);
|
||||||
HoodieTimeline timeline = table.getMetaClient().getCommitTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = table.getMetaClient().getCommitTimeline().filterCompletedInstants();
|
||||||
// verify compaction commit is visible in timeline
|
// verify compaction commit is visible in timeline
|
||||||
assertTrue(timeline.filterCompletedInstants().getInstants()
|
assertTrue(timeline.filterCompletedInstants().getInstants()
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
// Schedule compaction but do not run them
|
// Schedule compaction but do not run them
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
|
|
||||||
HoodieInstant pendingCompactionInstant =
|
HoodieInstant pendingCompactionInstant =
|
||||||
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
||||||
@@ -86,12 +86,12 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
moveCompactionFromRequestedToInflight(compactionInstantTime, cfg);
|
moveCompactionFromRequestedToInflight(compactionInstantTime, cfg);
|
||||||
|
|
||||||
// Reload and rollback inflight compaction
|
// Reload and rollback inflight compaction
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = HoodieSparkTable.create(cfg, context, metaClient);
|
HoodieTable hoodieTable = HoodieSparkTable.create(cfg, context, metaClient);
|
||||||
|
|
||||||
client.rollbackInflightCompaction(
|
client.rollbackInflightCompaction(
|
||||||
new HoodieInstant(State.INFLIGHT, HoodieTimeline.COMPACTION_ACTION, compactionInstantTime), hoodieTable);
|
new HoodieInstant(State.INFLIGHT, HoodieTimeline.COMPACTION_ACTION, compactionInstantTime), hoodieTable);
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
pendingCompactionInstant = metaClient.getCommitsAndCompactionTimeline().filterPendingCompactionTimeline()
|
pendingCompactionInstant = metaClient.getCommitsAndCompactionTimeline().filterPendingCompactionTimeline()
|
||||||
.getInstants().findFirst().get();
|
.getInstants().findFirst().get();
|
||||||
assertEquals("compaction", pendingCompactionInstant.getAction());
|
assertEquals("compaction", pendingCompactionInstant.getAction());
|
||||||
@@ -129,10 +129,10 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
// Schedule compaction but do not run them
|
// Schedule compaction but do not run them
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(inflightInstantTime, records, client, metaClient, cfg, true);
|
createNextDeltaCommit(inflightInstantTime, records, client, metaClient, cfg, true);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieInstant pendingCompactionInstant =
|
HoodieInstant pendingCompactionInstant =
|
||||||
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
||||||
assertEquals(compactionInstantTime, pendingCompactionInstant.getTimestamp(),
|
assertEquals(compactionInstantTime, pendingCompactionInstant.getTimestamp(),
|
||||||
@@ -145,7 +145,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
client.startCommitWithTime(nextInflightInstantTime);
|
client.startCommitWithTime(nextInflightInstantTime);
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
inflightInstant = metaClient.getActiveTimeline().filterPendingExcludingCompaction().firstInstant().get();
|
inflightInstant = metaClient.getActiveTimeline().filterPendingExcludingCompaction().firstInstant().get();
|
||||||
assertEquals(inflightInstant.getTimestamp(), nextInflightInstantTime, "inflight instant has expected instant time");
|
assertEquals(inflightInstant.getTimestamp(), nextInflightInstantTime, "inflight instant has expected instant time");
|
||||||
assertEquals(1, metaClient.getActiveTimeline()
|
assertEquals(1, metaClient.getActiveTimeline()
|
||||||
@@ -177,7 +177,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
new ArrayList<>());
|
new ArrayList<>());
|
||||||
|
|
||||||
// Schedule and mark compaction instant as inflight
|
// Schedule and mark compaction instant as inflight
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
moveCompactionFromRequestedToInflight(compactionInstantTime, cfg);
|
moveCompactionFromRequestedToInflight(compactionInstantTime, cfg);
|
||||||
@@ -210,7 +210,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
|
|
||||||
// Schedule compaction but do not run them
|
// Schedule compaction but do not run them
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieInstant pendingCompactionInstant =
|
HoodieInstant pendingCompactionInstant =
|
||||||
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
metaClient.getActiveTimeline().filterPendingCompactionTimeline().firstInstant().get();
|
||||||
assertEquals(compactionInstantTime, pendingCompactionInstant.getTimestamp(), "Pending Compaction instant has expected instant time");
|
assertEquals(compactionInstantTime, pendingCompactionInstant.getTimestamp(), "Pending Compaction instant has expected instant time");
|
||||||
@@ -239,10 +239,10 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
records = runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
records = runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
||||||
new ArrayList<>());
|
new ArrayList<>());
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(inflightInstantTime, records, client, metaClient, cfg, true);
|
createNextDeltaCommit(inflightInstantTime, records, client, metaClient, cfg, true);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieInstant inflightInstant =
|
HoodieInstant inflightInstant =
|
||||||
metaClient.getActiveTimeline().filterPendingExcludingCompaction().firstInstant().get();
|
metaClient.getActiveTimeline().filterPendingExcludingCompaction().firstInstant().get();
|
||||||
assertEquals(inflightInstantTime, inflightInstant.getTimestamp(), "inflight instant has expected instant time");
|
assertEquals(inflightInstantTime, inflightInstant.getTimestamp(), "inflight instant has expected instant time");
|
||||||
@@ -304,7 +304,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
||||||
new ArrayList<>());
|
new ArrayList<>());
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
||||||
scheduleAndExecuteCompaction(compactionInstantTime, client, hoodieTable, cfg, numRecs, false);
|
scheduleAndExecuteCompaction(compactionInstantTime, client, hoodieTable, cfg, numRecs, false);
|
||||||
}
|
}
|
||||||
@@ -328,7 +328,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
records = runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
records = runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
||||||
new ArrayList<>());
|
new ArrayList<>());
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
|
|
||||||
@@ -356,7 +356,7 @@ public class TestAsyncCompaction extends CompactionTestBase {
|
|||||||
runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
runNextDeltaCommits(client, readClient, Arrays.asList(firstInstantTime, secondInstantTime), records, cfg, true,
|
||||||
new ArrayList<>());
|
new ArrayList<>());
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
HoodieTable hoodieTable = getHoodieTable(metaClient, cfg);
|
||||||
scheduleCompaction(compactionInstantTime, client, cfg);
|
scheduleCompaction(compactionInstantTime, client, cfg);
|
||||||
metaClient.reloadActiveTimeline();
|
metaClient.reloadActiveTimeline();
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
HoodieReadClient readClient = getHoodieReadClient(cfg.getBasePath());
|
HoodieReadClient readClient = getHoodieReadClient(cfg.getBasePath());
|
||||||
List<String> instants = IntStream.range(0, 2).mapToObj(i -> HoodieActiveTimeline.createNewInstantTime()).collect(Collectors.toList());
|
List<String> instants = IntStream.range(0, 2).mapToObj(i -> HoodieActiveTimeline.createNewInstantTime()).collect(Collectors.toList());
|
||||||
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
|
|
||||||
// Then: ensure no compaction is executedm since there are only 2 delta commits
|
// Then: ensure no compaction is executedm since there are only 2 delta commits
|
||||||
assertEquals(2, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(2, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
@@ -76,12 +76,12 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
||||||
|
|
||||||
// third commit, that will trigger compaction
|
// third commit, that will trigger compaction
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
String finalInstant = HoodieActiveTimeline.createNewInstantTime();
|
String finalInstant = HoodieActiveTimeline.createNewInstantTime();
|
||||||
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 100), writeClient, metaClient, cfg, false);
|
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 100), writeClient, metaClient, cfg, false);
|
||||||
|
|
||||||
// Then: ensure the file slices are compacted as per policy
|
// Then: ensure the file slices are compacted as per policy
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
assertEquals(HoodieTimeline.COMMIT_ACTION, metaClient.getActiveTimeline().lastInstant().get().getAction());
|
assertEquals(HoodieTimeline.COMMIT_ACTION, metaClient.getActiveTimeline().lastInstant().get().getAction());
|
||||||
}
|
}
|
||||||
@@ -100,11 +100,11 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
|
|
||||||
// after 10s, that will trigger compaction
|
// after 10s, that will trigger compaction
|
||||||
String finalInstant = HoodieActiveTimeline.createNewInstantTime(10000);
|
String finalInstant = HoodieActiveTimeline.createNewInstantTime(10000);
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 100), writeClient, metaClient, cfg, false);
|
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 100), writeClient, metaClient, cfg, false);
|
||||||
|
|
||||||
// Then: ensure the file slices are compacted as per policy
|
// Then: ensure the file slices are compacted as per policy
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(3, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(3, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
assertEquals(HoodieTimeline.COMMIT_ACTION, metaClient.getActiveTimeline().lastInstant().get().getAction());
|
assertEquals(HoodieTimeline.COMMIT_ACTION, metaClient.getActiveTimeline().lastInstant().get().getAction());
|
||||||
}
|
}
|
||||||
@@ -121,17 +121,17 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
||||||
// Then: trigger the compaction because reach 3 commits.
|
// Then: trigger the compaction because reach 3 commits.
|
||||||
String finalInstant = HoodieActiveTimeline.createNewInstantTime();
|
String finalInstant = HoodieActiveTimeline.createNewInstantTime();
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
// 4th commit, that will trigger compaction because reach the time elapsed
|
// 4th commit, that will trigger compaction because reach the time elapsed
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
finalInstant = HoodieActiveTimeline.createNewInstantTime(20000);
|
finalInstant = HoodieActiveTimeline.createNewInstantTime(20000);
|
||||||
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(6, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(6, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,16 +145,16 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
HoodieReadClient readClient = getHoodieReadClient(cfg.getBasePath());
|
HoodieReadClient readClient = getHoodieReadClient(cfg.getBasePath());
|
||||||
List<String> instants = IntStream.range(0, 3).mapToObj(i -> HoodieActiveTimeline.createNewInstantTime()).collect(Collectors.toList());
|
List<String> instants = IntStream.range(0, 3).mapToObj(i -> HoodieActiveTimeline.createNewInstantTime()).collect(Collectors.toList());
|
||||||
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
runNextDeltaCommits(writeClient, readClient, instants, records, cfg, true, new ArrayList<>());
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
|
|
||||||
// Then: ensure no compaction is executedm since there are only 3 delta commits
|
// Then: ensure no compaction is executedm since there are only 3 delta commits
|
||||||
assertEquals(3, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(3, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
// 4th commit, that will trigger compaction
|
// 4th commit, that will trigger compaction
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
String finalInstant = HoodieActiveTimeline.createNewInstantTime(20000);
|
String finalInstant = HoodieActiveTimeline.createNewInstantTime(20000);
|
||||||
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
createNextDeltaCommit(finalInstant, dataGen.generateUpdates(finalInstant, 10), writeClient, metaClient, cfg, false);
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(5, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(5, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -183,12 +183,12 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(2, 60, CompactionTriggerStrategy.NUM_COMMITS);
|
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(2, 60, CompactionTriggerStrategy.NUM_COMMITS);
|
||||||
String instantTime3 = HoodieActiveTimeline.createNewInstantTime();
|
String instantTime3 = HoodieActiveTimeline.createNewInstantTime();
|
||||||
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
createNextDeltaCommit(instantTime3, dataGen.generateUpdates(instantTime3, 100), writeClient, metaClient, inlineCfg, false);
|
createNextDeltaCommit(instantTime3, dataGen.generateUpdates(instantTime3, 100), writeClient, metaClient, inlineCfg, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then: 1 delta commit is done, the failed compaction is retried
|
// Then: 1 delta commit is done, the failed compaction is retried
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
assertEquals(instantTime2, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
assertEquals(instantTime2, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
||||||
}
|
}
|
||||||
@@ -218,13 +218,13 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(5, 10, CompactionTriggerStrategy.TIME_ELAPSED);
|
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(5, 10, CompactionTriggerStrategy.TIME_ELAPSED);
|
||||||
String instantTime2;
|
String instantTime2;
|
||||||
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
instantTime2 = HoodieActiveTimeline.createNewInstantTime();
|
instantTime2 = HoodieActiveTimeline.createNewInstantTime();
|
||||||
createNextDeltaCommit(instantTime2, dataGen.generateUpdates(instantTime2, 10), writeClient, metaClient, inlineCfg, false);
|
createNextDeltaCommit(instantTime2, dataGen.generateUpdates(instantTime2, 10), writeClient, metaClient, inlineCfg, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then: 1 delta commit is done, the failed compaction is retried
|
// Then: 1 delta commit is done, the failed compaction is retried
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
assertEquals(instantTime, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
assertEquals(instantTime, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
||||||
}
|
}
|
||||||
@@ -255,13 +255,13 @@ public class TestInlineCompaction extends CompactionTestBase {
|
|||||||
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(3, 20, CompactionTriggerStrategy.NUM_OR_TIME);
|
HoodieWriteConfig inlineCfg = getConfigForInlineCompaction(3, 20, CompactionTriggerStrategy.NUM_OR_TIME);
|
||||||
String instantTime2;
|
String instantTime2;
|
||||||
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
try (SparkRDDWriteClient<?> writeClient = getHoodieWriteClient(inlineCfg)) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
instantTime2 = HoodieActiveTimeline.createNewInstantTime();
|
instantTime2 = HoodieActiveTimeline.createNewInstantTime();
|
||||||
createNextDeltaCommit(instantTime2, dataGen.generateUpdates(instantTime2, 10), writeClient, metaClient, inlineCfg, false);
|
createNextDeltaCommit(instantTime2, dataGen.generateUpdates(instantTime2, 10), writeClient, metaClient, inlineCfg, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Then: 1 delta commit is done, the failed compaction is retried
|
// Then: 1 delta commit is done, the failed compaction is retried
|
||||||
metaClient = new HoodieTableMetaClient(hadoopConf, cfg.getBasePath());
|
metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(cfg.getBasePath()).build();
|
||||||
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
assertEquals(4, metaClient.getActiveTimeline().getCommitsAndCompactionTimeline().countInstants());
|
||||||
assertEquals(instantTime, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
assertEquals(instantTime, metaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants().firstInstant().get().getTimestamp());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ public class HoodieClientTestBase extends HoodieClientTestHarness {
|
|||||||
return (commit, numRecords) -> {
|
return (commit, numRecords) -> {
|
||||||
final SparkHoodieIndex index = SparkHoodieIndex.createIndex(writeConfig);
|
final SparkHoodieIndex index = SparkHoodieIndex.createIndex(writeConfig);
|
||||||
List<HoodieRecord> records = recordGenFunction.apply(commit, numRecords);
|
List<HoodieRecord> records = recordGenFunction.apply(commit, numRecords);
|
||||||
final HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath, true);
|
final HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
HoodieSparkTable table = HoodieSparkTable.create(writeConfig, context, metaClient);
|
HoodieSparkTable table = HoodieSparkTable.create(writeConfig, context, metaClient);
|
||||||
JavaRDD<HoodieRecord> taggedRecords = index.tagLocation(jsc.parallelize(records, 1), context, table);
|
JavaRDD<HoodieRecord> taggedRecords = index.tagLocation(jsc.parallelize(records, 1), context, table);
|
||||||
return taggedRecords.collect();
|
return taggedRecords.collect();
|
||||||
@@ -241,7 +241,7 @@ public class HoodieClientTestBase extends HoodieClientTestHarness {
|
|||||||
return (numRecords) -> {
|
return (numRecords) -> {
|
||||||
final SparkHoodieIndex index = SparkHoodieIndex.createIndex(writeConfig);
|
final SparkHoodieIndex index = SparkHoodieIndex.createIndex(writeConfig);
|
||||||
List<HoodieKey> records = keyGenFunction.apply(numRecords);
|
List<HoodieKey> records = keyGenFunction.apply(numRecords);
|
||||||
final HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath, true);
|
final HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
HoodieSparkTable table = HoodieSparkTable.create(writeConfig, context, metaClient);
|
HoodieSparkTable table = HoodieSparkTable.create(writeConfig, context, metaClient);
|
||||||
JavaRDD<HoodieRecord> recordsToDelete = jsc.parallelize(records, 1)
|
JavaRDD<HoodieRecord> recordsToDelete = jsc.parallelize(records, 1)
|
||||||
.map(key -> new HoodieRecord(key, new EmptyHoodieRecordPayload()));
|
.map(key -> new HoodieRecord(key, new EmptyHoodieRecordPayload()));
|
||||||
@@ -438,7 +438,7 @@ public class HoodieClientTestBase extends HoodieClientTestHarness {
|
|||||||
assertPartitionMetadataForRecords(records, fs);
|
assertPartitionMetadataForRecords(records, fs);
|
||||||
|
|
||||||
// verify that there is a commit
|
// verify that there is a commit
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
||||||
|
|
||||||
if (assertForCommit) {
|
if (assertForCommit) {
|
||||||
@@ -506,7 +506,7 @@ public class HoodieClientTestBase extends HoodieClientTestHarness {
|
|||||||
assertPartitionMetadataForKeys(keysToDelete, fs);
|
assertPartitionMetadataForKeys(keysToDelete, fs);
|
||||||
|
|
||||||
// verify that there is a commit
|
// verify that there is a commit
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
HoodieTimeline timeline = new HoodieActiveTimeline(metaClient).getCommitTimeline();
|
||||||
|
|
||||||
if (assertForCommit) {
|
if (assertForCommit) {
|
||||||
|
|||||||
@@ -346,7 +346,7 @@ public abstract class HoodieClientTestHarness extends HoodieCommonTestHarness im
|
|||||||
}
|
}
|
||||||
|
|
||||||
public HoodieTableMetaClient getHoodieMetaClient(Configuration conf, String basePath) {
|
public HoodieTableMetaClient getHoodieMetaClient(Configuration conf, String basePath) {
|
||||||
metaClient = new HoodieTableMetaClient(conf, basePath);
|
metaClient = HoodieTableMetaClient.builder().setConf(conf).setBasePath(basePath).build();
|
||||||
return metaClient;
|
return metaClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ public class HoodieClientTestUtils {
|
|||||||
String... paths) {
|
String... paths) {
|
||||||
List<HoodieBaseFile> latestFiles = new ArrayList<>();
|
List<HoodieBaseFile> latestFiles = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(fs.getConf(), basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
for (String path : paths) {
|
for (String path : paths) {
|
||||||
BaseFileOnlyView fileSystemView = new HoodieTableFileSystemView(metaClient,
|
BaseFileOnlyView fileSystemView = new HoodieTableFileSystemView(metaClient,
|
||||||
metaClient.getCommitsTimeline().filterCompletedInstants(), fs.globStatus(new Path(path)));
|
metaClient.getCommitsTimeline().filterCompletedInstants(), fs.globStatus(new Path(path)));
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class HoodieMergeOnReadTestUtils {
|
|||||||
public static List<GenericRecord> getRecordsUsingInputFormat(Configuration conf, List<String> inputPaths, String basePath, JobConf jobConf, boolean realtime, Schema rawSchema,
|
public static List<GenericRecord> getRecordsUsingInputFormat(Configuration conf, List<String> inputPaths, String basePath, JobConf jobConf, boolean realtime, Schema rawSchema,
|
||||||
String rawHiveColumnTypes, boolean projectCols, List<String> projectedColumns) {
|
String rawHiveColumnTypes, boolean projectCols, List<String> projectedColumns) {
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(conf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(conf).setBasePath(basePath).build();
|
||||||
FileInputFormat inputFormat = HoodieInputFormatUtils.getInputFormat(metaClient.getTableConfig().getBaseFileFormat(), realtime, jobConf);
|
FileInputFormat inputFormat = HoodieInputFormatUtils.getInputFormat(metaClient.getTableConfig().getBaseFileFormat(), realtime, jobConf);
|
||||||
|
|
||||||
Schema schema = HoodieAvroUtils.addMetadataFields(rawSchema);
|
Schema schema = HoodieAvroUtils.addMetadataFields(rawSchema);
|
||||||
|
|||||||
@@ -94,26 +94,7 @@ public class HoodieTableMetaClient implements Serializable {
|
|||||||
private HoodieArchivedTimeline archivedTimeline;
|
private HoodieArchivedTimeline archivedTimeline;
|
||||||
private ConsistencyGuardConfig consistencyGuardConfig = ConsistencyGuardConfig.newBuilder().build();
|
private ConsistencyGuardConfig consistencyGuardConfig = ConsistencyGuardConfig.newBuilder().build();
|
||||||
|
|
||||||
public HoodieTableMetaClient(Configuration conf, String basePath) {
|
private HoodieTableMetaClient(Configuration conf, String basePath, boolean loadActiveTimelineOnLoad,
|
||||||
// Do not load any timeline by default
|
|
||||||
this(conf, basePath, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HoodieTableMetaClient(Configuration conf, String basePath, String payloadClassName) {
|
|
||||||
this(conf, basePath, false, ConsistencyGuardConfig.newBuilder().build(), Option.of(TimelineLayoutVersion.CURR_LAYOUT_VERSION),
|
|
||||||
payloadClassName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HoodieTableMetaClient(Configuration conf, String basePath, boolean loadActiveTimelineOnLoad,
|
|
||||||
ConsistencyGuardConfig consistencyGuardConfig, Option<TimelineLayoutVersion> layoutVersion) {
|
|
||||||
this(conf, basePath, loadActiveTimelineOnLoad, consistencyGuardConfig, layoutVersion, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HoodieTableMetaClient(Configuration conf, String basePath, boolean loadActiveTimelineOnLoad) {
|
|
||||||
this(conf, basePath, loadActiveTimelineOnLoad, ConsistencyGuardConfig.newBuilder().build(), Option.of(TimelineLayoutVersion.CURR_LAYOUT_VERSION), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HoodieTableMetaClient(Configuration conf, String basePath, boolean loadActiveTimelineOnLoad,
|
|
||||||
ConsistencyGuardConfig consistencyGuardConfig, Option<TimelineLayoutVersion> layoutVersion,
|
ConsistencyGuardConfig consistencyGuardConfig, Option<TimelineLayoutVersion> layoutVersion,
|
||||||
String payloadClassName) {
|
String payloadClassName) {
|
||||||
LOG.info("Loading HoodieTableMetaClient from " + basePath);
|
LOG.info("Loading HoodieTableMetaClient from " + basePath);
|
||||||
@@ -152,9 +133,8 @@ public class HoodieTableMetaClient implements Serializable {
|
|||||||
public HoodieTableMetaClient() {}
|
public HoodieTableMetaClient() {}
|
||||||
|
|
||||||
public static HoodieTableMetaClient reload(HoodieTableMetaClient oldMetaClient) {
|
public static HoodieTableMetaClient reload(HoodieTableMetaClient oldMetaClient) {
|
||||||
return new HoodieTableMetaClient(oldMetaClient.hadoopConf.get(), oldMetaClient.basePath,
|
return HoodieTableMetaClient.builder().setConf(oldMetaClient.hadoopConf.get()).setBasePath(oldMetaClient.basePath).setLoadActiveTimelineOnLoad(oldMetaClient.loadActiveTimelineOnLoad)
|
||||||
oldMetaClient.loadActiveTimelineOnLoad, oldMetaClient.consistencyGuardConfig,
|
.setConsistencyGuardConfig(oldMetaClient.consistencyGuardConfig).setLayoutVersion(Option.of(oldMetaClient.timelineLayoutVersion)).setPayloadClassName(null).build();
|
||||||
Option.of(oldMetaClient.timelineLayoutVersion), null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -471,7 +451,7 @@ public class HoodieTableMetaClient implements Serializable {
|
|||||||
HoodieTableConfig.createHoodieProperties(fs, metaPathDir, props);
|
HoodieTableConfig.createHoodieProperties(fs, metaPathDir, props);
|
||||||
// We should not use fs.getConf as this might be different from the original configuration
|
// We should not use fs.getConf as this might be different from the original configuration
|
||||||
// used to create the fs in unit tests
|
// used to create the fs in unit tests
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(hadoopConf, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(basePath).build();
|
||||||
LOG.info("Finished initializing Table of type " + metaClient.getTableConfig().getTableType() + " from " + basePath);
|
LOG.info("Finished initializing Table of type " + metaClient.getTableConfig().getTableType() + " from " + basePath);
|
||||||
return metaClient;
|
return metaClient;
|
||||||
}
|
}
|
||||||
@@ -645,4 +625,59 @@ public class HoodieTableMetaClient implements Serializable {
|
|||||||
public void setActiveTimeline(HoodieActiveTimeline activeTimeline) {
|
public void setActiveTimeline(HoodieActiveTimeline activeTimeline) {
|
||||||
this.activeTimeline = activeTimeline;
|
this.activeTimeline = activeTimeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Builder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder for {@link HoodieTableMetaClient}.
|
||||||
|
*/
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
|
private Configuration conf;
|
||||||
|
private String basePath;
|
||||||
|
private boolean loadActiveTimelineOnLoad = false;
|
||||||
|
private String payloadClassName = null;
|
||||||
|
private ConsistencyGuardConfig consistencyGuardConfig = ConsistencyGuardConfig.newBuilder().build();
|
||||||
|
private Option<TimelineLayoutVersion> layoutVersion = Option.of(TimelineLayoutVersion.CURR_LAYOUT_VERSION);
|
||||||
|
|
||||||
|
public Builder setConf(Configuration conf) {
|
||||||
|
this.conf = conf;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setBasePath(String basePath) {
|
||||||
|
this.basePath = basePath;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setLoadActiveTimelineOnLoad(boolean loadActiveTimelineOnLoad) {
|
||||||
|
this.loadActiveTimelineOnLoad = loadActiveTimelineOnLoad;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setPayloadClassName(String payloadClassName) {
|
||||||
|
this.payloadClassName = payloadClassName;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setConsistencyGuardConfig(ConsistencyGuardConfig consistencyGuardConfig) {
|
||||||
|
this.consistencyGuardConfig = consistencyGuardConfig;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setLayoutVersion(Option<TimelineLayoutVersion> layoutVersion) {
|
||||||
|
this.layoutVersion = layoutVersion;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HoodieTableMetaClient build() {
|
||||||
|
ValidationUtils.checkArgument(conf != null, "Configuration needs to be set to init HoodieTableMetaClient");
|
||||||
|
ValidationUtils.checkArgument(basePath != null, "basePath needs to be set to init HoodieTableMetaClient");
|
||||||
|
return new HoodieTableMetaClient(conf, basePath,
|
||||||
|
loadActiveTimelineOnLoad, consistencyGuardConfig, layoutVersion, payloadClassName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ public abstract class AbstractHoodieLogRecordScanner {
|
|||||||
String latestInstantTime, boolean readBlocksLazily, boolean reverseReader, int bufferSize) {
|
String latestInstantTime, boolean readBlocksLazily, boolean reverseReader, int bufferSize) {
|
||||||
this.readerSchema = readerSchema;
|
this.readerSchema = readerSchema;
|
||||||
this.latestInstantTime = latestInstantTime;
|
this.latestInstantTime = latestInstantTime;
|
||||||
this.hoodieTableMetaClient = new HoodieTableMetaClient(fs.getConf(), basePath);
|
this.hoodieTableMetaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).build();
|
||||||
// load class from the payload fully qualified class name
|
// load class from the payload fully qualified class name
|
||||||
this.payloadClassFQN = this.hoodieTableMetaClient.getTableConfig().getPayloadClass();
|
this.payloadClassFQN = this.hoodieTableMetaClient.getTableConfig().getPayloadClass();
|
||||||
this.totalLogFiles.addAndGet(logFilePaths.size());
|
this.totalLogFiles.addAndGet(logFilePaths.size());
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public class LogReaderUtils {
|
|||||||
|
|
||||||
public static Schema readLatestSchemaFromLogFiles(String basePath, List<String> deltaFilePaths, Configuration config)
|
public static Schema readLatestSchemaFromLogFiles(String basePath, List<String> deltaFilePaths, Configuration config)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(config, basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(config).setBasePath(basePath).build();
|
||||||
List<String> deltaPaths = deltaFilePaths.stream().map(s -> new HoodieLogFile(new Path(s)))
|
List<String> deltaPaths = deltaFilePaths.stream().map(s -> new HoodieLogFile(new Path(s)))
|
||||||
.sorted(HoodieLogFile.getReverseLogFileComparator()).map(s -> s.getPath().toString())
|
.sorted(HoodieLogFile.getReverseLogFileComparator()).map(s -> s.getPath().toString())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class FileSystemViewManager {
|
|||||||
*/
|
*/
|
||||||
public SyncableFileSystemView getFileSystemView(String basePath) {
|
public SyncableFileSystemView getFileSystemView(String basePath) {
|
||||||
return globalViewMap.computeIfAbsent(basePath, (path) -> {
|
return globalViewMap.computeIfAbsent(basePath, (path) -> {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(conf.newCopy(), path);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(conf.newCopy()).setBasePath(path).build();
|
||||||
return viewCreator.apply(metaClient, viewStorageConfig);
|
return viewCreator.apply(metaClient, viewStorageConfig);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public abstract class BaseTableMetadata implements HoodieTableMetadata {
|
|||||||
this.engineContext = engineContext;
|
this.engineContext = engineContext;
|
||||||
this.hadoopConf = new SerializableConfiguration(engineContext.getHadoopConf());
|
this.hadoopConf = new SerializableConfiguration(engineContext.getHadoopConf());
|
||||||
this.datasetBasePath = datasetBasePath;
|
this.datasetBasePath = datasetBasePath;
|
||||||
this.datasetMetaClient = new HoodieTableMetaClient(hadoopConf.get(), datasetBasePath);
|
this.datasetMetaClient = HoodieTableMetaClient.builder().setConf(hadoopConf.get()).setBasePath(datasetBasePath).build();
|
||||||
this.spillableMapDirectory = spillableMapDirectory;
|
this.spillableMapDirectory = spillableMapDirectory;
|
||||||
this.metadataConfig = metadataConfig;
|
this.metadataConfig = metadataConfig;
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public class HoodieBackedTableMetadata extends BaseTableMetadata {
|
|||||||
if (enabled && this.metaClient == null) {
|
if (enabled && this.metaClient == null) {
|
||||||
this.metadataBasePath = HoodieTableMetadata.getMetadataTableBasePath(datasetBasePath);
|
this.metadataBasePath = HoodieTableMetadata.getMetadataTableBasePath(datasetBasePath);
|
||||||
try {
|
try {
|
||||||
this.metaClient = new HoodieTableMetaClient(hadoopConf.get(), metadataBasePath);
|
this.metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf.get()).setBasePath(metadataBasePath).build();
|
||||||
HoodieTableFileSystemView fsView = new HoodieTableFileSystemView(metaClient, metaClient.getActiveTimeline());
|
HoodieTableFileSystemView fsView = new HoodieTableFileSystemView(metaClient, metaClient.getActiveTimeline());
|
||||||
latestFileSystemMetadataSlices = fsView.getLatestFileSlices(MetadataPartitionType.FILES.partitionPath()).collect(Collectors.toList());
|
latestFileSystemMetadataSlices = fsView.getLatestFileSlices(MetadataPartitionType.FILES.partitionPath()).collect(Collectors.toList());
|
||||||
} catch (TableNotFoundException e) {
|
} catch (TableNotFoundException e) {
|
||||||
|
|||||||
@@ -114,9 +114,10 @@ public class TestHoodieActiveTimeline extends HoodieCommonTestHarness {
|
|||||||
metaClient.getArchivePath(), metaClient.getTableConfig().getPayloadClass(), VERSION_0);
|
metaClient.getArchivePath(), metaClient.getTableConfig().getPayloadClass(), VERSION_0);
|
||||||
HoodieInstant instant6 = new HoodieInstant(State.REQUESTED, HoodieTimeline.COMPACTION_ACTION, "9");
|
HoodieInstant instant6 = new HoodieInstant(State.REQUESTED, HoodieTimeline.COMPACTION_ACTION, "9");
|
||||||
byte[] dummy = new byte[5];
|
byte[] dummy = new byte[5];
|
||||||
HoodieActiveTimeline oldTimeline = new HoodieActiveTimeline(new HoodieTableMetaClient(metaClient.getHadoopConf(),
|
HoodieActiveTimeline oldTimeline = new HoodieActiveTimeline(
|
||||||
metaClient.getBasePath(), true, metaClient.getConsistencyGuardConfig(),
|
HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath())
|
||||||
Option.of(new TimelineLayoutVersion(VERSION_0))));
|
.setLoadActiveTimelineOnLoad(true).setConsistencyGuardConfig(metaClient.getConsistencyGuardConfig())
|
||||||
|
.setLayoutVersion(Option.of(new TimelineLayoutVersion(VERSION_0))).build());
|
||||||
// Old Timeline writes both to aux and timeline folder
|
// Old Timeline writes both to aux and timeline folder
|
||||||
oldTimeline.saveToCompactionRequested(instant6, Option.of(dummy));
|
oldTimeline.saveToCompactionRequested(instant6, Option.of(dummy));
|
||||||
// Now use latest timeline version
|
// Now use latest timeline version
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ public class TestIncrementalFSViewSync extends HoodieCommonTestHarness {
|
|||||||
instantsToFiles = testMultipleWriteSteps(view1, Collections.singletonList("11"), true, "11");
|
instantsToFiles = testMultipleWriteSteps(view1, Collections.singletonList("11"), true, "11");
|
||||||
|
|
||||||
SyncableFileSystemView view2 =
|
SyncableFileSystemView view2 =
|
||||||
getFileSystemView(new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath()));
|
getFileSystemView(HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).build());
|
||||||
|
|
||||||
// Run 2 more ingestion on MOR table. View1 is not yet synced but View2 is
|
// Run 2 more ingestion on MOR table. View1 is not yet synced but View2 is
|
||||||
instantsToFiles.putAll(testMultipleWriteSteps(view2, Arrays.asList("12", "13"), true, "11"));
|
instantsToFiles.putAll(testMultipleWriteSteps(view2, Arrays.asList("12", "13"), true, "11"));
|
||||||
@@ -334,7 +334,7 @@ public class TestIncrementalFSViewSync extends HoodieCommonTestHarness {
|
|||||||
|
|
||||||
view2.sync();
|
view2.sync();
|
||||||
SyncableFileSystemView view3 =
|
SyncableFileSystemView view3 =
|
||||||
getFileSystemView(new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath()));
|
getFileSystemView(HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).build());
|
||||||
view3.sync();
|
view3.sync();
|
||||||
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size());
|
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size());
|
||||||
|
|
||||||
@@ -346,7 +346,7 @@ public class TestIncrementalFSViewSync extends HoodieCommonTestHarness {
|
|||||||
view1.sync();
|
view1.sync();
|
||||||
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size());
|
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size());
|
||||||
SyncableFileSystemView view4 =
|
SyncableFileSystemView view4 =
|
||||||
getFileSystemView(new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath()));
|
getFileSystemView(HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).build());
|
||||||
view4.sync();
|
view4.sync();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -360,7 +360,7 @@ public class TestIncrementalFSViewSync extends HoodieCommonTestHarness {
|
|||||||
view1.sync();
|
view1.sync();
|
||||||
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size() * 2);
|
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size() * 2);
|
||||||
SyncableFileSystemView view5 =
|
SyncableFileSystemView view5 =
|
||||||
getFileSystemView(new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath()));
|
getFileSystemView(HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).build());
|
||||||
view5.sync();
|
view5.sync();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -383,7 +383,7 @@ public class TestIncrementalFSViewSync extends HoodieCommonTestHarness {
|
|||||||
view1.sync();
|
view1.sync();
|
||||||
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size() * 2);
|
areViewsConsistent(view1, view2, partitions.size() * fileIdsPerPartition.size() * 2);
|
||||||
SyncableFileSystemView view6 =
|
SyncableFileSystemView view6 =
|
||||||
getFileSystemView(new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath()));
|
getFileSystemView(HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).build());
|
||||||
view6.sync();
|
view6.sync();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class CompactionTestUtils {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), metaClient.getBasePath(), true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(metaClient.getBasePath()).setLoadActiveTimelineOnLoad(true).build();
|
||||||
Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> pendingCompactionMap =
|
Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> pendingCompactionMap =
|
||||||
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
||||||
|
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ public class FileCreateUtils {
|
|||||||
public static Map<String, Long> getBaseFileCountsForPaths(String basePath, FileSystem fs, String... paths) {
|
public static Map<String, Long> getBaseFileCountsForPaths(String basePath, FileSystem fs, String... paths) {
|
||||||
Map<String, Long> toReturn = new HashMap<>();
|
Map<String, Long> toReturn = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(fs.getConf(), basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
for (String path : paths) {
|
for (String path : paths) {
|
||||||
TableFileSystemView.BaseFileOnlyView fileSystemView = new HoodieTableFileSystemView(metaClient,
|
TableFileSystemView.BaseFileOnlyView fileSystemView = new HoodieTableFileSystemView(metaClient,
|
||||||
metaClient.getCommitsTimeline().filterCompletedInstants(), fs.globStatus(new org.apache.hadoop.fs.Path(path)));
|
metaClient.getCommitsTimeline().filterCompletedInstants(), fs.globStatus(new org.apache.hadoop.fs.Path(path)));
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class HoodieCommonTestHarness {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void refreshFsView() throws IOException {
|
protected void refreshFsView() throws IOException {
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected SyncableFileSystemView getFileSystemView(HoodieTimeline timeline) throws IOException {
|
protected SyncableFileSystemView getFileSystemView(HoodieTimeline timeline) throws IOException {
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ public class TestCompactionUtils extends HoodieCommonTestHarness {
|
|||||||
// schedule similar plan again so that there will be duplicates
|
// schedule similar plan again so that there will be duplicates
|
||||||
plan1.getOperations().get(0).setDataFilePath("bla");
|
plan1.getOperations().get(0).setDataFilePath("bla");
|
||||||
scheduleCompaction(metaClient, "005", plan1);
|
scheduleCompaction(metaClient, "005", plan1);
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
assertThrows(IllegalStateException.class, () -> {
|
assertThrows(IllegalStateException.class, () -> {
|
||||||
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
||||||
});
|
});
|
||||||
@@ -203,7 +203,7 @@ public class TestCompactionUtils extends HoodieCommonTestHarness {
|
|||||||
scheduleCompaction(metaClient, "003", plan2);
|
scheduleCompaction(metaClient, "003", plan2);
|
||||||
// schedule same plan again so that there will be duplicates. It should not fail as it is a full duplicate
|
// schedule same plan again so that there will be duplicates. It should not fail as it is a full duplicate
|
||||||
scheduleCompaction(metaClient, "005", plan1);
|
scheduleCompaction(metaClient, "005", plan1);
|
||||||
metaClient = new HoodieTableMetaClient(metaClient.getHadoopConf(), basePath, true);
|
metaClient = HoodieTableMetaClient.builder().setConf(metaClient.getHadoopConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> res =
|
Map<HoodieFileGroupId, Pair<String, HoodieCompactionOperation>> res =
|
||||||
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
CompactionUtils.getAllPendingCompactionOperations(metaClient);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ public class HoodieROTablePathFilter implements Configurable, PathFilter, Serial
|
|||||||
try {
|
try {
|
||||||
HoodieTableMetaClient metaClient = metaClientCache.get(baseDir.toString());
|
HoodieTableMetaClient metaClient = metaClientCache.get(baseDir.toString());
|
||||||
if (null == metaClient) {
|
if (null == metaClient) {
|
||||||
metaClient = new HoodieTableMetaClient(fs.getConf(), baseDir.toString(), true);
|
metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(baseDir.toString()).setLoadActiveTimelineOnLoad(true).build();
|
||||||
metaClientCache.put(baseDir.toString(), metaClient);
|
metaClientCache.put(baseDir.toString(), metaClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ public abstract class AbstractRealtimeRecordReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean usesCustomPayload() {
|
private boolean usesCustomPayload() {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jobConf, split.getBasePath());
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(jobConf).setBasePath(split.getBasePath()).build();
|
||||||
return !(metaClient.getTableConfig().getPayloadClass().contains(HoodieAvroPayload.class.getName())
|
return !(metaClient.getTableConfig().getPayloadClass().contains(HoodieAvroPayload.class.getName())
|
||||||
|| metaClient.getTableConfig().getPayloadClass().contains("org.apache.hudi.OverwriteWithLatestAvroPayload"));
|
|| metaClient.getTableConfig().getPayloadClass().contains("org.apache.hudi.OverwriteWithLatestAvroPayload"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ public class HoodieInputFormatUtils {
|
|||||||
}
|
}
|
||||||
Path baseDir = HoodieHiveUtils.getNthParent(dataPath, levels);
|
Path baseDir = HoodieHiveUtils.getNthParent(dataPath, levels);
|
||||||
LOG.info("Reading hoodie metadata from path " + baseDir.toString());
|
LOG.info("Reading hoodie metadata from path " + baseDir.toString());
|
||||||
return new HoodieTableMetaClient(fs.getConf(), baseDir.toString());
|
return HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(baseDir.toString()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static FileStatus getFileStatus(HoodieBaseFile baseFile) throws IOException {
|
public static FileStatus getFileStatus(HoodieBaseFile baseFile) throws IOException {
|
||||||
|
|||||||
@@ -45,8 +45,9 @@ public class CompactNode extends DagNode<JavaRDD<WriteStatus>> {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void execute(ExecutionContext executionContext, int curItrCount) throws Exception {
|
public void execute(ExecutionContext executionContext, int curItrCount) throws Exception {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(executionContext.getHoodieTestSuiteWriter().getConfiguration(),
|
HoodieTableMetaClient metaClient =
|
||||||
executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath);
|
HoodieTableMetaClient.builder().setConf(executionContext.getHoodieTestSuiteWriter().getConfiguration()).setBasePath(executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath)
|
||||||
|
.build();
|
||||||
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline()
|
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline()
|
||||||
.getCommitsAndCompactionTimeline().filterPendingCompactionTimeline().lastInstant();
|
.getCommitsAndCompactionTimeline().filterPendingCompactionTimeline().lastInstant();
|
||||||
if (lastInstant.isPresent()) {
|
if (lastInstant.isPresent()) {
|
||||||
|
|||||||
@@ -49,8 +49,9 @@ public class RollbackNode extends DagNode<Option<HoodieInstant>> {
|
|||||||
log.info("Executing rollback node {}", this.getName());
|
log.info("Executing rollback node {}", this.getName());
|
||||||
// Can only be done with an instantiation of a new WriteClient hence cannot be done during DeltaStreamer
|
// Can only be done with an instantiation of a new WriteClient hence cannot be done during DeltaStreamer
|
||||||
// testing for now
|
// testing for now
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(executionContext.getHoodieTestSuiteWriter().getConfiguration(),
|
HoodieTableMetaClient metaClient =
|
||||||
executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath);
|
HoodieTableMetaClient.builder().setConf(executionContext.getHoodieTestSuiteWriter().getConfiguration()).setBasePath(executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath)
|
||||||
|
.build();
|
||||||
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline().getCommitsTimeline().lastInstant();
|
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline().getCommitsTimeline().lastInstant();
|
||||||
if (lastInstant.isPresent()) {
|
if (lastInstant.isPresent()) {
|
||||||
log.info("Rolling back last instant {}", lastInstant.get());
|
log.info("Rolling back last instant {}", lastInstant.get());
|
||||||
|
|||||||
@@ -41,8 +41,9 @@ public class ScheduleCompactNode extends DagNode<Option<String>> {
|
|||||||
// testing for now
|
// testing for now
|
||||||
// Find the last commit and extra the extra metadata to be passed to the schedule compaction. This is
|
// Find the last commit and extra the extra metadata to be passed to the schedule compaction. This is
|
||||||
// done to ensure the CHECKPOINT is correctly passed from commit to commit
|
// done to ensure the CHECKPOINT is correctly passed from commit to commit
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(executionContext.getHoodieTestSuiteWriter().getConfiguration(),
|
HoodieTableMetaClient metaClient =
|
||||||
executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath);
|
HoodieTableMetaClient.builder().setConf(executionContext.getHoodieTestSuiteWriter().getConfiguration()).setBasePath(executionContext.getHoodieTestSuiteWriter().getCfg().targetBasePath)
|
||||||
|
.build();
|
||||||
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline().getCommitsTimeline().lastInstant();
|
Option<HoodieInstant> lastInstant = metaClient.getActiveTimeline().getCommitsTimeline().lastInstant();
|
||||||
if (lastInstant.isPresent()) {
|
if (lastInstant.isPresent()) {
|
||||||
HoodieCommitMetadata metadata = org.apache.hudi.common.model.HoodieCommitMetadata.fromBytes(metaClient
|
HoodieCommitMetadata metadata = org.apache.hudi.common.model.HoodieCommitMetadata.fromBytes(metaClient
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import org.apache.hudi.config.HoodieMemoryConfig;
|
|||||||
import org.apache.avro.Schema;
|
import org.apache.avro.Schema;
|
||||||
import org.apache.avro.generic.GenericRecord;
|
import org.apache.avro.generic.GenericRecord;
|
||||||
import org.apache.avro.generic.IndexedRecord;
|
import org.apache.avro.generic.IndexedRecord;
|
||||||
import org.apache.hadoop.fs.FileSystem;
|
|
||||||
import org.apache.hadoop.fs.Path;
|
import org.apache.hadoop.fs.Path;
|
||||||
import org.apache.parquet.avro.AvroParquetReader;
|
import org.apache.parquet.avro.AvroParquetReader;
|
||||||
import org.apache.parquet.avro.AvroReadSupport;
|
import org.apache.parquet.avro.AvroReadSupport;
|
||||||
@@ -80,7 +79,7 @@ public class DFSHoodieDatasetInputReader extends DFSDeltaInputReader {
|
|||||||
public DFSHoodieDatasetInputReader(JavaSparkContext jsc, String basePath, String schemaStr) {
|
public DFSHoodieDatasetInputReader(JavaSparkContext jsc, String basePath, String schemaStr) {
|
||||||
this.jsc = jsc;
|
this.jsc = jsc;
|
||||||
this.schemaStr = schemaStr;
|
this.schemaStr = schemaStr;
|
||||||
this.metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), basePath);
|
this.metaClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(basePath).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected List<String> getPartitions(Option<Integer> partitionsLimit) throws IOException {
|
protected List<String> getPartitions(Option<Integer> partitionsLimit) throws IOException {
|
||||||
|
|||||||
@@ -173,7 +173,7 @@ public class TestHoodieTestSuiteJob extends UtilitiesTestBase {
|
|||||||
cfg.workloadDagGenerator = ComplexDagGenerator.class.getName();
|
cfg.workloadDagGenerator = ComplexDagGenerator.class.getName();
|
||||||
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
||||||
hoodieTestSuiteJob.runTestSuite();
|
hoodieTestSuiteJob.runTestSuite();
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(new Configuration(), cfg.targetBasePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(new Configuration()).setBasePath(cfg.targetBasePath).build();
|
||||||
assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 2);
|
assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ public class TestHoodieTestSuiteJob extends UtilitiesTestBase {
|
|||||||
}
|
}
|
||||||
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
||||||
hoodieTestSuiteJob.runTestSuite();
|
hoodieTestSuiteJob.runTestSuite();
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(new Configuration(), cfg.targetBasePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(new Configuration()).setBasePath(cfg.targetBasePath).build();
|
||||||
assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 1);
|
assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +207,7 @@ public class TestHoodieTestSuiteJob extends UtilitiesTestBase {
|
|||||||
cfg.workloadYamlPath = dfsBasePath + "/" + COW_DAG_FILE_NAME;
|
cfg.workloadYamlPath = dfsBasePath + "/" + COW_DAG_FILE_NAME;
|
||||||
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
||||||
hoodieTestSuiteJob.runTestSuite();
|
hoodieTestSuiteJob.runTestSuite();
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(new Configuration(), cfg.targetBasePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(new Configuration()).setBasePath(cfg.targetBasePath).build();
|
||||||
//assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 5);
|
//assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ public class TestHoodieTestSuiteJob extends UtilitiesTestBase {
|
|||||||
cfg.workloadYamlPath = dfsBasePath + "/" + MOR_DAG_FILE_NAME;
|
cfg.workloadYamlPath = dfsBasePath + "/" + MOR_DAG_FILE_NAME;
|
||||||
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
HoodieTestSuiteJob hoodieTestSuiteJob = new HoodieTestSuiteJob(cfg, jsc);
|
||||||
hoodieTestSuiteJob.runTestSuite();
|
hoodieTestSuiteJob.runTestSuite();
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(new Configuration(), cfg.targetBasePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(new Configuration()).setBasePath(cfg.targetBasePath).build();
|
||||||
//assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 7);
|
//assertEquals(metaClient.getActiveTimeline().getCommitsTimeline().getInstants().count(), 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class DataSourceInternalWriterHelper {
|
|||||||
this.writeClient = new SparkRDDWriteClient<>(new HoodieSparkEngineContext(new JavaSparkContext(sparkSession.sparkContext())), writeConfig, true);
|
this.writeClient = new SparkRDDWriteClient<>(new HoodieSparkEngineContext(new JavaSparkContext(sparkSession.sparkContext())), writeConfig, true);
|
||||||
writeClient.setOperationType(operationType);
|
writeClient.setOperationType(operationType);
|
||||||
writeClient.startCommitWithTime(instantTime);
|
writeClient.startCommitWithTime(instantTime);
|
||||||
this.metaClient = new HoodieTableMetaClient(configuration, writeConfig.getBasePath());
|
this.metaClient = HoodieTableMetaClient.builder().setConf(configuration).setBasePath(writeConfig.getBasePath()).build();
|
||||||
this.hoodieTable = HoodieSparkTable.create(writeConfig, new HoodieSparkEngineContext(new JavaSparkContext(sparkSession.sparkContext())), metaClient);
|
this.hoodieTable = HoodieSparkTable.create(writeConfig, new HoodieSparkEngineContext(new JavaSparkContext(sparkSession.sparkContext())), metaClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class HoodieDataSourceHelpers {
|
|||||||
*/
|
*/
|
||||||
@PublicAPIMethod(maturity = ApiMaturityLevel.STABLE)
|
@PublicAPIMethod(maturity = ApiMaturityLevel.STABLE)
|
||||||
public static HoodieTimeline allCompletedCommitsCompactions(FileSystem fs, String basePath) {
|
public static HoodieTimeline allCompletedCommitsCompactions(FileSystem fs, String basePath) {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(fs.getConf(), basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
if (metaClient.getTableType().equals(HoodieTableType.MERGE_ON_READ)) {
|
if (metaClient.getTableType().equals(HoodieTableType.MERGE_ON_READ)) {
|
||||||
return metaClient.getActiveTimeline().getTimelineOfActions(
|
return metaClient.getActiveTimeline().getTimelineOfActions(
|
||||||
CollectionUtils.createSet(HoodieActiveTimeline.COMMIT_ACTION,
|
CollectionUtils.createSet(HoodieActiveTimeline.COMMIT_ACTION,
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ class DefaultSource extends RelationProvider
|
|||||||
val tablePath = DataSourceUtils.getTablePath(fs, globPaths.toArray)
|
val tablePath = DataSourceUtils.getTablePath(fs, globPaths.toArray)
|
||||||
log.info("Obtained hudi table path: " + tablePath)
|
log.info("Obtained hudi table path: " + tablePath)
|
||||||
|
|
||||||
val metaClient = new HoodieTableMetaClient(fs.getConf, tablePath)
|
val metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(tablePath).build()
|
||||||
val isBootstrappedTable = metaClient.getTableConfig.getBootstrapBasePath.isPresent
|
val isBootstrappedTable = metaClient.getTableConfig.getBootstrapBasePath.isPresent
|
||||||
log.info("Is bootstrapped table => " + isBootstrappedTable)
|
log.info("Is bootstrapped table => " + isBootstrappedTable)
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ class DefaultSource extends RelationProvider
|
|||||||
} else if(parameters(QUERY_TYPE_OPT_KEY).equals(QUERY_TYPE_READ_OPTIMIZED_OPT_VAL)) {
|
} else if(parameters(QUERY_TYPE_OPT_KEY).equals(QUERY_TYPE_READ_OPTIMIZED_OPT_VAL)) {
|
||||||
getBaseFileOnlyView(sqlContext, parameters, schema, readPaths, isBootstrappedTable, globPaths, metaClient)
|
getBaseFileOnlyView(sqlContext, parameters, schema, readPaths, isBootstrappedTable, globPaths, metaClient)
|
||||||
} else if (parameters(QUERY_TYPE_OPT_KEY).equals(QUERY_TYPE_INCREMENTAL_OPT_VAL)) {
|
} else if (parameters(QUERY_TYPE_OPT_KEY).equals(QUERY_TYPE_INCREMENTAL_OPT_VAL)) {
|
||||||
val metaClient = new HoodieTableMetaClient(fs.getConf, tablePath)
|
val metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(tablePath).build()
|
||||||
if (metaClient.getTableType.equals(HoodieTableType.MERGE_ON_READ)) {
|
if (metaClient.getTableType.equals(HoodieTableType.MERGE_ON_READ)) {
|
||||||
new MergeOnReadIncrementalRelation(sqlContext, optParams, schema, metaClient)
|
new MergeOnReadIncrementalRelation(sqlContext, optParams, schema, metaClient)
|
||||||
} else {
|
} else {
|
||||||
@@ -202,8 +202,8 @@ class DefaultSource extends RelationProvider
|
|||||||
if (path.isEmpty || path.get == null) {
|
if (path.isEmpty || path.get == null) {
|
||||||
throw new HoodieException(s"'path' must be specified.")
|
throw new HoodieException(s"'path' must be specified.")
|
||||||
}
|
}
|
||||||
val metaClient = new HoodieTableMetaClient(
|
val metaClient = HoodieTableMetaClient.builder().setConf(
|
||||||
sqlContext.sparkSession.sessionState.newHadoopConf(), path.get)
|
sqlContext.sparkSession.sessionState.newHadoopConf()).setBasePath(path.get).build()
|
||||||
val schemaResolver = new TableSchemaResolver(metaClient)
|
val schemaResolver = new TableSchemaResolver(metaClient)
|
||||||
val sqlSchema =
|
val sqlSchema =
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -500,7 +500,8 @@ private[hudi] object HoodieSparkSqlWriter {
|
|||||||
hoodieTableConfigOpt: Option[HoodieTableConfig]): HoodieTableConfig = {
|
hoodieTableConfigOpt: Option[HoodieTableConfig]): HoodieTableConfig = {
|
||||||
if (tableExists) {
|
if (tableExists) {
|
||||||
hoodieTableConfigOpt.getOrElse(
|
hoodieTableConfigOpt.getOrElse(
|
||||||
new HoodieTableMetaClient(sparkContext.hadoopConfiguration, tablePath).getTableConfig)
|
HoodieTableMetaClient.builder().setConf(sparkContext.hadoopConfiguration).setBasePath(tablePath)
|
||||||
|
.build().getTableConfig)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,8 +175,8 @@ class HoodieStreamingSink(sqlContext: SQLContext,
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
// First time, scan .hoodie folder and get all pending compactions
|
// First time, scan .hoodie folder and get all pending compactions
|
||||||
val metaClient = new HoodieTableMetaClient(sqlContext.sparkContext.hadoopConfiguration,
|
val metaClient = HoodieTableMetaClient.builder().setConf(sqlContext.sparkContext.hadoopConfiguration)
|
||||||
client.getConfig.getBasePath)
|
.setBasePath(client.getConfig.getBasePath).build()
|
||||||
val pendingInstants :java.util.List[HoodieInstant] =
|
val pendingInstants :java.util.List[HoodieInstant] =
|
||||||
CompactionUtils.getPendingCompactionInstantTimes(metaClient)
|
CompactionUtils.getPendingCompactionInstantTimes(metaClient)
|
||||||
pendingInstants.foreach((h : HoodieInstant) => asyncCompactorService.enqueuePendingCompaction(h))
|
pendingInstants.foreach((h : HoodieInstant) => asyncCompactorService.enqueuePendingCompaction(h))
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class HoodieStreamSource(
|
|||||||
val fs = path.getFileSystem(hadoopConf)
|
val fs = path.getFileSystem(hadoopConf)
|
||||||
TablePathUtils.getTablePath(fs, path).get()
|
TablePathUtils.getTablePath(fs, path).get()
|
||||||
}
|
}
|
||||||
private lazy val metaClient = new HoodieTableMetaClient(hadoopConf, tablePath.toString)
|
private lazy val metaClient = HoodieTableMetaClient.builder().setConf(hadoopConf).setBasePath(tablePath.toString).build()
|
||||||
private lazy val tableType = metaClient.getTableType
|
private lazy val tableType = metaClient.getTableType
|
||||||
|
|
||||||
@transient private var lastOffset: HoodieSourceOffset = _
|
@transient private var lastOffset: HoodieSourceOffset = _
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ public class HoodieJavaStreamingApp {
|
|||||||
executor.shutdownNow();
|
executor.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jssc.hadoopConfiguration(), tablePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(jssc.hadoopConfiguration()).setBasePath(tablePath).build();
|
||||||
if (tableType.equals(HoodieTableType.MERGE_ON_READ.name())) {
|
if (tableType.equals(HoodieTableType.MERGE_ON_READ.name())) {
|
||||||
// Ensure we have successfully completed one compaction commit
|
// Ensure we have successfully completed one compaction commit
|
||||||
ValidationUtils.checkArgument(metaClient.getActiveTimeline().getCommitTimeline().getInstants().count() == 1);
|
ValidationUtils.checkArgument(metaClient.getActiveTimeline().getCommitTimeline().getInstants().count() == 1);
|
||||||
@@ -249,7 +249,7 @@ public class HoodieJavaStreamingApp {
|
|||||||
if (timeline.countInstants() >= numCommits) {
|
if (timeline.countInstants() >= numCommits) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(fs.getConf(), tablePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
System.out.println("Instants :" + metaClient.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
System.out.println("Instants :" + metaClient.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
||||||
} catch (TableNotFoundException te) {
|
} catch (TableNotFoundException te) {
|
||||||
LOG.info("Got table not found exception. Retrying");
|
LOG.info("Got table not found exception. Retrying");
|
||||||
|
|||||||
@@ -210,7 +210,8 @@ class TestCOWDataSource extends HoodieClientTestBase {
|
|||||||
.mode(SaveMode.Append)
|
.mode(SaveMode.Append)
|
||||||
.save(basePath)
|
.save(basePath)
|
||||||
|
|
||||||
val metaClient = new HoodieTableMetaClient(spark.sparkContext.hadoopConfiguration, basePath, true)
|
val metaClient = HoodieTableMetaClient.builder().setConf(spark.sparkContext.hadoopConfiguration).setBasePath(basePath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build();
|
||||||
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
||||||
.map(instant => (instant.asInstanceOf[HoodieInstant]).getAction)
|
.map(instant => (instant.asInstanceOf[HoodieInstant]).getAction)
|
||||||
assertEquals(2, commits.size)
|
assertEquals(2, commits.size)
|
||||||
@@ -235,7 +236,8 @@ class TestCOWDataSource extends HoodieClientTestBase {
|
|||||||
.mode(SaveMode.Overwrite)
|
.mode(SaveMode.Overwrite)
|
||||||
.save(basePath)
|
.save(basePath)
|
||||||
|
|
||||||
val metaClient = new HoodieTableMetaClient(spark.sparkContext.hadoopConfiguration, basePath, true)
|
val metaClient = HoodieTableMetaClient.builder().setConf(spark.sparkContext.hadoopConfiguration).setBasePath(basePath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
||||||
.map(instant => (instant.asInstanceOf[HoodieInstant]).getAction)
|
.map(instant => (instant.asInstanceOf[HoodieInstant]).getAction)
|
||||||
assertEquals(2, commits.size)
|
assertEquals(2, commits.size)
|
||||||
@@ -289,7 +291,8 @@ class TestCOWDataSource extends HoodieClientTestBase {
|
|||||||
val filterSecondPartitionCount = recordsForPartitionColumn.filter(row => row.get(0).equals(HoodieTestDataGenerator.DEFAULT_SECOND_PARTITION_PATH)).size
|
val filterSecondPartitionCount = recordsForPartitionColumn.filter(row => row.get(0).equals(HoodieTestDataGenerator.DEFAULT_SECOND_PARTITION_PATH)).size
|
||||||
assertEquals(7, filterSecondPartitionCount)
|
assertEquals(7, filterSecondPartitionCount)
|
||||||
|
|
||||||
val metaClient = new HoodieTableMetaClient(spark.sparkContext.hadoopConfiguration, basePath, true)
|
val metaClient = HoodieTableMetaClient.builder().setConf(spark.sparkContext.hadoopConfiguration).setBasePath(basePath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
||||||
.map(instant => instant.asInstanceOf[HoodieInstant].getAction)
|
.map(instant => instant.asInstanceOf[HoodieInstant].getAction)
|
||||||
assertEquals(3, commits.size)
|
assertEquals(3, commits.size)
|
||||||
@@ -339,7 +342,8 @@ class TestCOWDataSource extends HoodieClientTestBase {
|
|||||||
val filterSecondPartitionCount = recordsForPartitionColumn.filter(row => row.get(0).equals(HoodieTestDataGenerator.DEFAULT_SECOND_PARTITION_PATH)).size
|
val filterSecondPartitionCount = recordsForPartitionColumn.filter(row => row.get(0).equals(HoodieTestDataGenerator.DEFAULT_SECOND_PARTITION_PATH)).size
|
||||||
assertEquals(7, filterSecondPartitionCount)
|
assertEquals(7, filterSecondPartitionCount)
|
||||||
|
|
||||||
val metaClient = new HoodieTableMetaClient(spark.sparkContext.hadoopConfiguration, basePath, true)
|
val metaClient = HoodieTableMetaClient.builder().setConf(spark.sparkContext.hadoopConfiguration).setBasePath(basePath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
val commits = metaClient.getActiveTimeline.filterCompletedInstants().getInstants.toArray
|
||||||
.map(instant => instant.asInstanceOf[HoodieInstant].getAction)
|
.map(instant => instant.asInstanceOf[HoodieInstant].getAction)
|
||||||
assertEquals(2, commits.size)
|
assertEquals(2, commits.size)
|
||||||
|
|||||||
@@ -177,7 +177,8 @@ class TestStructuredStreaming extends HoodieClientTestBase {
|
|||||||
numInstants = timeline.countInstants
|
numInstants = timeline.countInstants
|
||||||
success = true
|
success = true
|
||||||
}
|
}
|
||||||
val metaClient = new HoodieTableMetaClient(fs.getConf, tablePath, true)
|
val metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(tablePath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
} catch {
|
} catch {
|
||||||
case te: TableNotFoundException =>
|
case te: TableNotFoundException =>
|
||||||
log.info("Got table not found exception. Retrying")
|
log.info("Got table not found exception. Retrying")
|
||||||
@@ -253,12 +254,14 @@ class TestStructuredStreaming extends HoodieClientTestBase {
|
|||||||
if (HoodieDataSourceHelpers.allCompletedCommitsCompactions(fs, destPath).getCompletedReplaceTimeline().countInstants() > 0) {
|
if (HoodieDataSourceHelpers.allCompletedCommitsCompactions(fs, destPath).getCompletedReplaceTimeline().countInstants() > 0) {
|
||||||
assertEquals(3, HoodieDataSourceHelpers.listCommitsSince(fs, destPath, "000").size())
|
assertEquals(3, HoodieDataSourceHelpers.listCommitsSince(fs, destPath, "000").size())
|
||||||
// check have at least one file group
|
// check have at least one file group
|
||||||
this.metaClient = new HoodieTableMetaClient(fs.getConf, destPath, true)
|
this.metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(destPath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
assertTrue(getLatestFileGroupsFileId(partitionOfRecords).size > 0)
|
assertTrue(getLatestFileGroupsFileId(partitionOfRecords).size > 0)
|
||||||
} else {
|
} else {
|
||||||
assertEquals(currNumCommits, HoodieDataSourceHelpers.listCommitsSince(fs, destPath, "000").size())
|
assertEquals(currNumCommits, HoodieDataSourceHelpers.listCommitsSince(fs, destPath, "000").size())
|
||||||
// check have more than one file group
|
// check have more than one file group
|
||||||
this.metaClient = new HoodieTableMetaClient(fs.getConf, destPath, true)
|
this.metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf).setBasePath(destPath)
|
||||||
|
.setLoadActiveTimelineOnLoad(true).build()
|
||||||
assertTrue(getLatestFileGroupsFileId(partitionOfRecords).size > 1)
|
assertTrue(getLatestFileGroupsFileId(partitionOfRecords).size > 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public abstract class AbstractSyncHoodieClient {
|
|||||||
|
|
||||||
public AbstractSyncHoodieClient(String basePath, boolean assumeDatePartitioning, boolean useFileListingFromMetadata,
|
public AbstractSyncHoodieClient(String basePath, boolean assumeDatePartitioning, boolean useFileListingFromMetadata,
|
||||||
boolean verifyMetadataFileListing, FileSystem fs) {
|
boolean verifyMetadataFileListing, FileSystem fs) {
|
||||||
this.metaClient = new HoodieTableMetaClient(fs.getConf(), basePath, true);
|
this.metaClient = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
this.tableType = metaClient.getTableType();
|
this.tableType = metaClient.getTableType();
|
||||||
this.basePath = basePath;
|
this.basePath = basePath;
|
||||||
this.assumeDatePartitioning = assumeDatePartitioning;
|
this.assumeDatePartitioning = assumeDatePartitioning;
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ public class HiveIncrementalPuller {
|
|||||||
if (!fs.exists(new Path(targetDataPath)) || !fs.exists(new Path(targetDataPath + "/.hoodie"))) {
|
if (!fs.exists(new Path(targetDataPath)) || !fs.exists(new Path(targetDataPath + "/.hoodie"))) {
|
||||||
return "0";
|
return "0";
|
||||||
}
|
}
|
||||||
HoodieTableMetaClient metadata = new HoodieTableMetaClient(fs.getConf(), targetDataPath);
|
HoodieTableMetaClient metadata = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(targetDataPath).build();
|
||||||
|
|
||||||
Option<HoodieInstant> lastCommit =
|
Option<HoodieInstant> lastCommit =
|
||||||
metadata.getActiveTimeline().getCommitsTimeline().filterCompletedInstants().lastInstant();
|
metadata.getActiveTimeline().getCommitsTimeline().filterCompletedInstants().lastInstant();
|
||||||
@@ -309,7 +309,7 @@ public class HiveIncrementalPuller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getLastCommitTimePulled(FileSystem fs, String sourceTableLocation) {
|
private String getLastCommitTimePulled(FileSystem fs, String sourceTableLocation) {
|
||||||
HoodieTableMetaClient metadata = new HoodieTableMetaClient(fs.getConf(), sourceTableLocation);
|
HoodieTableMetaClient metadata = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(sourceTableLocation).build();
|
||||||
List<String> commitsToSync = metadata.getActiveTimeline().getCommitsTimeline().filterCompletedInstants()
|
List<String> commitsToSync = metadata.getActiveTimeline().getCommitsTimeline().filterCompletedInstants()
|
||||||
.findInstantsAfter(config.fromCommitTime, config.maxCommits).getInstants().map(HoodieInstant::getTimestamp)
|
.findInstantsAfter(config.fromCommitTime, config.maxCommits).getInstants().map(HoodieInstant::getTimestamp)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ public class HoodieClusteringJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getSchemaFromLatestInstant() throws Exception {
|
private String getSchemaFromLatestInstant() throws Exception {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), cfg.basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(cfg.basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
TableSchemaResolver schemaUtil = new TableSchemaResolver(metaClient);
|
TableSchemaResolver schemaUtil = new TableSchemaResolver(metaClient);
|
||||||
if (metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants().countInstants() == 0) {
|
if (metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants().countInstants() == 0) {
|
||||||
throw new HoodieException("Cannot run clustering without any completed commits");
|
throw new HoodieException("Cannot run clustering without any completed commits");
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class HoodieCompactionAdminTool {
|
|||||||
* Executes one of compaction admin operations.
|
* Executes one of compaction admin operations.
|
||||||
*/
|
*/
|
||||||
public void run(JavaSparkContext jsc) throws Exception {
|
public void run(JavaSparkContext jsc) throws Exception {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), cfg.basePath);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(cfg.basePath).build();
|
||||||
try (CompactionAdminClient admin = new CompactionAdminClient(new HoodieSparkEngineContext(jsc), cfg.basePath)) {
|
try (CompactionAdminClient admin = new CompactionAdminClient(new HoodieSparkEngineContext(jsc), cfg.basePath)) {
|
||||||
final FileSystem fs = FSUtils.getFs(cfg.basePath, jsc.hadoopConfiguration());
|
final FileSystem fs = FSUtils.getFs(cfg.basePath, jsc.hadoopConfiguration());
|
||||||
if (cfg.outputPath != null && fs.exists(new Path(cfg.outputPath))) {
|
if (cfg.outputPath != null && fs.exists(new Path(cfg.outputPath))) {
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ public class HoodieSnapshotCopier implements Serializable {
|
|||||||
final boolean verifyMetadataFileListing) throws IOException {
|
final boolean verifyMetadataFileListing) throws IOException {
|
||||||
FileSystem fs = FSUtils.getFs(baseDir, jsc.hadoopConfiguration());
|
FileSystem fs = FSUtils.getFs(baseDir, jsc.hadoopConfiguration());
|
||||||
final SerializableConfiguration serConf = new SerializableConfiguration(jsc.hadoopConfiguration());
|
final SerializableConfiguration serConf = new SerializableConfiguration(jsc.hadoopConfiguration());
|
||||||
final HoodieTableMetaClient tableMetadata = new HoodieTableMetaClient(fs.getConf(), baseDir);
|
final HoodieTableMetaClient tableMetadata = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(baseDir).build();
|
||||||
final BaseFileOnlyView fsView = new HoodieTableFileSystemView(tableMetadata,
|
final BaseFileOnlyView fsView = new HoodieTableFileSystemView(tableMetadata,
|
||||||
tableMetadata.getActiveTimeline().getCommitsAndCompactionTimeline().filterCompletedInstants());
|
tableMetadata.getActiveTimeline().getCommitsAndCompactionTimeline().filterCompletedInstants());
|
||||||
HoodieEngineContext context = new HoodieSparkEngineContext(jsc);
|
HoodieEngineContext context = new HoodieSparkEngineContext(jsc);
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ public class HoodieSnapshotExporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Option<String> getLatestCommitTimestamp(FileSystem fs, Config cfg) {
|
private Option<String> getLatestCommitTimestamp(FileSystem fs, Config cfg) {
|
||||||
final HoodieTableMetaClient tableMetadata = new HoodieTableMetaClient(fs.getConf(), cfg.sourceBasePath);
|
final HoodieTableMetaClient tableMetadata = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(cfg.sourceBasePath).build();
|
||||||
Option<HoodieInstant> latestCommit = tableMetadata.getActiveTimeline().getCommitsAndCompactionTimeline()
|
Option<HoodieInstant> latestCommit = tableMetadata.getActiveTimeline().getCommitsAndCompactionTimeline()
|
||||||
.filterCompletedInstants().lastInstant();
|
.filterCompletedInstants().lastInstant();
|
||||||
return latestCommit.isPresent() ? Option.of(latestCommit.get().getTimestamp()) : Option.empty();
|
return latestCommit.isPresent() ? Option.of(latestCommit.get().getTimestamp()) : Option.empty();
|
||||||
@@ -259,7 +259,7 @@ public class HoodieSnapshotExporter {
|
|||||||
|
|
||||||
private BaseFileOnlyView getBaseFileOnlyView(JavaSparkContext jsc, Config cfg) {
|
private BaseFileOnlyView getBaseFileOnlyView(JavaSparkContext jsc, Config cfg) {
|
||||||
FileSystem fs = FSUtils.getFs(cfg.sourceBasePath, jsc.hadoopConfiguration());
|
FileSystem fs = FSUtils.getFs(cfg.sourceBasePath, jsc.hadoopConfiguration());
|
||||||
HoodieTableMetaClient tableMetadata = new HoodieTableMetaClient(fs.getConf(), cfg.sourceBasePath);
|
HoodieTableMetaClient tableMetadata = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(cfg.sourceBasePath).build();
|
||||||
return new HoodieTableFileSystemView(tableMetadata, tableMetadata
|
return new HoodieTableFileSystemView(tableMetadata, tableMetadata
|
||||||
.getActiveTimeline().getCommitsAndCompactionTimeline().filterCompletedInstants());
|
.getActiveTimeline().getCommitsAndCompactionTimeline().filterCompletedInstants());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class InitialCheckpointFromAnotherHoodieTimelineProvider extends InitialC
|
|||||||
@Override
|
@Override
|
||||||
public void init(Configuration config) throws HoodieException {
|
public void init(Configuration config) throws HoodieException {
|
||||||
super.init(config);
|
super.init(config);
|
||||||
this.anotherDsHoodieMetaclient = new HoodieTableMetaClient(config, path.toString());
|
this.anotherDsHoodieMetaclient = HoodieTableMetaClient.builder().setConf(config).setBasePath(path.toString()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -223,8 +223,7 @@ public class DeltaSync implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public void refreshTimeline() throws IOException {
|
public void refreshTimeline() throws IOException {
|
||||||
if (fs.exists(new Path(cfg.targetBasePath))) {
|
if (fs.exists(new Path(cfg.targetBasePath))) {
|
||||||
HoodieTableMetaClient meta = new HoodieTableMetaClient(new Configuration(fs.getConf()), cfg.targetBasePath,
|
HoodieTableMetaClient meta = HoodieTableMetaClient.builder().setConf(new Configuration(fs.getConf())).setBasePath(cfg.targetBasePath).setPayloadClassName(cfg.payloadClassName).build();
|
||||||
cfg.payloadClassName);
|
|
||||||
switch (meta.getTableType()) {
|
switch (meta.getTableType()) {
|
||||||
case COPY_ON_WRITE:
|
case COPY_ON_WRITE:
|
||||||
this.commitTimelineOpt = Option.of(meta.getActiveTimeline().getCommitTimeline().filterCompletedInstants());
|
this.commitTimelineOpt = Option.of(meta.getActiveTimeline().getCommitTimeline().filterCompletedInstants());
|
||||||
|
|||||||
@@ -528,7 +528,7 @@ public class HoodieDeltaStreamer implements Serializable {
|
|||||||
|
|
||||||
if (fs.exists(new Path(cfg.targetBasePath))) {
|
if (fs.exists(new Path(cfg.targetBasePath))) {
|
||||||
HoodieTableMetaClient meta =
|
HoodieTableMetaClient meta =
|
||||||
new HoodieTableMetaClient(new Configuration(fs.getConf()), cfg.targetBasePath, false);
|
HoodieTableMetaClient.builder().setConf(new Configuration(fs.getConf())).setBasePath(cfg.targetBasePath).setLoadActiveTimelineOnLoad(false).build();
|
||||||
tableType = meta.getTableType();
|
tableType = meta.getTableType();
|
||||||
// This will guarantee there is no surprise with table type
|
// This will guarantee there is no surprise with table type
|
||||||
ValidationUtils.checkArgument(tableType.equals(HoodieTableType.valueOf(cfg.tableType)),
|
ValidationUtils.checkArgument(tableType.equals(HoodieTableType.valueOf(cfg.tableType)),
|
||||||
@@ -636,7 +636,7 @@ public class HoodieDeltaStreamer implements Serializable {
|
|||||||
asyncCompactService = Option.ofNullable(new SparkAsyncCompactService(new HoodieSparkEngineContext(jssc), writeClient));
|
asyncCompactService = Option.ofNullable(new SparkAsyncCompactService(new HoodieSparkEngineContext(jssc), writeClient));
|
||||||
// Enqueue existing pending compactions first
|
// Enqueue existing pending compactions first
|
||||||
HoodieTableMetaClient meta =
|
HoodieTableMetaClient meta =
|
||||||
new HoodieTableMetaClient(new Configuration(jssc.hadoopConfiguration()), cfg.targetBasePath, true);
|
HoodieTableMetaClient.builder().setConf(new Configuration(jssc.hadoopConfiguration())).setBasePath(cfg.targetBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
List<HoodieInstant> pending = CompactionUtils.getPendingCompactionInstantTimes(meta);
|
List<HoodieInstant> pending = CompactionUtils.getPendingCompactionInstantTimes(meta);
|
||||||
pending.forEach(hoodieInstant -> asyncCompactService.get().enqueuePendingCompaction(hoodieInstant));
|
pending.forEach(hoodieInstant -> asyncCompactService.get().enqueuePendingCompaction(hoodieInstant));
|
||||||
asyncCompactService.get().start((error) -> {
|
asyncCompactService.get().start((error) -> {
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public class TimelineServerPerf implements Serializable {
|
|||||||
this.hostAddr = cfg.serverHost;
|
this.hostAddr = cfg.serverHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(timelineServer.getConf(), cfg.basePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(timelineServer.getConf()).setBasePath(cfg.basePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
SyncableFileSystemView fsView = new RemoteHoodieTableFileSystemView(this.hostAddr, cfg.serverPort, metaClient);
|
SyncableFileSystemView fsView = new RemoteHoodieTableFileSystemView(this.hostAddr, cfg.serverPort, metaClient);
|
||||||
|
|
||||||
String reportDir = cfg.reportDir;
|
String reportDir = cfg.reportDir;
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class IncrSourceHelper {
|
|||||||
int numInstantsPerFetch, Option<String> beginInstant, boolean readLatestOnMissingBeginInstant) {
|
int numInstantsPerFetch, Option<String> beginInstant, boolean readLatestOnMissingBeginInstant) {
|
||||||
ValidationUtils.checkArgument(numInstantsPerFetch > 0,
|
ValidationUtils.checkArgument(numInstantsPerFetch > 0,
|
||||||
"Make sure the config hoodie.deltastreamer.source.hoodieincr.num_instants is set to a positive value");
|
"Make sure the config hoodie.deltastreamer.source.hoodieincr.num_instants is set to a positive value");
|
||||||
HoodieTableMetaClient srcMetaClient = new HoodieTableMetaClient(jssc.hadoopConfiguration(), srcBasePath, true);
|
HoodieTableMetaClient srcMetaClient = HoodieTableMetaClient.builder().setConf(jssc.hadoopConfiguration()).setBasePath(srcBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
|
|
||||||
final HoodieTimeline activeCommitTimeline =
|
final HoodieTimeline activeCommitTimeline =
|
||||||
srcMetaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants();
|
srcMetaClient.getActiveTimeline().getCommitTimeline().filterCompletedInstants();
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void assertAtleastNCompactionCommits(int minExpected, String tablePath, FileSystem fs) {
|
static void assertAtleastNCompactionCommits(int minExpected, String tablePath, FileSystem fs) {
|
||||||
HoodieTableMetaClient meta = new HoodieTableMetaClient(fs.getConf(), tablePath);
|
HoodieTableMetaClient meta = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).build();
|
||||||
HoodieTimeline timeline = meta.getActiveTimeline().getCommitTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = meta.getActiveTimeline().getCommitTimeline().filterCompletedInstants();
|
||||||
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
||||||
int numCompactionCommits = (int) timeline.getInstants().count();
|
int numCompactionCommits = (int) timeline.getInstants().count();
|
||||||
@@ -371,7 +371,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void assertAtleastNDeltaCommits(int minExpected, String tablePath, FileSystem fs) {
|
static void assertAtleastNDeltaCommits(int minExpected, String tablePath, FileSystem fs) {
|
||||||
HoodieTableMetaClient meta = new HoodieTableMetaClient(fs.getConf(), tablePath);
|
HoodieTableMetaClient meta = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).build();
|
||||||
HoodieTimeline timeline = meta.getActiveTimeline().getDeltaCommitTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = meta.getActiveTimeline().getDeltaCommitTimeline().filterCompletedInstants();
|
||||||
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
||||||
int numDeltaCommits = (int) timeline.getInstants().count();
|
int numDeltaCommits = (int) timeline.getInstants().count();
|
||||||
@@ -380,7 +380,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
|
|
||||||
static String assertCommitMetadata(String expected, String tablePath, FileSystem fs, int totalCommits)
|
static String assertCommitMetadata(String expected, String tablePath, FileSystem fs, int totalCommits)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
HoodieTableMetaClient meta = new HoodieTableMetaClient(fs.getConf(), tablePath);
|
HoodieTableMetaClient meta = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).build();
|
||||||
HoodieTimeline timeline = meta.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = meta.getActiveTimeline().getCommitsTimeline().filterCompletedInstants();
|
||||||
HoodieInstant lastInstant = timeline.lastInstant().get();
|
HoodieInstant lastInstant = timeline.lastInstant().get();
|
||||||
HoodieCommitMetadata commitMetadata =
|
HoodieCommitMetadata commitMetadata =
|
||||||
@@ -408,7 +408,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void assertAtLeastNCommits(int minExpected, String tablePath, FileSystem fs) {
|
static void assertAtLeastNCommits(int minExpected, String tablePath, FileSystem fs) {
|
||||||
HoodieTableMetaClient meta = new HoodieTableMetaClient(fs.getConf(), tablePath);
|
HoodieTableMetaClient meta = HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(tablePath).build();
|
||||||
HoodieTimeline timeline = meta.getActiveTimeline().filterCompletedInstants();
|
HoodieTimeline timeline = meta.getActiveTimeline().filterCompletedInstants();
|
||||||
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
LOG.info("Timeline Instants=" + meta.getActiveTimeline().getInstants().collect(Collectors.toList()));
|
||||||
int numDeltaCommits = (int) timeline.getInstants().count();
|
int numDeltaCommits = (int) timeline.getInstants().count();
|
||||||
@@ -683,13 +683,13 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
cfg.configs.add(String.format("%s=%s", HoodieClusteringConfig.INLINE_CLUSTERING_MAX_COMMIT_PROP, "2"));
|
cfg.configs.add(String.format("%s=%s", HoodieClusteringConfig.INLINE_CLUSTERING_MAX_COMMIT_PROP, "2"));
|
||||||
HoodieDeltaStreamer ds = new HoodieDeltaStreamer(cfg, jsc);
|
HoodieDeltaStreamer ds = new HoodieDeltaStreamer(cfg, jsc);
|
||||||
deltaStreamerTestRunner(ds, cfg, (r) -> {
|
deltaStreamerTestRunner(ds, cfg, (r) -> {
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(this.dfs.getConf(), tableBasePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(this.dfs.getConf()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
int pendingReplaceSize = metaClient.getActiveTimeline().filterPendingReplaceTimeline().getInstants().toArray().length;
|
int pendingReplaceSize = metaClient.getActiveTimeline().filterPendingReplaceTimeline().getInstants().toArray().length;
|
||||||
int completeReplaceSize = metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length;
|
int completeReplaceSize = metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length;
|
||||||
LOG.info("PendingReplaceSize=" + pendingReplaceSize + ",completeReplaceSize = " + completeReplaceSize);
|
LOG.info("PendingReplaceSize=" + pendingReplaceSize + ",completeReplaceSize = " + completeReplaceSize);
|
||||||
return completeReplaceSize > 0;
|
return completeReplaceSize > 0;
|
||||||
});
|
});
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(this.dfs.getConf(), tableBasePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(this.dfs.getConf()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
assertEquals(1, metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length);
|
assertEquals(1, metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -739,13 +739,13 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
} else {
|
} else {
|
||||||
LOG.warn("Schedule clustering failed");
|
LOG.warn("Schedule clustering failed");
|
||||||
}
|
}
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(this.dfs.getConf(), tableBasePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(this.dfs.getConf()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
int pendingReplaceSize = metaClient.getActiveTimeline().filterPendingReplaceTimeline().getInstants().toArray().length;
|
int pendingReplaceSize = metaClient.getActiveTimeline().filterPendingReplaceTimeline().getInstants().toArray().length;
|
||||||
int completeReplaceSize = metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length;
|
int completeReplaceSize = metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length;
|
||||||
System.out.println("PendingReplaceSize=" + pendingReplaceSize + ",completeReplaceSize = " + completeReplaceSize);
|
System.out.println("PendingReplaceSize=" + pendingReplaceSize + ",completeReplaceSize = " + completeReplaceSize);
|
||||||
return completeReplaceSize > 0;
|
return completeReplaceSize > 0;
|
||||||
});
|
});
|
||||||
HoodieTableMetaClient metaClient = new HoodieTableMetaClient(this.dfs.getConf(), tableBasePath, true);
|
HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder().setConf(this.dfs.getConf()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
assertEquals(1, metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length);
|
assertEquals(1, metaClient.getActiveTimeline().getCompletedReplaceTimeline().getInstants().toArray().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -921,7 +921,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
assertEquals(1000, counts.get(1).getLong(1));
|
assertEquals(1000, counts.get(1).getLong(1));
|
||||||
|
|
||||||
// Test with empty commits
|
// Test with empty commits
|
||||||
HoodieTableMetaClient mClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), tableBasePath, true);
|
HoodieTableMetaClient mClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
HoodieInstant lastFinished = mClient.getCommitsTimeline().filterCompletedInstants().lastInstant().get();
|
HoodieInstant lastFinished = mClient.getCommitsTimeline().filterCompletedInstants().lastInstant().get();
|
||||||
HoodieDeltaStreamer.Config cfg2 = TestHelpers.makeDropAllConfig(tableBasePath, WriteOperationType.UPSERT);
|
HoodieDeltaStreamer.Config cfg2 = TestHelpers.makeDropAllConfig(tableBasePath, WriteOperationType.UPSERT);
|
||||||
cfg2.filterDupes = false;
|
cfg2.filterDupes = false;
|
||||||
@@ -930,7 +930,7 @@ public class TestHoodieDeltaStreamer extends UtilitiesTestBase {
|
|||||||
cfg2.configs.add(String.format("%s=false", HoodieCompactionConfig.AUTO_CLEAN_PROP));
|
cfg2.configs.add(String.format("%s=false", HoodieCompactionConfig.AUTO_CLEAN_PROP));
|
||||||
HoodieDeltaStreamer ds2 = new HoodieDeltaStreamer(cfg2, jsc);
|
HoodieDeltaStreamer ds2 = new HoodieDeltaStreamer(cfg2, jsc);
|
||||||
ds2.sync();
|
ds2.sync();
|
||||||
mClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), tableBasePath, true);
|
mClient = HoodieTableMetaClient.builder().setConf(jsc.hadoopConfiguration()).setBasePath(tableBasePath).setLoadActiveTimelineOnLoad(true).build();
|
||||||
HoodieInstant newLastFinished = mClient.getCommitsTimeline().filterCompletedInstants().lastInstant().get();
|
HoodieInstant newLastFinished = mClient.getCommitsTimeline().filterCompletedInstants().lastInstant().get();
|
||||||
assertTrue(HoodieTimeline.compareTimestamps(newLastFinished.getTimestamp(), HoodieTimeline.GREATER_THAN, lastFinished.getTimestamp()
|
assertTrue(HoodieTimeline.compareTimestamps(newLastFinished.getTimestamp(), HoodieTimeline.GREATER_THAN, lastFinished.getTimestamp()
|
||||||
));
|
));
|
||||||
|
|||||||
Reference in New Issue
Block a user