|
@@ -37,6 +37,7 @@ import org.apache.hadoop.hdfs.server.datanode.BlockScanner.Conf;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeReference;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeReference;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi.BlockIterator;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi.BlockIterator;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi;
|
|
|
|
+import org.apache.hadoop.hdfs.server.datanode.metrics.DataNodeMetrics;
|
|
import org.apache.hadoop.hdfs.util.DataTransferThrottler;
|
|
import org.apache.hadoop.hdfs.util.DataTransferThrottler;
|
|
import org.apache.hadoop.io.IOUtils;
|
|
import org.apache.hadoop.io.IOUtils;
|
|
import org.apache.hadoop.util.Time;
|
|
import org.apache.hadoop.util.Time;
|
|
@@ -81,6 +82,8 @@ public class VolumeScanner extends Thread {
|
|
*/
|
|
*/
|
|
private final DataNode datanode;
|
|
private final DataNode datanode;
|
|
|
|
|
|
|
|
+ private final DataNodeMetrics metrics;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* A reference to the volume that we're scanning.
|
|
* A reference to the volume that we're scanning.
|
|
*/
|
|
*/
|
|
@@ -300,6 +303,7 @@ public class VolumeScanner extends Thread {
|
|
VolumeScanner(Conf conf, DataNode datanode, FsVolumeReference ref) {
|
|
VolumeScanner(Conf conf, DataNode datanode, FsVolumeReference ref) {
|
|
this.conf = conf;
|
|
this.conf = conf;
|
|
this.datanode = datanode;
|
|
this.datanode = datanode;
|
|
|
|
+ this.metrics = datanode.getMetrics();
|
|
this.ref = ref;
|
|
this.ref = ref;
|
|
this.volume = ref.getVolume();
|
|
this.volume = ref.getVolume();
|
|
ScanResultHandler handler;
|
|
ScanResultHandler handler;
|
|
@@ -444,12 +448,14 @@ public class VolumeScanner extends Thread {
|
|
throttler.setBandwidth(bytesPerSec);
|
|
throttler.setBandwidth(bytesPerSec);
|
|
long bytesRead = blockSender.sendBlock(nullStream, null, throttler);
|
|
long bytesRead = blockSender.sendBlock(nullStream, null, throttler);
|
|
resultHandler.handle(block, null);
|
|
resultHandler.handle(block, null);
|
|
|
|
+ metrics.incrBlocksVerified();
|
|
return bytesRead;
|
|
return bytesRead;
|
|
} catch (IOException e) {
|
|
} catch (IOException e) {
|
|
resultHandler.handle(block, e);
|
|
resultHandler.handle(block, e);
|
|
} finally {
|
|
} finally {
|
|
IOUtils.cleanup(null, blockSender);
|
|
IOUtils.cleanup(null, blockSender);
|
|
}
|
|
}
|
|
|
|
+ metrics.incrBlockVerificationFailures();
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|