From a6091a6a821b63852ec142c5975ac8de696b71c2 Mon Sep 17 00:00:00 2001 From: Robert Joseph Evans Date: Thu, 16 Aug 2012 14:24:34 +0000 Subject: [PATCH] svn merge -c 1373859 FIXES: HADOOP-8654. TextInputFormat delimiter bug (Gelesh and Jason Lowe via bobby) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1373860 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop-common/CHANGES.txt | 3 ++ .../org/apache/hadoop/util/LineReader.java | 3 +- .../apache/hadoop/util/TestLineReader.java | 49 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestLineReader.java diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 562c6571553..0c296a1f9cc 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -192,6 +192,9 @@ Release 2.0.1-alpha - UNRELEASED HADOOP-8659. Native libraries must build with soft-float ABI for Oracle JVM on ARM. (Trevor Robinson via todd) + HADOOP-8654. TextInputFormat delimiter bug (Gelesh and Jason Lowe via + bobby) + BREAKDOWN OF HDFS-3042 SUBTASKS HADOOP-8220. ZKFailoverController doesn't handle failure to become active diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/LineReader.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/LineReader.java index 14513d8bf0f..254fc68b764 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/LineReader.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/LineReader.java @@ -266,7 +266,8 @@ public class LineReader { bufferPosn++; break; } - } else { + } else if (delPosn != 0) { + bufferPosn--; // recheck if bufferPosn matches start of delimiter delPosn = 0; } } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestLineReader.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestLineReader.java new file mode 100644 index 00000000000..dc98357ef28 --- /dev/null +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/util/TestLineReader.java @@ -0,0 +1,49 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.util; + +import java.io.ByteArrayInputStream; + +import org.apache.hadoop.io.Text; +import org.junit.Test; + +import junit.framework.Assert; + +public class TestLineReader { + + @Test + public void testCustomDelimiter() throws Exception { + String data = "record Bangalorrecord recorrecordrecord Kerala"; + String delimiter = "record"; + LineReader reader = new LineReader( + new ByteArrayInputStream(data.getBytes()), + delimiter.getBytes()); + Text line = new Text(); + reader.readLine(line); + Assert.assertEquals("", line.toString()); + reader.readLine(line); + Assert.assertEquals(" Bangalor", line.toString()); + reader.readLine(line); + Assert.assertEquals(" recor", line.toString()); + reader.readLine(line); + Assert.assertEquals("", line.toString()); + reader.readLine(line); + Assert.assertEquals(" Kerala", line.toString()); + } +}