Repository: hive
Updated Branches:
  refs/heads/master ad5bcb150 -> b4b06ac15


HIVE-17897: Repl load in bootstrap phase fails when partitions have whitespace 
(Thejas Nair, reviewed by Sankar Hariappan)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/b4b06ac1
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/b4b06ac1
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/b4b06ac1

Branch: refs/heads/master
Commit: b4b06ac1568490200f817cd7f1855b9a81df6bf9
Parents: ad5bcb1
Author: Sankar Hariappan <sank...@apache.org>
Authored: Fri Dec 22 02:13:26 2017 +0530
Committer: Sankar Hariappan <sank...@apache.org>
Committed: Fri Dec 22 02:13:45 2017 +0530

----------------------------------------------------------------------
 .../hive/ql/parse/TestReplicationScenarios.java | 36 ++++++++++++++++++--
 .../ql/parse/repl/dump/io/FileOperations.java   |  2 +-
 2 files changed, 35 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/b4b06ac1/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
----------------------------------------------------------------------
diff --git 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
index 9062d43..0e08007 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenarios.java
@@ -1953,13 +1953,16 @@ public class TestReplicationScenarios {
     String testName = "dropPartitionEventWithPartitionOnTimestampColumn";
     String dbName = createDB(testName, driver);
     run("CREATE TABLE " + dbName + ".ptned(a string) PARTITIONED BY (b 
timestamp)", driver);
+    String[] ptn_data = new String[] { "fourteen" };
+    String ptnVal = "2017-10-01 01:00:10.1";
+    run("INSERT INTO TABLE " + dbName + ".ptned PARTITION(b=\"" + ptnVal +"\") 
values('" + ptn_data[0] + "')", driver);
 
     // Bootstrap dump/load
     String replDbName = dbName + "_dupe";
     Tuple bootstrapDump = bootstrapLoadAndVerify(dbName, replDbName);
 
-    String[] ptn_data = new String[] { "fifteen" };
-    String ptnVal = "2017-10-24 00:00:00.0";
+    ptn_data = new String[] { "fifteen" };
+    ptnVal = "2017-10-24 00:00:00.0";
     run("INSERT INTO TABLE " + dbName + ".ptned PARTITION(b=\"" + ptnVal +"\") 
values('" + ptn_data[0] + "')", driver);
 
     // Replicate insert event and verify
@@ -1973,6 +1976,35 @@ public class TestReplicationScenarios {
     verifyIfPartitionNotExist(replDbName, "ptned", new 
ArrayList<>(Arrays.asList(ptnVal)), metaStoreClientMirror);
   }
 
+  /**
+   * Verify replication when string partition column value has special chars
+   * @throws IOException
+   */
+  @Test
+  public void testWithStringPartitionSpecialChars() throws IOException {
+    String testName = "testWithStringPartitionSpecialChars";
+    String dbName = createDB(testName, driver);
+    run("CREATE TABLE " + dbName + ".ptned(v string) PARTITIONED BY (p 
string)", driver);
+    String[] ptn_data = new String[] { "fourteen", "fifteen" };
+    String[] ptnVal = new String [] {"has a space, /, and \t tab", "another 
set of '#@ chars" };
+    run("INSERT INTO TABLE " + dbName + ".ptned PARTITION(p=\"" + ptnVal[0] 
+"\") values('" + ptn_data[0] + "')", driver);
+
+    // Bootstrap dump/load
+    String replDbName = dbName + "_dupe";
+    Tuple bootstrapDump = bootstrapLoadAndVerify(dbName, replDbName);
+
+    run("INSERT INTO TABLE " + dbName + ".ptned PARTITION(p=\"" + ptnVal[1] 
+"\") values('" + ptn_data[1] + "')", driver);
+    // Replicate insert event and verify
+    Tuple incrDump = incrementalLoadAndVerify(dbName, 
bootstrapDump.lastReplId, replDbName);
+    verifyRun("SELECT p from " + replDbName + ".ptned ORDER BY p desc", 
ptnVal, driverMirror);
+
+    run("ALTER TABLE " + dbName + ".ptned DROP PARTITION(p=\"" + ptnVal[0] + 
"\")", driver);
+
+    // Replicate drop partition event and verify
+    incrementalLoadAndVerify(dbName, incrDump.lastReplId, replDbName);
+    verifyIfPartitionNotExist(replDbName, "ptned", new 
ArrayList<>(Arrays.asList(ptnVal[0])), metaStoreClientMirror);
+  }
+
   @Test
   public void testRenameTableWithCM() throws IOException {
     String testName = "renameTableWithCM";

http://git-wip-us.apache.org/repos/asf/hive/blob/b4b06ac1/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/FileOperations.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/FileOperations.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/FileOperations.java
index 2f636b6..4642012 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/FileOperations.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/io/FileOperations.java
@@ -108,6 +108,6 @@ public class FileOperations {
   private String encodedUri(FileStatus fileStatus) throws IOException {
     Path currentDataFilePath = fileStatus.getPath();
     String checkSum = ReplChangeManager.checksumFor(currentDataFilePath, 
dataFileSystem);
-    return 
ReplChangeManager.encodeFileUri(currentDataFilePath.toUri().toString(), 
checkSum);
+    return ReplChangeManager.encodeFileUri(currentDataFilePath.toString(), 
checkSum);
   }
 }

Reply via email to