[HUDI-858] Allow multiple operations to be executed within a single commit (#1633)
This commit is contained in:
committed by
GitHub
parent
2600d2de8d
commit
e6f3bf10cf
@@ -988,6 +988,44 @@ public class TestHoodieClientOnCopyOnWriteStorage extends TestHoodieClientBase {
|
||||
return Pair.of(markerFilePath, result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultiOperationsPerCommit() throws IOException {
|
||||
HoodieWriteConfig cfg = getConfigBuilder().withAutoCommit(false)
|
||||
.withAllowMultiWriteOnSameInstant(true)
|
||||
.build();
|
||||
HoodieWriteClient client = getHoodieWriteClient(cfg);
|
||||
String firstInstantTime = "0000";
|
||||
client.startCommitWithTime(firstInstantTime);
|
||||
int numRecords = 200;
|
||||
JavaRDD<HoodieRecord> writeRecords = jsc.parallelize(dataGen.generateInserts(firstInstantTime, numRecords), 1);
|
||||
JavaRDD<WriteStatus> result = client.bulkInsert(writeRecords, firstInstantTime);
|
||||
assertTrue(client.commit(firstInstantTime, result), "Commit should succeed");
|
||||
assertTrue(HoodieTestUtils.doesCommitExist(basePath, firstInstantTime),
|
||||
"After explicit commit, commit file should be created");
|
||||
|
||||
// Check the entire dataset has all records still
|
||||
String[] fullPartitionPaths = new String[dataGen.getPartitionPaths().length];
|
||||
for (int i = 0; i < fullPartitionPaths.length; i++) {
|
||||
fullPartitionPaths[i] = String.format("%s/%s/*", basePath, dataGen.getPartitionPaths()[i]);
|
||||
}
|
||||
assertEquals(numRecords,
|
||||
HoodieClientTestUtils.read(jsc, basePath, sqlContext, fs, fullPartitionPaths).count(),
|
||||
"Must contain " + numRecords + " records");
|
||||
|
||||
String nextInstantTime = "0001";
|
||||
client.startCommitWithTime(nextInstantTime);
|
||||
JavaRDD<HoodieRecord> updateRecords = jsc.parallelize(dataGen.generateUpdates(nextInstantTime, numRecords), 1);
|
||||
JavaRDD<HoodieRecord> insertRecords = jsc.parallelize(dataGen.generateInserts(nextInstantTime, numRecords), 1);
|
||||
JavaRDD<WriteStatus> inserts = client.bulkInsert(insertRecords, nextInstantTime);
|
||||
JavaRDD<WriteStatus> upserts = client.upsert(updateRecords, nextInstantTime);
|
||||
assertTrue(client.commit(nextInstantTime, inserts.union(upserts)), "Commit should succeed");
|
||||
assertTrue(HoodieTestUtils.doesCommitExist(basePath, firstInstantTime),
|
||||
"After explicit commit, commit file should be created");
|
||||
int totalRecords = 2 * numRecords;
|
||||
assertEquals(totalRecords, HoodieClientTestUtils.read(jsc, basePath, sqlContext, fs, fullPartitionPaths).count(),
|
||||
"Must contain " + totalRecords + " records");
|
||||
}
|
||||
|
||||
/**
|
||||
* Build Hoodie Write Config for small data file sizes.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user