You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by ab...@apache.org on 2020/10/06 10:07:29 UTC

[tez] branch branch-0.9 updated: TEZ-4238: Check null mrReader in MRInput.close (László Bodor reviewed by Hadoop QA, Jonathan Turner Eagles, Hadoop QA)

This is an automated email from the ASF dual-hosted git repository.

abstractdog pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/tez.git


The following commit(s) were added to refs/heads/branch-0.9 by this push:
     new 97a2e0c  TEZ-4238: Check null mrReader in MRInput.close (László Bodor reviewed by Hadoop QA, Jonathan Turner Eagles, Hadoop QA)
97a2e0c is described below

commit 97a2e0c7742ede9e91d85b872a7193fc68282b59
Author: László Bodor <bo...@gmail.com>
AuthorDate: Tue Oct 6 12:00:17 2020 +0200

    TEZ-4238: Check null mrReader in MRInput.close (László Bodor reviewed by Hadoop QA, Jonathan Turner Eagles, Hadoop QA)
    
    Signed-off-by: Laszlo Bodor <bo...@gmail.com>
---
 .../org/apache/tez/mapreduce/input/MRInput.java    |  5 ++++-
 .../apache/tez/mapreduce/input/TestMRInput.java    | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/input/MRInput.java b/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/input/MRInput.java
index 5c8ad4e..891249b 100644
--- a/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/input/MRInput.java
+++ b/tez-mapreduce/src/main/java/org/apache/tez/mapreduce/input/MRInput.java
@@ -592,7 +592,10 @@ public class MRInput extends MRInputBase {
 
   @Override
   public List<Event> close() throws IOException {
-    mrReader.close();
+    if (mrReader != null) {
+      mrReader.close();
+      mrReader = null;
+    }
     long inputRecords = getContext().getCounters()
         .findCounter(TaskCounter.INPUT_RECORDS_PROCESSED).getValue();
     getContext().getStatisticsReporter().reportItemsProcessed(inputRecords);
diff --git a/tez-mapreduce/src/test/java/org/apache/tez/mapreduce/input/TestMRInput.java b/tez-mapreduce/src/test/java/org/apache/tez/mapreduce/input/TestMRInput.java
index 9109cd9..9249d3b 100644
--- a/tez-mapreduce/src/test/java/org/apache/tez/mapreduce/input/TestMRInput.java
+++ b/tez-mapreduce/src/test/java/org/apache/tez/mapreduce/input/TestMRInput.java
@@ -47,6 +47,7 @@ import org.apache.tez.mapreduce.hadoop.MRInputHelpers;
 import org.apache.tez.mapreduce.protos.MRRuntimeProtos;
 import org.apache.tez.runtime.api.Event;
 import org.apache.tez.runtime.api.InputContext;
+import org.apache.tez.runtime.api.InputStatisticsReporter;
 import org.apache.tez.runtime.api.events.InputDataInformationEvent;
 import org.junit.Test;
 
@@ -147,6 +148,16 @@ public class TestMRInput {
     assertTrue(TestInputFormat.invoked.get());
   }
 
+  @Test
+  public void testMRInputCloseWithUnintializedReader() throws IOException {
+    InputContext inputContext = mock(InputContext.class);
+    doReturn(new TezCounters()).when(inputContext).getCounters();
+    doReturn(new InputStatisticsReporterImplForTest()).when(inputContext).getStatisticsReporter();
+
+    MRInput mrInput = new MRInput(inputContext, 0);
+    mrInput.close(); // shouldn't throw NPE
+  }
+
   /**
    * Test class to verify
    */
@@ -237,4 +248,15 @@ public class TestMRInput {
 
     }
   }
+
+  public static class InputStatisticsReporterImplForTest implements InputStatisticsReporter {
+
+    @Override
+    public synchronized void reportDataSize(long size) {
+    }
+
+    @Override
+    public void reportItemsProcessed(long items) {
+    }
+  }
 }