From 35bf9069ce22e395b19199f66c95530c48687102 Mon Sep 17 00:00:00 2001 From: Hitesh Shah Date: Thu, 12 Dec 2013 22:57:40 +0000 Subject: [PATCH] Merge 1550570 from trunk to branch-2 for HADOOP-8753. LocalDirAllocator throws ArithmeticException: divide by zero when there is no available space on configured local dir. Contributed by Benoy Antony. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1550571 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-common-project/hadoop-common/CHANGES.txt | 3 +++ .../src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 54b63a4db78..5770248dd2e 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -178,6 +178,9 @@ Release 2.4.0 - UNRELEASED TestFileContextResolveAfs and TestStat in branch-2 (Mit Desai via Colin Patrick McCabe) + HADOOP-8753. LocalDirAllocator throws "ArithmeticException: / by zero" when + there is no available space on configured local dir. (Benoy Antony via hitesh) + Release 2.3.0 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java index e5a1da23728..7748ac5b54e 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/LocalDirAllocator.java @@ -362,6 +362,10 @@ public synchronized Path getLocalPathForWrite(String pathStr, long size, totalAvailable += availableOnDisk[i]; } + if (totalAvailable == 0){ + throw new DiskErrorException("No space available in any of the local directories."); + } + // Keep rolling the wheel till we get a valid path Random r = new java.util.Random(); while (numDirsSearched < numDirs && returnPath == null) {