diff --git a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ReconTaskControllerImpl.java b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ReconTaskControllerImpl.java
index 240bf38..4409853 100644
--- a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ReconTaskControllerImpl.java
+++ b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/tasks/ReconTaskControllerImpl.java
@@ -94,7 +94,7 @@
    * For every registered task, we try process step twice and then reprocess
    * once (if process failed twice) to absorb the events. If a task has failed
    * reprocess call more than 2 times across events, it is unregistered
-   * (blacklisted).
+   * (ignored).
    * @param events set of events
    * @throws InterruptedException
    */
@@ -140,7 +140,7 @@
           results = executorService.invokeAll(tasks);
           List<String> reprocessFailedTasks =
               processTaskResults(results, events);
-          blacklistFailedTasks(reprocessFailedTasks);
+          ignoreFailedTasks(reprocessFailedTasks);
         }
       }
     } catch (ExecutionException e) {
@@ -149,15 +149,15 @@
   }
 
   /**
-   * Blacklist tasks that failed reprocess step more than threshold times.
+   * Ignore tasks that failed reprocess step more than threshold times.
    * @param failedTasks list of failed tasks.
    */
-  private void blacklistFailedTasks(List<String> failedTasks) {
+  private void ignoreFailedTasks(List<String> failedTasks) {
     for (String taskName : failedTasks) {
       LOG.info("Reprocess step failed for task {}.", taskName);
       if (taskFailureCounter.get(taskName).incrementAndGet() >
           TASK_FAILURE_THRESHOLD) {
-        LOG.info("Blacklisting Task since it failed retry and " +
+        LOG.info("Ignoring task since it failed retry and " +
             "reprocess more than {} times.", TASK_FAILURE_THRESHOLD);
         reconOmTasks.remove(taskName);
       }
diff --git a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestReconTaskControllerImpl.java b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestReconTaskControllerImpl.java
index ad03e67..7d1323b 100644
--- a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestReconTaskControllerImpl.java
+++ b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/tasks/TestReconTaskControllerImpl.java
@@ -131,7 +131,7 @@
   }
 
   @Test
-  public void testBadBehavedTaskBlacklisting() throws Exception {
+  public void testBadBehavedTaskIsIgnored() throws Exception {
     String taskName = "Dummy_" + System.currentTimeMillis();
     DummyReconDBTask dummyReconDBTask =
         new DummyReconDBTask(taskName, DummyReconDBTask.TaskType.ALWAYS_FAIL);
@@ -151,7 +151,7 @@
           .get(dummyReconDBTask.getTaskName()));
     }
 
-    //Should be blacklisted now.
+    //Should be ignored now.
     reconTaskController.consumeOMEvents(omUpdateEventBatchMock,
         omMetadataManagerMock);
     assertTrue(reconTaskController.getRegisteredTasks().isEmpty());
@@ -212,4 +212,4 @@
         .thenReturn(Collections.singleton("MockTable"));
     return reconOmTaskMock;
   }
-}
\ No newline at end of file
+}
