You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2018/07/09 18:23:19 UTC

kudu git commit: Read url-encoded table name on restore

Repository: kudu
Updated Branches:
  refs/heads/master af8bb879c -> 32fabd3a4


Read url-encoded table name on restore

Kudu table names are being url-encoded on backup. Read the url-encoded
table names on restore.

Change-Id: Ib028b9239c9e4aa71084757eb2dc16a3068de929
Reviewed-on: http://gerrit.cloudera.org:8080/10880
Reviewed-by: Adar Dembo <ad...@cloudera.com>
Tested-by: Adar Dembo <ad...@cloudera.com>


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

Branch: refs/heads/master
Commit: 32fabd3a4bfeda144ab3c7d680266d0dc2d190f7
Parents: af8bb87
Author: Tony Foerster <to...@phdata.io>
Authored: Fri Jul 6 10:10:03 2018 -0500
Committer: Adar Dembo <ad...@cloudera.com>
Committed: Mon Jul 9 18:22:57 2018 +0000

----------------------------------------------------------------------
 .../scala/org/apache/kudu/backup/KuduBackup.scala  |  2 +-
 .../scala/org/apache/kudu/backup/KuduRestore.scala |  5 +++--
 .../org/apache/kudu/backup/TestKuduBackup.scala    | 17 +++++++++++++++++
 3 files changed, 21 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/32fabd3a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduBackup.scala
----------------------------------------------------------------------
diff --git a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduBackup.scala b/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduBackup.scala
index 56af3e9..1fa2899 100644
--- a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduBackup.scala
+++ b/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduBackup.scala
@@ -16,7 +16,7 @@
 // under the License.
 package org.apache.kudu.backup
 
-import java.net.{URLEncoder}
+import java.net.URLEncoder
 import java.nio.charset.StandardCharsets
 import java.nio.file.{Path, Paths}
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/32fabd3a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduRestore.scala
----------------------------------------------------------------------
diff --git a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduRestore.scala b/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduRestore.scala
index bd0cc3c..74de830 100644
--- a/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduRestore.scala
+++ b/java/kudu-backup/src/main/scala/org/apache/kudu/backup/KuduRestore.scala
@@ -42,8 +42,9 @@ object KuduRestore {
 
     // TODO: Make parallel so each table isn't processed serially.
     options.tables.foreach { t =>
-      val tablePath = Paths.get(path).resolve(URLEncoder.encode(t, "UTF-8"))
-      val metadataPath = getMetadataPath(t, options)
+      val tableEncoded = URLEncoder.encode(t, "UTF-8")
+      val tablePath = Paths.get(path).resolve(tableEncoded)
+      val metadataPath = getMetadataPath(tableEncoded, options)
       val metadata = readTableMetadata(metadataPath, session)
       val restoreName = s"${metadata.getTableName}${options.tableSuffix}"
       val table =

http://git-wip-us.apache.org/repos/asf/kudu/blob/32fabd3a/java/kudu-backup/src/test/scala/org/apache/kudu/backup/TestKuduBackup.scala
----------------------------------------------------------------------
diff --git a/java/kudu-backup/src/test/scala/org/apache/kudu/backup/TestKuduBackup.scala b/java/kudu-backup/src/test/scala/org/apache/kudu/backup/TestKuduBackup.scala
index 8f1c807..2e2e589 100644
--- a/java/kudu-backup/src/test/scala/org/apache/kudu/backup/TestKuduBackup.scala
+++ b/java/kudu-backup/src/test/scala/org/apache/kudu/backup/TestKuduBackup.scala
@@ -56,6 +56,23 @@ class TestKuduBackup extends FunSuite with TestContext with Matchers {
     assertTrue(partitionSchemasMatch(tA.getPartitionSchema, tB.getPartitionSchema))
   }
 
+  test("Simple Backup and Restore Table Name With Special Characters") {
+    // Use an Impala-style table name to verify url encoding/decoding of the table name works.
+    val impalaTableName = "impala::default.test"
+
+    val tableOptions = new CreateTableOptions()
+      .setRangePartitionColumns(List("key").asJava)
+      .setNumReplicas(1)
+
+    kuduClient.createTable(impalaTableName, simpleSchema, tableOptions)
+
+    backupAndRestore(impalaTableName)
+
+    val rdd = kuduContext.kuduRDD(ss.sparkContext, s"$impalaTableName-restore", List("key"))
+    // Only verifying the file contents could be read, the contents are expected to be empty.
+    assert(rdd.isEmpty())
+  }
+
   test("Random Backup and Restore") {
     Random.javaRandomToRandom(TestUtils.getRandom)