TAJO-690: infinite loop occurs when rack task is assigning. (jinho)
diff --git a/CHANGES.txt b/CHANGES.txt
index bc8f299..d51dfcb 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -276,6 +276,8 @@
 
   BUG FIXES
 
+    TAJO-690: infinite loop occurs when rack task is assigning. (jinho)
+
     TAJO-689: NoSuchElementException occurs during assigning the leaf tasks. (jinho)
 
     TAJO-651: HcatalogStore should support (de)serialization of RCFile. (jinho)
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/DefaultTaskScheduler.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/DefaultTaskScheduler.java
index 91f9cea..28015d5 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/DefaultTaskScheduler.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/master/DefaultTaskScheduler.java
@@ -639,7 +639,6 @@
           //find remaining local task
           if (leafTasks.contains(attemptId)) {
             leafTasks.remove(attemptId);
-            leafTasksRackMapping.get(hostVolumeMapping.getRack()).remove(attemptId);
             //LOG.info(attemptId + " Assigned based on host match " + hostName);
             hostLocalAssigned++;
             totalAssigned++;
@@ -669,9 +668,11 @@
         for (HostVolumeMapping tasks : remainingTasks) {
           while (tasks.getRemainingLocalTaskSize() > 0){
             QueryUnitAttemptId tId = tasks.getQueryUnitAttemptIdByRack(rack);
+
+            if (tId == null) break;
+
             if (leafTasks.contains(tId)) {
               leafTasks.remove(tId);
-              leafTasksRackMapping.get(rack).remove(tId);
               attemptId = tId;
               break;
             }