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
---