|
19 | 19 | package org.apache.hudi.table.action.commit;
|
20 | 20 |
|
21 | 21 | import org.apache.hudi.client.WriteStatus;
|
22 |
| -import org.apache.hudi.common.fs.FSUtils; |
23 | 22 | import org.apache.hudi.common.model.HoodieKey;
|
24 | 23 | import org.apache.hudi.common.model.HoodieRecord;
|
25 | 24 | import org.apache.hudi.common.model.HoodieRecordPayload;
|
26 | 25 | import org.apache.hudi.common.table.timeline.HoodieInstant;
|
27 | 26 | import org.apache.hudi.common.util.Option;
|
| 27 | +import org.apache.hudi.common.util.ReflectionUtils; |
28 | 28 | import org.apache.hudi.config.HoodieWriteConfig;
|
29 | 29 | import org.apache.hudi.execution.JavaLazyInsertIterable;
|
30 | 30 | import org.apache.hudi.execution.bulkinsert.JavaBulkInsertInternalPartitionerFactory;
|
31 | 31 | import org.apache.hudi.io.CreateHandleFactory;
|
32 | 32 | import org.apache.hudi.table.BulkInsertPartitioner;
|
| 33 | +import org.apache.hudi.table.FileIdPrefixProvider; |
33 | 34 | import org.apache.hudi.table.HoodieTable;
|
34 | 35 | import org.apache.hudi.table.action.HoodieWriteMetadata;
|
35 | 36 |
|
@@ -66,10 +67,14 @@ public HoodieWriteMetadata<List<WriteStatus>> bulkInsert(final List<HoodieRecord
|
66 | 67 | final Option<BulkInsertPartitioner<T>> userDefinedBulkInsertPartitioner) {
|
67 | 68 | HoodieWriteMetadata result = new HoodieWriteMetadata();
|
68 | 69 |
|
69 |
| - //transition bulk_insert state to inflight |
70 |
| - table.getActiveTimeline().transitionRequestedToInflight(new HoodieInstant(HoodieInstant.State.REQUESTED, |
71 |
| - table.getMetaClient().getCommitActionType(), instantTime), Option.empty(), |
72 |
| - config.shouldAllowMultiWriteOnSameInstant()); |
| 70 | + // It's possible the transition to inflight could have already happened. |
| 71 | + if (!table.getActiveTimeline().filterInflights().containsInstant(instantTime)) { |
| 72 | + table.getActiveTimeline().transitionRequestedToInflight( |
| 73 | + new HoodieInstant(HoodieInstant.State.REQUESTED, table.getMetaClient().getCommitActionType(), instantTime), |
| 74 | + Option.empty(), |
| 75 | + config.shouldAllowMultiWriteOnSameInstant()); |
| 76 | + } |
| 77 | + |
73 | 78 | // write new files
|
74 | 79 | List<WriteStatus> writeStatuses = bulkInsert(inputRecords, instantTime, table, config, performDedupe, userDefinedBulkInsertPartitioner, false, config.getBulkInsertShuffleParallelism(), false);
|
75 | 80 | //update index
|
@@ -102,12 +107,16 @@ public List<WriteStatus> bulkInsert(List<HoodieRecord<T>> inputRecords,
|
102 | 107 | : JavaBulkInsertInternalPartitionerFactory.get(config.getBulkInsertSortMode());
|
103 | 108 | repartitionedRecords = (List<HoodieRecord<T>>) partitioner.repartitionRecords(dedupedRecords, parallelism);
|
104 | 109 |
|
105 |
| - String idPfx = FSUtils.createNewFileIdPfx(); |
| 110 | + FileIdPrefixProvider fileIdPrefixProvider = (FileIdPrefixProvider) ReflectionUtils.loadClass( |
| 111 | + config.getFileIdPrefixProviderClassName(), |
| 112 | + config.getProps()); |
106 | 113 |
|
107 | 114 | List<WriteStatus> writeStatuses = new ArrayList<>();
|
108 | 115 |
|
109 |
| - new JavaLazyInsertIterable<>(repartitionedRecords.iterator(), true, config, instantTime, table, idPfx, |
110 |
| - table.getTaskContextSupplier(), new CreateHandleFactory<>()).forEachRemaining(writeStatuses::addAll); |
| 116 | + new JavaLazyInsertIterable<>(repartitionedRecords.iterator(), true, |
| 117 | + config, instantTime, table, |
| 118 | + fileIdPrefixProvider.createFilePrefix(""), table.getTaskContextSupplier(), |
| 119 | + new CreateHandleFactory<>()).forEachRemaining(writeStatuses::addAll); |
111 | 120 |
|
112 | 121 | return writeStatuses;
|
113 | 122 | }
|
|
0 commit comments