This is an automated email from the ASF dual-hosted git repository.

dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 39239a75153 HIVE-26338: Repl Dump should fail if source database does 
not exist (Haymant Mangla, reviewed by Denys Kuzmenko)
39239a75153 is described below

commit 39239a751531265cc18f677092c1882ac29e3b5e
Author: Haymant Mangla <[email protected]>
AuthorDate: Sat Jun 18 12:47:00 2022 +0530

    HIVE-26338: Repl Dump should fail if source database does not exist 
(Haymant Mangla, reviewed by Denys Kuzmenko)
    
    Closes #3380
---
 common/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java       |  2 ++
 .../ql/parse/TestReplicationScenariosAcrossInstances.java     | 11 ++++++-----
 .../hadoop/hive/ql/parse/ReplicationSemanticAnalyzer.java     |  6 +++++-
 .../java/org/apache/hadoop/hive/ql/parse/repl/dump/Utils.java |  2 +-
 4 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/common/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java 
b/common/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
index 903b949772a..4a61c2d2c95 100644
--- a/common/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
+++ b/common/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
@@ -579,6 +579,8 @@ public enum ErrorMsg {
 
   REPL_FILE_SYSTEM_OPERATION_RETRY(30047, "Replication file system operation 
retry expired. Error {0}",
     true),
+  REPL_SOURCE_DATABASE_NOT_FOUND(30048, "Cannot dump database {0} as it does 
not exist",
+          true),
 
   //========================== 40000 range starts here 
========================//
 
diff --git 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
index 31acaa244ae..20e189e9f6b 100644
--- 
a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
+++ 
b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/ql/parse/TestReplicationScenariosAcrossInstances.java
@@ -1005,13 +1005,14 @@ public class TestReplicationScenariosAcrossInstances 
extends BaseReplicationAcro
             .status(replicatedDbName)
             .verifyResult(tuple.lastReplicationId);
 
-    // Bootstrap load from an empty dump directory should return empty load 
directory error.
-    tuple = primary.dump("someJunkDB", Collections.emptyList());
+    // Bootstrap dump should fail if source database does not exist.
+    String nonExistingDb = "someJunkDB";
+    assertEquals (primary.getDatabase(nonExistingDb), null);
     try {
-      replica.runCommand("REPL LOAD someJunkDB into someJunkDB");
+      primary.run("REPL DUMP " + nonExistingDb);
       assert false;
-    } catch (CommandProcessorException e) {
-      assertTrue(e.getMessage().toLowerCase().contains("semanticException no 
data to load in path".toLowerCase()));
+    } catch (Exception e) {
+      assertEquals 
(ErrorMsg.REPL_SOURCE_DATABASE_NOT_FOUND.format(nonExistingDb), e.getMessage());
     }
     primary.run(" drop database if exists " + testDbName + " cascade");
   }
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/ReplicationSemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/ReplicationSemanticAnalyzer.java
index ccddaea93eb..abd4cf8ac3e 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/ReplicationSemanticAnalyzer.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/ReplicationSemanticAnalyzer.java
@@ -185,7 +185,11 @@ public class ReplicationSemanticAnalyzer extends 
BaseSemanticAnalyzer {
       childIdx++;
     }
 
-    for (String dbName : Utils.matchesDb(db, dbNameOrPattern)) {
+    List<String> databases = Utils.matchesDb(db, dbNameOrPattern);
+    if (databases.size() == 0) {
+      throw new 
SemanticException(ErrorMsg.REPL_SOURCE_DATABASE_NOT_FOUND.format(dbNameOrPattern));
+    }
+    for (String dbName : databases) {
       Database database = db.getDatabase(dbName);
       if (database != null) {
         if (MetaStoreUtils.isTargetOfReplication(database)) {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/Utils.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/Utils.java
index f8276d35e5c..b4e26f58693 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/Utils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/repl/dump/Utils.java
@@ -235,7 +235,7 @@ public class Utils {
     return false;
   }
 
-  public static Iterable<String> matchesDb(Hive db, String dbPattern) throws 
HiveException {
+  public static List<String> matchesDb(Hive db, String dbPattern) throws 
HiveException {
     if (dbPattern == null) {
       return db.getAllDatabases();
     } else {

Reply via email to