HDFS-16891 Avoid the overhead of copy-on-write exception list while loading inodes sub sections in parallel (#5300)
Reviewed-by: Stephen O'Donnell <sodonnell@apache.org> Signed-off-by: Chris Nauroth <cnauroth@apache.org>
This commit is contained in:
parent
442a5fb285
commit
04f3573f6a
|
@ -23,9 +23,9 @@ import java.io.InputStream;
|
|||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
@ -227,8 +227,7 @@ public final class FSImageFormatPBINode {
|
|||
LOG.info("Loading the INodeDirectory section in parallel with {} sub-" +
|
||||
"sections", sections.size());
|
||||
CountDownLatch latch = new CountDownLatch(sections.size());
|
||||
final CopyOnWriteArrayList<IOException> exceptions =
|
||||
new CopyOnWriteArrayList<>();
|
||||
final List<IOException> exceptions = Collections.synchronizedList(new ArrayList<>());
|
||||
for (FileSummary.Section s : sections) {
|
||||
service.submit(() -> {
|
||||
InputStream ins = null;
|
||||
|
@ -237,8 +236,7 @@ public final class FSImageFormatPBINode {
|
|||
compressionCodec);
|
||||
loadINodeDirectorySection(ins);
|
||||
} catch (Exception e) {
|
||||
LOG.error("An exception occurred loading INodeDirectories in " +
|
||||
"parallel", e);
|
||||
LOG.error("An exception occurred loading INodeDirectories in parallel", e);
|
||||
exceptions.add(new IOException(e));
|
||||
} finally {
|
||||
latch.countDown();
|
||||
|
@ -424,8 +422,7 @@ public final class FSImageFormatPBINode {
|
|||
long expectedInodes = 0;
|
||||
CountDownLatch latch = new CountDownLatch(sections.size());
|
||||
AtomicInteger totalLoaded = new AtomicInteger(0);
|
||||
final CopyOnWriteArrayList<IOException> exceptions =
|
||||
new CopyOnWriteArrayList<>();
|
||||
final List<IOException> exceptions = Collections.synchronizedList(new ArrayList<>());
|
||||
|
||||
for (int i=0; i < sections.size(); i++) {
|
||||
FileSummary.Section s = sections.get(i);
|
||||
|
|
Loading…
Reference in New Issue