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/08 15:22:07 UTC

[tez] 01/02: TEZ-4238: Check null mrReader in MRInput.close (László Bodor reviewed by Jonathan Turner Eagles)

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

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

commit 7c835f2c94f8e23e0e25647dfb3ae70db14f6eee
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 Jonathan Turner Eagles)
    
    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 5ca5c26..844ea51 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;
 
@@ -186,6 +187,16 @@ public class TestMRInput {
     assertEquals("payload-value", mergedConfig.get("payload-key"));
   }
 
+  @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
    */
@@ -276,4 +287,15 @@ public class TestMRInput {
 
     }
   }
+
+  public static class InputStatisticsReporterImplForTest implements InputStatisticsReporter {
+
+    @Override
+    public synchronized void reportDataSize(long size) {
+    }
+
+    @Override
+    public void reportItemsProcessed(long items) {
+    }
+  }
 }