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);