|
18 | 18 |
|
19 | 19 | package org.apache.hudi.table.action.commit; |
20 | 20 |
|
| 21 | +import org.apache.avro.Schema; |
21 | 22 | import org.apache.avro.SchemaCompatibility; |
| 23 | +import org.apache.avro.generic.GenericDatumReader; |
| 24 | +import org.apache.avro.generic.GenericDatumWriter; |
| 25 | +import org.apache.avro.generic.GenericRecord; |
| 26 | +import org.apache.avro.io.BinaryDecoder; |
| 27 | +import org.apache.avro.io.BinaryEncoder; |
| 28 | +import org.apache.hadoop.conf.Configuration; |
22 | 29 | import org.apache.hudi.avro.HoodieAvroUtils; |
23 | 30 | import org.apache.hudi.client.WriteStatus; |
24 | 31 | import org.apache.hudi.common.data.HoodieData; |
|
27 | 34 | import org.apache.hudi.common.model.HoodieKey; |
28 | 35 | import org.apache.hudi.common.model.HoodieRecord; |
29 | 36 | import org.apache.hudi.common.model.HoodieRecordPayload; |
30 | | -import org.apache.hudi.common.util.Option; |
31 | 37 | import org.apache.hudi.common.util.InternalSchemaCache; |
32 | | -import org.apache.hudi.common.util.queue.BoundedInMemoryExecutor; |
| 38 | +import org.apache.hudi.common.util.Option; |
| 39 | +import org.apache.hudi.common.util.queue.HoodieExecutor; |
33 | 40 | import org.apache.hudi.exception.HoodieException; |
34 | 41 | import org.apache.hudi.internal.schema.InternalSchema; |
35 | 42 | import org.apache.hudi.internal.schema.action.InternalSchemaMerger; |
36 | 43 | import org.apache.hudi.internal.schema.convert.AvroInternalSchemaConverter; |
37 | 44 | import org.apache.hudi.internal.schema.utils.AvroSchemaEvolutionUtils; |
38 | | -import org.apache.hudi.internal.schema.utils.SerDeHelper; |
39 | 45 | import org.apache.hudi.internal.schema.utils.InternalSchemaUtils; |
| 46 | +import org.apache.hudi.internal.schema.utils.SerDeHelper; |
40 | 47 | import org.apache.hudi.io.HoodieMergeHandle; |
41 | 48 | import org.apache.hudi.io.storage.HoodieFileReader; |
42 | 49 | import org.apache.hudi.io.storage.HoodieFileReaderFactory; |
43 | 50 | import org.apache.hudi.table.HoodieTable; |
44 | | - |
45 | | -import org.apache.avro.Schema; |
46 | | -import org.apache.avro.generic.GenericDatumReader; |
47 | | -import org.apache.avro.generic.GenericDatumWriter; |
48 | | -import org.apache.avro.generic.GenericRecord; |
49 | | -import org.apache.avro.io.BinaryDecoder; |
50 | | -import org.apache.avro.io.BinaryEncoder; |
51 | | -import org.apache.hadoop.conf.Configuration; |
| 51 | +import org.apache.hudi.util.QueueBasedExecutorFactory; |
52 | 52 |
|
53 | 53 | import java.io.IOException; |
| 54 | +import java.util.HashMap; |
54 | 55 | import java.util.Iterator; |
55 | 56 | import java.util.List; |
56 | | -import java.util.HashMap; |
57 | 57 | import java.util.Map; |
58 | 58 | import java.util.stream.Collectors; |
59 | 59 |
|
@@ -91,7 +91,7 @@ public void runMerge(HoodieTable<T, HoodieData<HoodieRecord<T>>, HoodieData<Hood |
91 | 91 | readSchema = mergeHandle.getWriterSchemaWithMetaFields(); |
92 | 92 | } |
93 | 93 |
|
94 | | - BoundedInMemoryExecutor<GenericRecord, GenericRecord, Void> wrapper = null; |
| 94 | + HoodieExecutor<GenericRecord, GenericRecord, Void> wrapper = null; |
95 | 95 | HoodieFileReader<GenericRecord> reader = HoodieFileReaderFactory.getFileReader(cfgForHoodieFile, mergeHandle.getOldFilePath()); |
96 | 96 |
|
97 | 97 | Option<InternalSchema> querySchemaOpt = SerDeHelper.fromJson(table.getConfig().getInternalSchema()); |
@@ -137,13 +137,14 @@ public void runMerge(HoodieTable<T, HoodieData<HoodieRecord<T>>, HoodieData<Hood |
137 | 137 |
|
138 | 138 | ThreadLocal<BinaryEncoder> encoderCache = new ThreadLocal<>(); |
139 | 139 | ThreadLocal<BinaryDecoder> decoderCache = new ThreadLocal<>(); |
140 | | - wrapper = new BoundedInMemoryExecutor(table.getConfig().getWriteBufferLimitBytes(), readerIterator, |
141 | | - new UpdateHandler(mergeHandle), record -> { |
| 140 | + |
| 141 | + wrapper = QueueBasedExecutorFactory.create(table.getConfig(), readerIterator, new UpdateHandler(mergeHandle), record -> { |
142 | 142 | if (!externalSchemaTransformation) { |
143 | 143 | return record; |
144 | 144 | } |
145 | | - return transformRecordBasedOnNewSchema(gReader, gWriter, encoderCache, decoderCache, (GenericRecord) record); |
| 145 | + return transformRecordBasedOnNewSchema(gReader, gWriter, encoderCache, decoderCache, record); |
146 | 146 | }, table.getPreExecuteRunnable()); |
| 147 | + |
147 | 148 | wrapper.execute(); |
148 | 149 | } catch (Exception e) { |
149 | 150 | throw new HoodieException(e); |
|
0 commit comments