From a89baed8332e5b276b55379b1900833366e1695a Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Sun, 18 Dec 2011 01:13:00 +0000 Subject: [PATCH] HDFS-2553. Fix BlockPoolSliceScanner spinning in a tight loop. Contributed by Uma Maheswara Rao G. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1220317 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hdfs/server/datanode/BlockPoolSliceScanner.java | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index dc8d4b0be9f..c7bd4272336 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -275,6 +275,9 @@ Release 0.23.1 - UNRELEASED HDFS-2640. Javadoc generation hangs. (tomwhite) + HDFS-2553. Fix BlockPoolSliceScanner spinning in a tight loop (Uma + Maheswara Rao G via todd) + Release 0.23.0 - 2011-11-01 INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceScanner.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceScanner.java index a666149beb1..1f45a7bb561 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceScanner.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockPoolSliceScanner.java @@ -450,14 +450,14 @@ class BlockPoolSliceScanner { } private synchronized long getEarliestScanTime() { - if ( blockInfoSet.size() > 0 ) { + if (!blockInfoSet.isEmpty()) { return blockInfoSet.first().lastScanTime; } return Long.MAX_VALUE; } private synchronized boolean isFirstBlockProcessed() { - if (blockInfoSet.size() > 0 ) { + if (!blockInfoSet.isEmpty()) { long blockId = blockInfoSet.first().block.getBlockId(); if ((processedBlocks.get(blockId) != null) && (processedBlocks.get(blockId) == 1)) { @@ -471,7 +471,7 @@ class BlockPoolSliceScanner { private void verifyFirstBlock() { Block block = null; synchronized (this) { - if ( blockInfoSet.size() > 0 ) { + if (!blockInfoSet.isEmpty()) { block = blockInfoSet.first().block; } } @@ -560,7 +560,7 @@ class BlockPoolSliceScanner { * lastModificationTime > 0. */ synchronized (this) { - if (blockInfoSet.size() > 0 ) { + if (!blockInfoSet.isEmpty()) { BlockScanInfo info; while ((info = blockInfoSet.first()).lastScanTime < 0) { delBlockInfo(info); @@ -630,7 +630,7 @@ class BlockPoolSliceScanner { } } if (((now - getEarliestScanTime()) >= scanPeriod) - || (!(this.isFirstBlockProcessed()))) { + || ((!blockInfoSet.isEmpty()) && !(this.isFirstBlockProcessed()))) { verifyFirstBlock(); } else { if (LOG.isDebugEnabled()) {