From 1e1dc86c1fb0d402d8a1e3f98d58933b521cd0de Mon Sep 17 00:00:00 2001 From: zhangyb16 Date: Tue, 7 Sep 2021 18:11:31 +0800 Subject: [PATCH] HDFS-16186 Datanode kicks out hard disk logic optimization --- .../server/datanode/VolumeExCountPair.java | 56 +++++++++---------- .../checker/DatasetVolumeChecker.java | 8 ++- 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/VolumeExCountPair.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/VolumeExCountPair.java index dc45078678fa4..5bde7c26f0e80 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/VolumeExCountPair.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/VolumeExCountPair.java @@ -18,43 +18,43 @@ package org.apache.hadoop.hdfs.server.datanode; /** - * Record volume's IOException total counts and update timestamp + * Record volume's IOException total counts and update timestamp. */ public class VolumeExCountPair { - private long prevTs; - private long IoExceptionCnt; + private long prevTs; + private long ioExceptionCnt; - public VolumeExCountPair() { - } + public VolumeExCountPair() { + } - public VolumeExCountPair(long prevTimeStamp, long IoExceptionCnt) { - this.prevTs = prevTimeStamp; - this.IoExceptionCnt = IoExceptionCnt; - } + public VolumeExCountPair(long prevTimeStamp, long ioExceptionCnt) { + this.prevTs = prevTimeStamp; + this.ioExceptionCnt = ioExceptionCnt; + } - public void setNewPair(long now, long curExCnt) { - setPrevTs(now); - setIoExceptionCnt(curExCnt); - } + public void setNewPair(long now, long curExCnt) { + setPrevTs(now); + setIoExceptionCnt(curExCnt); + } - public VolumeExCountPair getPair() { - return new VolumeExCountPair(prevTs, IoExceptionCnt); - } + public VolumeExCountPair getPair() { + return new VolumeExCountPair(prevTs, ioExceptionCnt); + } - public void setPrevTs(long prevTs) { - this.prevTs = prevTs; - } + public void setPrevTs(long prevTs) { + this.prevTs = prevTs; + } - public void setIoExceptionCnt(long ioExceptionCnt) { - IoExceptionCnt = ioExceptionCnt; - } + public void setIoExceptionCnt(long ioExceptionCnt) { + this.ioExceptionCnt = ioExceptionCnt; + } - public long getPrevTs() { - return prevTs; - } + public long getPrevTs() { + return prevTs; + } - public long getIoExceptionCnt() { - return IoExceptionCnt; - } + public long getIoExceptionCnt() { + return ioExceptionCnt; + } } \ No newline at end of file diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/checker/DatasetVolumeChecker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/checker/DatasetVolumeChecker.java index 0ebc64d69b23b..8371a4944bced 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/checker/DatasetVolumeChecker.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/checker/DatasetVolumeChecker.java @@ -38,6 +38,7 @@ import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.util.DiskChecker.DiskErrorException; import org.apache.hadoop.util.Sets; +import org.apache.hadoop.util.Time; import org.apache.hadoop.util.Timer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -400,11 +401,12 @@ private void markHealthy() { LOG.warn("Volume {} Exception Count is {}", reference.getVolume().toString(), reference.getVolume().getExCountPair().getIoExceptionCnt()); if (volumeExCountPair.getIoExceptionCnt() == 0) { - volumeExCountPair.setNewPair(System.currentTimeMillis(), totalFileIoErrors); + volumeExCountPair.setNewPair(Time.monotonicNow(), totalFileIoErrors); }else{ - if((System.currentTimeMillis() - reference.getVolume().getExCountPair().getPrevTs())/1000/60/60 > 2){ + long lastTime = reference.getVolume().getExCountPair().getPrevTs(); + if((Time.monotonicNow() - lastTime)/1000/60/60 > 2){ long cnt = reference.getVolume().getExCountPair().getPair().getIoExceptionCnt(); - if(cnt > 100){ + if(cnt > 30){ failedVolumes.add(reference.getVolume()); return; }