HDFS-16377. Should CheckNotNull before access FsDatasetSpi (#3784)

Reviewed-by: Viraj Jasani <vjasani@apache.org>
Signed-off-by: Takanobu Asanuma <tasanuma@apache.org>
This commit is contained in:
litao 2021-12-16 12:49:50 +08:00 committed by GitHub
parent a4557f9ed9
commit 22f5e1885d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 1 deletions

View File

@ -865,6 +865,7 @@ private void refreshVolumes(String newVolumes) throws IOException {
.newFixedThreadPool(changedVolumes.newLocations.size()); .newFixedThreadPool(changedVolumes.newLocations.size());
List<Future<IOException>> exceptions = Lists.newArrayList(); List<Future<IOException>> exceptions = Lists.newArrayList();
Preconditions.checkNotNull(data, "Storage not yet initialized");
for (final StorageLocation location : changedVolumes.newLocations) { for (final StorageLocation location : changedVolumes.newLocations) {
exceptions.add(service.submit(new Callable<IOException>() { exceptions.add(service.submit(new Callable<IOException>() {
@Override @Override
@ -964,6 +965,7 @@ private synchronized void removeVolumes(
clearFailure, Joiner.on(",").join(storageLocations))); clearFailure, Joiner.on(",").join(storageLocations)));
IOException ioe = null; IOException ioe = null;
Preconditions.checkNotNull(data, "Storage not yet initialized");
// Remove volumes and block infos from FsDataset. // Remove volumes and block infos from FsDataset.
data.removeVolumes(storageLocations, clearFailure); data.removeVolumes(storageLocations, clearFailure);
@ -2040,6 +2042,7 @@ FileInputStream[] requestShortCircuitFdsForRead(final ExtendedBlock blk,
FileInputStream fis[] = new FileInputStream[2]; FileInputStream fis[] = new FileInputStream[2];
try { try {
Preconditions.checkNotNull(data, "Storage not yet initialized");
fis[0] = (FileInputStream)data.getBlockInputStream(blk, 0); fis[0] = (FileInputStream)data.getBlockInputStream(blk, 0);
fis[1] = DatanodeUtil.getMetaDataInputStream(blk, data); fis[1] = DatanodeUtil.getMetaDataInputStream(blk, data);
} catch (ClassCastException e) { } catch (ClassCastException e) {
@ -3069,6 +3072,7 @@ public static void main(String args[]) {
@Override // InterDatanodeProtocol @Override // InterDatanodeProtocol
public ReplicaRecoveryInfo initReplicaRecovery(RecoveringBlock rBlock) public ReplicaRecoveryInfo initReplicaRecovery(RecoveringBlock rBlock)
throws IOException { throws IOException {
Preconditions.checkNotNull(data, "Storage not yet initialized");
return data.initReplicaRecovery(rBlock); return data.initReplicaRecovery(rBlock);
} }
@ -3079,6 +3083,7 @@ public ReplicaRecoveryInfo initReplicaRecovery(RecoveringBlock rBlock)
public String updateReplicaUnderRecovery(final ExtendedBlock oldBlock, public String updateReplicaUnderRecovery(final ExtendedBlock oldBlock,
final long recoveryId, final long newBlockId, final long newLength) final long recoveryId, final long newBlockId, final long newLength)
throws IOException { throws IOException {
Preconditions.checkNotNull(data, "Storage not yet initialized");
final Replica r = data.updateReplicaUnderRecovery(oldBlock, final Replica r = data.updateReplicaUnderRecovery(oldBlock,
recoveryId, newBlockId, newLength); recoveryId, newBlockId, newLength);
// Notify the namenode of the updated block info. This is important // Notify the namenode of the updated block info. This is important
@ -3360,7 +3365,7 @@ public void deleteBlockPool(String blockPoolId, boolean force)
"The block pool is still running. First do a refreshNamenodes to " + "The block pool is still running. First do a refreshNamenodes to " +
"shutdown the block pool service"); "shutdown the block pool service");
} }
Preconditions.checkNotNull(data, "Storage not yet initialized");
data.deleteBlockPool(blockPoolId, force); data.deleteBlockPool(blockPoolId, force);
} }
@ -3804,6 +3809,7 @@ public String getSlowDisks() {
@Override @Override
public List<DatanodeVolumeInfo> getVolumeReport() throws IOException { public List<DatanodeVolumeInfo> getVolumeReport() throws IOException {
checkSuperuserPrivilege(); checkSuperuserPrivilege();
Preconditions.checkNotNull(data, "Storage not yet initialized");
Map<String, Object> volumeInfoMap = data.getVolumeInfoMap(); Map<String, Object> volumeInfoMap = data.getVolumeInfoMap();
if (volumeInfoMap == null) { if (volumeInfoMap == null) {
LOG.warn("DataNode volume info not available."); LOG.warn("DataNode volume info not available.");