HDFS-13721. NPE in DataNode due to uninitialized DiskBalancer.
This commit is contained in:
parent
ba6b48e19f
commit
7d1e2e1fbb
|
@ -3135,7 +3135,7 @@ public class DataNode extends ReconfigurableBase
|
|||
@Override // DataNodeMXBean
|
||||
public String getDiskBalancerStatus() {
|
||||
try {
|
||||
return this.diskBalancer.queryWorkStatus().toJsonString();
|
||||
return getDiskBalancer().queryWorkStatus().toJsonString();
|
||||
} catch (IOException ex) {
|
||||
LOG.debug("Reading diskbalancer Status failed. ex:{}", ex);
|
||||
return "";
|
||||
|
@ -3513,7 +3513,7 @@ public class DataNode extends ReconfigurableBase
|
|||
DiskBalancerException.Result.DATANODE_STATUS_NOT_REGULAR);
|
||||
}
|
||||
|
||||
this.diskBalancer.submitPlan(planID, planVersion, planFile, planData,
|
||||
getDiskBalancer().submitPlan(planID, planVersion, planFile, planData,
|
||||
skipDateCheck);
|
||||
}
|
||||
|
||||
|
@ -3525,7 +3525,7 @@ public class DataNode extends ReconfigurableBase
|
|||
public void cancelDiskBalancePlan(String planID) throws
|
||||
IOException {
|
||||
checkSuperuserPrivilege();
|
||||
this.diskBalancer.cancelPlan(planID);
|
||||
getDiskBalancer().cancelPlan(planID);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3536,7 +3536,7 @@ public class DataNode extends ReconfigurableBase
|
|||
@Override
|
||||
public DiskBalancerWorkStatus queryDiskBalancerPlan() throws IOException {
|
||||
checkSuperuserPrivilege();
|
||||
return this.diskBalancer.queryWorkStatus();
|
||||
return getDiskBalancer().queryWorkStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3553,9 +3553,9 @@ public class DataNode extends ReconfigurableBase
|
|||
Preconditions.checkNotNull(key);
|
||||
switch (key) {
|
||||
case DiskBalancerConstants.DISKBALANCER_VOLUME_NAME:
|
||||
return this.diskBalancer.getVolumeNames();
|
||||
return getDiskBalancer().getVolumeNames();
|
||||
case DiskBalancerConstants.DISKBALANCER_BANDWIDTH :
|
||||
return Long.toString(this.diskBalancer.getBandwidth());
|
||||
return Long.toString(getDiskBalancer().getBandwidth());
|
||||
default:
|
||||
LOG.error("Disk Balancer - Unknown key in get balancer setting. Key: {}",
|
||||
key);
|
||||
|
@ -3609,4 +3609,11 @@ public class DataNode extends ReconfigurableBase
|
|||
}
|
||||
return volumeInfoList;
|
||||
}
|
||||
|
||||
private DiskBalancer getDiskBalancer() throws IOException {
|
||||
if (this.diskBalancer == null) {
|
||||
throw new IOException("DiskBalancer is not initialized");
|
||||
}
|
||||
return this.diskBalancer;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -109,6 +109,11 @@ public class TestDiskBalancer {
|
|||
.getFsVolumeReferences()) {
|
||||
assertEquals(ref.size(), dbDnNode.getVolumeCount());
|
||||
}
|
||||
|
||||
// Shutdown the DN first, to verify that calling diskbalancer APIs on
|
||||
// uninitialized DN doesn't NPE
|
||||
dnNode.shutdown();
|
||||
assertEquals("", dnNode.getDiskBalancerStatus());
|
||||
} finally {
|
||||
cluster.shutdown();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue