From 9d2c38d1289e2e8b034899b29b328cd0bd2bdfe8 Mon Sep 17 00:00:00 2001 From: Lars Francke Date: Mon, 14 Sep 2026 11:17:46 +0200 Subject: [PATCH] feat(hive): Add 4.2.1, drop 4.0.1 Hive 4.2.1 was previously recorded as blocked because upstream had not published hive-iceberg-catalog, hive-iceberg-handler or hive-hcatalog-server-extensions at that version. That is stale: two of the three are on Maven Central at 4.2.1, the third (hcatalog-server-extensions) is absent at 4.2.0 as well, which we have shipped all along, and all three are modules of the Hive reactor. The preceding change makes the build resolve them from the reactor rather than from Maven Central, so what upstream published stopped mattering. 4.2.1 builds clean, with the same restored Thrift methods and the same single externally-sourced jar (hive-storage-api) as 4.2.0. Patches 0001-0004 applied to 4.2.1 without rebasing; 0005 and 0006 were regenerated by the generator, which verifies its thrift toolchain by requiring that the unmodified IDL regenerates Hive's committed sources byte-for-byte. The OPA authorizer image is pinned per Hive version, so it gains a 4.2.1 variant; it is built from source with hive-version as a build argument, so this costs nothing upstream. 4.0.1 is the one version we ship that serves neither the old Thrift methods nor our patch: it is where HIVE-26537 landed, and it is shipped as upstream released it. Anyone on it is already broken against Iceberg, so moving them to 4.2.1 is a fix rather than a cost. 4.0.0 stays for one more release. It predates the removal and serves the methods natively, so it is unaffected by the Iceberg problem, and keeping it means a user running it in 26.7 can upgrade the platform first and Hive afterwards instead of being forced to do both in the same window. It can go once that upgrade path has been available for a release. --- CHANGELOG.md | 3 + hive/boil-config.toml | 21 +- .../boil-config.toml | 18 +- .../4.0.1/0003-Add-CycloneDX-plugin.patch | 45 - .../4.0.1/0004-Fix-CVE-2024-36114.patch | 44 - .../4.0.1/0005-Fix-CVE-2024-1597.patch | 47 - .../0001-Include-Postgres-driver.patch | 14 +- .../0002-Include-logging-dependencies.patch | 11 +- .../4.2.1/0003-Fix-CVE-2024-36114.patch | 26 + ...ts.core5-to-hive-standalone-metastor.patch | 40 + ...-reactor-dependency-against-the-modu.patch | 148 + ...ecated-get_table-and-get_table_objec.patch | 2475 +++++++++++++++++ .../patches/{4.0.1 => 4.2.1}/patchable.toml | 2 +- 13 files changed, 2724 insertions(+), 170 deletions(-) delete mode 100644 hive/stackable/patches/4.0.1/0003-Add-CycloneDX-plugin.patch delete mode 100644 hive/stackable/patches/4.0.1/0004-Fix-CVE-2024-36114.patch delete mode 100644 hive/stackable/patches/4.0.1/0005-Fix-CVE-2024-1597.patch rename hive/stackable/patches/{4.0.1 => 4.2.1}/0001-Include-Postgres-driver.patch (78%) rename hive/stackable/patches/{4.0.1 => 4.2.1}/0002-Include-logging-dependencies.patch (70%) create mode 100644 hive/stackable/patches/4.2.1/0003-Fix-CVE-2024-36114.patch create mode 100644 hive/stackable/patches/4.2.1/0004-Add-httpcomponents.core5-to-hive-standalone-metastor.patch create mode 100644 hive/stackable/patches/4.2.1/0005-Resolve-every-in-reactor-dependency-against-the-modu.patch create mode 100644 hive/stackable/patches/4.2.1/0006-Restore-the-deprecated-get_table-and-get_table_objec.patch rename hive/stackable/patches/{4.0.1 => 4.2.1}/patchable.toml (51%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ed40e8b4..24b0bd8dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. - trino: Add SBOMs for the web UI, both for the two npm projects behind it and for the pre-built JavaScript vendored into the source tree ([#1620]). - hive: Restore the `get_table` and `get_table_objects_by_name` Thrift methods that HIVE-26537 removed in Hive 4.0.1, for `4.2.0` ([#1636]). - hadoop, spark: Add SBOMs for the pre-built JavaScript that is vendored into the source tree for the HDFS and Spark web UIs ([#1620]). +- hive: Add `4.2.1` ([#1637]). ### Changed @@ -51,6 +52,7 @@ All notable changes to this project will be documented in this file. ### Removed +- hive: Remove `4.0.1` ([#1637]). - omid: remove 1.1.2 ([#1593]). - ci: Remove SLSA build provenance generation for published image indexes ([#1596]). @@ -65,6 +67,7 @@ All notable changes to this project will be documented in this file. [#1630]: https://github.com/stackabletech/docker-images/pull/1630 [#1635]: https://github.com/stackabletech/docker-images/pull/1635 [#1636]: https://github.com/stackabletech/docker-images/pull/1636 +[#1637]: https://github.com/stackabletech/docker-images/pull/1637 ## [26.7.0] - 2026-07-21 diff --git a/hive/boil-config.toml b/hive/boil-config.toml index a2293e353..7ed21db86 100644 --- a/hive/boil-config.toml +++ b/hive/boil-config.toml @@ -26,25 +26,24 @@ java-devel = "8" jmx-exporter-version = "1.3.0" -[versions."4.0.1".local-images] -# Hive 4.0 must be built with Java 8 (according to GitHub README) but seems to run on Java 11 -java-base = "11" -java-devel = "8" -"hadoop/hadoop" = "3.3.6" +[versions."4.2.0".local-images] +# Hive 4.2 requires Java 21 (according to GitHub README) +java-base = "21" +java-devel = "21" +"hadoop/hadoop" = "3.4.3" # hive-metastore-opa-authorizer from: https://github.com/boschglobal/hive-metastore-opa-authorizer -"hive/hive-metastore-opa-authorizer" = "v1.0.0-hive-4.0.1-hadoop-3.3.6" +"hive/hive-metastore-opa-authorizer" = "v1.0.0-hive-4.2.0-hadoop-3.4.3" -[versions."4.0.1".build-arguments] +[versions."4.2.0".build-arguments] jmx-exporter-version = "1.3.0" - -[versions."4.2.0".local-images] +[versions."4.2.1".local-images] # Hive 4.2 requires Java 21 (according to GitHub README) java-base = "21" java-devel = "21" "hadoop/hadoop" = "3.4.3" # hive-metastore-opa-authorizer from: https://github.com/boschglobal/hive-metastore-opa-authorizer -"hive/hive-metastore-opa-authorizer" = "v1.0.0-hive-4.2.0-hadoop-3.4.3" +"hive/hive-metastore-opa-authorizer" = "v1.0.0-hive-4.2.1-hadoop-3.4.3" -[versions."4.2.0".build-arguments] +[versions."4.2.1".build-arguments] jmx-exporter-version = "1.3.0" diff --git a/hive/hive-metastore-opa-authorizer/boil-config.toml b/hive/hive-metastore-opa-authorizer/boil-config.toml index 2808be73d..ac6de15fa 100644 --- a/hive/hive-metastore-opa-authorizer/boil-config.toml +++ b/hive/hive-metastore-opa-authorizer/boil-config.toml @@ -16,15 +16,6 @@ authorizer-version = "v1.0.0" hive-version = "4.0.0" delete-caches = "true" -[versions."v1.0.0-hive-4.0.1-hadoop-3.3.6".local-images] -"java-devel" = "11" -"hadoop/hadoop" = "3.3.6" - -[versions."v1.0.0-hive-4.0.1-hadoop-3.3.6".build-arguments] -authorizer-version = "v1.0.0" -hive-version = "4.0.1" -delete-caches = "true" - [versions."v1.0.0-hive-4.1.0-hadoop-3.4.3".local-images] "java-devel" = "17" "hadoop/hadoop" = "3.4.3" @@ -42,3 +33,12 @@ delete-caches = "true" authorizer-version = "v1.0.0" hive-version = "4.2.0" delete-caches = "true" + +[versions."v1.0.0-hive-4.2.1-hadoop-3.4.3".local-images] +"java-devel" = "21" +"hadoop/hadoop" = "3.4.3" + +[versions."v1.0.0-hive-4.2.1-hadoop-3.4.3".build-arguments] +authorizer-version = "v1.0.0" +hive-version = "4.2.1" +delete-caches = "true" diff --git a/hive/stackable/patches/4.0.1/0003-Add-CycloneDX-plugin.patch b/hive/stackable/patches/4.0.1/0003-Add-CycloneDX-plugin.patch deleted file mode 100644 index 1e4d28867..000000000 --- a/hive/stackable/patches/4.0.1/0003-Add-CycloneDX-plugin.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 45bac943ef6f6af5b357f1ed05182b011466fde3 Mon Sep 17 00:00:00 2001 -From: Lukas Voetmand -Date: Fri, 6 Sep 2024 17:53:52 +0200 -Subject: Add CycloneDX plugin - ---- - standalone-metastore/pom.xml | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml -index 0f5de8ec3c..edbac9ae11 100644 ---- a/standalone-metastore/pom.xml -+++ b/standalone-metastore/pom.xml -@@ -42,6 +42,7 @@ - false - ${settings.localRepository} - 3.1.0 -+ 2.8.0 - ${basedir}/${standalone.metastore.path.to.root}/checkstyle - - ${project.basedir}/src/test/resources -@@ -595,6 +596,23 @@ - - - -+ -+ org.cyclonedx -+ cyclonedx-maven-plugin -+ ${maven.cyclonedx.plugin.version} -+ -+ application -+ 1.5 -+ -+ -+ -+ package -+ -+ makeBom -+ -+ -+ -+ - - - diff --git a/hive/stackable/patches/4.0.1/0004-Fix-CVE-2024-36114.patch b/hive/stackable/patches/4.0.1/0004-Fix-CVE-2024-36114.patch deleted file mode 100644 index 1eafef56c..000000000 --- a/hive/stackable/patches/4.0.1/0004-Fix-CVE-2024-36114.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 2b88bb3431c66a1173ba061f624a94073b447a08 Mon Sep 17 00:00:00 2001 -From: Malte Sander -Date: Tue, 12 Nov 2024 11:49:57 +0100 -Subject: Fix CVE-2024-36114 - -see https://github.com/stackabletech/vulnerabilities/issues/834 - -Aircompressor is a library with ports of the Snappy, LZO, LZ4, and -Zstandard compression algorithms to Java. All decompressor -implementations of Aircompressor (LZ4, LZO, Snappy, Zstandard) can crash -the JVM for certain input, and in some cases also leak the content of -other memory of the Java process (which could contain sensitive -information). When decompressing certain data, the decompressors try to -access memory outside the bounds of the given byte arrays or byte -buffers. Because Aircompressor uses the JDK class sun.misc.Unsafe to -speed up memory access, no additional bounds checks are performed and -this has similar security consequences as out-of-bounds access in C or -C++, namely it can lead to non-deterministic behavior or crash the JVM. -Users should update to Aircompressor 0.27 or newer where these issues -have been fixed. When decompressing data from untrusted users, this can -be exploited for a denial-of-service attack by crashing the JVM, or to -leak other sensitive information from the Java process. There are no -known workarounds for this issue. ---- - standalone-metastore/pom.xml | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml -index edbac9ae11..599ad33ed0 100644 ---- a/standalone-metastore/pom.xml -+++ b/standalone-metastore/pom.xml -@@ -123,6 +123,12 @@ - - - -+ -+ -+ io.airlift -+ aircompressor -+ 0.27 -+ - - org.apache.orc - orc-core diff --git a/hive/stackable/patches/4.0.1/0005-Fix-CVE-2024-1597.patch b/hive/stackable/patches/4.0.1/0005-Fix-CVE-2024-1597.patch deleted file mode 100644 index 09a201b46..000000000 --- a/hive/stackable/patches/4.0.1/0005-Fix-CVE-2024-1597.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 134b9e22475b3ae59eabbc0bf5c188912dc2393b Mon Sep 17 00:00:00 2001 -From: Nick Larsen -Date: Thu, 15 May 2025 14:14:28 +0200 -Subject: Fix CVE-2024-1597 - -See https://github.com/stackabletech/vulnerabilities/issues/681 - -pgjdbc, the PostgreSQL JDBC Driver, allows attacker to inject SQL if using -PreferQueryMode=SIMPLE. Note this is not the default. In the default mode there -is no vulnerability. A placeholder for a numeric value must be immediately -preceded by a minus. There must be a second placeholder for a string value after -the first placeholder; both must be on the same line. By constructing a matching -string payload, the attacker can inject SQL to alter the query,bypassing the -protections that parameterized queries bring against SQL Injection attacks. -Versions before 42.7.2, 42.6.1, 42.5.5, 42.4.4, 42.3.9, and 42.2.28 are -affected. ---- - pom.xml | 2 +- - standalone-metastore/pom.xml | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/pom.xml b/pom.xml -index 1898adeebe..89cf93ed37 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -179,7 +179,7 @@ - 2.5.0 - 6.2.1.jre8 - 8.0.31 -- 42.5.1 -+ 42.5.6 - 21.3.0.0 - 2.3 - 1.8.5 -diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml -index 599ad33ed0..17dfe063e8 100644 ---- a/standalone-metastore/pom.xml -+++ b/standalone-metastore/pom.xml -@@ -73,7 +73,7 @@ - 2.5.0 - 6.2.1.jre8 - 8.0.31 -- 42.5.1 -+ 42.5.6 - 21.3.0.0 - 0.1.2 - diff --git a/hive/stackable/patches/4.0.1/0001-Include-Postgres-driver.patch b/hive/stackable/patches/4.2.1/0001-Include-Postgres-driver.patch similarity index 78% rename from hive/stackable/patches/4.0.1/0001-Include-Postgres-driver.patch rename to hive/stackable/patches/4.2.1/0001-Include-Postgres-driver.patch index c1c70fe7a..57b0d46c8 100644 --- a/hive/stackable/patches/4.0.1/0001-Include-Postgres-driver.patch +++ b/hive/stackable/patches/4.2.1/0001-Include-Postgres-driver.patch @@ -1,6 +1,6 @@ -From 44d83fa02779ac3135f76ce711f11c108a432ea3 Mon Sep 17 00:00:00 2001 -From: Sebastian Bernauer -Date: Tue, 3 Sep 2024 11:13:24 +0200 +From 9bfbe159795b690bdf5eb19e83bd227ae9345082 Mon Sep 17 00:00:00 2001 +From: Malte Sander +Date: Tue, 25 Nov 2025 11:29:03 +0100 Subject: Include Postgres driver --- @@ -9,10 +9,10 @@ Subject: Include Postgres driver 2 files changed, 2 deletions(-) diff --git a/standalone-metastore/metastore-server/pom.xml b/standalone-metastore/metastore-server/pom.xml -index 3d14d6b2e3..fdc813c5b9 100644 +index fd68c6cb65..b07aa0228d 100644 --- a/standalone-metastore/metastore-server/pom.xml +++ b/standalone-metastore/metastore-server/pom.xml -@@ -334,7 +334,6 @@ +@@ -338,7 +338,6 @@ org.postgresql postgresql @@ -21,10 +21,10 @@ index 3d14d6b2e3..fdc813c5b9 100644 org.eclipse.jetty diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml -index 744b88c6db..c0bb928611 100644 +index 69de496b40..4f75c22dec 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml -@@ -399,7 +399,6 @@ +@@ -435,7 +435,6 @@ org.postgresql postgresql ${postgres.version} diff --git a/hive/stackable/patches/4.0.1/0002-Include-logging-dependencies.patch b/hive/stackable/patches/4.2.1/0002-Include-logging-dependencies.patch similarity index 70% rename from hive/stackable/patches/4.0.1/0002-Include-logging-dependencies.patch rename to hive/stackable/patches/4.2.1/0002-Include-logging-dependencies.patch index b63b54fb3..683bad344 100644 --- a/hive/stackable/patches/4.0.1/0002-Include-logging-dependencies.patch +++ b/hive/stackable/patches/4.2.1/0002-Include-logging-dependencies.patch @@ -1,18 +1,17 @@ -From ed96173868c88142fded0291f901d84d6c63ed51 Mon Sep 17 00:00:00 2001 -From: Lars Francke -Date: Tue, 13 Aug 2024 13:38:12 +0200 +From 09fa507880275d6e9828e4c3ed44cb7a67d2b9ed Mon Sep 17 00:00:00 2001 +From: Malte Sander +Date: Tue, 25 Nov 2025 11:30:24 +0100 Subject: Include logging dependencies -This adds dependencies required for use of the XmlLayout for logging --- standalone-metastore/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml -index c0bb928611..0f5de8ec3c 100644 +index 4f75c22dec..43c458d49e 100644 --- a/standalone-metastore/pom.xml +++ b/standalone-metastore/pom.xml -@@ -495,6 +495,11 @@ +@@ -582,6 +582,11 @@ com.fasterxml.jackson.core jackson-databind diff --git a/hive/stackable/patches/4.2.1/0003-Fix-CVE-2024-36114.patch b/hive/stackable/patches/4.2.1/0003-Fix-CVE-2024-36114.patch new file mode 100644 index 000000000..7ac03ef42 --- /dev/null +++ b/hive/stackable/patches/4.2.1/0003-Fix-CVE-2024-36114.patch @@ -0,0 +1,26 @@ +From 96f3a4364b02f751e54328d88ad0edf3d639bba3 Mon Sep 17 00:00:00 2001 +From: Malte Sander +Date: Tue, 25 Nov 2025 11:31:34 +0100 +Subject: Fix CVE-2024-36114 + +--- + standalone-metastore/pom.xml | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml +index 43c458d49e..6517b3cc22 100644 +--- a/standalone-metastore/pom.xml ++++ b/standalone-metastore/pom.xml +@@ -157,6 +157,12 @@ + ${netty.version} + linux-x86_64 + ++ ++ ++ io.airlift ++ aircompressor ++ 0.27 ++ + + org.apache.orc + orc-core diff --git a/hive/stackable/patches/4.2.1/0004-Add-httpcomponents.core5-to-hive-standalone-metastor.patch b/hive/stackable/patches/4.2.1/0004-Add-httpcomponents.core5-to-hive-standalone-metastor.patch new file mode 100644 index 000000000..e8bdcb3a7 --- /dev/null +++ b/hive/stackable/patches/4.2.1/0004-Add-httpcomponents.core5-to-hive-standalone-metastor.patch @@ -0,0 +1,40 @@ +From 780e2aaeae8d721e78f46a4312ce1dc38c436206 Mon Sep 17 00:00:00 2001 +From: Malte Sander +Date: Tue, 25 Nov 2025 14:44:35 +0100 +Subject: Add httpcomponents.core5 to hive-standalone-metastore + +Required for the REST Catalog. +--- + standalone-metastore/metastore-rest-catalog/pom.xml | 5 +++++ + standalone-metastore/pom.xml | 2 ++ + 2 files changed, 7 insertions(+) + +diff --git a/standalone-metastore/metastore-rest-catalog/pom.xml b/standalone-metastore/metastore-rest-catalog/pom.xml +index 5fb601fe1a..682259d334 100644 +--- a/standalone-metastore/metastore-rest-catalog/pom.xml ++++ b/standalone-metastore/metastore-rest-catalog/pom.xml +@@ -26,6 +26,11 @@ + 1.9.1 + + ++ ++ org.apache.httpcomponents.core5 ++ httpcore5 ++ ${httpcomponents5.core.version} ++ + + org.apache.hive + hive-standalone-metastore-server +diff --git a/standalone-metastore/pom.xml b/standalone-metastore/pom.xml +index 6517b3cc22..45d804e172 100644 +--- a/standalone-metastore/pom.xml ++++ b/standalone-metastore/pom.xml +@@ -117,6 +117,8 @@ + 1.7.30 + 4.4.13 + 4.5.13 ++ ++ 5.3.1 + 4.5.8 + 11.28 + 9.4.57.v20241219 diff --git a/hive/stackable/patches/4.2.1/0005-Resolve-every-in-reactor-dependency-against-the-modu.patch b/hive/stackable/patches/4.2.1/0005-Resolve-every-in-reactor-dependency-against-the-modu.patch new file mode 100644 index 000000000..14b7e8de4 --- /dev/null +++ b/hive/stackable/patches/4.2.1/0005-Resolve-every-in-reactor-dependency-against-the-modu.patch @@ -0,0 +1,148 @@ +From a96d083fc68a4599208f674a35f31383e0a886ab Mon Sep 17 00:00:00 2001 +From: Lars Francke +Date: Mon, 14 Sep 2026 11:18:42 +0200 +Subject: Resolve every in-reactor dependency against the modules built + alongside it + +standalone-metastore refers to several modules built in the same reactor through the literal +hive.version property rather than ${project.version}. Upstream the two values coincide, so +nothing shows. Our image build runs "mvn versions:set" to stamp the Stackable release version +onto every module, which breaks the coincidence: the reactor modules are renamed, hive.version +is not, and Maven then downloads the published artifact from Maven Central instead of using +the one built beside it. + +The immediate effect is that metastore-server compiled against the stock metastore-client and +metastore-common, silently discarding any patch of ours to that API surface. That went +unnoticed while our Hive patches only touched poms; the following patch is the first to change +that surface, and without this one it fails to compile. + +The wider effect is what the image contains. Through the packaging module this is why our Hive +image has been shipping fifteen upstream jars - hive-exec, hive-metastore, hive-serde, the +shims and so on - downloaded from Maven Central rather than built here. We rebuild Hive in +order to control what we ship, so the artifacts we assemble should be the ones we built. + +Upstream fixed one instance of this, the metastore-server to metastore-client reference, for +Hive 4.3.0: https://issues.apache.org/jira/browse/HIVE-29827. This patch goes further on +purpose. + +Note for other Hive versions: this is correct as long as the image is built from the Hive root, +where every referenced module is in the reactor. Our Dockerfile does that from 4.0.0 onwards. +The 3.1.3 build instead uses "--projects standalone-metastore", where the main Hive artifacts +genuinely are external, so this patch must not be carried back to it unchanged. +--- + standalone-metastore/metastore-rest-catalog/pom.xml | 10 +++++----- + standalone-metastore/metastore-server/pom.xml | 2 +- + .../metastore-tools/metastore-benchmarks/pom.xml | 2 +- + standalone-metastore/metastore-tools/pom.xml | 2 +- + standalone-metastore/packaging/pom.xml | 6 +++--- + 5 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/standalone-metastore/metastore-rest-catalog/pom.xml b/standalone-metastore/metastore-rest-catalog/pom.xml +index 682259d334..d863231977 100644 +--- a/standalone-metastore/metastore-rest-catalog/pom.xml ++++ b/standalone-metastore/metastore-rest-catalog/pom.xml +@@ -34,31 +34,31 @@ + + org.apache.hive + hive-standalone-metastore-server +- ${hive.version} ++ ${project.version} + provided + + + org.apache.hive + hive-standalone-metastore-common +- ${hive.version} ++ ${project.version} + + + org.apache.hive + hive-iceberg-catalog +- ${hive.version} ++ ${project.version} + + + + org.apache.hive + hive-standalone-metastore-common +- ${hive.version} ++ ${project.version} + tests + test + + + org.apache.hive + hive-standalone-metastore-server +- ${hive.version} ++ ${project.version} + tests + test + +diff --git a/standalone-metastore/metastore-server/pom.xml b/standalone-metastore/metastore-server/pom.xml +index b07aa0228d..91d938db40 100644 +--- a/standalone-metastore/metastore-server/pom.xml ++++ b/standalone-metastore/metastore-server/pom.xml +@@ -28,7 +28,7 @@ + + org.apache.hive + hive-standalone-metastore-client +- ${hive.version} ++ ${project.version} + + + org.apache.httpcomponents +diff --git a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml +index 1a2d781ff1..6c9e1a9cf0 100644 +--- a/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml ++++ b/standalone-metastore/metastore-tools/metastore-benchmarks/pom.xml +@@ -46,7 +46,7 @@ + + org.apache.hive.hcatalog + hive-hcatalog-server-extensions +- ${hive.version} ++ ${project.version} + + + org.apache.zookeeper +diff --git a/standalone-metastore/metastore-tools/pom.xml b/standalone-metastore/metastore-tools/pom.xml +index 82612a5057..f1b4c35af6 100644 +--- a/standalone-metastore/metastore-tools/pom.xml ++++ b/standalone-metastore/metastore-tools/pom.xml +@@ -39,7 +39,7 @@ + + org.apache.hive.hcatalog + hive-hcatalog-server-extensions +- ${hive.version} ++ ${project.version} + + + org.apache.zookeeper +diff --git a/standalone-metastore/packaging/pom.xml b/standalone-metastore/packaging/pom.xml +index 1f4ad53899..a0de88e1a3 100644 +--- a/standalone-metastore/packaging/pom.xml ++++ b/standalone-metastore/packaging/pom.xml +@@ -176,7 +176,7 @@ + + org.apache.hive + hive-metastore +- ${hive.version} ++ ${project.version} + + + org.apache.hive +@@ -192,13 +192,13 @@ + + org.apache.hive + hive-exec +- ${hive.version} ++ ${project.version} + core + + + org.apache.hive + hive-iceberg-handler +- ${hive.version} ++ ${project.version} + + + org.apache.hive diff --git a/hive/stackable/patches/4.2.1/0006-Restore-the-deprecated-get_table-and-get_table_objec.patch b/hive/stackable/patches/4.2.1/0006-Restore-the-deprecated-get_table-and-get_table_objec.patch new file mode 100644 index 000000000..6e4645fc6 --- /dev/null +++ b/hive/stackable/patches/4.2.1/0006-Restore-the-deprecated-get_table-and-get_table_objec.patch @@ -0,0 +1,2475 @@ +From c4c57ad84e0f3ad78ae6394b20ca2d3ec51063e9 Mon Sep 17 00:00:00 2001 +From: Lars Francke +Date: Mon, 14 Sep 2026 11:23:35 +0200 +Subject: Restore the deprecated get_table and get_table_objects_by_name Thrift + methods + +HIVE-26537 removed five methods from the HMS Thrift interface in Hive 4.0.1. Two of them, +get_table and get_table_objects_by_name, are still called by any metastore client built +against Hive 2.3, which is what Spark bundles: 2.3.9 in Spark 3.5 and 2.3.10 in Spark 4.0 +through 4.2. Iceberg's HiveCatalog reaches the metastore through IMetaStoreClient and so +uses whichever client Spark supplies, which makes an Iceberg job against a Hive 4.0.1 or +newer metastore fail with + + TApplicationException: Invalid method name: 'get_table' + +The removal was a code cleanup rather than a fix. The Jira is titled "Deprecate older APIs +in the HMS" and carries no incompatible-change flag, and the author's stated reasoning on +the pull request was "in the next release, we would like to remove all the deprecated APIs +in the thrift class. Even though it breaks the incompatibility, moving forward we'll have a +clean code base." + +Nothing upstream has moved since: Hive considers the removal correct, Spark has bundled the +2.3 client for three major lines, and apache/iceberg#12878 is still open. PyIceberg solved +the same problem in its own client (apache/iceberg-python#3924) by calling the request-based +methods and keeping the old ones behind a "talking to Hive 2" flag, which is what the Java +client should eventually do too. Until then this restores the two methods server-side. + +Both handlers are the Hive 4.0.0 implementations unchanged. They add no logic: each +builds the request object and delegates to the private internal method that the surviving +_req variant already calls, so there is one implementation per operation and the +authorisation pre-event fires on the shared path either way. The old entry point cannot +express client capabilities or a write-id snapshot, so it returns strictly less than the +request-based one and refuses tables whose capability check it cannot satisfy. + +The declarations are appended at the end of the service block rather than restored where +they used to be. Thrift numbers its generated local variables in declaration order, so +inserting them earlier renumbers thousands of unrelated lines in the checked-in generated +sources. Appending keeps the generated diff purely additive, and dispatch is by name so the +position has no effect on the wire. + +The generated sources were regenerated with the thrift version this release pins, and the +InterfaceAudience and InterfaceStability annotations were re-applied following the +convention in the rest of the file. Regenerate with +.scripts/regenerate_hive_thrift_compat_patch.sh rather than editing them by hand. +--- + .../metastore/api/ThriftHiveMetastore.java | 2300 +++++++++++++++++ + .../src/main/thrift/hive_metastore.thrift | 13 + + .../hadoop/hive/metastore/HMSHandler.java | 18 + + 3 files changed, 2331 insertions(+) + +diff --git a/standalone-metastore/metastore-common/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ThriftHiveMetastore.java b/standalone-metastore/metastore-common/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ThriftHiveMetastore.java +index f2746b3582..4f3235f204 100644 +--- a/standalone-metastore/metastore-common/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ThriftHiveMetastore.java ++++ b/standalone-metastore/metastore-common/src/gen/thrift/gen-javabean/org/apache/hadoop/hive/metastore/api/ThriftHiveMetastore.java +@@ -583,6 +583,10 @@ package org.apache.hadoop.hive.metastore.api; + + public ReplayedTxnsForPolicyResult get_replayed_txns_for_policy(java.lang.String policyName) throws MetaException, org.apache.thrift.TException; + ++ public Table get_table(java.lang.String dbname, java.lang.String tbl_name) throws MetaException, NoSuchObjectException, org.apache.thrift.TException; ++ ++ public java.util.List get_table_objects_by_name(java.lang.String dbname, java.util.List tbl_names) throws org.apache.thrift.TException; ++ + } + + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public interface AsyncIface extends com.facebook.fb303.FacebookService .AsyncIface { +@@ -1155,6 +1159,10 @@ package org.apache.hadoop.hive.metastore.api; + + public void get_replayed_txns_for_policy(java.lang.String policyName, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException; + ++ public void get_table(java.lang.String dbname, java.lang.String tbl_name, org.apache.thrift.async.AsyncMethodCallback
resultHandler) throws org.apache.thrift.TException; ++ ++ public void get_table_objects_by_name(java.lang.String dbname, java.util.List tbl_names, org.apache.thrift.async.AsyncMethodCallback> resultHandler) throws org.apache.thrift.TException; ++ + } + + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class Client extends com.facebook.fb303.FacebookService.Client implements Iface { +@@ -9202,6 +9210,60 @@ package org.apache.hadoop.hive.metastore.api; + throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "get_replayed_txns_for_policy failed: unknown result"); + } + ++ public Table get_table(java.lang.String dbname, java.lang.String tbl_name) throws MetaException, NoSuchObjectException, org.apache.thrift.TException ++ { ++ send_get_table(dbname, tbl_name); ++ return recv_get_table(); ++ } ++ ++ public void send_get_table(java.lang.String dbname, java.lang.String tbl_name) throws org.apache.thrift.TException ++ { ++ get_table_args args = new get_table_args(); ++ args.setDbname(dbname); ++ args.setTbl_name(tbl_name); ++ sendBase("get_table", args); ++ } ++ ++ public Table recv_get_table() throws MetaException, NoSuchObjectException, org.apache.thrift.TException ++ { ++ get_table_result result = new get_table_result(); ++ receiveBase(result, "get_table"); ++ if (result.isSetSuccess()) { ++ return result.success; ++ } ++ if (result.o1 != null) { ++ throw result.o1; ++ } ++ if (result.o2 != null) { ++ throw result.o2; ++ } ++ throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "get_table failed: unknown result"); ++ } ++ ++ public java.util.List
get_table_objects_by_name(java.lang.String dbname, java.util.List tbl_names) throws org.apache.thrift.TException ++ { ++ send_get_table_objects_by_name(dbname, tbl_names); ++ return recv_get_table_objects_by_name(); ++ } ++ ++ public void send_get_table_objects_by_name(java.lang.String dbname, java.util.List tbl_names) throws org.apache.thrift.TException ++ { ++ get_table_objects_by_name_args args = new get_table_objects_by_name_args(); ++ args.setDbname(dbname); ++ args.setTbl_names(tbl_names); ++ sendBase("get_table_objects_by_name", args); ++ } ++ ++ public java.util.List
recv_get_table_objects_by_name() throws org.apache.thrift.TException ++ { ++ get_table_objects_by_name_result result = new get_table_objects_by_name_result(); ++ receiveBase(result, "get_table_objects_by_name"); ++ if (result.isSetSuccess()) { ++ return result.success; ++ } ++ throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "get_table_objects_by_name failed: unknown result"); ++ } ++ + } + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class AsyncClient extends com.facebook.fb303.FacebookService.AsyncClient implements AsyncIface { + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class Factory implements org.apache.thrift.async.TAsyncClientFactory { +@@ -18809,6 +18871,76 @@ package org.apache.hadoop.hive.metastore.api; + } + } + ++ public void get_table(java.lang.String dbname, java.lang.String tbl_name, org.apache.thrift.async.AsyncMethodCallback
resultHandler) throws org.apache.thrift.TException { ++ checkReady(); ++ get_table_call method_call = new get_table_call(dbname, tbl_name, resultHandler, this, ___protocolFactory, ___transport); ++ this.___currentMethod = method_call; ++ ___manager.call(method_call); ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_call extends org.apache.thrift.async.TAsyncMethodCall
{ ++ private java.lang.String dbname; ++ private java.lang.String tbl_name; ++ public get_table_call(java.lang.String dbname, java.lang.String tbl_name, org.apache.thrift.async.AsyncMethodCallback
resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException { ++ super(client, protocolFactory, transport, resultHandler, false); ++ this.dbname = dbname; ++ this.tbl_name = tbl_name; ++ } ++ ++ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException { ++ prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("get_table", org.apache.thrift.protocol.TMessageType.CALL, 0)); ++ get_table_args args = new get_table_args(); ++ args.setDbname(dbname); ++ args.setTbl_name(tbl_name); ++ args.write(prot); ++ prot.writeMessageEnd(); ++ } ++ ++ public Table getResult() throws MetaException, NoSuchObjectException, org.apache.thrift.TException { ++ if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) { ++ throw new java.lang.IllegalStateException("Method call not finished!"); ++ } ++ org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array()); ++ org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport); ++ return (new Client(prot)).recv_get_table(); ++ } ++ } ++ ++ public void get_table_objects_by_name(java.lang.String dbname, java.util.List tbl_names, org.apache.thrift.async.AsyncMethodCallback> resultHandler) throws org.apache.thrift.TException { ++ checkReady(); ++ get_table_objects_by_name_call method_call = new get_table_objects_by_name_call(dbname, tbl_names, resultHandler, this, ___protocolFactory, ___transport); ++ this.___currentMethod = method_call; ++ ___manager.call(method_call); ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_objects_by_name_call extends org.apache.thrift.async.TAsyncMethodCall> { ++ private java.lang.String dbname; ++ private java.util.List tbl_names; ++ public get_table_objects_by_name_call(java.lang.String dbname, java.util.List tbl_names, org.apache.thrift.async.AsyncMethodCallback> resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException { ++ super(client, protocolFactory, transport, resultHandler, false); ++ this.dbname = dbname; ++ this.tbl_names = tbl_names; ++ } ++ ++ public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException { ++ prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("get_table_objects_by_name", org.apache.thrift.protocol.TMessageType.CALL, 0)); ++ get_table_objects_by_name_args args = new get_table_objects_by_name_args(); ++ args.setDbname(dbname); ++ args.setTbl_names(tbl_names); ++ args.write(prot); ++ prot.writeMessageEnd(); ++ } ++ ++ public java.util.List
getResult() throws org.apache.thrift.TException { ++ if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) { ++ throw new java.lang.IllegalStateException("Method call not finished!"); ++ } ++ org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array()); ++ org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport); ++ return (new Client(prot)).recv_get_table_objects_by_name(); ++ } ++ } ++ + } + + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class Processor extends com.facebook.fb303.FacebookService.Processor implements org.apache.thrift.TProcessor { +@@ -19106,6 +19238,8 @@ package org.apache.hadoop.hive.metastore.api; + processMap.put("drop_package", new drop_package()); + processMap.put("get_all_write_event_info", new get_all_write_event_info()); + processMap.put("get_replayed_txns_for_policy", new get_replayed_txns_for_policy()); ++ processMap.put("get_table", new get_table()); ++ processMap.put("get_table_objects_by_name", new get_table_objects_by_name()); + return processMap; + } + +@@ -27783,6 +27917,62 @@ package org.apache.hadoop.hive.metastore.api; + } + } + ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table extends org.apache.thrift.ProcessFunction { ++ public get_table() { ++ super("get_table"); ++ } ++ ++ public get_table_args getEmptyArgsInstance() { ++ return new get_table_args(); ++ } ++ ++ protected boolean isOneway() { ++ return false; ++ } ++ ++ @Override ++ protected boolean rethrowUnhandledExceptions() { ++ return false; ++ } ++ ++ public get_table_result getResult(I iface, get_table_args args) throws org.apache.thrift.TException { ++ get_table_result result = new get_table_result(); ++ try { ++ result.success = iface.get_table(args.dbname, args.tbl_name); ++ } catch (MetaException o1) { ++ result.o1 = o1; ++ } catch (NoSuchObjectException o2) { ++ result.o2 = o2; ++ } ++ return result; ++ } ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_objects_by_name extends org.apache.thrift.ProcessFunction { ++ public get_table_objects_by_name() { ++ super("get_table_objects_by_name"); ++ } ++ ++ public get_table_objects_by_name_args getEmptyArgsInstance() { ++ return new get_table_objects_by_name_args(); ++ } ++ ++ protected boolean isOneway() { ++ return false; ++ } ++ ++ @Override ++ protected boolean rethrowUnhandledExceptions() { ++ return false; ++ } ++ ++ public get_table_objects_by_name_result getResult(I iface, get_table_objects_by_name_args args) throws org.apache.thrift.TException { ++ get_table_objects_by_name_result result = new get_table_objects_by_name_result(); ++ result.success = iface.get_table_objects_by_name(args.dbname, args.tbl_names); ++ return result; ++ } ++ } ++ + } + + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class AsyncProcessor extends com.facebook.fb303.FacebookService.AsyncProcessor { +@@ -28080,6 +28270,8 @@ package org.apache.hadoop.hive.metastore.api; + processMap.put("drop_package", new drop_package()); + processMap.put("get_all_write_event_info", new get_all_write_event_info()); + processMap.put("get_replayed_txns_for_policy", new get_replayed_txns_for_policy()); ++ processMap.put("get_table", new get_table()); ++ processMap.put("get_table_objects_by_name", new get_table_objects_by_name()); + return processMap; + } + +@@ -47446,6 +47638,136 @@ package org.apache.hadoop.hive.metastore.api; + } + } + ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table extends org.apache.thrift.AsyncProcessFunction { ++ public get_table() { ++ super("get_table"); ++ } ++ ++ public get_table_args getEmptyArgsInstance() { ++ return new get_table_args(); ++ } ++ ++ public org.apache.thrift.async.AsyncMethodCallback
getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { ++ final org.apache.thrift.AsyncProcessFunction fcall = this; ++ return new org.apache.thrift.async.AsyncMethodCallback
() { ++ public void onComplete(Table o) { ++ get_table_result result = new get_table_result(); ++ result.success = o; ++ try { ++ fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid); ++ } catch (org.apache.thrift.transport.TTransportException e) { ++ _LOGGER.error("TTransportException writing to internal frame buffer", e); ++ fb.close(); ++ } catch (java.lang.Exception e) { ++ _LOGGER.error("Exception writing to internal frame buffer", e); ++ onError(e); ++ } ++ } ++ public void onError(java.lang.Exception e) { ++ byte msgType = org.apache.thrift.protocol.TMessageType.REPLY; ++ org.apache.thrift.TSerializable msg; ++ get_table_result result = new get_table_result(); ++ if (e instanceof MetaException) { ++ result.o1 = (MetaException) e; ++ result.setO1IsSet(true); ++ msg = result; ++ } else if (e instanceof NoSuchObjectException) { ++ result.o2 = (NoSuchObjectException) e; ++ result.setO2IsSet(true); ++ msg = result; ++ } else if (e instanceof org.apache.thrift.transport.TTransportException) { ++ _LOGGER.error("TTransportException inside handler", e); ++ fb.close(); ++ return; ++ } else if (e instanceof org.apache.thrift.TApplicationException) { ++ _LOGGER.error("TApplicationException inside handler", e); ++ msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; ++ msg = (org.apache.thrift.TApplicationException)e; ++ } else { ++ _LOGGER.error("Exception inside handler", e); ++ msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; ++ msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage()); ++ } ++ try { ++ fcall.sendResponse(fb,msg,msgType,seqid); ++ } catch (java.lang.Exception ex) { ++ _LOGGER.error("Exception writing to internal frame buffer", ex); ++ fb.close(); ++ } ++ } ++ }; ++ } ++ ++ protected boolean isOneway() { ++ return false; ++ } ++ ++ public void start(I iface, get_table_args args, org.apache.thrift.async.AsyncMethodCallback
resultHandler) throws org.apache.thrift.TException { ++ iface.get_table(args.dbname, args.tbl_name,resultHandler); ++ } ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_objects_by_name extends org.apache.thrift.AsyncProcessFunction> { ++ public get_table_objects_by_name() { ++ super("get_table_objects_by_name"); ++ } ++ ++ public get_table_objects_by_name_args getEmptyArgsInstance() { ++ return new get_table_objects_by_name_args(); ++ } ++ ++ public org.apache.thrift.async.AsyncMethodCallback> getResultHandler(final org.apache.thrift.server.AbstractNonblockingServer.AsyncFrameBuffer fb, final int seqid) { ++ final org.apache.thrift.AsyncProcessFunction fcall = this; ++ return new org.apache.thrift.async.AsyncMethodCallback>() { ++ public void onComplete(java.util.List
o) { ++ get_table_objects_by_name_result result = new get_table_objects_by_name_result(); ++ result.success = o; ++ try { ++ fcall.sendResponse(fb, result, org.apache.thrift.protocol.TMessageType.REPLY,seqid); ++ } catch (org.apache.thrift.transport.TTransportException e) { ++ _LOGGER.error("TTransportException writing to internal frame buffer", e); ++ fb.close(); ++ } catch (java.lang.Exception e) { ++ _LOGGER.error("Exception writing to internal frame buffer", e); ++ onError(e); ++ } ++ } ++ public void onError(java.lang.Exception e) { ++ byte msgType = org.apache.thrift.protocol.TMessageType.REPLY; ++ org.apache.thrift.TSerializable msg; ++ get_table_objects_by_name_result result = new get_table_objects_by_name_result(); ++ if (e instanceof org.apache.thrift.transport.TTransportException) { ++ _LOGGER.error("TTransportException inside handler", e); ++ fb.close(); ++ return; ++ } else if (e instanceof org.apache.thrift.TApplicationException) { ++ _LOGGER.error("TApplicationException inside handler", e); ++ msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; ++ msg = (org.apache.thrift.TApplicationException)e; ++ } else { ++ _LOGGER.error("Exception inside handler", e); ++ msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION; ++ msg = new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage()); ++ } ++ try { ++ fcall.sendResponse(fb,msg,msgType,seqid); ++ } catch (java.lang.Exception ex) { ++ _LOGGER.error("Exception writing to internal frame buffer", ex); ++ fb.close(); ++ } ++ } ++ }; ++ } ++ ++ protected boolean isOneway() { ++ return false; ++ } ++ ++ public void start(I iface, get_table_objects_by_name_args args, org.apache.thrift.async.AsyncMethodCallback> resultHandler) throws org.apache.thrift.TException { ++ iface.get_table_objects_by_name(args.dbname, args.tbl_names,resultHandler); ++ } ++ } ++ + } + + @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class abort_Compactions_args implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { +@@ -322884,4 +323206,1982 @@ package org.apache.hadoop.hive.metastore.api; + } + } + ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_args implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { ++ private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("get_table_args"); ++ ++ private static final org.apache.thrift.protocol.TField DBNAME_FIELD_DESC = new org.apache.thrift.protocol.TField("dbname", org.apache.thrift.protocol.TType.STRING, (short)1); ++ private static final org.apache.thrift.protocol.TField TBL_NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("tbl_name", org.apache.thrift.protocol.TType.STRING, (short)2); ++ ++ private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new get_table_argsStandardSchemeFactory(); ++ private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new get_table_argsTupleSchemeFactory(); ++ ++ private @org.apache.thrift.annotation.Nullable java.lang.String dbname; // required ++ private @org.apache.thrift.annotation.Nullable java.lang.String tbl_name; // required ++ ++ /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ ++ public enum _Fields implements org.apache.thrift.TFieldIdEnum { ++ DBNAME((short)1, "dbname"), ++ TBL_NAME((short)2, "tbl_name"); ++ ++ private static final java.util.Map byName = new java.util.HashMap(); ++ ++ static { ++ for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { ++ byName.put(field.getFieldName(), field); ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByThriftId(int fieldId) { ++ switch(fieldId) { ++ case 1: // DBNAME ++ return DBNAME; ++ case 2: // TBL_NAME ++ return TBL_NAME; ++ default: ++ return null; ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, throwing an exception ++ * if it is not found. ++ */ ++ public static _Fields findByThriftIdOrThrow(int fieldId) { ++ _Fields fields = findByThriftId(fieldId); ++ if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); ++ return fields; ++ } ++ ++ /** ++ * Find the _Fields constant that matches name, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByName(java.lang.String name) { ++ return byName.get(name); ++ } ++ ++ private final short _thriftId; ++ private final java.lang.String _fieldName; ++ ++ _Fields(short thriftId, java.lang.String fieldName) { ++ _thriftId = thriftId; ++ _fieldName = fieldName; ++ } ++ ++ public short getThriftFieldId() { ++ return _thriftId; ++ } ++ ++ public java.lang.String getFieldName() { ++ return _fieldName; ++ } ++ } ++ ++ // isset id assignments ++ public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; ++ static { ++ java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); ++ tmpMap.put(_Fields.DBNAME, new org.apache.thrift.meta_data.FieldMetaData("dbname", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); ++ tmpMap.put(_Fields.TBL_NAME, new org.apache.thrift.meta_data.FieldMetaData("tbl_name", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); ++ metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); ++ org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(get_table_args.class, metaDataMap); ++ } ++ ++ public get_table_args() { ++ } ++ ++ public get_table_args( ++ java.lang.String dbname, ++ java.lang.String tbl_name) ++ { ++ this(); ++ this.dbname = dbname; ++ this.tbl_name = tbl_name; ++ } ++ ++ /** ++ * Performs a deep copy on other. ++ */ ++ public get_table_args(get_table_args other) { ++ if (other.isSetDbname()) { ++ this.dbname = other.dbname; ++ } ++ if (other.isSetTbl_name()) { ++ this.tbl_name = other.tbl_name; ++ } ++ } ++ ++ public get_table_args deepCopy() { ++ return new get_table_args(this); ++ } ++ ++ @Override ++ public void clear() { ++ this.dbname = null; ++ this.tbl_name = null; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.String getDbname() { ++ return this.dbname; ++ } ++ ++ public void setDbname(@org.apache.thrift.annotation.Nullable java.lang.String dbname) { ++ this.dbname = dbname; ++ } ++ ++ public void unsetDbname() { ++ this.dbname = null; ++ } ++ ++ /** Returns true if field dbname is set (has been assigned a value) and false otherwise */ ++ public boolean isSetDbname() { ++ return this.dbname != null; ++ } ++ ++ public void setDbnameIsSet(boolean value) { ++ if (!value) { ++ this.dbname = null; ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.String getTbl_name() { ++ return this.tbl_name; ++ } ++ ++ public void setTbl_name(@org.apache.thrift.annotation.Nullable java.lang.String tbl_name) { ++ this.tbl_name = tbl_name; ++ } ++ ++ public void unsetTbl_name() { ++ this.tbl_name = null; ++ } ++ ++ /** Returns true if field tbl_name is set (has been assigned a value) and false otherwise */ ++ public boolean isSetTbl_name() { ++ return this.tbl_name != null; ++ } ++ ++ public void setTbl_nameIsSet(boolean value) { ++ if (!value) { ++ this.tbl_name = null; ++ } ++ } ++ ++ public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { ++ switch (field) { ++ case DBNAME: ++ if (value == null) { ++ unsetDbname(); ++ } else { ++ setDbname((java.lang.String)value); ++ } ++ break; ++ ++ case TBL_NAME: ++ if (value == null) { ++ unsetTbl_name(); ++ } else { ++ setTbl_name((java.lang.String)value); ++ } ++ break; ++ ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.Object getFieldValue(_Fields field) { ++ switch (field) { ++ case DBNAME: ++ return getDbname(); ++ ++ case TBL_NAME: ++ return getTbl_name(); ++ ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ ++ public boolean isSet(_Fields field) { ++ if (field == null) { ++ throw new java.lang.IllegalArgumentException(); ++ } ++ ++ switch (field) { ++ case DBNAME: ++ return isSetDbname(); ++ case TBL_NAME: ++ return isSetTbl_name(); ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ @Override ++ public boolean equals(java.lang.Object that) { ++ if (that instanceof get_table_args) ++ return this.equals((get_table_args)that); ++ return false; ++ } ++ ++ public boolean equals(get_table_args that) { ++ if (that == null) ++ return false; ++ if (this == that) ++ return true; ++ ++ boolean this_present_dbname = true && this.isSetDbname(); ++ boolean that_present_dbname = true && that.isSetDbname(); ++ if (this_present_dbname || that_present_dbname) { ++ if (!(this_present_dbname && that_present_dbname)) ++ return false; ++ if (!this.dbname.equals(that.dbname)) ++ return false; ++ } ++ ++ boolean this_present_tbl_name = true && this.isSetTbl_name(); ++ boolean that_present_tbl_name = true && that.isSetTbl_name(); ++ if (this_present_tbl_name || that_present_tbl_name) { ++ if (!(this_present_tbl_name && that_present_tbl_name)) ++ return false; ++ if (!this.tbl_name.equals(that.tbl_name)) ++ return false; ++ } ++ ++ return true; ++ } ++ ++ @Override ++ public int hashCode() { ++ int hashCode = 1; ++ ++ hashCode = hashCode * 8191 + ((isSetDbname()) ? 131071 : 524287); ++ if (isSetDbname()) ++ hashCode = hashCode * 8191 + dbname.hashCode(); ++ ++ hashCode = hashCode * 8191 + ((isSetTbl_name()) ? 131071 : 524287); ++ if (isSetTbl_name()) ++ hashCode = hashCode * 8191 + tbl_name.hashCode(); ++ ++ return hashCode; ++ } ++ ++ @Override ++ public int compareTo(get_table_args other) { ++ if (!getClass().equals(other.getClass())) { ++ return getClass().getName().compareTo(other.getClass().getName()); ++ } ++ ++ int lastComparison = 0; ++ ++ lastComparison = java.lang.Boolean.compare(isSetDbname(), other.isSetDbname()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetDbname()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.dbname, other.dbname); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ lastComparison = java.lang.Boolean.compare(isSetTbl_name(), other.isSetTbl_name()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetTbl_name()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tbl_name, other.tbl_name); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ return 0; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public _Fields fieldForId(int fieldId) { ++ return _Fields.findByThriftId(fieldId); ++ } ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { ++ scheme(iprot).read(iprot, this); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { ++ scheme(oprot).write(oprot, this); ++ } ++ ++ @Override ++ public java.lang.String toString() { ++ java.lang.StringBuilder sb = new java.lang.StringBuilder("get_table_args("); ++ boolean first = true; ++ ++ sb.append("dbname:"); ++ if (this.dbname == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.dbname); ++ } ++ first = false; ++ if (!first) sb.append(", "); ++ sb.append("tbl_name:"); ++ if (this.tbl_name == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.tbl_name); ++ } ++ first = false; ++ sb.append(")"); ++ return sb.toString(); ++ } ++ ++ public void validate() throws org.apache.thrift.TException { ++ // check for required fields ++ // check for sub-struct validity ++ } ++ ++ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { ++ try { ++ write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { ++ try { ++ read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private static class get_table_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_argsStandardScheme getScheme() { ++ return new get_table_argsStandardScheme(); ++ } ++ } ++ ++ private static class get_table_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme { ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot, get_table_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TField schemeField; ++ iprot.readStructBegin(); ++ while (true) ++ { ++ schemeField = iprot.readFieldBegin(); ++ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { ++ break; ++ } ++ switch (schemeField.id) { ++ case 1: // DBNAME ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { ++ struct.dbname = iprot.readString(); ++ struct.setDbnameIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ case 2: // TBL_NAME ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { ++ struct.tbl_name = iprot.readString(); ++ struct.setTbl_nameIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ default: ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ iprot.readFieldEnd(); ++ } ++ iprot.readStructEnd(); ++ struct.validate(); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot, get_table_args struct) throws org.apache.thrift.TException { ++ struct.validate(); ++ ++ oprot.writeStructBegin(STRUCT_DESC); ++ if (struct.dbname != null) { ++ oprot.writeFieldBegin(DBNAME_FIELD_DESC); ++ oprot.writeString(struct.dbname); ++ oprot.writeFieldEnd(); ++ } ++ if (struct.tbl_name != null) { ++ oprot.writeFieldBegin(TBL_NAME_FIELD_DESC); ++ oprot.writeString(struct.tbl_name); ++ oprot.writeFieldEnd(); ++ } ++ oprot.writeFieldStop(); ++ oprot.writeStructEnd(); ++ } ++ ++ } ++ ++ private static class get_table_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_argsTupleScheme getScheme() { ++ return new get_table_argsTupleScheme(); ++ } ++ } ++ ++ private static class get_table_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme { ++ ++ @Override ++ public void write(org.apache.thrift.protocol.TProtocol prot, get_table_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet optionals = new java.util.BitSet(); ++ if (struct.isSetDbname()) { ++ optionals.set(0); ++ } ++ if (struct.isSetTbl_name()) { ++ optionals.set(1); ++ } ++ oprot.writeBitSet(optionals, 2); ++ if (struct.isSetDbname()) { ++ oprot.writeString(struct.dbname); ++ } ++ if (struct.isSetTbl_name()) { ++ oprot.writeString(struct.tbl_name); ++ } ++ } ++ ++ @Override ++ public void read(org.apache.thrift.protocol.TProtocol prot, get_table_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet incoming = iprot.readBitSet(2); ++ if (incoming.get(0)) { ++ struct.dbname = iprot.readString(); ++ struct.setDbnameIsSet(true); ++ } ++ if (incoming.get(1)) { ++ struct.tbl_name = iprot.readString(); ++ struct.setTbl_nameIsSet(true); ++ } ++ } ++ } ++ ++ private static S scheme(org.apache.thrift.protocol.TProtocol proto) { ++ return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); ++ } ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_result implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { ++ private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("get_table_result"); ++ ++ private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRUCT, (short)0); ++ private static final org.apache.thrift.protocol.TField O1_FIELD_DESC = new org.apache.thrift.protocol.TField("o1", org.apache.thrift.protocol.TType.STRUCT, (short)1); ++ private static final org.apache.thrift.protocol.TField O2_FIELD_DESC = new org.apache.thrift.protocol.TField("o2", org.apache.thrift.protocol.TType.STRUCT, (short)2); ++ ++ private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new get_table_resultStandardSchemeFactory(); ++ private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new get_table_resultTupleSchemeFactory(); ++ ++ private @org.apache.thrift.annotation.Nullable Table success; // required ++ private @org.apache.thrift.annotation.Nullable MetaException o1; // required ++ private @org.apache.thrift.annotation.Nullable NoSuchObjectException o2; // required ++ ++ /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ ++ public enum _Fields implements org.apache.thrift.TFieldIdEnum { ++ SUCCESS((short)0, "success"), ++ O1((short)1, "o1"), ++ O2((short)2, "o2"); ++ ++ private static final java.util.Map byName = new java.util.HashMap(); ++ ++ static { ++ for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { ++ byName.put(field.getFieldName(), field); ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByThriftId(int fieldId) { ++ switch(fieldId) { ++ case 0: // SUCCESS ++ return SUCCESS; ++ case 1: // O1 ++ return O1; ++ case 2: // O2 ++ return O2; ++ default: ++ return null; ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, throwing an exception ++ * if it is not found. ++ */ ++ public static _Fields findByThriftIdOrThrow(int fieldId) { ++ _Fields fields = findByThriftId(fieldId); ++ if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); ++ return fields; ++ } ++ ++ /** ++ * Find the _Fields constant that matches name, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByName(java.lang.String name) { ++ return byName.get(name); ++ } ++ ++ private final short _thriftId; ++ private final java.lang.String _fieldName; ++ ++ _Fields(short thriftId, java.lang.String fieldName) { ++ _thriftId = thriftId; ++ _fieldName = fieldName; ++ } ++ ++ public short getThriftFieldId() { ++ return _thriftId; ++ } ++ ++ public java.lang.String getFieldName() { ++ return _fieldName; ++ } ++ } ++ ++ // isset id assignments ++ public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; ++ static { ++ java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); ++ tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, Table.class))); ++ tmpMap.put(_Fields.O1, new org.apache.thrift.meta_data.FieldMetaData("o1", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, MetaException.class))); ++ tmpMap.put(_Fields.O2, new org.apache.thrift.meta_data.FieldMetaData("o2", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, NoSuchObjectException.class))); ++ metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); ++ org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(get_table_result.class, metaDataMap); ++ } ++ ++ public get_table_result() { ++ } ++ ++ public get_table_result( ++ Table success, ++ MetaException o1, ++ NoSuchObjectException o2) ++ { ++ this(); ++ this.success = success; ++ this.o1 = o1; ++ this.o2 = o2; ++ } ++ ++ /** ++ * Performs a deep copy on other. ++ */ ++ public get_table_result(get_table_result other) { ++ if (other.isSetSuccess()) { ++ this.success = new Table(other.success); ++ } ++ if (other.isSetO1()) { ++ this.o1 = new MetaException(other.o1); ++ } ++ if (other.isSetO2()) { ++ this.o2 = new NoSuchObjectException(other.o2); ++ } ++ } ++ ++ public get_table_result deepCopy() { ++ return new get_table_result(this); ++ } ++ ++ @Override ++ public void clear() { ++ this.success = null; ++ this.o1 = null; ++ this.o2 = null; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public Table getSuccess() { ++ return this.success; ++ } ++ ++ public void setSuccess(@org.apache.thrift.annotation.Nullable Table success) { ++ this.success = success; ++ } ++ ++ public void unsetSuccess() { ++ this.success = null; ++ } ++ ++ /** Returns true if field success is set (has been assigned a value) and false otherwise */ ++ public boolean isSetSuccess() { ++ return this.success != null; ++ } ++ ++ public void setSuccessIsSet(boolean value) { ++ if (!value) { ++ this.success = null; ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public MetaException getO1() { ++ return this.o1; ++ } ++ ++ public void setO1(@org.apache.thrift.annotation.Nullable MetaException o1) { ++ this.o1 = o1; ++ } ++ ++ public void unsetO1() { ++ this.o1 = null; ++ } ++ ++ /** Returns true if field o1 is set (has been assigned a value) and false otherwise */ ++ public boolean isSetO1() { ++ return this.o1 != null; ++ } ++ ++ public void setO1IsSet(boolean value) { ++ if (!value) { ++ this.o1 = null; ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public NoSuchObjectException getO2() { ++ return this.o2; ++ } ++ ++ public void setO2(@org.apache.thrift.annotation.Nullable NoSuchObjectException o2) { ++ this.o2 = o2; ++ } ++ ++ public void unsetO2() { ++ this.o2 = null; ++ } ++ ++ /** Returns true if field o2 is set (has been assigned a value) and false otherwise */ ++ public boolean isSetO2() { ++ return this.o2 != null; ++ } ++ ++ public void setO2IsSet(boolean value) { ++ if (!value) { ++ this.o2 = null; ++ } ++ } ++ ++ public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { ++ switch (field) { ++ case SUCCESS: ++ if (value == null) { ++ unsetSuccess(); ++ } else { ++ setSuccess((Table)value); ++ } ++ break; ++ ++ case O1: ++ if (value == null) { ++ unsetO1(); ++ } else { ++ setO1((MetaException)value); ++ } ++ break; ++ ++ case O2: ++ if (value == null) { ++ unsetO2(); ++ } else { ++ setO2((NoSuchObjectException)value); ++ } ++ break; ++ ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.Object getFieldValue(_Fields field) { ++ switch (field) { ++ case SUCCESS: ++ return getSuccess(); ++ ++ case O1: ++ return getO1(); ++ ++ case O2: ++ return getO2(); ++ ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ ++ public boolean isSet(_Fields field) { ++ if (field == null) { ++ throw new java.lang.IllegalArgumentException(); ++ } ++ ++ switch (field) { ++ case SUCCESS: ++ return isSetSuccess(); ++ case O1: ++ return isSetO1(); ++ case O2: ++ return isSetO2(); ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ @Override ++ public boolean equals(java.lang.Object that) { ++ if (that instanceof get_table_result) ++ return this.equals((get_table_result)that); ++ return false; ++ } ++ ++ public boolean equals(get_table_result that) { ++ if (that == null) ++ return false; ++ if (this == that) ++ return true; ++ ++ boolean this_present_success = true && this.isSetSuccess(); ++ boolean that_present_success = true && that.isSetSuccess(); ++ if (this_present_success || that_present_success) { ++ if (!(this_present_success && that_present_success)) ++ return false; ++ if (!this.success.equals(that.success)) ++ return false; ++ } ++ ++ boolean this_present_o1 = true && this.isSetO1(); ++ boolean that_present_o1 = true && that.isSetO1(); ++ if (this_present_o1 || that_present_o1) { ++ if (!(this_present_o1 && that_present_o1)) ++ return false; ++ if (!this.o1.equals(that.o1)) ++ return false; ++ } ++ ++ boolean this_present_o2 = true && this.isSetO2(); ++ boolean that_present_o2 = true && that.isSetO2(); ++ if (this_present_o2 || that_present_o2) { ++ if (!(this_present_o2 && that_present_o2)) ++ return false; ++ if (!this.o2.equals(that.o2)) ++ return false; ++ } ++ ++ return true; ++ } ++ ++ @Override ++ public int hashCode() { ++ int hashCode = 1; ++ ++ hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287); ++ if (isSetSuccess()) ++ hashCode = hashCode * 8191 + success.hashCode(); ++ ++ hashCode = hashCode * 8191 + ((isSetO1()) ? 131071 : 524287); ++ if (isSetO1()) ++ hashCode = hashCode * 8191 + o1.hashCode(); ++ ++ hashCode = hashCode * 8191 + ((isSetO2()) ? 131071 : 524287); ++ if (isSetO2()) ++ hashCode = hashCode * 8191 + o2.hashCode(); ++ ++ return hashCode; ++ } ++ ++ @Override ++ public int compareTo(get_table_result other) { ++ if (!getClass().equals(other.getClass())) { ++ return getClass().getName().compareTo(other.getClass().getName()); ++ } ++ ++ int lastComparison = 0; ++ ++ lastComparison = java.lang.Boolean.compare(isSetSuccess(), other.isSetSuccess()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetSuccess()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ lastComparison = java.lang.Boolean.compare(isSetO1(), other.isSetO1()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetO1()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.o1, other.o1); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ lastComparison = java.lang.Boolean.compare(isSetO2(), other.isSetO2()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetO2()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.o2, other.o2); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ return 0; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public _Fields fieldForId(int fieldId) { ++ return _Fields.findByThriftId(fieldId); ++ } ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { ++ scheme(iprot).read(iprot, this); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { ++ scheme(oprot).write(oprot, this); ++ } ++ ++ @Override ++ public java.lang.String toString() { ++ java.lang.StringBuilder sb = new java.lang.StringBuilder("get_table_result("); ++ boolean first = true; ++ ++ sb.append("success:"); ++ if (this.success == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.success); ++ } ++ first = false; ++ if (!first) sb.append(", "); ++ sb.append("o1:"); ++ if (this.o1 == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.o1); ++ } ++ first = false; ++ if (!first) sb.append(", "); ++ sb.append("o2:"); ++ if (this.o2 == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.o2); ++ } ++ first = false; ++ sb.append(")"); ++ return sb.toString(); ++ } ++ ++ public void validate() throws org.apache.thrift.TException { ++ // check for required fields ++ // check for sub-struct validity ++ if (success != null) { ++ success.validate(); ++ } ++ } ++ ++ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { ++ try { ++ write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { ++ try { ++ read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private static class get_table_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_resultStandardScheme getScheme() { ++ return new get_table_resultStandardScheme(); ++ } ++ } ++ ++ private static class get_table_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme { ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot, get_table_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TField schemeField; ++ iprot.readStructBegin(); ++ while (true) ++ { ++ schemeField = iprot.readFieldBegin(); ++ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { ++ break; ++ } ++ switch (schemeField.id) { ++ case 0: // SUCCESS ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) { ++ struct.success = new Table(); ++ struct.success.read(iprot); ++ struct.setSuccessIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ case 1: // O1 ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) { ++ struct.o1 = new MetaException(); ++ struct.o1.read(iprot); ++ struct.setO1IsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ case 2: // O2 ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRUCT) { ++ struct.o2 = new NoSuchObjectException(); ++ struct.o2.read(iprot); ++ struct.setO2IsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ default: ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ iprot.readFieldEnd(); ++ } ++ iprot.readStructEnd(); ++ struct.validate(); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot, get_table_result struct) throws org.apache.thrift.TException { ++ struct.validate(); ++ ++ oprot.writeStructBegin(STRUCT_DESC); ++ if (struct.success != null) { ++ oprot.writeFieldBegin(SUCCESS_FIELD_DESC); ++ struct.success.write(oprot); ++ oprot.writeFieldEnd(); ++ } ++ if (struct.o1 != null) { ++ oprot.writeFieldBegin(O1_FIELD_DESC); ++ struct.o1.write(oprot); ++ oprot.writeFieldEnd(); ++ } ++ if (struct.o2 != null) { ++ oprot.writeFieldBegin(O2_FIELD_DESC); ++ struct.o2.write(oprot); ++ oprot.writeFieldEnd(); ++ } ++ oprot.writeFieldStop(); ++ oprot.writeStructEnd(); ++ } ++ ++ } ++ ++ private static class get_table_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_resultTupleScheme getScheme() { ++ return new get_table_resultTupleScheme(); ++ } ++ } ++ ++ private static class get_table_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme { ++ ++ @Override ++ public void write(org.apache.thrift.protocol.TProtocol prot, get_table_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet optionals = new java.util.BitSet(); ++ if (struct.isSetSuccess()) { ++ optionals.set(0); ++ } ++ if (struct.isSetO1()) { ++ optionals.set(1); ++ } ++ if (struct.isSetO2()) { ++ optionals.set(2); ++ } ++ oprot.writeBitSet(optionals, 3); ++ if (struct.isSetSuccess()) { ++ struct.success.write(oprot); ++ } ++ if (struct.isSetO1()) { ++ struct.o1.write(oprot); ++ } ++ if (struct.isSetO2()) { ++ struct.o2.write(oprot); ++ } ++ } ++ ++ @Override ++ public void read(org.apache.thrift.protocol.TProtocol prot, get_table_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet incoming = iprot.readBitSet(3); ++ if (incoming.get(0)) { ++ struct.success = new Table(); ++ struct.success.read(iprot); ++ struct.setSuccessIsSet(true); ++ } ++ if (incoming.get(1)) { ++ struct.o1 = new MetaException(); ++ struct.o1.read(iprot); ++ struct.setO1IsSet(true); ++ } ++ if (incoming.get(2)) { ++ struct.o2 = new NoSuchObjectException(); ++ struct.o2.read(iprot); ++ struct.setO2IsSet(true); ++ } ++ } ++ } ++ ++ private static S scheme(org.apache.thrift.protocol.TProtocol proto) { ++ return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); ++ } ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_objects_by_name_args implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { ++ private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("get_table_objects_by_name_args"); ++ ++ private static final org.apache.thrift.protocol.TField DBNAME_FIELD_DESC = new org.apache.thrift.protocol.TField("dbname", org.apache.thrift.protocol.TType.STRING, (short)1); ++ private static final org.apache.thrift.protocol.TField TBL_NAMES_FIELD_DESC = new org.apache.thrift.protocol.TField("tbl_names", org.apache.thrift.protocol.TType.LIST, (short)2); ++ ++ private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new get_table_objects_by_name_argsStandardSchemeFactory(); ++ private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new get_table_objects_by_name_argsTupleSchemeFactory(); ++ ++ private @org.apache.thrift.annotation.Nullable java.lang.String dbname; // required ++ private @org.apache.thrift.annotation.Nullable java.util.List tbl_names; // required ++ ++ /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ ++ public enum _Fields implements org.apache.thrift.TFieldIdEnum { ++ DBNAME((short)1, "dbname"), ++ TBL_NAMES((short)2, "tbl_names"); ++ ++ private static final java.util.Map byName = new java.util.HashMap(); ++ ++ static { ++ for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { ++ byName.put(field.getFieldName(), field); ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByThriftId(int fieldId) { ++ switch(fieldId) { ++ case 1: // DBNAME ++ return DBNAME; ++ case 2: // TBL_NAMES ++ return TBL_NAMES; ++ default: ++ return null; ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, throwing an exception ++ * if it is not found. ++ */ ++ public static _Fields findByThriftIdOrThrow(int fieldId) { ++ _Fields fields = findByThriftId(fieldId); ++ if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); ++ return fields; ++ } ++ ++ /** ++ * Find the _Fields constant that matches name, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByName(java.lang.String name) { ++ return byName.get(name); ++ } ++ ++ private final short _thriftId; ++ private final java.lang.String _fieldName; ++ ++ _Fields(short thriftId, java.lang.String fieldName) { ++ _thriftId = thriftId; ++ _fieldName = fieldName; ++ } ++ ++ public short getThriftFieldId() { ++ return _thriftId; ++ } ++ ++ public java.lang.String getFieldName() { ++ return _fieldName; ++ } ++ } ++ ++ // isset id assignments ++ public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; ++ static { ++ java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); ++ tmpMap.put(_Fields.DBNAME, new org.apache.thrift.meta_data.FieldMetaData("dbname", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); ++ tmpMap.put(_Fields.TBL_NAMES, new org.apache.thrift.meta_data.FieldMetaData("tbl_names", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, ++ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)))); ++ metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); ++ org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(get_table_objects_by_name_args.class, metaDataMap); ++ } ++ ++ public get_table_objects_by_name_args() { ++ } ++ ++ public get_table_objects_by_name_args( ++ java.lang.String dbname, ++ java.util.List tbl_names) ++ { ++ this(); ++ this.dbname = dbname; ++ this.tbl_names = tbl_names; ++ } ++ ++ /** ++ * Performs a deep copy on other. ++ */ ++ public get_table_objects_by_name_args(get_table_objects_by_name_args other) { ++ if (other.isSetDbname()) { ++ this.dbname = other.dbname; ++ } ++ if (other.isSetTbl_names()) { ++ java.util.List __this__tbl_names = new java.util.ArrayList(other.tbl_names); ++ this.tbl_names = __this__tbl_names; ++ } ++ } ++ ++ public get_table_objects_by_name_args deepCopy() { ++ return new get_table_objects_by_name_args(this); ++ } ++ ++ @Override ++ public void clear() { ++ this.dbname = null; ++ this.tbl_names = null; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.String getDbname() { ++ return this.dbname; ++ } ++ ++ public void setDbname(@org.apache.thrift.annotation.Nullable java.lang.String dbname) { ++ this.dbname = dbname; ++ } ++ ++ public void unsetDbname() { ++ this.dbname = null; ++ } ++ ++ /** Returns true if field dbname is set (has been assigned a value) and false otherwise */ ++ public boolean isSetDbname() { ++ return this.dbname != null; ++ } ++ ++ public void setDbnameIsSet(boolean value) { ++ if (!value) { ++ this.dbname = null; ++ } ++ } ++ ++ public int getTbl_namesSize() { ++ return (this.tbl_names == null) ? 0 : this.tbl_names.size(); ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.util.Iterator getTbl_namesIterator() { ++ return (this.tbl_names == null) ? null : this.tbl_names.iterator(); ++ } ++ ++ public void addToTbl_names(java.lang.String elem) { ++ if (this.tbl_names == null) { ++ this.tbl_names = new java.util.ArrayList(); ++ } ++ this.tbl_names.add(elem); ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.util.List getTbl_names() { ++ return this.tbl_names; ++ } ++ ++ public void setTbl_names(@org.apache.thrift.annotation.Nullable java.util.List tbl_names) { ++ this.tbl_names = tbl_names; ++ } ++ ++ public void unsetTbl_names() { ++ this.tbl_names = null; ++ } ++ ++ /** Returns true if field tbl_names is set (has been assigned a value) and false otherwise */ ++ public boolean isSetTbl_names() { ++ return this.tbl_names != null; ++ } ++ ++ public void setTbl_namesIsSet(boolean value) { ++ if (!value) { ++ this.tbl_names = null; ++ } ++ } ++ ++ public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { ++ switch (field) { ++ case DBNAME: ++ if (value == null) { ++ unsetDbname(); ++ } else { ++ setDbname((java.lang.String)value); ++ } ++ break; ++ ++ case TBL_NAMES: ++ if (value == null) { ++ unsetTbl_names(); ++ } else { ++ setTbl_names((java.util.List)value); ++ } ++ break; ++ ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.Object getFieldValue(_Fields field) { ++ switch (field) { ++ case DBNAME: ++ return getDbname(); ++ ++ case TBL_NAMES: ++ return getTbl_names(); ++ ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ ++ public boolean isSet(_Fields field) { ++ if (field == null) { ++ throw new java.lang.IllegalArgumentException(); ++ } ++ ++ switch (field) { ++ case DBNAME: ++ return isSetDbname(); ++ case TBL_NAMES: ++ return isSetTbl_names(); ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ @Override ++ public boolean equals(java.lang.Object that) { ++ if (that instanceof get_table_objects_by_name_args) ++ return this.equals((get_table_objects_by_name_args)that); ++ return false; ++ } ++ ++ public boolean equals(get_table_objects_by_name_args that) { ++ if (that == null) ++ return false; ++ if (this == that) ++ return true; ++ ++ boolean this_present_dbname = true && this.isSetDbname(); ++ boolean that_present_dbname = true && that.isSetDbname(); ++ if (this_present_dbname || that_present_dbname) { ++ if (!(this_present_dbname && that_present_dbname)) ++ return false; ++ if (!this.dbname.equals(that.dbname)) ++ return false; ++ } ++ ++ boolean this_present_tbl_names = true && this.isSetTbl_names(); ++ boolean that_present_tbl_names = true && that.isSetTbl_names(); ++ if (this_present_tbl_names || that_present_tbl_names) { ++ if (!(this_present_tbl_names && that_present_tbl_names)) ++ return false; ++ if (!this.tbl_names.equals(that.tbl_names)) ++ return false; ++ } ++ ++ return true; ++ } ++ ++ @Override ++ public int hashCode() { ++ int hashCode = 1; ++ ++ hashCode = hashCode * 8191 + ((isSetDbname()) ? 131071 : 524287); ++ if (isSetDbname()) ++ hashCode = hashCode * 8191 + dbname.hashCode(); ++ ++ hashCode = hashCode * 8191 + ((isSetTbl_names()) ? 131071 : 524287); ++ if (isSetTbl_names()) ++ hashCode = hashCode * 8191 + tbl_names.hashCode(); ++ ++ return hashCode; ++ } ++ ++ @Override ++ public int compareTo(get_table_objects_by_name_args other) { ++ if (!getClass().equals(other.getClass())) { ++ return getClass().getName().compareTo(other.getClass().getName()); ++ } ++ ++ int lastComparison = 0; ++ ++ lastComparison = java.lang.Boolean.compare(isSetDbname(), other.isSetDbname()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetDbname()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.dbname, other.dbname); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ lastComparison = java.lang.Boolean.compare(isSetTbl_names(), other.isSetTbl_names()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetTbl_names()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.tbl_names, other.tbl_names); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ return 0; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public _Fields fieldForId(int fieldId) { ++ return _Fields.findByThriftId(fieldId); ++ } ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { ++ scheme(iprot).read(iprot, this); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { ++ scheme(oprot).write(oprot, this); ++ } ++ ++ @Override ++ public java.lang.String toString() { ++ java.lang.StringBuilder sb = new java.lang.StringBuilder("get_table_objects_by_name_args("); ++ boolean first = true; ++ ++ sb.append("dbname:"); ++ if (this.dbname == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.dbname); ++ } ++ first = false; ++ if (!first) sb.append(", "); ++ sb.append("tbl_names:"); ++ if (this.tbl_names == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.tbl_names); ++ } ++ first = false; ++ sb.append(")"); ++ return sb.toString(); ++ } ++ ++ public void validate() throws org.apache.thrift.TException { ++ // check for required fields ++ // check for sub-struct validity ++ } ++ ++ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { ++ try { ++ write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { ++ try { ++ read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private static class get_table_objects_by_name_argsStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_objects_by_name_argsStandardScheme getScheme() { ++ return new get_table_objects_by_name_argsStandardScheme(); ++ } ++ } ++ ++ private static class get_table_objects_by_name_argsStandardScheme extends org.apache.thrift.scheme.StandardScheme { ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot, get_table_objects_by_name_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TField schemeField; ++ iprot.readStructBegin(); ++ while (true) ++ { ++ schemeField = iprot.readFieldBegin(); ++ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { ++ break; ++ } ++ switch (schemeField.id) { ++ case 1: // DBNAME ++ if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { ++ struct.dbname = iprot.readString(); ++ struct.setDbnameIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ case 2: // TBL_NAMES ++ if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { ++ { ++ org.apache.thrift.protocol.TList _list2282 = iprot.readListBegin(); ++ struct.tbl_names = new java.util.ArrayList(_list2282.size); ++ @org.apache.thrift.annotation.Nullable java.lang.String _elem2283; ++ for (int _i2284 = 0; _i2284 < _list2282.size; ++_i2284) ++ { ++ _elem2283 = iprot.readString(); ++ struct.tbl_names.add(_elem2283); ++ } ++ iprot.readListEnd(); ++ } ++ struct.setTbl_namesIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ default: ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ iprot.readFieldEnd(); ++ } ++ iprot.readStructEnd(); ++ struct.validate(); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot, get_table_objects_by_name_args struct) throws org.apache.thrift.TException { ++ struct.validate(); ++ ++ oprot.writeStructBegin(STRUCT_DESC); ++ if (struct.dbname != null) { ++ oprot.writeFieldBegin(DBNAME_FIELD_DESC); ++ oprot.writeString(struct.dbname); ++ oprot.writeFieldEnd(); ++ } ++ if (struct.tbl_names != null) { ++ oprot.writeFieldBegin(TBL_NAMES_FIELD_DESC); ++ { ++ oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRING, struct.tbl_names.size())); ++ for (java.lang.String _iter2285 : struct.tbl_names) ++ { ++ oprot.writeString(_iter2285); ++ } ++ oprot.writeListEnd(); ++ } ++ oprot.writeFieldEnd(); ++ } ++ oprot.writeFieldStop(); ++ oprot.writeStructEnd(); ++ } ++ ++ } ++ ++ private static class get_table_objects_by_name_argsTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_objects_by_name_argsTupleScheme getScheme() { ++ return new get_table_objects_by_name_argsTupleScheme(); ++ } ++ } ++ ++ private static class get_table_objects_by_name_argsTupleScheme extends org.apache.thrift.scheme.TupleScheme { ++ ++ @Override ++ public void write(org.apache.thrift.protocol.TProtocol prot, get_table_objects_by_name_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet optionals = new java.util.BitSet(); ++ if (struct.isSetDbname()) { ++ optionals.set(0); ++ } ++ if (struct.isSetTbl_names()) { ++ optionals.set(1); ++ } ++ oprot.writeBitSet(optionals, 2); ++ if (struct.isSetDbname()) { ++ oprot.writeString(struct.dbname); ++ } ++ if (struct.isSetTbl_names()) { ++ { ++ oprot.writeI32(struct.tbl_names.size()); ++ for (java.lang.String _iter2286 : struct.tbl_names) ++ { ++ oprot.writeString(_iter2286); ++ } ++ } ++ } ++ } ++ ++ @Override ++ public void read(org.apache.thrift.protocol.TProtocol prot, get_table_objects_by_name_args struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet incoming = iprot.readBitSet(2); ++ if (incoming.get(0)) { ++ struct.dbname = iprot.readString(); ++ struct.setDbnameIsSet(true); ++ } ++ if (incoming.get(1)) { ++ { ++ org.apache.thrift.protocol.TList _list2287 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRING); ++ struct.tbl_names = new java.util.ArrayList(_list2287.size); ++ @org.apache.thrift.annotation.Nullable java.lang.String _elem2288; ++ for (int _i2289 = 0; _i2289 < _list2287.size; ++_i2289) ++ { ++ _elem2288 = iprot.readString(); ++ struct.tbl_names.add(_elem2288); ++ } ++ } ++ struct.setTbl_namesIsSet(true); ++ } ++ } ++ } ++ ++ private static S scheme(org.apache.thrift.protocol.TProtocol proto) { ++ return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); ++ } ++ } ++ ++ @org.apache.hadoop.classification.InterfaceAudience.Public @org.apache.hadoop.classification.InterfaceStability.Stable public static class get_table_objects_by_name_result implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { ++ private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("get_table_objects_by_name_result"); ++ ++ private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.LIST, (short)0); ++ ++ private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new get_table_objects_by_name_resultStandardSchemeFactory(); ++ private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new get_table_objects_by_name_resultTupleSchemeFactory(); ++ ++ private @org.apache.thrift.annotation.Nullable java.util.List
success; // required ++ ++ /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ ++ public enum _Fields implements org.apache.thrift.TFieldIdEnum { ++ SUCCESS((short)0, "success"); ++ ++ private static final java.util.Map byName = new java.util.HashMap(); ++ ++ static { ++ for (_Fields field : java.util.EnumSet.allOf(_Fields.class)) { ++ byName.put(field.getFieldName(), field); ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByThriftId(int fieldId) { ++ switch(fieldId) { ++ case 0: // SUCCESS ++ return SUCCESS; ++ default: ++ return null; ++ } ++ } ++ ++ /** ++ * Find the _Fields constant that matches fieldId, throwing an exception ++ * if it is not found. ++ */ ++ public static _Fields findByThriftIdOrThrow(int fieldId) { ++ _Fields fields = findByThriftId(fieldId); ++ if (fields == null) throw new java.lang.IllegalArgumentException("Field " + fieldId + " doesn't exist!"); ++ return fields; ++ } ++ ++ /** ++ * Find the _Fields constant that matches name, or null if its not found. ++ */ ++ @org.apache.thrift.annotation.Nullable ++ public static _Fields findByName(java.lang.String name) { ++ return byName.get(name); ++ } ++ ++ private final short _thriftId; ++ private final java.lang.String _fieldName; ++ ++ _Fields(short thriftId, java.lang.String fieldName) { ++ _thriftId = thriftId; ++ _fieldName = fieldName; ++ } ++ ++ public short getThriftFieldId() { ++ return _thriftId; ++ } ++ ++ public java.lang.String getFieldName() { ++ return _fieldName; ++ } ++ } ++ ++ // isset id assignments ++ public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; ++ static { ++ java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); ++ tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, ++ new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, ++ new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, Table.class)))); ++ metaDataMap = java.util.Collections.unmodifiableMap(tmpMap); ++ org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(get_table_objects_by_name_result.class, metaDataMap); ++ } ++ ++ public get_table_objects_by_name_result() { ++ } ++ ++ public get_table_objects_by_name_result( ++ java.util.List
success) ++ { ++ this(); ++ this.success = success; ++ } ++ ++ /** ++ * Performs a deep copy on other. ++ */ ++ public get_table_objects_by_name_result(get_table_objects_by_name_result other) { ++ if (other.isSetSuccess()) { ++ java.util.List
__this__success = new java.util.ArrayList
(other.success.size()); ++ for (Table other_element : other.success) { ++ __this__success.add(new Table(other_element)); ++ } ++ this.success = __this__success; ++ } ++ } ++ ++ public get_table_objects_by_name_result deepCopy() { ++ return new get_table_objects_by_name_result(this); ++ } ++ ++ @Override ++ public void clear() { ++ this.success = null; ++ } ++ ++ public int getSuccessSize() { ++ return (this.success == null) ? 0 : this.success.size(); ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.util.Iterator
getSuccessIterator() { ++ return (this.success == null) ? null : this.success.iterator(); ++ } ++ ++ public void addToSuccess(Table elem) { ++ if (this.success == null) { ++ this.success = new java.util.ArrayList
(); ++ } ++ this.success.add(elem); ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.util.List
getSuccess() { ++ return this.success; ++ } ++ ++ public void setSuccess(@org.apache.thrift.annotation.Nullable java.util.List
success) { ++ this.success = success; ++ } ++ ++ public void unsetSuccess() { ++ this.success = null; ++ } ++ ++ /** Returns true if field success is set (has been assigned a value) and false otherwise */ ++ public boolean isSetSuccess() { ++ return this.success != null; ++ } ++ ++ public void setSuccessIsSet(boolean value) { ++ if (!value) { ++ this.success = null; ++ } ++ } ++ ++ public void setFieldValue(_Fields field, @org.apache.thrift.annotation.Nullable java.lang.Object value) { ++ switch (field) { ++ case SUCCESS: ++ if (value == null) { ++ unsetSuccess(); ++ } else { ++ setSuccess((java.util.List
)value); ++ } ++ break; ++ ++ } ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public java.lang.Object getFieldValue(_Fields field) { ++ switch (field) { ++ case SUCCESS: ++ return getSuccess(); ++ ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ ++ public boolean isSet(_Fields field) { ++ if (field == null) { ++ throw new java.lang.IllegalArgumentException(); ++ } ++ ++ switch (field) { ++ case SUCCESS: ++ return isSetSuccess(); ++ } ++ throw new java.lang.IllegalStateException(); ++ } ++ ++ @Override ++ public boolean equals(java.lang.Object that) { ++ if (that instanceof get_table_objects_by_name_result) ++ return this.equals((get_table_objects_by_name_result)that); ++ return false; ++ } ++ ++ public boolean equals(get_table_objects_by_name_result that) { ++ if (that == null) ++ return false; ++ if (this == that) ++ return true; ++ ++ boolean this_present_success = true && this.isSetSuccess(); ++ boolean that_present_success = true && that.isSetSuccess(); ++ if (this_present_success || that_present_success) { ++ if (!(this_present_success && that_present_success)) ++ return false; ++ if (!this.success.equals(that.success)) ++ return false; ++ } ++ ++ return true; ++ } ++ ++ @Override ++ public int hashCode() { ++ int hashCode = 1; ++ ++ hashCode = hashCode * 8191 + ((isSetSuccess()) ? 131071 : 524287); ++ if (isSetSuccess()) ++ hashCode = hashCode * 8191 + success.hashCode(); ++ ++ return hashCode; ++ } ++ ++ @Override ++ public int compareTo(get_table_objects_by_name_result other) { ++ if (!getClass().equals(other.getClass())) { ++ return getClass().getName().compareTo(other.getClass().getName()); ++ } ++ ++ int lastComparison = 0; ++ ++ lastComparison = java.lang.Boolean.compare(isSetSuccess(), other.isSetSuccess()); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ if (isSetSuccess()) { ++ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success); ++ if (lastComparison != 0) { ++ return lastComparison; ++ } ++ } ++ return 0; ++ } ++ ++ @org.apache.thrift.annotation.Nullable ++ public _Fields fieldForId(int fieldId) { ++ return _Fields.findByThriftId(fieldId); ++ } ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { ++ scheme(iprot).read(iprot, this); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { ++ scheme(oprot).write(oprot, this); ++ } ++ ++ @Override ++ public java.lang.String toString() { ++ java.lang.StringBuilder sb = new java.lang.StringBuilder("get_table_objects_by_name_result("); ++ boolean first = true; ++ ++ sb.append("success:"); ++ if (this.success == null) { ++ sb.append("null"); ++ } else { ++ sb.append(this.success); ++ } ++ first = false; ++ sb.append(")"); ++ return sb.toString(); ++ } ++ ++ public void validate() throws org.apache.thrift.TException { ++ // check for required fields ++ // check for sub-struct validity ++ } ++ ++ private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { ++ try { ++ write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException { ++ try { ++ read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); ++ } catch (org.apache.thrift.TException te) { ++ throw new java.io.IOException(te); ++ } ++ } ++ ++ private static class get_table_objects_by_name_resultStandardSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_objects_by_name_resultStandardScheme getScheme() { ++ return new get_table_objects_by_name_resultStandardScheme(); ++ } ++ } ++ ++ private static class get_table_objects_by_name_resultStandardScheme extends org.apache.thrift.scheme.StandardScheme { ++ ++ public void read(org.apache.thrift.protocol.TProtocol iprot, get_table_objects_by_name_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TField schemeField; ++ iprot.readStructBegin(); ++ while (true) ++ { ++ schemeField = iprot.readFieldBegin(); ++ if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { ++ break; ++ } ++ switch (schemeField.id) { ++ case 0: // SUCCESS ++ if (schemeField.type == org.apache.thrift.protocol.TType.LIST) { ++ { ++ org.apache.thrift.protocol.TList _list2290 = iprot.readListBegin(); ++ struct.success = new java.util.ArrayList
(_list2290.size); ++ @org.apache.thrift.annotation.Nullable Table _elem2291; ++ for (int _i2292 = 0; _i2292 < _list2290.size; ++_i2292) ++ { ++ _elem2291 = new Table(); ++ _elem2291.read(iprot); ++ struct.success.add(_elem2291); ++ } ++ iprot.readListEnd(); ++ } ++ struct.setSuccessIsSet(true); ++ } else { ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ break; ++ default: ++ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); ++ } ++ iprot.readFieldEnd(); ++ } ++ iprot.readStructEnd(); ++ struct.validate(); ++ } ++ ++ public void write(org.apache.thrift.protocol.TProtocol oprot, get_table_objects_by_name_result struct) throws org.apache.thrift.TException { ++ struct.validate(); ++ ++ oprot.writeStructBegin(STRUCT_DESC); ++ if (struct.success != null) { ++ oprot.writeFieldBegin(SUCCESS_FIELD_DESC); ++ { ++ oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.success.size())); ++ for (Table _iter2293 : struct.success) ++ { ++ _iter2293.write(oprot); ++ } ++ oprot.writeListEnd(); ++ } ++ oprot.writeFieldEnd(); ++ } ++ oprot.writeFieldStop(); ++ oprot.writeStructEnd(); ++ } ++ ++ } ++ ++ private static class get_table_objects_by_name_resultTupleSchemeFactory implements org.apache.thrift.scheme.SchemeFactory { ++ public get_table_objects_by_name_resultTupleScheme getScheme() { ++ return new get_table_objects_by_name_resultTupleScheme(); ++ } ++ } ++ ++ private static class get_table_objects_by_name_resultTupleScheme extends org.apache.thrift.scheme.TupleScheme { ++ ++ @Override ++ public void write(org.apache.thrift.protocol.TProtocol prot, get_table_objects_by_name_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol oprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet optionals = new java.util.BitSet(); ++ if (struct.isSetSuccess()) { ++ optionals.set(0); ++ } ++ oprot.writeBitSet(optionals, 1); ++ if (struct.isSetSuccess()) { ++ { ++ oprot.writeI32(struct.success.size()); ++ for (Table _iter2294 : struct.success) ++ { ++ _iter2294.write(oprot); ++ } ++ } ++ } ++ } ++ ++ @Override ++ public void read(org.apache.thrift.protocol.TProtocol prot, get_table_objects_by_name_result struct) throws org.apache.thrift.TException { ++ org.apache.thrift.protocol.TTupleProtocol iprot = (org.apache.thrift.protocol.TTupleProtocol) prot; ++ java.util.BitSet incoming = iprot.readBitSet(1); ++ if (incoming.get(0)) { ++ { ++ org.apache.thrift.protocol.TList _list2295 = iprot.readListBegin(org.apache.thrift.protocol.TType.STRUCT); ++ struct.success = new java.util.ArrayList
(_list2295.size); ++ @org.apache.thrift.annotation.Nullable Table _elem2296; ++ for (int _i2297 = 0; _i2297 < _list2295.size; ++_i2297) ++ { ++ _elem2296 = new Table(); ++ _elem2296.read(iprot); ++ struct.success.add(_elem2296); ++ } ++ } ++ struct.setSuccessIsSet(true); ++ } ++ } ++ } ++ ++ private static S scheme(org.apache.thrift.protocol.TProtocol proto) { ++ return (org.apache.thrift.scheme.StandardScheme.class.equals(proto.getScheme()) ? STANDARD_SCHEME_FACTORY : TUPLE_SCHEME_FACTORY).getScheme(); ++ } ++ } ++ + } +diff --git a/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift b/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift +index 32071a087b..57fe135d13 100644 +--- a/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift ++++ b/standalone-metastore/metastore-common/src/main/thrift/hive_metastore.thrift +@@ -3325,6 +3325,19 @@ PartitionsResponse get_partitions_req(1:PartitionsRequest req) + void drop_package(1: DropPackageRequest request) throws (1:MetaException o1) + list get_all_write_event_info(1: GetAllWriteEventInfoRequest request) throws (1:MetaException o1) + ReplayedTxnsForPolicyResult get_replayed_txns_for_policy(1: string policyName) throws (1: MetaException o1) ++ ++ // Restored for wire compatibility with metastore clients built against Hive 2.3, ++ // which is what Spark bundles. HIVE-26537 removed these two methods in 4.0.1 as a ++ // code cleanup; the request-based variants below are their replacements and both ++ // entry points share one implementation. ++ // ++ // Appended at the end of the service block on purpose: thrift numbers its generated ++ // local variables in declaration order, so inserting these where they used to live ++ // renumbers thousands of unrelated lines in the checked-in generated sources. ++ // Dispatch is by name, so the position has no effect on the wire. ++ Table get_table(1:string dbname, 2:string tbl_name) ++ throws (1:MetaException o1, 2:NoSuchObjectException o2) ++ list
get_table_objects_by_name(1:string dbname, 2:list tbl_names) + } + + // * Note about the DDL_TIME: When creating or altering a table or a partition, +diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java +index 7ab569383a..40bbc51571 100644 +--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java ++++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java +@@ -3632,6 +3632,16 @@ public class HMSHandler extends FacebookBase implements IHMSHandler { + return extTable; + } + ++ @Override ++ @Deprecated ++ public Table get_table(final String dbname, final String name) throws MetaException, ++ NoSuchObjectException { ++ String[] parsedDbName = parseDbName(dbname, conf); ++ GetTableRequest getTableRequest = new GetTableRequest(parsedDbName[DB_NAME],name); ++ getTableRequest.setCatName(parsedDbName[CAT_NAME]); ++ return getTableInternal(getTableRequest); ++ } ++ + @Override + public GetTableResult get_table_req(GetTableRequest req) throws MetaException, + NoSuchObjectException { +@@ -3774,6 +3784,14 @@ public class HMSHandler extends FacebookBase implements IHMSHandler { + * @throws UnknownDBException + */ + ++ @Override ++ @Deprecated ++ public List
get_table_objects_by_name(final String dbName, final List tableNames) ++ throws MetaException, InvalidOperationException, UnknownDBException { ++ String[] parsedDbName = parseDbName(dbName, conf); ++ return getTableObjectsInternal(parsedDbName[CAT_NAME], parsedDbName[DB_NAME], tableNames, null, null, null); ++ } ++ + @Override + public GetTablesResult get_table_objects_by_name_req(GetTablesRequest req) throws TException { + String catName = req.isSetCatName() ? req.getCatName() : getDefaultCatalog(conf); diff --git a/hive/stackable/patches/4.0.1/patchable.toml b/hive/stackable/patches/4.2.1/patchable.toml similarity index 51% rename from hive/stackable/patches/4.0.1/patchable.toml rename to hive/stackable/patches/4.2.1/patchable.toml index 807793caf..a6aa116bd 100644 --- a/hive/stackable/patches/4.0.1/patchable.toml +++ b/hive/stackable/patches/4.2.1/patchable.toml @@ -1,2 +1,2 @@ -base = "3af4517eb8cfd9407ad34ed78a0b48b57dfaa264" mirror = "https://github.com/stackabletech/hive.git" +base = "5399e73aade192795d867ae6be9c6423068024f6"