Github user kumarvishal09 commented on a diff in the pull request:
https://github.com/apache/carbondata/pull/2672#discussion_r214545548
--- Diff:
hadoop/src/main/java/org/apache/carbondata/hadoop/api/CarbonTableOutputFormat.java
---
@@ -460,27 +461,32 @@ public CarbonLoadModel getLoadModel() {
private CarbonOutputIteratorWrapper[] iterators;
- private int counter;
+ // keep counts of number of writes called
+ // and it is used to load balance each write call to one iterator.
+ private AtomicLong counter;
CarbonMultiRecordWriter(CarbonOutputIteratorWrapper[] iterators,
DataLoadExecutor dataLoadExecutor, CarbonLoadModel loadModel,
Future future,
ExecutorService executorService) {
super(null, dataLoadExecutor, loadModel, future, executorService);
this.iterators = iterators;
+ counter = new AtomicLong(0);
}
- @Override public synchronized void write(NullWritable aVoid,
ObjectArrayWritable objects)
+ @Override public void write(NullWritable aVoid, ObjectArrayWritable
objects)
throws InterruptedException {
- iterators[counter].write(objects.get());
- if (++counter == iterators.length) {
- //round robin reset
- counter = 0;
+ int iteratorLength = iterators.length;
--- End diff --
Directly use iterators.length no need to assign to any variable
---