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

zhangbutao 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 a348e5d86ad HIVE-27405: Throw out the detail error Invalid partition 
name to the clients (#5087)(Taraka Rama Rao Lethavadla, reviewed by okumin, 
Butao Zhang)
a348e5d86ad is described below

commit a348e5d86adc611e4f72d386815a21a96b667ab4
Author: tarak271 <[email protected]>
AuthorDate: Fri Feb 23 21:10:13 2024 +0530

    HIVE-27405: Throw out the detail error Invalid partition name to the 
clients (#5087)(Taraka Rama Rao Lethavadla, reviewed by okumin, Butao Zhang)
---
 .../hadoop/hive/ql/ddl/misc/msck/MsckOperation.java       |  7 ++++---
 .../hadoop/hive/ql/metadata/TestMSCKRepairOnAcid.java     | 15 +++++++++++++++
 ql/src/test/queries/clientnegative/msck_repair_7.q        |  7 +++++++
 ql/src/test/queries/clientnegative/msck_repair_8.q        |  5 +++++
 ql/src/test/results/clientnegative/msck_repair_1.q.out    |  2 +-
 ql/src/test/results/clientnegative/msck_repair_2.q.out    |  2 +-
 ql/src/test/results/clientnegative/msck_repair_3.q.out    |  2 +-
 ql/src/test/results/clientnegative/msck_repair_4.q.out    |  2 +-
 ql/src/test/results/clientnegative/msck_repair_5.q.out    |  2 +-
 ql/src/test/results/clientnegative/msck_repair_6.q.out    |  2 +-
 .../{msck_repair_4.q.out => msck_repair_7.q.out}          | 12 +++---------
 .../{msck_repair_3.q.out => msck_repair_8.q.out}          | 15 +++------------
 .../clientnegative/table_nonprintable_negative.q.out      |  2 +-
 .../main/java/org/apache/hadoop/hive/metastore/Msck.java  |  3 ++-
 14 files changed, 46 insertions(+), 32 deletions(-)

diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/misc/msck/MsckOperation.java 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/misc/msck/MsckOperation.java
index 0e0439209f2..e7e39021d88 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/misc/msck/MsckOperation.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/misc/msck/MsckOperation.java
@@ -29,6 +29,7 @@ import org.apache.hadoop.hive.metastore.MsckInfo;
 import org.apache.hadoop.hive.metastore.PartitionManagementTask;
 import org.apache.hadoop.hive.metastore.Warehouse;
 import org.apache.hadoop.hive.metastore.api.MetaException;
+import org.apache.hadoop.hive.metastore.api.MetastoreException;
 import org.apache.hadoop.hive.metastore.api.Table;
 import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
 import org.apache.hadoop.hive.ql.ddl.DDLOperation;
@@ -51,7 +52,7 @@ public class MsckOperation extends DDLOperation<MsckDesc> {
   }
 
   @Override
-  public int execute() throws HiveException, IOException, TException {
+  public int execute() throws HiveException, IOException, TException, 
MetastoreException {
     try {
       Msck msck = new Msck(false, false);
       msck.init(Msck.getMsckConf(context.getDb().getConf()));
@@ -75,9 +76,9 @@ public class MsckOperation extends DDLOperation<MsckDesc> {
           desc.getFilterExp(), desc.getResFile(), desc.isRepairPartitions(),
           desc.isAddPartitions(), desc.isDropPartitions(), 
partitionExpirySeconds);
       return msck.repair(msckInfo);
-    } catch (MetaException e) {
+    } catch (MetaException | MetastoreException e) {
       LOG.error("Unable to create msck instance.", e);
-      return 1;
+      throw e;
     } catch (SemanticException e) {
       LOG.error("Msck failed.", e);
       return 1;
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestMSCKRepairOnAcid.java 
b/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestMSCKRepairOnAcid.java
index d57323e6549..b1798597abd 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestMSCKRepairOnAcid.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/metadata/TestMSCKRepairOnAcid.java
@@ -507,4 +507,19 @@ public class TestMSCKRepairOnAcid extends 
TxnCommandsBaseForTests {
 
     runStatementOnDriver("drop table if exists " + acidTblMsck);
   }
+
+  @Test
+  public void testInvalidPartitionNameErrorMessage() throws Exception {
+    runStatementOnDriver("drop table if exists " + acidTblPartMsck);
+    runStatementOnDriver("create table " + acidTblPartMsck
+            + " (a int, b int) partitioned by (p string) clustered by (a) into 
2 buckets"
+            + " stored as orc TBLPROPERTIES ('transactional'='true')");
+    FileSystem fs = FileSystem.get(hiveConf);
+    fs.mkdirs(new Path(getWarehouseDir(), acidTblPartMsck+ "/part"));
+    try {
+      runStatementOnDriver("msck repair table " + acidTblPartMsck);
+    } catch (Exception e){
+      Assert.assertEquals("Error message did not 
match",true,e.getMessage().contains("Invalid partition name"));
+    }
+  }
 }
diff --git a/ql/src/test/queries/clientnegative/msck_repair_7.q 
b/ql/src/test/queries/clientnegative/msck_repair_7.q
new file mode 100644
index 00000000000..2a7b18b0719
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/msck_repair_7.q
@@ -0,0 +1,7 @@
+DROP TABLE IF EXISTS repairtable;
+
+CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 STRING);
+
+dfs ${system:test.dfs.mkdir} 
${hiveconf:hive.metastore.warehouse.dir}/repairtable/p1a;
+
+MSCK REPAIR TABLE default.repairtable;
\ No newline at end of file
diff --git a/ql/src/test/queries/clientnegative/msck_repair_8.q 
b/ql/src/test/queries/clientnegative/msck_repair_8.q
new file mode 100644
index 00000000000..d6aee8a7b53
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/msck_repair_8.q
@@ -0,0 +1,5 @@
+DROP TABLE IF EXISTS repairtable;
+
+CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 STRING);
+
+MSCK REPAIR TABLE default.repairtable.p1;
\ No newline at end of file
diff --git a/ql/src/test/results/clientnegative/msck_repair_1.q.out 
b/ql/src/test/results/clientnegative/msck_repair_1.q.out
index c89b16ffc97..382a91389cf 100644
--- a/ql/src/test/results/clientnegative/msck_repair_1.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_1.q.out
@@ -21,4 +21,4 @@ POSTHOOK: Output: default@repairtable
 PREHOOK: query: MSCK TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+#### A masked pattern was here ####
diff --git a/ql/src/test/results/clientnegative/msck_repair_2.q.out 
b/ql/src/test/results/clientnegative/msck_repair_2.q.out
index c89b16ffc97..382a91389cf 100644
--- a/ql/src/test/results/clientnegative/msck_repair_2.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_2.q.out
@@ -21,4 +21,4 @@ POSTHOOK: Output: default@repairtable
 PREHOOK: query: MSCK TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+#### A masked pattern was here ####
diff --git a/ql/src/test/results/clientnegative/msck_repair_3.q.out 
b/ql/src/test/results/clientnegative/msck_repair_3.q.out
index c89b16ffc97..382a91389cf 100644
--- a/ql/src/test/results/clientnegative/msck_repair_3.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_3.q.out
@@ -21,4 +21,4 @@ POSTHOOK: Output: default@repairtable
 PREHOOK: query: MSCK TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+#### A masked pattern was here ####
diff --git a/ql/src/test/results/clientnegative/msck_repair_4.q.out 
b/ql/src/test/results/clientnegative/msck_repair_4.q.out
index d7f92f5f86b..47ff66ca1a7 100644
--- a/ql/src/test/results/clientnegative/msck_repair_4.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_4.q.out
@@ -21,4 +21,4 @@ POSTHOOK: Output: default@repairtable
 PREHOOK: query: MSCK REPAIR TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+#### A masked pattern was here ####
diff --git a/ql/src/test/results/clientnegative/msck_repair_5.q.out 
b/ql/src/test/results/clientnegative/msck_repair_5.q.out
index 3008ccb9045..1e452c0a53c 100644
--- a/ql/src/test/results/clientnegative/msck_repair_5.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_5.q.out
@@ -29,4 +29,4 @@ Partitions not in metastore:  repairtable:p1=A
 PREHOOK: query: MSCK REPAIR TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+FAILED: Execution Error, return code 40000 from 
org.apache.hadoop.hive.ql.ddl.DDLTask. Found two paths for same partition 
'repairtable:p1=a' for table repairtable
diff --git a/ql/src/test/results/clientnegative/msck_repair_6.q.out 
b/ql/src/test/results/clientnegative/msck_repair_6.q.out
index 2ec1e6517ca..a6c22cc4779 100644
--- a/ql/src/test/results/clientnegative/msck_repair_6.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_6.q.out
@@ -29,4 +29,4 @@ Partitions not in metastore:  repairtable:p1=a
 PREHOOK: query: MSCK REPAIR TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+FAILED: Execution Error, return code 40000 from 
org.apache.hadoop.hive.ql.ddl.DDLTask. The partition 'repairtable:p1=a' already 
exists for tablerepairtable
diff --git a/ql/src/test/results/clientnegative/msck_repair_4.q.out 
b/ql/src/test/results/clientnegative/msck_repair_7.q.out
similarity index 66%
copy from ql/src/test/results/clientnegative/msck_repair_4.q.out
copy to ql/src/test/results/clientnegative/msck_repair_7.q.out
index d7f92f5f86b..76c55bf9938 100644
--- a/ql/src/test/results/clientnegative/msck_repair_4.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_7.q.out
@@ -4,21 +4,15 @@ PREHOOK: Output: database:default
 POSTHOOK: query: DROP TABLE IF EXISTS repairtable
 POSTHOOK: type: DROPTABLE
 POSTHOOK: Output: database:default
-PREHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING, p2 STRING)
+PREHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 STRING)
 PREHOOK: type: CREATETABLE
 PREHOOK: Output: database:default
 PREHOOK: Output: default@repairtable
-POSTHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING, p2 STRING)
+POSTHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@repairtable
-PREHOOK: query: MSCK TABLE repairtable
-PREHOOK: type: MSCK
-PREHOOK: Output: default@repairtable
-POSTHOOK: query: MSCK TABLE repairtable
-POSTHOOK: type: MSCK
-POSTHOOK: Output: default@repairtable
 PREHOOK: query: MSCK REPAIR TABLE default.repairtable
 PREHOOK: type: MSCK
 PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+#### A masked pattern was here ####
diff --git a/ql/src/test/results/clientnegative/msck_repair_3.q.out 
b/ql/src/test/results/clientnegative/msck_repair_8.q.out
similarity index 55%
copy from ql/src/test/results/clientnegative/msck_repair_3.q.out
copy to ql/src/test/results/clientnegative/msck_repair_8.q.out
index c89b16ffc97..11b93034799 100644
--- a/ql/src/test/results/clientnegative/msck_repair_3.q.out
+++ b/ql/src/test/results/clientnegative/msck_repair_8.q.out
@@ -4,21 +4,12 @@ PREHOOK: Output: database:default
 POSTHOOK: query: DROP TABLE IF EXISTS repairtable
 POSTHOOK: type: DROPTABLE
 POSTHOOK: Output: database:default
-PREHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING, p2 STRING)
+PREHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 STRING)
 PREHOOK: type: CREATETABLE
 PREHOOK: Output: database:default
 PREHOOK: Output: default@repairtable
-POSTHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING, p2 STRING)
+POSTHOOK: query: CREATE TABLE repairtable(col STRING) PARTITIONED BY (p1 
STRING)
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@repairtable
-PREHOOK: query: MSCK TABLE repairtable
-PREHOOK: type: MSCK
-PREHOOK: Output: default@repairtable
-POSTHOOK: query: MSCK TABLE repairtable
-POSTHOOK: type: MSCK
-POSTHOOK: Output: default@repairtable
-PREHOOK: query: MSCK TABLE default.repairtable
-PREHOOK: type: MSCK
-PREHOOK: Output: default@repairtable
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+FAILED: SemanticException [Error 10431]: Table Meta Ref extension is not 
supported for table repairtable.
diff --git 
a/ql/src/test/results/clientnegative/table_nonprintable_negative.q.out 
b/ql/src/test/results/clientnegative/table_nonprintable_negative.q.out
index 23756c167ce..fa0610a807f 100644
--- a/ql/src/test/results/clientnegative/table_nonprintable_negative.q.out
+++ b/ql/src/test/results/clientnegative/table_nonprintable_negative.q.out
@@ -17,4 +17,4 @@ POSTHOOK: Output: default@table_external
 PREHOOK: query: msck repair table table_external
 PREHOOK: type: MSCK
 PREHOOK: Output: default@table_external
-FAILED: Execution Error, return code 1 from 
org.apache.hadoop.hive.ql.ddl.DDLTask
+FAILED: Execution Error, return code 40000 from 
org.apache.hadoop.hive.ql.ddl.DDLTask. Repair: Cannot add partition 
table_external:day=Foo due to invalid characters in the name
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/Msck.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/Msck.java
index 79bc4b49d1e..36d271e1522 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/Msck.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/Msck.java
@@ -125,7 +125,7 @@ public class Msck {
    * @param msckInfo Information about the tables and partitions we want to 
check for.
    * @return Returns 0 when execution succeeds and above 0 if it fails.
    */
-  public int repair(MsckInfo msckInfo) {
+  public int repair(MsckInfo msckInfo) throws TException, MetastoreException, 
IOException {
     CheckResult result = null;
     List<String> repairOutput = new ArrayList<>();
     String qualifiedTableName = null;
@@ -271,6 +271,7 @@ public class Msck {
     } catch (Exception e) {
       LOG.warn("Failed to run metacheck: ", e);
       success = false;
+      throw e;
     } finally {
       if (result != null) {
         logResult(result);

Reply via email to