Author: daijy Date: Thu Dec 19 18:38:03 2013 New Revision: 1552393 URL: http://svn.apache.org/r1552393 Log: HIVE-5540: webhcat e2e test failures: "Expect 1 jobs in logs, but get 1"
Modified: hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/LaunchMapper.java Modified: hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/LaunchMapper.java URL: http://svn.apache.org/viewvc/hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/LaunchMapper.java?rev=1552393&r1=1552392&r2=1552393&view=diff ============================================================================== --- hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/LaunchMapper.java (original) +++ hive/trunk/hcatalog/webhcat/svr/src/main/java/org/apache/hive/hcatalog/templeton/tool/LaunchMapper.java Thu Dec 19 18:38:03 2013 @@ -241,6 +241,7 @@ public class LaunchMapper extends Mapper private OutputStream out; private final JobID jobid; private final Configuration conf; + boolean needCloseOutput = false; public Watcher(Configuration conf, JobID jobid, InputStream in, String statusdir, String name) throws IOException { @@ -258,16 +259,18 @@ public class LaunchMapper extends Mapper Path p = new Path(statusdir, name); FileSystem fs = p.getFileSystem(conf); out = fs.create(p); + needCloseOutput = true; LOG.info("templeton: Writing status to " + p); } } @Override public void run() { + PrintWriter writer = null; try { InputStreamReader isr = new InputStreamReader(in); BufferedReader reader = new BufferedReader(isr); - PrintWriter writer = new PrintWriter(out); + writer = new PrintWriter(out); String line; while ((line = reader.readLine()) != null) { @@ -308,6 +311,15 @@ public class LaunchMapper extends Mapper } } catch (IOException e) { LOG.error("templeton: execute error: ", e); + } finally { + // Need to close() because in some FileSystem + // implementations flush() is no-op. + // Close the file handle if it is a hdfs file. + // But if it is stderr/stdout, skip it since + // WebHCat is not supposed to close it + if (needCloseOutput && writer!=null) { + writer.close(); + } } } }