From 6f6d331f9f8c06475b37600e4f3c1f6519ce7329 Mon Sep 17 00:00:00 2001 From: Lijin Bin Date: Sat, 12 Oct 2019 19:44:42 -0700 Subject: [PATCH] HBASE-23159 HStore#getStorefilesSize may throw NPE --- .../hadoop/hbase/regionserver/HStore.java | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java index fd8f19d5c81..dd7a9a7aff7 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java @@ -2135,24 +2135,37 @@ public class HStore implements Store, HeapSize, StoreConfigInformation, Propagat } private long getTotalUmcompressedBytes(List files) { - return files.stream().filter(f -> f != null && f.getReader() != null) - .mapToLong(f -> f.getReader().getTotalUncompressedBytes()).sum(); + return files.stream().filter(f -> f != null).mapToLong(f -> { + StoreFileReader reader = f.getReader(); + if (reader == null) { + return 0; + } else { + return reader.getTotalUncompressedBytes(); + } + }).sum(); } private long getStorefilesSize(Collection files, Predicate predicate) { return files.stream().filter(f -> f != null && f.getReader() != null).filter(predicate) - .mapToLong(f -> f.getReader().length()).sum(); + .mapToLong(f -> { + StoreFileReader reader = f.getReader(); + if (reader == null) { + return 0; + } else { + return reader.length(); + } + }).sum(); } private long getStoreFileFieldSize(ToLongFunction f) { - return this.storeEngine.getStoreFileManager().getStorefiles().stream().filter(sf -> { - if (sf.getReader() == null) { - LOG.warn("StoreFile {} has a null Reader", sf); - return false; - } else { - return true; - } - }).map(HStoreFile::getReader).mapToLong(f).sum(); + return this.storeEngine.getStoreFileManager().getStorefiles().stream() + .map(HStoreFile::getReader).filter(reader -> { + if (reader == null) { + return false; + } else { + return true; + } + }).mapToLong(f).sum(); } @Override