You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ec...@apache.org on 2015/10/23 21:01:22 UTC
[55/75] [abbrv] hadoop git commit: HADOOP-9692. SequenceFile reader
throws EOFException on zero-length file. Contributed by Zhe Zhang and Chu
Tong.
HADOOP-9692. SequenceFile reader throws EOFException on zero-length file. Contributed by Zhe Zhang and Chu Tong.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b5ca649b
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b5ca649b
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b5ca649b
Branch: refs/heads/HADOOP-11890
Commit: b5ca649bff01c906033d71c9f983b4cdaa71a9d1
Parents: 3dadf36
Author: Tsuyoshi Ozawa <oz...@apache.org>
Authored: Thu Oct 22 11:55:25 2015 +0900
Committer: Tsuyoshi Ozawa <oz...@apache.org>
Committed: Thu Oct 22 11:55:25 2015 +0900
----------------------------------------------------------------------
hadoop-common-project/hadoop-common/CHANGES.txt | 3 +++
.../java/org/apache/hadoop/io/SequenceFile.java | 15 +++++++++++---
.../org/apache/hadoop/io/TestSequenceFile.java | 21 ++++++++++++++++++++
3 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b5ca649b/hadoop-common-project/hadoop-common/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt
index 7edf5cd..5acf369 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -1251,6 +1251,9 @@ Release 2.8.0 - UNRELEASED
HADOOP-12483. Maintain wrapped SASL ordering for postponed IPC responses.
(Daryn Sharp via yliu)
+ HADOOP-9692. SequenceFile reader throws EOFException on zero-length file.
+ (Zhe Zhang and Chu Tong via ozawa)
+
OPTIMIZATIONS
HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString()
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b5ca649b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java
index e37e855..ed57eee 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/SequenceFile.java
@@ -1912,17 +1912,26 @@ public class SequenceFile {
*/
private void init(boolean tempReader) throws IOException {
byte[] versionBlock = new byte[VERSION.length];
- in.readFully(versionBlock);
+ String exceptionMsg = this + " not a SequenceFile";
+
+ // Try to read sequence file header.
+ try {
+ in.readFully(versionBlock);
+ } catch (EOFException e) {
+ throw new EOFException(exceptionMsg);
+ }
if ((versionBlock[0] != VERSION[0]) ||
(versionBlock[1] != VERSION[1]) ||
- (versionBlock[2] != VERSION[2]))
+ (versionBlock[2] != VERSION[2])) {
throw new IOException(this + " not a SequenceFile");
+ }
// Set 'version'
version = versionBlock[3];
- if (version > VERSION[3])
+ if (version > VERSION[3]) {
throw new VersionMismatchException(VERSION[3], version);
+ }
if (version < BLOCK_COMPRESS_VERSION) {
UTF8 className = new UTF8();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/b5ca649b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestSequenceFile.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestSequenceFile.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestSequenceFile.java
index 7495c6e..99c97db 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestSequenceFile.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/io/TestSequenceFile.java
@@ -522,6 +522,27 @@ public class TestSequenceFile extends TestCase {
assertTrue("InputStream for " + path + " should have been closed.", openedFile[0].isClosed());
}
+ /**
+ * Test to makes sure zero length sequence file is handled properly while
+ * initializing.
+ */
+ public void testInitZeroLengthSequenceFile() throws IOException {
+ Configuration conf = new Configuration();
+ LocalFileSystem fs = FileSystem.getLocal(conf);
+
+ // create an empty file (which is not a valid sequence file)
+ Path path = new Path(System.getProperty("test.build.data", ".") +
+ "/zerolength.seq");
+ fs.create(path).close();
+
+ try {
+ new SequenceFile.Reader(conf, SequenceFile.Reader.file(path));
+ fail("IOException expected.");
+ } catch (IOException expected) {
+ assertTrue(expected instanceof EOFException);
+ }
+ }
+
/**
* Test that makes sure createWriter succeeds on a file that was
* already created