impala.git
14 hours agoIMPALA-10745 (part 2): Support Kerberos over HTTP for impala-shell master
wzhou-code [Wed, 11 May 2022 20:28:24 +0000 (13:28 -0700)] 
IMPALA-10745 (part 2): Support Kerberos over HTTP for impala-shell

This patch adds kerberos-1.3.1 Python module to shell/ext-py so that
the egg file of Kerberos module is built and added into impala-shell
tarball when running script shell/make_shell_tarball.sh.
Kerberos Python module is distributed under Apache License Version 2.
Its source distribution is available at:
https://pypi.org/project/kerberos/

Testing:
 - Passed core run.
 - Installed impala-shell from impala-shell tarball on dev box as
   standalone package. Verified that impala-shell could be ran without
   additional configurations.
 - Installed impala-shell from impala-shell tarball on a real cluster
   with a full Kerberos setup. Verified that impala-shell could
   connect to impala server with options "-k --protocol=hs2-http".

Change-Id: Id34074cbe725ba2cf1407fcf59e00475cd417a6d
Reviewed-on: http://gerrit.cloudera.org:8080/18523
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 days agoIMPALA-11283: Push-down IS_NULL and NOT_NULL predicates to iceberg
LPL [Sat, 7 May 2022 08:29:21 +0000 (16:29 +0800)] 
IMPALA-11283: Push-down IS_NULL and NOT_NULL predicates to iceberg

This patch implements pushing the IS_NULL and NOT_NULL predicates down
to Iceberg.

Testing:
  - Added end-to-end test

Change-Id: I9c3608af67b552bebc55dcc5526f61f5439967bf
Reviewed-on: http://gerrit.cloudera.org:8080/18504
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 days agoIMPALA-11275: log thread info during minidump
Michael Smith [Mon, 9 May 2022 23:24:28 +0000 (16:24 -0700)] 
IMPALA-11275: log thread info during minidump

Writes ThreadDebugInfo to stdout/stderr when a minidump is generated to
capture thread and query details related to the dump. Example message:
> Minidump in thread [1790536]async-exec-thread running query
  1a47cc1e2df94cb4:88dfa08200000000, fragment instance
  0000000000000000:0000000000000000

Refactors DumpCallback so that repeated writes to STDOUT/STDERR are less
redundant.

Adds unit tests to run with ThreadDebugInfo. Removes the 'static' prefix
from DumpCallback so it can be invoked from unit tests, but doesn't add
it to the header as it's intended to be for internal use.

Testing:
- Added crash to Coordinator::Exec and manually tested dump handling.
- Added a new unit test for DumpCallback.
- Ran tests/custom_cluster/test_breakpad.py to verify nothing broke in
  refactor. Those tests don't have ThreadDebugInfo available.

Change-Id: Iea2bdf10db29a0f8ccbe5e767b708781d42a9b8a
Reviewed-on: http://gerrit.cloudera.org:8080/18508
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 days agoIMPALA-11269: Combine log entries of column accesses in the same table
Fang-Yu Rao [Wed, 27 Apr 2022 23:00:56 +0000 (16:00 -0700)] 
IMPALA-11269: Combine log entries of column accesses in the same table

This patch consolidates the Ranger audit log entries of column accesses
granted by the same policy for columns in the same table when a query is
successfully authorized.

Testing:
 - Revised the expected results in the existing FE tests related to
   Ranger audit log due to this patch.
 - Added a new test case to verify we do not combine Ranger audit log
   entries of column accesses granted by different policies even though
   those columns belong to the same table.
 - Added two new test cases to verify we won't have duplicate Ranger
   audit log entries if a column appears multiple times in a query.

Change-Id: Ib8c9522d3518f9523ab4539cdf51f5ee0b17cb7c
Reviewed-on: http://gerrit.cloudera.org:8080/18498
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 days agoIMPALA-11286: Writes value_counts to Iceberg metadata
LPL [Tue, 10 May 2022 09:52:36 +0000 (17:52 +0800)] 
IMPALA-11286: Writes value_counts to Iceberg metadata

Impala does not write 'value_counts' to Iceberg metadata, just
'null_value_counts'. Push-down NOT_NULL predicate does not work when the
data is written by the impala, so we implement impala to write
'value_counts' to Iceberg metadata.

Testing:
 - existing tests
 - tested manually on a real cluster

Change-Id: I6b7afab8be197118e573fda1a381fa08e4c8c9c0
Reviewed-on: http://gerrit.cloudera.org:8080/18513
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 days agoIMPALA-11287 (part 1): Disable CREATE TABLE LIKE statements for Iceberg tables
Zoltan Borok-Nagy [Wed, 11 May 2022 15:51:10 +0000 (17:51 +0200)] 
IMPALA-11287 (part 1): Disable CREATE TABLE LIKE statements for Iceberg tables

We currently don't implement correct behavior for CREATE TABLE LIKE
statements for Iceberg tables. Neither on the source, nor on the
target table side.

This patch forbids such statements until they are correctly implemented.

Testing
 * added e2e test

Change-Id: I9cee6fc82547dabf63937cc541163c1ee59a4013
Reviewed-on: http://gerrit.cloudera.org:8080/18517
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 days agoIMPALA-11162: Support GenericUDFs for Hive
Steve Carlin [Mon, 7 Mar 2022 01:30:15 +0000 (17:30 -0800)] 
IMPALA-11162: Support GenericUDFs for Hive

Hive has 2 types of UDFs. This commit contains limited
support for the second generation UDFs called GenericUDFs.

The main limitations are as follows:

Decimal types are not supported.  The Impala framework determines
the precision and scale of the decimal return type. However, the
Hive GenericUDFs allow the capability to choose its own return
type based on the parameters. Until this can be resolved, it is
safer to forbid decimals from being used. Note that this
limitation currently exists in the first generation of Hive Java
UDFs.

Complex types are not supported.

Functions are not extracted from the jar file. The first generation
of Hive UDFs allowed this because the method prototypes are
explicitly defined and can be determined at function creation time. For
GenericUDFs, the return types are determined based on the parameters
passed in when running a query.

For the same reason as above, GenericUDFs cannot be made permanent.
They will need to be recreated everytime the server is restarted.
This is a severe limitation and will be resolved in the near future.

Change-Id: Ie6fd09120db413fade94410c83ebe8ff104013cd
Reviewed-on: http://gerrit.cloudera.org:8080/18295
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
5 days agoIMPALA-11248: Fix infinite warning dialog issue when datatable cells have undefined...
carolinchen [Wed, 27 Apr 2022 02:58:14 +0000 (10:58 +0800)] 
IMPALA-11248: Fix infinite warning dialog issue when datatable cells have undefined values in www/rpcz web page

This patch fixes datatables script show warning dialog repeatedly in
some kernel environment, we find the issue in centOS linux release 7.2
and tencent tlinux release 2.2. If the javascript without initial value
set, then the front-end page prompts that the variable is not defined,
which cause the datatables script to repeatedly show warning dialog
pop up with message such as follow:

DataTables warning: table id=inbound_per_conn_metrics - Requested
unknown parameter '6' for row 0, column 6.
For more information about this error, please see
http://datatables.net/tn/4

Testing:
- Ran Q4 of TPC-DS against tpcds_parquet table manually. Verified that
the page display the KRPC inbound/outbound connections table properly
without any warning dialog and auto-refresh normally.
- Ran exhaustive tests with the patch.

Change-Id: I7f284b4419ba7dd72baa960dcd5700da22dccdff
Reviewed-on: http://gerrit.cloudera.org:8080/18452
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 days agoIMPALA-10745: Support Kerberos over HTTP for impala-shell
wzhou-code [Wed, 27 Apr 2022 22:30:51 +0000 (15:30 -0700)] 
IMPALA-10745: Support Kerberos over HTTP for impala-shell

This patch ports the implementation of GSSAPI authentication over http
transport from Impyla (https://github.com/cloudera/impyla/pull/415) to
impala-shell.

The implementation adds a new dependency on 'kerberos' python module,
which is a pip-installed module distributed under Apache License Version
2.
When using impala-shell with Kerberos over http, it is assumed that the
host has a preexisting kinit-cached Kerberos ticket that impala-shell
can pass to the server automatically without the user to reenter the
password.

Testing:
 - Passed exhaustive tests.
 - Tested manually on a real cluster with a full Kerberos setup.

Change-Id: Ia59ba4004490735162adbd468a00a962165c5abd
Reviewed-on: http://gerrit.cloudera.org:8080/18493
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 days agoIMPALA-11201: update gitignore files
Michael Smith [Thu, 5 May 2022 22:51:04 +0000 (15:51 -0700)] 
IMPALA-11201: update gitignore files

Updates gitignore for files generated during bootstrap_development.
Fixes deleting tracked files in be/src/thirdparty. Includes ignore rules
for past versions of shell dependencies and updates ignores for current
versions.

Change-Id: I03deba5e7fb151ef8e34039becdcc3fb47684084
Reviewed-on: http://gerrit.cloudera.org:8080/18499
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 days agoIMPALA-10057: Fix log spew by using jars in the classpath
Joe McDonnell [Wed, 13 Apr 2022 22:18:17 +0000 (15:18 -0700)] 
IMPALA-10057: Fix log spew by using jars in the classpath

Some tests saw log spew that causes the INFO log files to
be filled with output like this:
E0903 02:25:39.453887 12060 TransactionKeepalive.java:137] Unexpected exception thrown
Java exception follows:
java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: org/apache/impala/common/TransactionKeepalive$HeartbeatContext
at org.apache.impala.common.TransactionKeepalive$DaemonThread.run(TransactionKeepalive.java:114)
at java.lang.Thread.run(Thread.java:748)
...

It turns out that the catalogd/impalad use a CLASSPATH in
tests that refers to fe/target/classes. The maven command
that runs frontend tests recompiles these classes and
causes the files in fe/target/classes to be deleted and
recreated. There are race conditions where this causes
the symptoms above.

This changes the CLASSPATH to use the frontend jars, which
are not impacted by the machinations on fe/target/classes.
To find the appropriate jar, set-classpath.sh needs to
know the Impala version. This adds IMPALA_VERSION in
bin/impala-config.sh to provide an easy to use
environment variable.

To make the versioning more uniform, this modifies
bin/save-version.sh to use this environment variable.
It also adds a check to make sure that the Java pom.xml
files use the same version as the environment variable.
It fails the build if the Java pom.xml files do not
match.

Testing:
 - Ran core jobs
 - Checked the log file sizes on jobs
 - Changed a Java pom.xml's version and verified that
   bin/validate-java-pom-versions.sh fails

Change-Id: Id35544e446c5bf283c322d3fe2e7ad475cfa12eb
Reviewed-on: http://gerrit.cloudera.org:8080/18415
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
6 days agoIMPALA-11244: Run the minicluster for docker-based BE tests
Joe McDonnell [Wed, 13 Apr 2022 21:02:51 +0000 (14:02 -0700)] 
IMPALA-11244: Run the minicluster for docker-based BE tests

As an optimization, the docker-based tests didn't run
the minicluster for BE tests. Some BE tests now require
the minicluster (DiskIoMgrTest.WriteToRemote*), so this
cannot work with the optimization.

This changes the docker-based tests to start the minicluster
for the BE tests.

Testing:
 - Ran a docker-based test job

Change-Id: I784a63a02886852e10ccca7c118c22ff7d38b8a3
Reviewed-on: http://gerrit.cloudera.org:8080/18414
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
10 days agoIMPALA-11234: Bump CDP_BUILD_NUMBER to 26065553
stiga-huang [Wed, 4 May 2022 03:48:29 +0000 (11:48 +0800)] 
IMPALA-11234: Bump CDP_BUILD_NUMBER to 26065553

This patch is to include HDFS-16535, which fixes the bug that HDFS clients
can't release short circuit read slots correctly when there are multiple
DataNodes colocated.

The bug also causes a performance issue when running the same query
repeatedly in our dev box (including the perf-AB-test Jenkins job).

Tests:
 - Ran exhaustive build
 - Verified there are no error logs about releasing short-circuit read
   slots

Change-Id: I898a246f49c5ec1b34d92053849db6c3e3a0e3e3
Reviewed-on: http://gerrit.cloudera.org:8080/18495
Reviewed-by: Tamas Mate <tmater@apache.org>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
11 days agoIMPALA-11277: Push-down IN predicate to iceberg branch-4.1.0
LPL [Sun, 1 May 2022 16:40:02 +0000 (00:40 +0800)] 
IMPALA-11277: Push-down IN predicate to iceberg

Iceberg provides a rich API to push predicates down. Currently we only
push BinaryPredicate such as EQ, LT, GT, etc. This commit implements IN
predicate push down.

Testing:
  - Added end-to-end testing for pushing down IN predicate to iceberg

Change-Id: Id4be9aa31a6353021b0eabc4485306c0b0e8bb07
Reviewed-on: http://gerrit.cloudera.org:8080/18463
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
12 days agoIMPALA-11264, IMPALA-11259: Bump ORC and Kudu versions
Tamas Mate [Tue, 26 Apr 2022 16:59:37 +0000 (18:59 +0200)] 
IMPALA-11264, IMPALA-11259: Bump ORC and Kudu versions

This commit bumps the Kudu version to 1.16 and ORC version to 1.7.0-p14.
The new toolchain build id is 144-57806de424.

Testing:
 - Ran test_kudu.py
 - Ran test_scanners.py
 - Ran test_acid.py
 - Ran test_scanners.py

Change-Id: I01b72ebd1e773fed100f74e79db76f8605d2a470
Reviewed-on: http://gerrit.cloudera.org:8080/18450
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
13 days agoIMPALA-11276: Fix TestIcebergTable.test_partitioned_insert became flaky
LPL [Mon, 2 May 2022 16:25:31 +0000 (00:25 +0800)] 
IMPALA-11276: Fix TestIcebergTable.test_partitioned_insert became flaky

TestIcebergTable.Test_partitioned_insert test is not stable because
SHOW FILES on Iceberg table will sort the list of FILES. So restore the
original VERIFY_IS_SUBSET for some flaky cases.

Change-Id: Ic38b399ab51903edb59b3f2d1066cd5f5cbff4d4
Reviewed-on: http://gerrit.cloudera.org:8080/18465
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-10838: Fix substitution and improve unification of struct slots
Daniel Becker [Wed, 15 Sep 2021 07:51:21 +0000 (09:51 +0200)] 
IMPALA-10838: Fix substitution and improve unification of struct slots

The following query fails:
'''
with sub as (
    select id, outer_struct
    from functional_orc_def.complextypes_nested_structs)
select sub.id, sub.outer_struct.inner_struct2 from sub;
'''

with the following error:
'''
ERROR: IllegalStateException: Illegal reference to non-materialized
tuple: debugname=InlineViewRef sub alias=sub tid=6
'''

while if 'outer_struct.inner_struct2' is added to the select list of the
inline view, the query works as expected.

This change fixes the problem by two modifications:
  - if a field of a struct needs to be materialised, also materialise
    all of its enclosing structs (ancestors)
  - in InlineViewRef, struct fields are inserted into the 'smap' and
    'baseTableSmap' with the appropriate inline view prefix

This change also changes the way struct fields are materialised: until
now, if a member of a struct was needed to be materialised, the whole
struct, including other members of the struct were materialised. This
behaviour can lead to using significantly more memory than necessary if
we for example query a single member of a large struct. This change
modifies this behaviour so that we only materialise the struct members
that are actually needed.

Tests:
  - added queries that are fixed by this change (including the one
    above) in nested-struct-in-select-list.test
  - added a planner test in
    fe/src/test/java/org/apache/impala/planner/PlannerTest.java that
    asserts that only the required parts of structs are materialised

Change-Id: Iadb9233677355b85d424cc3f22b00b5a3bf61c57
Reviewed-on: http://gerrit.cloudera.org:8080/17847
Reviewed-by: Daniel Becker <daniel.becker@cloudera.com>
Tested-by: Daniel Becker <daniel.becker@cloudera.com>
2 weeks agoIMPALA-11263: Coordinator hang when cancelling a query
wzhou-code [Thu, 14 Apr 2022 04:19:51 +0000 (21:19 -0700)] 
IMPALA-11263: Coordinator hang when cancelling a query

In a rare case, callback Coordinator::BackendState::ExecCompleteCb()
is not called for the corresponding ExecQueryFInstances RPC when the
RPC is cancelled. This causes coordinator to wait indefinitely when
calling Coordinator::BackendState::Cancel() to cancel a fragment
instance.

This patch adds timeout for BackendState::WaitOnExecLocked() so that
coordinator will not be blocked indefinitely when cancelling a query.

Testing:
 - Added a test case to simulate the callback missing when a query
   is failed. Verified that the coordinator would hang without the
   fixing, and would not hang with the fixing.
 - Passed exhaustive-debug tests.

Change-Id: I915511afe2df3017cbbf37f6aff3c5ff7f5473be
Reviewed-on: http://gerrit.cloudera.org:8080/18439
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-11256: Fix SHOW FILES on Iceberg tables lists all files
LPL [Thu, 28 Apr 2022 07:39:44 +0000 (15:39 +0800)] 
IMPALA-11256: Fix SHOW FILES on Iceberg tables lists all files

SHOW FILES on Iceberg tables lists all files in table directory. Even
deleted files and metadata files. We should only shows the current data
files.

Testing:
  - existing tests

Change-Id: If07c2fd6e05e494f7240ccc147b8776a8f217179
Reviewed-on: http://gerrit.cloudera.org:8080/18455
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-11141: Use exact data types in IN-list filter
stiga-huang [Sat, 9 Apr 2022 13:32:45 +0000 (21:32 +0800)] 
IMPALA-11141: Use exact data types in IN-list filter

Currently, we use a std::unordered_set<int64_t> for all numeric types
(including DATE type). It's a waste of space for small data types like
tinyint, smallint, int, etc. This patch extends the base InListFilter
class with native implementations for different data types.

For string type in-list filters, this patch uses impala::StringValue
instead of std::string. This simplifies the Insert() method, which
improves the codegen time. To use impala::StringValue, this patch
switches the set implementation to boost::unordered_set. Same as what we
use in InPredicate.

Another improvement of using impala::StringValue is that we can easily
maintain the strings in MemPool. When inserting a new batch of values,
the new values are inserted into a temp set. String pointers still
reference to the original tuple values. At the end of processing each
batch, MaterializeValues() is invoked to copy the strings into the
filter's own mem pool. This is more memory-friendly than the original
approach since we can allocate the string batch at once.

Tests:
 - Add unit tests for different types of in-list filters

Change-Id: Id434a542b2ced64efa3bfc974cb565b94a4193e9
Reviewed-on: http://gerrit.cloudera.org:8080/18433
Reviewed-by: Qifan Chen <qchen@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-10111: Improve TestWebPage::test_query_stmt logging
Tamas Mate [Fri, 22 Apr 2022 11:39:07 +0000 (13:39 +0200)] 
IMPALA-10111: Improve TestWebPage::test_query_stmt logging

TestWebPage::test_query_stmt is flaky, to better understand the root
cause of this test failure this commit adds the web page JSON result
to the error message.

Testing:
 - Executed the test locally.

Change-Id: Id7ddd04f72790440bba4546c48656c9fe68b4fd9
Reviewed-on: http://gerrit.cloudera.org:8080/18442
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11127: [DOCS] document the UTF8_MODE query option
Shajini Thayasingh [Mon, 18 Apr 2022 19:11:40 +0000 (12:11 -0700)] 
IMPALA-11127: [DOCS] document the UTF8_MODE query option

add the new query option UTF8_MODE topic
update impala_string topic as requested in the first review
create a new topic for UTF_8 mode under SQL ref
discuss the new query option

Change-Id: Ifac5812a3f5e105a73ac87c1ae5fce69a776fb92
Reviewed-on: http://gerrit.cloudera.org:8080/18424
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
3 weeks agoIMPALA-10839: NULL values are displayed on a wrong level for nested structs (ORC)
Daniel Becker [Tue, 12 Apr 2022 14:44:15 +0000 (16:44 +0200)] 
IMPALA-10839: NULL values are displayed on a wrong level for nested structs (ORC)

When querying a non-toplevel nested struct from an ORC file, the NULL
values are displayed at an incorrect level. E.g.:

select id, outer_struct.inner_struct3 from
functional_orc_def.complextypes_nested_structs where id >= 4;
+----+----------------------------+
| id | outer_struct.inner_struct3 |
+----+----------------------------+
| 4  | {"s":{"i":null,"s":null}}  |
| 5  | {"s":null}                 |
+----+----------------------------+

However, in the first row it is expected that 's' should be null and not
its members; in the second row the result should be 'NULL', i.e.
'outer_struct.inner_struct3' is null.
For reference see what is returned when querying 'outer_struct' instead
of 'outer_struct.inner_struct3':

+----+-------------------------------------------------------------------------------------------------------------------------------+
| 4  | {"str":"","inner_struct1":{"str":"somestr2","de":12345.12},"inner_struct2":{"i":1,"str":"string"},"inner_struct3":{"s":null}} |
| 5  | {"str":null,"inner_struct1":null,"inner_struct2":null,"inner_struct3":null}                                                   |
+----+-------------------------------------------------------------------------------------------------------------------------------+

The problem comes from the incorrect handling of the different depths of
the following trees:
 - the ORC type hierarchy (schema)
 - the tuple descriptor / slot descriptor hierarchy
as the ORC type hierarchy contains a node for every level in the schema
but the tuple/slot descriptor hierarchy omits the levels of structs that
are not in the select list (but an ancestor of theirs is), as these
structs are not materialised.

In the case of the example query, the two hierarchies are the following:
ORC:
 root --> outer_struct -> inner_struct3 -> s --> i
      |                                      \-> s
      \-> id
Tuple/slot descriptors:
 main_tuple --> inner_struct3 -> s --> i
            |                      \-> s
            \-> id

We create 'OrcColumnReader's for each node in the ORC type tree. Each
OrcColumnReader is assigned an ORC type node and a slot descriptor. The
incorrect behaviour comes from the incorrect pairing of ORC type nodes
with slot descriptors.

The old behaviour is described below:
Starting from the root, going along a path in both trees (for example
the path leading to outer_struct.inner_struct3.s.i), for each step we
consume a level in both trees until no more nodes remain in the
tuple/slot desc tree, and then we pair the last element from that tree
with the remaining ORC type node(s).

In the example, we get the following pairs:
(root, main_tuple) -> (outer_struct, inner_struct3) ->
(inner_struct3, s) -> (s, i) -> (i, i)

When we run out of structs in the tuple/slot desc tree, we still create
OrcStructReaders (because the ORC type is still a struct, but the slot
descriptor now refers to an INT), but we mark them incorrectly as
non-materialised.

Also, the OrcStructReaders for non-materialised structs do not need to
check for null-ness as they are not present in the select list, only
their descendants, and the ORC batch object stores null information also
for the descendants of null values.

Let's look at the row with id 4 in the example:
Because of the bug, the non-materialising OrcStructReader appears at the
level of the (s, i) pair, so the 's' struct is not checked for
null-ness, although it is actually null. One level lower, for 'i' (and
the inner 's' string field), the ORC batch object tells us that the
values are null (because their parent is). Therefore the nulls appear
one level lower than they should.

The correct behaviour is that ORC type nodes are paired with slot
descriptors if either
 - the ORC type node matches the slot descriptor (they refer to the same
   node in the schema) or
 - the slot descriptor is a descendant of the schema node that the ORC
   type node refers to.

This patch fixes the incorrect pairing of ORC types and slot
descriptors, so we have the following pairs:
(root, main_tuple) -> (outer_struct, main_tuple) ->
(inner_struct3, inner_struct3) -> (s, s) -> (i, i)

In this case the OrcStructReader for the pair (outer_struct, main_tuple)
becomes non-materialising and the one for (s, s) will be materialising,
so the 's' struct will also be null-checked, recognising null-ness at
the correct level.

This commit also fixes some comments in be/src/exec/orc-column-readers.h
and be/src/exec/hdfs-orc-scanner.h mentioning the field
HdfsOrcScanner::col_id_path_map_, which has been removed by
"IMPALA-10485: part(1): make ORC column reader creation independent of
schema resolution".

Testing:
  - added tests to
    testdata/workloads/functional-query/queries/QueryTest/nested-struct-in-select-list.test
    that query various levels of the struct 'outer_struct' to check that
    NULLs are at the correct level.

Change-Id: Iff5034e7bdf39c036aecc491fbd324e29150f040
Reviewed-on: http://gerrit.cloudera.org:8080/18403
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-10850: Interpret timestamp predicates in local timezone in IcebergScanNode
Zoltan Borok-Nagy [Mon, 11 Apr 2022 14:54:40 +0000 (16:54 +0200)] 
IMPALA-10850: Interpret timestamp predicates in local timezone in IcebergScanNode

IcebergScanNode interprets the timestamp literals as UTC timestamps
during predicate pushdown to Iceberg. It causes problems when the
Iceberg table uses TIMESTAMPTZ (which corresponds to TIMESTAMP WITH
LOCAL TIME ZONE in SQL) because in the scanners we assume that the
timestamp literals in a query are in local timezone.

Hence, if the Iceberg table is partitioned by HOUR(ts), and Impala is
running in a different timezone than UTC, then the following query
doesn't return any rows:

 SELECT * from t
 WHERE ts = <some ts>;

Because during predicate pushdown the timestamp is interpreted as a
UTC timestamp (no conversion from local to UTC), but during query
execution the timestamp data in the files are converted to local
timezone, then compared to <some ts>. I.e. in the scanner the
assumption is that <some ts> is in local timezone.

On the other hand, when Iceberg type TIMESTAMP (which correcponds
to TIMESTAMP WITHOUT TIME ZONE in SQL) is used, then we should just
push down the timestamp values without any conversion. In this case
there is no conversion in the scanners either.

Testing:
 * added e2e test with TIMESTAMPTZ
 * added e2e test with TIMESTAMP

Change-Id: I181be5d2fa004f69b457f69ff82dc2f9877f46fa
Reviewed-on: http://gerrit.cloudera.org:8080/18399
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
3 weeks agoIMPALA-10733: Fix flaky TestKuduOperations.test_replica_selection
Tamas Mate [Thu, 14 Apr 2022 09:05:51 +0000 (11:05 +0200)] 
IMPALA-10733: Fix flaky TestKuduOperations.test_replica_selection

This issue is related to IMPALA-11187, 'test_read_mode' can have
unpredicted results by its nature, it sets the 'kudu_read_mode' to
'READ_LATEST'. The 'test_replica_selection' runs just after
'test_read_mode' and the Kudu tests use the same Impala client, thus
'kudu_read_mode=READ_LATEST' persists.

This commit set 'kudu_read_mode=READ_AT_SNAPSHOT' for
'test_replica_selection'.

Testing:
 - Ran 'test_replica_selection'

Change-Id: Id98edf6af8ac67bab65d1c09d3e3b6f9343da854
Reviewed-on: http://gerrit.cloudera.org:8080/18418
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11247: Test script changes for materialized views
Aman Sinha [Sat, 16 Apr 2022 22:22:14 +0000 (15:22 -0700)] 
IMPALA-11247: Test script changes for materialized views

IMPALA-10723 added support for treating materialized views as tables.
In certain test configurations, the rebuild of the materialized views
(which is done via Hive) was not populating the data in the MV. In
this patch, I have changed the source tables of materialized views
to be full-acid instead of insert-only transactional tables. This
enables the tests to succeed. Insert-only source tables are also
meant to work for the MV rebuild but that is a Hive issue that will
be investigated separately.

Change-Id: I349faa0ad36ec8ca6f574f7f92d9a32fb7d0d344
Reviewed-on: http://gerrit.cloudera.org:8080/18421
Reviewed-by: Aman Sinha <amsinha@cloudera.com>
Tested-by: Aman Sinha <amsinha@cloudera.com>
4 weeks agoIMPALA-10414: fix memory leak when canceling the retried query
xqhe [Thu, 29 Jul 2021 09:50:14 +0000 (17:50 +0800)] 
IMPALA-10414: fix memory leak when canceling the retried query

The query retry launches in a separate thread. This thread may not
finishes when deleting the query from the given QueryDriverMap if
the query retry was failed launched. In this case, the resources
for the query retry thread will not release. So the reference
count of QueryDriver (via the shared_ptr) will not go to 0 and it
will not be destroyed.

We need wait until the query retry thread execution has completed
when deleting the query from the given QueryDiverMap.

Testing:
Modify the test_query_retries.py to verify memory leak by checking
the debug web UI of memz.

Change-Id: If804ca65da1794c819a6b2e6567ea7651ab5112f
Reviewed-on: http://gerrit.cloudera.org:8080/17735
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
4 weeks agoIMPALA-11246: TestAcid.test_lock_timings is flaky
Zoltan Borok-Nagy [Thu, 14 Apr 2022 15:54:40 +0000 (17:54 +0200)] 
IMPALA-11246: TestAcid.test_lock_timings is flaky

Added a few extra seconds to the test_lock_timings test to
make it more stable.

Also added an extra log message about the time being spent
on waiting for the lock.

Change-Id: I4c9cc52f799261bbf610e7510e7bf1b61ca6c60a
Reviewed-on: http://gerrit.cloudera.org:8080/18419
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11242: Impala cluster doesn't start when building with debug_noopt
Daniel Becker [Wed, 13 Apr 2022 11:46:50 +0000 (13:46 +0200)] 
IMPALA-11242: Impala cluster doesn't start when building with debug_noopt

IMPALA-11110 added the 'debug_noopt' build option but after building
Impala with it, starting the Impala cluster fails:

[...]
File "/home/user/Impala/tests/common/environ.py", line 196, in
validate_build_flags
    raise Exception("Unknown build type {0}".format(build_type))
Exception: Unknown build type debug_noopt

Adding a new 'DEBUG_NOOPT' entry to 'VALID_BUILD_TYPES' in
tests/common/environ.py solves the issue.

Change-Id: I388c24f7ed194eac73cecf041a0337a87bd806f6
Reviewed-on: http://gerrit.cloudera.org:8080/18412
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-10723: Treat materialized view as a table instead of a view
Aman Sinha [Fri, 4 Jun 2021 16:59:44 +0000 (09:59 -0700)] 
IMPALA-10723: Treat materialized view as a table instead of a view

The existing behavior is that materialized views are treated
as views and therefore expanded similar to a view when one
queries the MV directly (SELECT * FROM materialized_view).
This is incorrect since an MV is a regular table with physical
properties such as partitioning, clustering etc. and should be
treated as such even though it has a view definition associated
with it.

This patch focuses on the use case where MVs are created as
HDFS tables and makes the MVs a derived class of HdfsTable,
therefore making it a Table object. It adds support for
collecting and displaying statistics on materialized views
and these statistics could be leveraged by an external frontend
that supports MV based query rewrites (note that such a rewrite
is not supported by Impala with or without this patch). Note
that we are not introducing new syntax for MVs since DDL, DML
operations on MVs are only supported through Hive.

Directly querying a MV is permitted but inserts into MVs is not
since MVs are supposed to be only modified through an external
refresh when the source tables have modifications.

If the source tables associated with a materialized view have
column masking or row-filtering Ranger policies, querying the
MV will throw an error. This behavior is consistent with that
of Hive.

Testing:
 - Added transactional tables for alltypes, jointbl and used
   them as source tables to create materialized view.
 - Added tests for compute stats, drop stats, show stats and
   simple select query on a materialized view.
 - Added test for select on a materialized view when the
   source table has a column mask.
 - Modified analyzer tests related to alter, insert, drop of
   materialized view.

Change-Id: If3108996124c6544a97fb0c34b6aff5e324a6cff
Reviewed-on: http://gerrit.cloudera.org:8080/17595
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
4 weeks agoIMPALA-11232: Do not add some jars to HADOOP_CLASSPATH when starting HMS
Fang-Yu Rao [Sun, 10 Apr 2022 17:24:52 +0000 (10:24 -0700)] 
IMPALA-11232: Do not add some jars to HADOOP_CLASSPATH when starting HMS

This patch changes the line that added to HADOOP_CLASSPATH all the jar
files in the folder ${RANGER_HOME}/ews/webapp/WEB-INF/lib to a line that
only includes those jar files with names starting with "ranger-" since
almost all other jar files do not seem to be necessary to run the E2E
test of test_hive_with_ranger_setup.

This way we also avoid adding too many paths to HADOOP_CLASSPATH, which
in turn could result in Hadoop not being able to return its version to
the script that starts HMS due to the error of "Argument list too long".

Testing:
 - Verified after this patch, test_hive_with_ranger_setup still
   succeeds.
 - Verified in a local development environment that the length of
   Hadoop's environment variable 'CLASSPATH' logged in
   hive-metastore.out decreases from 100,876 characters to 62,634
   characters when executing run-hive-server.sh with the flag
   '-with_ranger' if $HADOOP_SHELL_SCRIPT_DEBUG is "true" and
   $IMPALA_HOME is "/home/fangyurao/Impala_for_FE".

Change-Id: Ifd66fd99a346835b9f81f95b5f046273fcce2590
Reviewed-on: http://gerrit.cloudera.org:8080/18398
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11229: Upgrade Spring framework to 5.3.18
Joe McDonnell [Wed, 6 Apr 2022 16:49:34 +0000 (09:49 -0700)] 
IMPALA-11229: Upgrade Spring framework to 5.3.18

This upgrade the Spring framework to 5.3.18 to
address multiple CVEs:
 - CVE-2022-22965
 - CVE-2022-22950
 - CVE-2021-22060

Testing:
 - Ran core job
 - Ran custom cluster tests in exhaustive mode

Change-Id: Ie1b299c5b24e70c9db6eb0ce37fee9e32908423e
Reviewed-on: http://gerrit.cloudera.org:8080/18405
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Tamas Mate <tmater@apache.org>
4 weeks agoIMPALA-11200: Avoid redundant "Codegen enabled" messages in profile
Csaba Ringhofer [Tue, 5 Apr 2022 14:55:31 +0000 (16:55 +0200)] 
IMPALA-11200: Avoid redundant "Codegen enabled" messages in profile

Before this patch the message was added to the profile in Open(),
which can be called multiple times in subplans.

Moved it to Close(), which is only called once in the lifetime
of a Node/Aggregator.

A drawback of this is that this info won't be visible when the
Node is still active, but I don't think that it is a very useful
info in a still running query.

Also added a new feature to test_result_verifier.py:
Inside RUNTIME_PROFILE section row_regex can be negated with !,
so !row_regex [regex] means that regex is not matched by any line
in the profile.

Testing:
- added a regression test

Change-Id: Iad2e31900ee6d29385cc8adc6bbf067d91f6450f
Reviewed-on: http://gerrit.cloudera.org:8080/18385
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11241: Mark test_statement_expression_limit as serialized
Csaba Ringhofer [Wed, 13 Apr 2022 08:44:13 +0000 (10:44 +0200)] 
IMPALA-11241: Mark test_statement_expression_limit as serialized

This test takes ~2GB of JVM heap and is a likely cause of some
OOM during EE tests.

Change-Id: I4868eab51bf16e1ca6e0b4e98d7929195cd73803
Reviewed-on: http://gerrit.cloudera.org:8080/18411
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Csaba Ringhofer <csringhofer@cloudera.com>
4 weeks agoIMPALA-11236: Upgrade ehcache sizeof library to 0.4.0
Fang-Yu Rao [Sun, 10 Apr 2022 21:12:10 +0000 (14:12 -0700)] 
IMPALA-11236: Upgrade ehcache sizeof library to 0.4.0

It was found that the ehcache sizeof (version 0.3.0) library used by
CatalogdMetaProvider can fail due to an InaccessibleObjectException
during reflection and cause the impalad to stuck during startup
indefinitely. This could trigger IMPALA-7168 which affects sync_ddl
queries running on unaffected impalads.

This patch upgrades the version of the ehcache sizeof library so that
the exception could be handled within the ehcache sizeof library after
the upgrade.

Testing:
 - Verified that the patch passes Impala's core tests.

Change-Id: I853264684aa2ba9c3743f9e53bd52fa2752a45a1
Reviewed-on: http://gerrit.cloudera.org:8080/18400
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Quanlong Huang <huangquanlong@gmail.com>
4 weeks agoIMPALA-11239: Fix failure in test_parquet_count_star_optimization
Riza Suminto [Tue, 12 Apr 2022 15:33:28 +0000 (08:33 -0700)] 
IMPALA-11239: Fix failure in test_parquet_count_star_optimization

IMPALA-11123 add assertion to verify NumFileMetadataRead in
parquet-stats-agg.test. In the multiblock test, the number of
NumFileMetadataRead can differ in erasure coding configuration. This
patch removes that assertion in the multiblock test. The rest of the
assertion, including the count results, remains the same.

Testing:
- Pass e2e tests in erasure coding setup.

Change-Id: I6fe3f6e97358b619838b48eddb22192b39d29cc6
Reviewed-on: http://gerrit.cloudera.org:8080/18407
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11023: Raise error when delete file is found in an Iceberg table
Tamas Mate [Tue, 5 Apr 2022 12:52:42 +0000 (14:52 +0200)] 
IMPALA-11023: Raise error when delete file is found in an Iceberg table

Iceberg V2 DeleteFiles are skipped during scans and the whole content of
the DataFiles are returned. This commit adds an extra check to prevent
scanning tables that have delete files to avoid unexpected results till
merge on read is supported. Metadata operations are allowed on tables
with delete files.

Testing:
 - Added e2e test.

Change-Id: I6e9cbf2424b27157883d551f73e728ab4ec6d21e
Reviewed-on: http://gerrit.cloudera.org:8080/18383
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-10930: Bump the Java artifact versions to 4.1.0-SNAPSHOT
Joe McDonnell [Thu, 7 Apr 2022 02:35:09 +0000 (19:35 -0700)] 
IMPALA-10930: Bump the Java artifact versions to 4.1.0-SNAPSHOT

This changes the Maven pom.xml files to use verison
4.1.0-SNAPSHOT rather than 4.0.0-SNAPSHOT. In the
past, these versions were a fixed value, but that
changed with IMPALA-10198. This is a new step that
needs to happen on each release.

Testing:
 - Ran a build

Change-Id: I10a589b4fbc15048199943a0e06d079f57840239
Reviewed-on: http://gerrit.cloudera.org:8080/18390
Reviewed-by: Tamas Mate <tmater@apache.org>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11227: FE OOM in TestParquetBloomFilter.test_fallback_from_dict_if_no_bloom_tb...
Daniel Becker [Wed, 6 Apr 2022 14:12:33 +0000 (16:12 +0200)] 
IMPALA-11227: FE OOM in TestParquetBloomFilter.test_fallback_from_dict_if_no_bloom_tbl_props

The huge values clause of the insert SQL statement in
TestParquetBloomFilter.test_fallback_from_dict_if_no_bloom_tbl_props
could cause an OutOfMemory error in the FE.

We use a SQL statement with a huge values clause (more than 40 000
elements) to insert values into a parquet table in some tests, and the
size of the SQL statement string sometimes causes an OOM error.

After this change, we create these parquet tables with a CTAS from an
existing table, avoiding any long SQL statements.

Change-Id: I923cc9ba4b6829a2f15e93365f2849b89248598b
Reviewed-on: http://gerrit.cloudera.org:8080/18387
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11230: Add test for crash in partitioned Top-N codegen code
Joe McDonnell [Wed, 6 Apr 2022 21:41:18 +0000 (14:41 -0700)] 
IMPALA-11230: Add test for crash in partitioned Top-N codegen code

User workloads hit a crash for certain queries that
use partitioned Top-N operators. The crash occurred
only when codegen is enabled. After investigation,
the crash was due to a nullptr being passed into
TupleRowComparator::Compare(). The issue was fixed
as part of IMPALA-10961.

This adds a test case with a SQL statement that
triggers a crash if IMPALA-10961 is not present.

Change-Id: I6909ef660b01ad3d301273deb8a8c31120445f79
Reviewed-on: http://gerrit.cloudera.org:8080/18389
Reviewed-by: Aman Sinha <amsinha@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11153: Make lock wait time configurable for the users
Zoltan Borok-Nagy [Thu, 3 Mar 2022 20:33:14 +0000 (21:33 +0100)] 
IMPALA-11153: Make lock wait time configurable for the users

Currently Impala is using private static final values for lock
retry/wait:

 // Number of retries to acquire an HMS ACID lock.
 private static final int LOCK_RETRIES = 10;

 // Time interval between retries of acquiring an HMS ACID lock
 private static final int LOCK_RETRY_WAIT_SECONDS = 3;

This patch changes the logic for waiting on locks. It does an
exponential backoff starting from 50 ms up to 30 seconds, and the
users can configure a maximum total wait time for the locks. This
total maximum wait time is 5 minutes (the earlier 30 seconds
was too short in real use cases).

Testing:
 * added e2e tests

Change-Id: I055b76138dd30b2c40eedb48905cb3bade1438fc
Reviewed-on: http://gerrit.cloudera.org:8080/18289
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-10272: LOAD DATA should respect Ranger-HDFS policies
LPL [Thu, 31 Mar 2022 11:36:24 +0000 (19:36 +0800)] 
IMPALA-10272: LOAD DATA should respect Ranger-HDFS policies

When Ranger authorization is enabled, analyzing a LOAD DATA statement
may fail when checking access to the source file if the HDFS permissions
is more restrict than the Ranger policies.

This patch provides a quick fix, when Ranger authz is enabled, we invoke
method hadoop.fs.FileSystem.access(Path path, FsAction mode) to check
the actual access permission first.

Testing:
  - existing tests
  - add FsPermissionCheckerTest.java to fe ut

Change-Id: Ia0acd83e8e237ea6a1d5fe1e9e440db0dd68b09c
Reviewed-on: http://gerrit.cloudera.org:8080/18373
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11220: Bump ORC version to 1.7.0-p8
stiga-huang [Tue, 5 Apr 2022 07:49:40 +0000 (15:49 +0800)] 
IMPALA-11220: Bump ORC version to 1.7.0-p8

This patch bumps ORC version to 1.7.0-p8 to contain the improvement of
ORC-1137.

Test:
 - Ran exhaustive tests.

Change-Id: I1700e8fca0d28dba0df66ee2169a4842e2280603
Reviewed-on: http://gerrit.cloudera.org:8080/18386
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11123: Optimize count(star) for ORC scans
Riza Suminto [Tue, 15 Mar 2022 01:07:05 +0000 (18:07 -0700)] 
IMPALA-11123: Optimize count(star) for ORC scans

This patch provides count(star) optimization for ORC scans, similar to
the work done in IMPALA-5036 for Parquet scans. We use the stripes num
rows statistics when computing the count star instead of materializing
empty rows. The aggregate function changed from a count to a special sum
function initialized to 0.

This count(star) optimization is disabled for the full ACID table
because the scanner might need to read and validate the
'currentTransaction' column in table's special schema.

This patch drops 'parquet' from names related to the count star
optimization. It also improves the count(star) operation in general by
serving the result just from the file's footer stats for both Parquet
and ORC. We unify the optimized count star and zero slot scan functions
into HdfsColumnarScanner.

The following table shows a performance comparison before and after the
patch. primitive_count_star query target tpch10_parquet.lineitem
table (10GB scale TPC-H). Meanwhile, count_star_parq and count_star_orc
query is a modified primitive_count_star query that targets
tpch_parquet.lineitem and tpch_orc_def.lineitem table accordingly.

+-------------------+----------------------+-----------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+-------+
| Workload          | Query                | File Format           | Avg(s) | Base Avg(s) | Delta(Avg) | StdDev(%)  | Base StdDev(%) | Iters | Median Diff(%) | MW Zval | Tval  |
+-------------------+----------------------+-----------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+-------+
| tpch_parquet      | count_star_parq      | parquet / none / none | 0.06   | 0.07        |   -10.45%  |   2.87%    | * 25.51% *     | 9     |   -1.47%       | -1.26   | -1.22 |
| tpch_orc_def      | count_star_orc       | orc / def / none      | 0.06   | 0.08        |   -22.37%  |   6.22%    | * 30.95% *     | 9     |   -1.85%       | -1.16   | -2.14 |
| TARGETED-PERF(10) | primitive_count_star | parquet / none / none | 0.06   | 0.08        | I -30.40%  |   2.68%    | * 29.63% *     | 9     | I -7.20%       | -2.42   | -3.07 |
+-------------------+----------------------+-----------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+-------+

Testing:
- Add PlannerTest.testOrcStatsAgg
- Add TestAggregationQueries::test_orc_count_star_optimization
- Exercise count(star) in TestOrc::test_misaligned_orc_stripes
- Pass core tests

Change-Id: I0fafa1182f97323aeb9ee39dd4e8ecd418fa6091
Reviewed-on: http://gerrit.cloudera.org:8080/18327
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11204: Template implementation for OrcStringColumnReader::ReadValue
stiga-huang [Wed, 30 Mar 2022 02:47:39 +0000 (10:47 +0800)] 
IMPALA-11204: Template implementation for OrcStringColumnReader::ReadValue

There are some checks in OrcStringColumnReader::ReadValue() that we can
determine outside the scope of this method. They should be optimized
since this is a critical method that will be executed for each row (and
for each string column). With these checks, the method is too complex to
be inlined in OrcBatchedReader::ReadValueBatch() by the compiler.

This patch templates OrcStringColumnReader::ReadValue() with two
parameters, one for the target slot type (i.e. STRING/CHAR/VARCHAR),
and the other one for whether the column is dictionary encoded. Also
adds an ALWAYS_INLINE marker to force inlining it.

OrcStringColumnReader::ReadValueBatch() will call a template version of
ReadValue() based on the slot type and the orc batch encoded state.

Ran a single node perf test on TPCH(30) on my dev box using 3 impalad
instances. There are some improvements and no significant regressions:
+----------+--------+-------------+------------+
| Query    | Avg(s) | Base Avg(s) | Delta(Avg) |
+----------+--------+-------------+------------+
| TPCH-Q19 | 5.62   | 6.07        | I -7.41%   |
| TPCH-Q6  | 2.56   | 2.78        | I -7.77%   |
| TPCH-Q4  | 3.85   | 4.25        | I -9.42%   |
| TPCH-Q12 | 4.25   | 4.99        | I -14.78%  |
+----------+--------+-------------+------------+
Base commit: ff21728
File Format: orc/snap/block
Iterations: 30

Change-Id: I5e5f88c28059fb3d3ac1172e6d383d06ee3bedd5
Reviewed-on: http://gerrit.cloudera.org:8080/18366
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11038: Zipping unnest from view
Gabor Kaszab [Thu, 18 Nov 2021 16:38:37 +0000 (17:38 +0100)] 
IMPALA-11038: Zipping unnest from view

IMPALA-10920 introduced zipping unnest functionality for arrays that
are in a table. This patch improves that support further by accepting
inputs from views as well.

Testing:
 - Added planner tests to verify which execution node handles the
   predicates on unnested items.
 - E2E tests for both unnesting syntaxes (select list and from clause)
   to cover when the source of the unnested arrays is not a table but a
   view. Also tested multi-level views and filtering the unnested items
   on different levels.

Change-Id: I68f649dda9e41f257e7f6596193d07b24049f92a
Reviewed-on: http://gerrit.cloudera.org:8080/18094
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Gabor Kaszab <gaborkaszab@cloudera.com>
5 weeks agoIMPALA-10737: Optimize the number of Iceberg API Metadata requests
Tamas Mate [Fri, 25 Mar 2022 09:58:43 +0000 (10:58 +0100)] 
IMPALA-10737: Optimize the number of Iceberg API Metadata requests

Iceberg stores the table metadata next to the data files, when this is
accessed through the Iceberg API a filesystem call is executed (HDFS,
S3, ADLS). These calls were used in various places during query
processing and this patch unifies the Iceberg metadata request in the
CatalogD and ImpalaD:
 - CatalogD loads and caches the org.apache.iceberg.Table object.
 - When ImpalaDs request the Table metadata, the current catalog
   snapshot id is sent over and the ImpalaD loads and caches the
   org.apache.iceberg.Table object throught Iceberg API as well.

This approach (loading the Iceberg table twice) was choosen because
the org.apache.iceberg.Table could not be meaningfully serialized and
deserialized. The result of a serialized Table is a lightweight
SerializableTable object which is in the Iceberg core package.

As a result REFRESH/INVALIDATE METADATA is required to reload any
Iceberg metadata changes and the metadata load time is improved.
This improvement is more significant for smaller queries, where the
metadata request has larger impact on the query execution time.

Additionally, the dependency on the Iceberg core package has been
reduced and the TableMetadata/BaseTable class uses has been replaced
with the Table class from the Iceberg api package in most places.

Testing:
 - Passed Iceberg E2E tests.

Change-Id: I5492e0cdb31602f0276029c2645d14ff5cb2f672
Reviewed-on: http://gerrit.cloudera.org:8080/18353
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11115: Fix hitting DCHECK for brotli and deflate compressions
Csaba Ringhofer [Thu, 17 Feb 2022 16:13:30 +0000 (17:13 +0100)] 
IMPALA-11115: Fix hitting DCHECK for brotli and deflate compressions

The DCHECK was hit when an unsupported compression was included in
enum THdfsCompression but not in COMPRESSION_MAP.
Removed COMPRESSION_MAP as we can get the names from enum
THdfsCompression directly.

In release builds this didn't cause a crash, only a weird error
message ("INVALID" instead of the compression name).

Testing:
- added ee tests that try to insert with brotli and deflate

Change-Id: Ic38294b108ff3c4aa0b49117df95c5a1b8c60a4b
Reviewed-on: http://gerrit.cloudera.org:8080/18242
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11008: fix incorrect to propagate inferred predicates
xqhe [Tue, 15 Feb 2022 04:24:10 +0000 (12:24 +0800)] 
IMPALA-11008: fix incorrect to propagate inferred predicates

It is incorrect to propagate predicates inferred from equi-join
conjuncts into a plan subtree that is on the nullable side of an
outer join if the predicate is not null-filtering for the nullable
side.

For example:
SELECT *
FROM (
  SELECT id IS NOT NULL
    AND col IS NULL AS a
  FROM (
    SELECT A.id, B.col
    FROM A
      LEFT JOIN B ON A.id = B.id
  ) t
) t
WHERE a = 1
Before this patch the inferred predicate '(B.id is not null and
B.col is null) = 1' is evaluated at the scanner of B. This is
incorrect since the predicate '(A.id is not null and B.col is null)
= 1' is not null-filtering for B.
To generate the inferred predicate we substitue the non-outer-join
slots first and use 'isNullableConjunct' to do a more strict check
on the conjunct before the final substitution.

Tests:
  - Add plan tests in predicate-propagation.test
  - Add new query tests to verify the correctness of inferred
    predicates propagation
  - Ran the full set of verifications in Impala Public Jenkins

Change-Id: I9e64230f6d0c2b9ef1560186ceba349a5920ccdf
Reviewed-on: http://gerrit.cloudera.org:8080/18234
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11213: Fixed impala-shell strict hs2 mode for large fetches
Steve Carlin [Wed, 30 Mar 2022 22:55:38 +0000 (15:55 -0700)] 
IMPALA-11213: Fixed impala-shell strict hs2 mode for large fetches

The strict hs2 protocol mode is broken when fetching large results.
The FetchResults.hasMoreRows field is always returned as false.  When
there are no more results, Hive returns an empty batch with no rows.
HIVE-26108 has been filed to support the hasMoreRows field.

Added a framework test that retrieves 1M rows from tpcds. The default
number of rows returned from Hive is 10K so this should be more than
enough to ensure that multiple fetches are done.

Change-Id: Ife436d91e7fe0c30bf020024e20a5d8ad89faa24
Reviewed-on: http://gerrit.cloudera.org:8080/18370
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
6 weeks agoIMPALA-11216: Fix flaky test_describe_history_params
Tamas Mate [Fri, 1 Apr 2022 13:45:27 +0000 (15:45 +0200)] 
IMPALA-11216: Fix flaky test_describe_history_params

The test_describe_history_params was flaky because the client can
receive the timestamps in two formats, with or without nanoseconds.
This commit updates the test to handle both patterns.

Testing:
 - Executed the test locally.

Change-Id: I6aaae9b9fc14dd20390c16f9555d6f43357814a5
Reviewed-on: http://gerrit.cloudera.org:8080/18375
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11039: Fix incorrect page jumping in late materialization of Parquet
stiga-huang [Thu, 31 Mar 2022 09:52:46 +0000 (17:52 +0800)] 
IMPALA-11039: Fix incorrect page jumping in late materialization of Parquet

The current calculation of LastRowIdxInCurrentPage() is incorrect. It
uses the first row index of the next candidate page instead of the next
valid page. The next candidate page could be far away from the current
page. Thus giving a number larger than the current page size. Skipping
rows in the current page could overflow the boundary due to this. This
patch fixes LastRowIdxInCurrentPage() to use the next valid page.

When skip_row_id is set (>0), the current approach of
SkipRowsInternal<false>() expects jumping to a page containing this row
and then skipping rows in that page. However, the expected row might
not be in the candidate pages. When we jump to the next candidate page,
the target row could already be skipped. In this case, we don't need to
skip rows in the current page.

Tests:
 - Add a test on alltypes_empty_pages to reveal the bug.
 - Add more batch_size values in test_page_index.
 - Pass tests/query_test/test_parquet_stats.py locally.

Change-Id: I3a783115ba8faf1a276e51087f3a70f79402c21d
Reviewed-on: http://gerrit.cloudera.org:8080/18372
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-111218: TestIcebergTable.test_table_load_time_for_many_files flaky
Zoltan Borok-Nagy [Fri, 1 Apr 2022 19:04:27 +0000 (21:04 +0200)] 
IMPALA-111218: TestIcebergTable.test_table_load_time_for_many_files flaky

In some test runs test_table_load_time_for_many_files failed because
the time limit (3 seconds) was too short. In the failed tests it was
around 4 seconds to execute the DESCRIBE statement.

This patch increases the time limit to 10 seconds when HDFS is used.
This should be long enough to fix the flakiness, but short enough
to catch pathologically long table loads (the one that was fixed by
IMPALA-11214).

Change-Id: Ic48bb561e97c008c6f4e51fc9d9ec8b3f7cdaf9e
Reviewed-on: http://gerrit.cloudera.org:8080/18376
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11126: impala-shell: Support configurable socket timeout for http
Abhishek Rawat [Mon, 21 Mar 2022 22:20:57 +0000 (15:20 -0700)] 
IMPALA-11126: impala-shell: Support configurable socket timeout for http
client

In 'hs2-http' mode, the socket timeout is None, which could cause
hang like symptoms in case of a problematic remote server.

Added support for configurable socket timeout using the new impala-shell
config option '--http_socket_timeout_s'. If a reasonable timeout is
set, impala-shell client can retry in case of connection issues, when
possible. The default value of '--http_socket_timeout_s' is set to None,
to prevent behavior changes for existing clients.

More details on socket timeout here:
https://docs.python.org/3/library/socket.html#socket-timeouts

Testing:
- Added tests for various timeout values in test_shell_commandline.py
- Ran e2e shell tests.

Change-Id: I29fa4ff96cdcf154c3aac7e43340af60d7d61e94
Reviewed-on: http://gerrit.cloudera.org:8080/18336
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
6 weeks agoIMPALA-11214: Impala reloads Iceberg tables per each data file
Zoltan Borok-Nagy [Thu, 31 Mar 2022 07:59:03 +0000 (09:59 +0200)] 
IMPALA-11214: Impala reloads Iceberg tables per each data file

Due to a bug in IMPALA-11053, Impala reloads the Iceberg table per each
data file. This causes a serious perf regression for table loads.

This patch avoids reloading the Iceberg tables for each data file.

Testing:
 * added exhaustive e2e test

Change-Id: I0ed5a8c46c97aaa873dd1e925eed83d4573cf208
Reviewed-on: http://gerrit.cloudera.org:8080/18371
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11210: Impala can only handle lowercase schema elements of Iceberg table
Zoltan Borok-Nagy [Wed, 30 Mar 2022 14:18:46 +0000 (16:18 +0200)] 
IMPALA-11210: Impala can only handle lowercase schema elements of Iceberg table

When Impala/Hive creates a table they lowercase the schema elements.
When Spark creates an Iceberg table it doesn't lowercase the names
of the columns in the Iceberg metadata. This triggers a precondition
check in Impala which makes such Iceberg tables unloadable.

This patch converts column names to lowercase when converting Iceberg
schemas to Hive/Impala schemas.

Testing:
 * added e2e test

Change-Id: Iffd910f76844fbf34db805dda6c3053c5ad1cf79
Reviewed-on: http://gerrit.cloudera.org:8080/18368
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11181: Improving performance of compaction checking
Yu-Wen Lai [Wed, 16 Mar 2022 03:12:52 +0000 (20:12 -0700)] 
IMPALA-11181: Improving performance of compaction checking

After HIVE-25753, we don't need to explicitly set all partitions' name
to get the latest compaction id. Besides, we can also send the last
compaction id over to HMS so that HMS will send back compaction info
only if there are newer compactions. In this way, we can avoid
unnecessary data transmitted between HMS and Catalogd.

Testing:
existing tests

Change-Id: I32e30ec418ad09bef862e61163539a910c96c44c
Reviewed-on: http://gerrit.cloudera.org:8080/18324
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11196 Fix a ClientCacheTest flaky test
Yida Wu [Sun, 27 Mar 2022 05:46:47 +0000 (22:46 -0700)] 
IMPALA-11196 Fix a ClientCacheTest flaky test

The memory leak detection testcase is flaky, in local environment,
it could fail over 10 times out of 100. The fix changes to use
the ordinary ADD_BE_TEST to replace ADD_UNIFIED_BE_LSAN_TEST,
there could be some elements in the unified test which affect the
process vm size occasionally.

After the fix, the testcase ran 5000 times without a failure, and
can still catch the memory leak issue in IMPALA-11176.

Tests:
Ran Core Tests in DEBUG/RELEASE/ASAN build.
Ran consecutive 5000 times of the testcase and all passed.

Change-Id: I6ee273db4f9b0a518b6438df6982325f5ad1fa0c
Reviewed-on: http://gerrit.cloudera.org:8080/18363
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-10946: Replaced URLDecoder with Hive's unescape
Gergely Fürnstáhl [Mon, 28 Mar 2022 12:46:08 +0000 (14:46 +0200)] 
IMPALA-10946: Replaced URLDecoder with Hive's unescape

Hive is using its own implementation of escaping and unescaping
partition pathes, which is similar to URL decoding, but not the same,
for example it does not escape '+'.

Modified Impala to use the same unescaping algorithm to prevent creating
phantom partitions in HMS.

Testing:

The reproduction in the Jira is fixed, "abc " is no longer created in
case "abc+" partition is recovered. "abc\" still works as intended.

Change-Id: Ie821a0795d99eb9aa95131323917c9a3d0e8e1ec
Reviewed-on: http://gerrit.cloudera.org:8080/18274
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11195 (part 2): Disable SSL session renegotiations in the Thrift server
Zoltan Borok-Nagy [Thu, 24 Mar 2022 18:31:02 +0000 (19:31 +0100)] 
IMPALA-11195 (part 2): Disable SSL session renegotiations in the Thrift server

SSL renegotiation has had a couple of CVEs in the past. This patch
disables TLS ciphers renegotiation for TLSv1.2 and prior protocol
versions in the Impala Thirft server. Renegotiation is not possible in
a TLSv1.3 connection.

This patch disables renegotiations by using a patched version of Thrift.

Change-Id: I497ccf6fcfb397fc961c3422a34128894604d1e4
Reviewed-on: http://gerrit.cloudera.org:8080/18351
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11203: Fix build failure due to missing imports
Tamas Mate [Fri, 25 Mar 2022 17:55:10 +0000 (18:55 +0100)] 
IMPALA-11203: Fix build failure due to missing imports

This commit puts back ExecutorMembershipSnapshot and AnalysisException
imports into the Frontend class to fix the build failure.

Testing:
 - Ran a clean build.

Change-Id: I726748bd39936a1ddc4831c3a1e0489bd6a164f7
Reviewed-on: http://gerrit.cloudera.org:8080/18355
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11195 (part 1): Disable SSL session renegotiations in the web server
Zoltan Borok-Nagy [Wed, 23 Mar 2022 18:28:34 +0000 (19:28 +0100)] 
IMPALA-11195 (part 1): Disable SSL session renegotiations in the web server

SSL renegotiation has had a couple of CVEs in the past. This patch
disables TLS ciphers renegotiation for TLSv1.2 and prior protocol
versions in the Impala web server. Renegotiation is not possible in
a TLSv1.3 connection. Disabling renegotiations on the Thrift servers
require Thrift-side changes, hence this is handled in the
native-toolchain.

This change is based on KUDU-1926.

In case of OpenSSL version 1.1.0h and newer, we are
using SSL_OP_NO_RENEGOTIATION option to disable all renegotiations. In
case of OpenSSL version prior to 1.1.0a, the undocumented flag
SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS is used.

The moot point is the version interval between 1.1.0a and 1.1.0g
(inclusive): the SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS flag is no longer
available from the application side, but SSL_OP_NO_RENEGOTIATION is not
yet present. So, if a server binary has been compiled with OpenSSL in
the specified version range, it's still advertising the renegotiation
option, even if it's run against OpenSSL 1.1.0h or later versions.

Change-Id: I1afbd6dfcad6b8fbc2e82763222996fabba207cf
Reviewed-on: http://gerrit.cloudera.org:8080/18346
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11116: Make DESCRIBE HISTORY parameterized
Tamas Mate [Wed, 23 Mar 2022 08:44:05 +0000 (09:44 +0100)] 
IMPALA-11116: Make DESCRIBE HISTORY parameterized

The numer of snapshots can grow large, because every INSERT can create a
new one. This patch adds inclusive predicates to narrow down the
resultset of the DESCRIBE HISTORY statement, these are:
 - DESCRIBE HISTORY <table> FROM <ts>
 - DESCRIBE HISTORY <table> BETWEEN <ts> AND <ts>

The timestamps can be date time values and intervals as well, such as:
 - '2022-02-04 13:31:09.819'
 - 'now() - interval 2 days'

Testing:
 - Added e2e tests that verifies the result.
 - Added unit tests that checks the analysis.

Change-Id: Ifead0d33f22069005bfd623460f4af1ff197cc0e
Reviewed-on: http://gerrit.cloudera.org:8080/18284
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
7 weeks agoIMPALA-11145: Block reads on JSON table until we support it
pranav.lodha [Tue, 15 Mar 2022 09:11:57 +0000 (14:41 +0530)] 
IMPALA-11145: Block reads on JSON table until we support it

Since, scanning JSON tables leads to a BE crash, it's been blocked at
FE using appropriate error message. An end-to-end test has also been
included to test the blocking and the error message.

Change-Id: Idcebf5891f8db52be442f66a8efb1724d1e545aa
Reviewed-on: http://gerrit.cloudera.org:8080/18323
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11198: Exclude aws-java-sdk-bundle coming from Ranger audit
Joe McDonnell [Thu, 24 Mar 2022 00:30:56 +0000 (17:30 -0700)] 
IMPALA-11198: Exclude aws-java-sdk-bundle coming from Ranger audit

Ranger started pulling in aws-java-sdk-bundle. Impala uses a
stripped down version of this jar (impala-minimal-s3a-aws-sdk)
to save space and we don't need aws-java-sdk-bundle. This adds
an exclusion to ranger-plugins-audit to avoid this dependency.

Testing:
 - Ran core tests

Change-Id: Ia60601e9f21661f62a6c261e547f67a26e0400d0
Reviewed-on: http://gerrit.cloudera.org:8080/18349
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
7 weeks agoIMPALA-11197/IMPALA-11149: Address CVEs in pac4j/xmlsec
Joe McDonnell [Thu, 24 Mar 2022 00:14:46 +0000 (17:14 -0700)] 
IMPALA-11197/IMPALA-11149: Address CVEs in pac4j/xmlsec

This upgrades pac4j and several of its dependencies
(including xmlsec) to address CVEs in those components.
Specifically:
 - pac4j 4.5.5 addresses CVE-2021-44878
 - xmlsec 2.2.3 addresses CVE-2021-40690
 - bcprov 1.68 addresses CVE-2020-15522

This also upgrade springframework to 5.2.9.RELEASE to
match the version for pac4j 4.5.5.

Testing:
 - Ran core job

Change-Id: I8421d867dd0fce8eeaa6bc13a511ca3e8dd05723
Reviewed-on: http://gerrit.cloudera.org:8080/18348
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
7 weeks agoIMPALA-11196 Fix ClientCacheTest ASAN and TSAN build failure
Yida Wu [Tue, 22 Mar 2022 03:36:47 +0000 (20:36 -0700)] 
IMPALA-11196 Fix ClientCacheTest ASAN and TSAN build failure

The testcase succeeds in DEBUG and RELEASE, but fails in ASAN and
TSAN build.

In the testcase's logic, it monitors whether there is a change
of the process vm size or not after several new and deletion of
objects in the system, because ASAN has replaced the alloc/free
interface, it may not guarantee the memory must be released to
the system immediately in ASAN. Similar case in TSAN.

The fix disables the testcase running in ASAN and TSAN, and the
running of this testcase in the DEBUG and RELEASE builds should
be enough for the verification of the memory leak problem in
IMPALA-11176.

Tests:
Reran testcase in ASAN and TSAN without errors.

Change-Id: Id40a2ae184bba670a3538dedfb8ff25d24dc9b6c
Reviewed-on: http://gerrit.cloudera.org:8080/18342
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11192: Batch uploading files in test_scanner_fuzz.py
stiga-huang [Thu, 17 Mar 2022 02:44:58 +0000 (10:44 +0800)] 
IMPALA-11192: Batch uploading files in test_scanner_fuzz.py

test_scanner_fuzz.py runs much slower on ORC than other formats. The
majority of the time is spent in uploading local files one by one to the
hdfs table folder.

The local files are copied from hdfs and randomly corrupted by the test.
The directory layout remains the same as the table folder. There are no
staging dirs that we should skip. So we can upload the whole local
folder at once, which saves a lot of the test time.

Tested locally and verified profiles of the succeeded queries. They all
scan the expected number of rows.

Change-Id: I504e160b84b3cc01d3be0b4e242d3c372692d181
Reviewed-on: http://gerrit.cloudera.org:8080/18329
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11119: [DOCS] document BYTES function
Shajini Thayasingh [Thu, 24 Feb 2022 19:44:49 +0000 (11:44 -0800)] 
IMPALA-11119: [DOCS] document BYTES function

removed white spaces

Change-Id: Iffbe2979f2912cf014866a3c47d88601e04f6e75
Reviewed-on: http://gerrit.cloudera.org:8080/18272
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
7 weeks agoIMPALA-10992 Planner changes for estimate peak memory
Qifan Chen [Wed, 5 Jan 2022 22:20:00 +0000 (17:20 -0500)] 
IMPALA-10992 Planner changes for estimate peak memory

This patch provides replan support for multiple executor group sets.
Each executor group set is associated with a distinct number of nodes
and a threshold for estimated memory per host in bytes that can be
denoted as [<group_name_prefix>:<#nodes>, <threshold>].

In the patch, a query of type EXPLAIN, QUERY or DML can be compiled
more than once. In each attempt, per host memory is estimated and
compared with the threshold of an executor group set. If the estimated
memory is no more than the threshold, the iteration process terminates
and the final plan is determined. The executor group set with the
threshold is selected to run the query.

A new query option 'enable_replan', default to 1 (enabled), is added.
It can be set to 0 to disable this patch and to generate the distributed
plan for the default executor group.

To avoid long compilation time, the following enhancement is enabled.
Note 1) can be disabled when relevant meta-data change is
detected.

 1. Authorization is performed only for the 1st compilation;
 2. openTransaction() is called for transactional queries in 1st
    compilation and the saved transactional info is used in
    subsequent compilations. Similar logic is applied to Kudu
    transactional queries.

To facilitate testing, the patch imposes an artificial two executor
group setup in FE as follows.

 1. [regular:<#nodes>, 64MB]
 2. [large:<#nodes>, 8PB]

This setup is enabled when a new query option 'test_replan' is set
to 1 in backend tests, or RuntimeEnv.INSTANCE.isTestEnv() is true as
in most frontend tests. This query option is set to 0 by default.

Compilation time increases when a query is compiled in several
iterations, as shown below for several TPCDs queries. The increase
is mostly due to redundant work in either single node plan creation
or recomputing value transfer graph phase. For small queries, the
increase can be avoided if they can be compiled in single iteration
by properly setting the smallest threshold among all executor group
sets. For example, for the set of queries listed below, the smallest
threshold can be set to 320MB to catch both q15 and q21 in one
compilation.

                              Compilation time (ms)
Queries  Estimated Memory   2-iterations  1-iteration  Percentage of
                                                         increase
 q1         408MB              60.14         25.75       133.56%
 q11    1.37GB             261.00        109.61       138.11%
 q10a     519MB             139.24         54.52       155.39%
 q13     339MB             143.82         60.08       139.38%
 q14a    3.56GB             762.68        312.92       143.73%
 q14b    2.20GB             522.01        245.13       112.95%
 q15     314MB               9.73          4.28       127.33%
 q21     275MB              16.00          8.18        95.59%
 q23a    1.50GB             461.69        231.78        99.19%
 q23b    1.34GB             461.31        219.61       110.05%
 q4    2.60GB             218.05        105.07       107.52%
 q67    5.16GB             694.59        334.24       101.82%

Testing:
 1. Almost all FE and BE tests are now run in the artificial two
    executor setup except a few where a specific cluster configuration
    is desirable;
 2. Ran core tests successfully;
 3. Added a new observability test and a new query assignment test;
 4. Disabled concurrent insert test (test_concurrent_inserts) and
    failing inserts (test_failing_inserts) test in local catalog mode
    due to flakiness. Reported both in IMPALA-11189 and IMPALA-11191.

Change-Id: I75cf17290be2c64fd4b732a5505bdac31869712a
Reviewed-on: http://gerrit.cloudera.org:8080/18178
Reviewed-by: Qifan Chen <qchen@cloudera.com>
Tested-by: Qifan Chen <qchen@cloudera.com>
7 weeks agoIMPALA-11110: Switch debug builds to use -Og
Joe McDonnell [Tue, 24 Nov 2020 18:42:59 +0000 (10:42 -0800)] 
IMPALA-11110: Switch debug builds to use -Og

GCC's -Og applies optimizations that are compatible with
being debuggable. It is similar to -O1 and results
in a modest speed-up. This modifies the default debug
build to use -Og, so it is now more akin to a fastdebug
mode.

Even though -Og is intended to preserve debuggability,
optimization always impacts debuggability and -Og is
no exception. To enable the old behavior, this adds
a DEBUG_NOOPT build mode that retains the old
non-optimized behavior. Using the -debug_noopt flag
with buildall.sh enables this behavior.

Change-Id: Ie06c149c8181c90572b8668bd01dfd26c0a5971e
Reviewed-on: http://gerrit.cloudera.org:8080/18200
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Laszlo Gaal (Cloudera) <laszlo.gaal@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
8 weeks agoIMPALA-11193: Fix assertion failure of ClientCacheTest.MemLeak in CentOS
Yida Wu [Thu, 17 Mar 2022 19:40:13 +0000 (12:40 -0700)] 
IMPALA-11193: Fix assertion failure of ClientCacheTest.MemLeak in CentOS

The assertion failure happens in CentOS because the testcase
reads the virtual memory usage of the current thread from
/proc/thread-self. However, CentOS may not contain this symlink,
therefore the testcase is not able to locate the path and
then triggers the assertion.

This fix changes the path to /proc/self, which is a symlink to the
current process and available in CentOS. Because the testcase
doesn't involve multithreading, it is okay to replace the
/proc/thread-self by /proc/self to detect the memory usage.

Tests:
Passed core tests in CentOS.

Change-Id: I045e91aa9b7d8e1b731e3261f0f18cc932c16f43
Reviewed-on: http://gerrit.cloudera.org:8080/18332
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11185: Reuse orc row batch in the scanner life-cycle
stiga-huang [Wed, 16 Mar 2022 05:12:13 +0000 (13:12 +0800)] 
IMPALA-11185: Reuse orc row batch in the scanner life-cycle

In HdfsOrcScanner::AssembleRows(), we always re-create a
orc::ColumnVectorBatch. The ideal pattern is reusing the batch and only
destroying it when the scanner is closed.

This save half of the scanner time in some TPCH queries. See the flame
graph in JIRA description.

Tests:
 - Run CORE test

Change-Id: I03887ed94af2ff03d67cd00c79375c734a75af62
Reviewed-on: http://gerrit.cloudera.org:8080/18325
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11182: catch exceptions of orc::RowReader::createRowBatch
stiga-huang [Tue, 15 Mar 2022 03:23:03 +0000 (11:23 +0800)] 
IMPALA-11182: catch exceptions of orc::RowReader::createRowBatch

The ORC lib uses exceptions to report failures. We are missing
exception handling in invoking orc::RowReader::createRowBatch which
requires memory allocation and could raise exceptions when it fails.
This patch simply adds a catch clause for it.

To simplify the codes, a macro is added for catching the ORC exceptions
with given message format.

Tests:
 - run test_scanner_fuzz.py 20 times

Change-Id: I76e36a238220e7bed1cbbdcb3fc7d35394bfa023
Reviewed-on: http://gerrit.cloudera.org:8080/18321
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11184: Use ProgramInvocationShortName for log glob pattern
Riza Suminto [Wed, 16 Mar 2022 21:13:26 +0000 (14:13 -0700)] 
IMPALA-11184: Use ProgramInvocationShortName for log glob pattern

Impala uses FLAGS_log_filename as log symlink name and as part of the
glob pattern during log rotation. The user will not set this flag in
most cases, and it will default to google::ProgramInvocationShortName().
But if the user sets a custom value to this flag, the glob pattern will
mistakenly target the symlink instead of the actual log files. This
leads to a wrong behavior of DeleteOldLogs() and
GetLatestCanonicalLogPath().

This patch replace FLAGS_log_filename with
google::ProgramInvocationShortName() in glob pattern.

Testing:
- Pass simple-logger-test
- Pass exhaustive test_breakpad.py::TestLogging

Change-Id: I6c71bdb67f70c571d18fb8630d4a816ab75686fa
Reviewed-on: http://gerrit.cloudera.org:8080/18326
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11176: Fix Memory leak in ClientCacheHelper
Yida Wu [Fri, 11 Mar 2022 06:45:09 +0000 (22:45 -0800)] 
IMPALA-11176: Fix Memory leak in ClientCacheHelper

The patch fixes a memory leak issue in client cache.

The memory leak happens because a shared pointer of the
base class "ThriftClientImpl" is created from a derived class
"ThriftClient" while the base class's destructor is non-virtual.
As a result, the shared pointer can't locate the correct
destructor, which should be the derived one, and leads to
memory leaks.

The way to fix in the patch is to make the destructor of
"ThriftClientImpl" virtual. Added testcase ClientCacheTest.

Tests:
Ran exhaustive tests.

Change-Id: I2bf3d7e7d897c89eb4538df5382ce3c590055b71
Reviewed-on: http://gerrit.cloudera.org:8080/18314
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11178: Bump ORC to 1.7.0-p7 for ORC-1122
stiga-huang [Fri, 4 Mar 2022 06:12:23 +0000 (14:12 +0800)] 
IMPALA-11178: Bump ORC to 1.7.0-p7 for ORC-1122

This patch bumps ORC to 1.7.0-p7 to have the improvement of ORC-1122
which boost the reader when the column contains nulls.

Change-Id: I59ca7c54c59725cd0134adda7d051e2644d92469
Reviewed-on: http://gerrit.cloudera.org:8080/18317
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoBump up CDP_BUILD_NUMBER to 23144489
Yu-Wen Lai [Mon, 7 Mar 2022 20:50:04 +0000 (12:50 -0800)] 
Bump up CDP_BUILD_NUMBER to 23144489

This patch is to include HIVE-25753, which is needed to improve the
performance of retrieving the latest committed compaction for a table.

Change-Id: Ifd4ae0cba48217483a40a51f97156fabfb00cf27
Reviewed-on: http://gerrit.cloudera.org:8080/18296
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Aman Sinha <amsinha@cloudera.com>
2 months agoIMPALA-11177: Remove DCHECK in useAsyncIoForStream
Riza Suminto [Fri, 11 Mar 2022 17:48:22 +0000 (09:48 -0800)] 
IMPALA-11177: Remove DCHECK in useAsyncIoForStream

TestScannersFuzzing::test_fuzz_alltypes tests how impala handles
corruption in data files. IMPALA-6636 adds support for ORC async IO
where it put DCHECK within method useAsyncIoForStream to verify correct
orc::StreamKind. If this part of the ORC test file is corrupted, impalad
will crash in this DCHECK. We should remove this DCHECK and let ORC lib
deals with the corrupted orc::StreamKind itself.

Testing:
- Run and pass TestScannersFuzzing::test_fuzz_alltypes

Change-Id: I70b21badf39869091feff202e7a08a8460abf9db
Reviewed-on: http://gerrit.cloudera.org:8080/18311
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11175: Iceberg table cannot be loaded when partition value is NULL
Zoltan Borok-Nagy [Thu, 10 Mar 2022 19:53:17 +0000 (20:53 +0100)] 
IMPALA-11175: Iceberg table cannot be loaded when partition value is NULL

When Impala created the metadata objects about the Iceberg data files it
tried to convert the partition values to strings. But the partition
values can be NULLs as well. The code didn't expect this, so we got a
NullPointerException.

With this patch we pass the table's null partition key value in case
of NULLs.

Testing:
 * added e2e tests

Change-Id: I88c4f7a2c2db4f6390c8ee5c08baddc96b04602e
Reviewed-on: http://gerrit.cloudera.org:8080/18307
Reviewed-by: Tamas Mate <tmater@apache.org>
Reviewed-by: Gabor Kaszab <gaborkaszab@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11156: TestHmsIntegration.test_desc_json_table failed in exhaustive build
pranav.lodha [Wed, 9 Mar 2022 12:17:17 +0000 (17:47 +0530)] 
IMPALA-11156: TestHmsIntegration.test_desc_json_table failed in exhaustive build

The test was getting skipped as it was not in exhaustive strategy,
to fix that its been moved to TestHmsIntegrationSanity(ImpalaTestSuite)
class. Now there are two tests, test_desc_json_tbl and
test_desc_json_tbl_hive to check whether JSON tables created in
impala can be described in hive and vice versa.
Change-Id: I4ddd983aeb82817eb355ca94dcf4a6875986f8e1
Reviewed-on: http://gerrit.cloudera.org:8080/18299
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoRevert "IMPALA-10737: Optimize the number of Iceberg API Metadata requests"
Tamas Mate [Thu, 10 Mar 2022 08:46:49 +0000 (09:46 +0100)] 
Revert "IMPALA-10737: Optimize the number of Iceberg API Metadata requests"

This reverts commit cd10acdbb15c74eae21fa630bcb174104283560a.

This commit has been reverted, because it blocks upgrading the Iceberg
version to 0.13.

In the newer Iceberg version the BaseTable serialization has been
changed, it serializes the BaseTable to a SerializableTable sibiling
class. This is a lightweigth Table class which does not have the
necessary metadata that could be cached and reused by the ImpalaDs.
SerializableTable utilization has to be further considered.

Change-Id: I21e65cb3ab38d9e683223fb100d7ced90caa6edd
Reviewed-on: http://gerrit.cloudera.org:8080/18305
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11154: Idle Kudu daemons consume too much CPU
Zoltan Borok-Nagy [Mon, 28 Feb 2022 11:38:18 +0000 (12:38 +0100)] 
IMPALA-11154: Idle Kudu daemons consume too much CPU

Due to KUDU-1973 kudu-tservers produce high CPU consumption (see also
KUDU-3134) when there is a high number of table replicas. This means
that in the Impala dev environment the CPU consumption can be around
15-20% per kudu-tserver (there are 3 kudu-tservers) when all the Kudu
tables are loaded. Setting the value to 3 seconds lowers CPU usage to
~5% per kudu-terver.

Testing:
 * ran exhaustive tests

Change-Id: Ieb4de56540f5a7dc860bf6e27d9a5c0e4f4b3d26
Reviewed-on: http://gerrit.cloudera.org:8080/18290
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-10999 Flakiness in TestAsyncLoadData.test_async_load
Qifan Chen [Wed, 23 Feb 2022 22:23:55 +0000 (17:23 -0500)] 
IMPALA-10999 Flakiness in TestAsyncLoadData.test_async_load

This patch addresses the flakness by allowing RUNNING state to be a
legit exec state returned from execute_query_async_using_client() in
python. This call submits the load query to Impala backend.

The corresponding Impala backend code for the beewax protocol is
ImpalaServer::query() which utilizes a wait thread executing
ClientRequestState::Wait() to set the exec state from RUNNING to
FINISH. Sometime, when this wait thread does not run fast to do so,
the returned state from the main thread is RUNNING.

The fix is purely a modification to the test itself.

Testing:
  1. ran core test successfully

Change-Id: Ic2ac954b0494b7413ce0ec405718fcc354dba9e0
Reviewed-on: http://gerrit.cloudera.org:8080/18268
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11053: Impala should be able to read migrated partitioned Iceberg tables
Zoltan Borok-Nagy [Mon, 31 Jan 2022 16:16:19 +0000 (17:16 +0100)] 
IMPALA-11053: Impala should be able to read migrated partitioned Iceberg tables

When Hive (and probably other engines as well) converts a legacy Hive
table to Iceberg it doesn't rewrite the data files. It means that the
data files don't have write ids neither partition column data. Currently
Impala expects the partition columns to be present in the data files,
so it is not able to read converted partitioned tables.

With this patch Impala loads partition values from the Iceberg metadata.
The extra metadata information is attached to the file descriptor
objects and propageted to the scanners. This metadata contains the
Iceberg data file format (later it could be used to handle mixed-format
tables), and partition data.

We use the partition data in the HdfsScanner to create the template
tuple that contains the partition values of identity-partitioned
columns. This is not only true to migrated tables, but all Iceberg
tables with identity partitions, which means we also save some IO
and CPU time for such columns. The partition information could also
be used for Dynamic Partition Pruning later.

We use the (human-readable) string representation of the partition data
when storing them in the flat buffers. This helps debugging, also
it provides the needed flexibility when the partition columns
evolve (e.g. INT -> BIGINT, DECIMAL(4,2) -> DECIMAL(6,2)).

Testing
 * e2e test for all data types that can be used to partition a table
 * e2e test for migrated partitioned table + schema evolution (without
   renaming columns)
 * e2e for table where all columns are used as identity-partitions

Change-Id: Iac11a02de709d43532056f71359c49d20c1be2b8
Reviewed-on: http://gerrit.cloudera.org:8080/18240
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11133 (Addendum): Encode a string in utf8 before printing it
Fang-Yu Rao [Wed, 23 Feb 2022 23:53:39 +0000 (15:53 -0800)] 
IMPALA-11133 (Addendum): Encode a string in utf8 before printing it

In the first part of this patch, we decoded a string with 'utf8' in
order to print it (on the command line) since the author field of a
commit could contain non-ASCII characters.

However, we did not take into consideration that in some scenarios,
we would like to redirect the output to another file. If this is the
case, then we may encounter a UnicodeEncodeError due to
sys.stdout.encoding being None. To resolve the issue, we encode the
formatted string with 'utf8'.

Testing:
 - Manually verified that we won't get a UnicodeEncodeError if we
   redirect the output to another file.

Change-Id: Iad9b1fb0a523e219bc9f40a57ff7335808be283f
Reviewed-on: http://gerrit.cloudera.org:8080/18270
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Quanlong Huang <huangquanlong@gmail.com>
2 months agoIMPALA-11152: Remove dependence on symlink when rotating logs
Riza Suminto [Wed, 2 Mar 2022 07:13:05 +0000 (23:13 -0800)] 
IMPALA-11152: Remove dependence on symlink when rotating logs

IMPALA-5256 implements log rotation by following the glog's symlink and
checking the size of the pointed file. While this has been robust most
of the time, there can be a rare situation where the symlink is missing.
Glog itself does not guarantee that the symlink creation will always be
successful. It won't retry symlink creation until the next rotation by
glog. The side effect of this issue is that impala::CheckLogSize() will
spam ERROR log every second for not finding the symlink.

This patch removes the dependence on the glog symlink for this log
rotation. We now directly specify the base file name of the targetted
log kind and pick the latest log path. This patch also makes
impala::CheckLogSize() less chatty by printing an error message for
every FLAGS_logbufsecs (default is 30s).

Testing:
- Add test_breakpad.py::TestLogging::test_excessive_cerr_no_symlink.
- Pass test_breakpad.py in exhaustive exploration.

Change-Id: I30509e98038dbf9ca293144089f6ee92ce186a97
Reviewed-on: http://gerrit.cloudera.org:8080/18286
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-9433: Improved caching of HdfsFileHandles
Gergely Fürnstáhl [Wed, 2 Feb 2022 14:23:30 +0000 (15:23 +0100)] 
IMPALA-9433: Improved caching of HdfsFileHandles

Seperated LRU caching functionality to a templated LruMultiCache class.

Replaced std::multimap with std::unordered_map with std::list for O(1)
lookups and less memory overhead, as it stores each key one time. Added
boost::intrusive::list to handle LRU relations with less overhead.
Added O(1) release method, instead of O(n) with minimal memory overhead.
Implemented RAII Accessor to remove the responsibility of releasing
the objects from the user.

Wrapped cache accessor and related DiskIOManager metrics to a
FileHandleCache::Accessor. Removed Release*() call trees from
FileHandleCache and DiskIOManager, removed scoped exit from
HdfsFileReader as they are handled automatically.

Testing:

Implemented extensive unit testing of the class, including forced
rehashes, collisions, capacity overshoot, explicit/automatic release
and destroy.

Ran tests/custom_cluster/test_hdfs_fd_caching.py to verify
FileHandleCache::Accessor behaviour through metrics.

Ran bin/single_node_perf_run.py with TPCH and TPC-DS on parquet tables,
no visible change in performance:
TPCH   scale=10 iterations=100: Delta(Avg)=-0.67% Delta(GeoMean)=-0.49%
TPC-DS scale=10 iterations= 50: Delta(Avg)=-0.02% Delta(GeoMean)= 0.00%

Tested some manual queries on functional_parquet.widetable_1000_cols
with 64 threads but did not notice significant changes in scan times.

Change-Id: I6b5c5e9e2b5db2847ab88c41f667c9ca1b03d51a
Reviewed-on: http://gerrit.cloudera.org:8080/18191
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-10948: Default scale and DecimalType
Gergely Fürnstáhl [Fri, 11 Feb 2022 13:14:12 +0000 (14:14 +0100)] 
IMPALA-10948: Default scale and DecimalType

Added default 0 for scale if it is not set to comply with parquet spec.

Wrapped reading scale and precision in a function to support reading
LogicalType.DecimalType if it is set, falling back to old ones if it is
not, for backward compatibility.

Regenerated bad_parquet_decimals table with filled DecimalType, moved
missing scale test, as it is no longer a bad table.

Added no_scale.parquet table to test reading table without set scale.

Checked it with parquet-tools:
message schema {
  optional fixed_len_byte_array(2) d1 (DECIMAL(4,0));
}

Change-Id: I003220b6e2ef39d25d1c33df62c8432803fdc6eb
Reviewed-on: http://gerrit.cloudera.org:8080/18224
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-10737: Optimize the number of Iceberg API Metadata requests
Tamas Mate [Fri, 11 Feb 2022 14:40:53 +0000 (15:40 +0100)] 
IMPALA-10737: Optimize the number of Iceberg API Metadata requests

Iceberg stores the table metadata next to the data files, when this is
accessed through the Iceberg API a filesystem call is executed (HDFS,
S3, ADLS). These calls were used in various places during query
processing and this patch unifies the Iceberg metadata request in the
CatalogD similar to other metadata requests:
 - CatalogD loads and caches the org.apache.iceberg.BaseTable object.
 - ImpalaDs requests the org.apache.iceberg.BaseTable from the
CatalogD and caches it as well.

As a result REFRESH/INVALIDATE METADATA is required to reload any
Iceberg metadata changes and the metadata load time is improved.
This improvement is more significant for smaller queries, where the
metadata request has larger impact on the query execution time.

Testing:
 - Passed Iceberg E2E tests.

Change-Id: I9e62a1fb9753ea1b022c7763047d9ccfd1d27d62
Reviewed-on: http://gerrit.cloudera.org:8080/18226
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Zoltan Borok-Nagy <boroknagyz@cloudera.com>
2 months agoIMPALA-10898: Add runtime IN-list filters for ORC tables
stiga-huang [Wed, 1 Dec 2021 07:23:03 +0000 (15:23 +0800)] 
IMPALA-10898: Add runtime IN-list filters for ORC tables

ORC files have optional bloom filter indexes for each column. Since
ORC-1.7.0, the C++ reader supports pushing down predicates to skip
unreleated RowGroups. The pushed down predicates will be evaludated on
file indexes (i.e. statistics and bloom filter indexes). Note that only
EQUALS and IN-list predicates can leverage bloom filter indexes.

Currently Impala has two kinds of runtime filters: bloom filter and
min-max filter. Unfortunately they can't be converted into EQUALS or
IN-list predicates. So they can't leverage the file level bloom filter
indexes.

This patch adds runtime IN-list filters for this purpose. Currently they
are generated for the build side of a broadcast join. They will only be
applied on ORC tables and be pushed down to the ORC reader(i.e. ORC
lib). To avoid exploding the IN-list, if # of distinct values of the
build side exceeds a threshold (default to 1024), we set the filter to
ALWAYS_TRUE and clear its entry. The threshold can be configured by a
new query option, RUNTIME_IN_LIST_FILTER_ENTRY_LIMIT.

Evaluating runtime IN-list filters is much slower than evaluating
runtime bloom filters due to the current simple implementation (i.e.
std::unorder_set) and the lack of codegen. So we disable it at row
level.

For visibility, this patch addes two counters in the HdfsScanNode:
 - NumPushedDownPredicates
 - NumPushedDownRuntimeFilters
They reflect the predicates and runtime filters that are pushed down to
the ORC reader.

Currently, runtime IN-list filters are disabled by default. This patch
extends the query option, ENABLED_RUNTIME_FILTER_TYPES, to support a
comma separated list of filter types. It defaults to be "BLOOM,MIN_MAX".
Add "IN_LIST" in it to enable runtime IN-list filters.

Ran perf tests on a 3 instances cluster on my desktop using TPC-DS with
scale factor 20. It shows significant improvements in some queries:

+-----------+-------------+--------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+--------+
| Workload  | Query       | File Format        | Avg(s) | Base Avg(s) | Delta(Avg) | StdDev(%)  | Base StdDev(%) | Iters | Median Diff(%) | MW Zval | Tval   |
+-----------+-------------+--------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+--------+
| TPCDS(20) | TPCDS-Q67A  | orc / snap / block | 35.07  | 44.01       | I -20.32%  |   0.38%    |   1.38%        | 10    | I -25.69%      | -3.58   | -45.33 |
| TPCDS(20) | TPCDS-Q37   | orc / snap / block | 1.08   | 1.45        | I -25.23%  |   7.14%    |   3.09%        | 10    | I -34.09%      | -3.58   | -12.94 |
| TPCDS(20) | TPCDS-Q70A  | orc / snap / block | 6.30   | 8.60        | I -26.81%  |   5.24%    |   4.21%        | 10    | I -36.67%      | -3.58   | -14.88 |
| TPCDS(20) | TPCDS-Q16   | orc / snap / block | 1.33   | 1.85        | I -28.28%  |   4.98%    |   5.92%        | 10    | I -39.38%      | -3.58   | -12.93 |
| TPCDS(20) | TPCDS-Q18A  | orc / snap / block | 5.70   | 8.06        | I -29.25%  |   3.00%    |   4.12%        | 10    | I -40.30%      | -3.58   | -19.95 |
| TPCDS(20) | TPCDS-Q22A  | orc / snap / block | 2.01   | 2.97        | I -32.21%  |   6.12%    |   5.94%        | 10    | I -47.68%      | -3.58   | -14.05 |
| TPCDS(20) | TPCDS-Q77A  | orc / snap / block | 8.49   | 12.44       | I -31.75%  |   6.44%    |   3.96%        | 10    | I -49.71%      | -3.58   | -16.97 |
| TPCDS(20) | TPCDS-Q75   | orc / snap / block | 7.76   | 12.27       | I -36.76%  |   5.01%    |   3.87%        | 10    | I -59.56%      | -3.58   | -23.26 |
| TPCDS(20) | TPCDS-Q21   | orc / snap / block | 0.71   | 1.27        | I -44.26%  |   4.56%    |   4.24%        | 10    | I -77.31%      | -3.58   | -28.31 |
| TPCDS(20) | TPCDS-Q80A  | orc / snap / block | 9.24   | 20.42       | I -54.77%  |   4.03%    |   3.82%        | 10    | I -123.12%     | -3.58   | -40.90 |
| TPCDS(20) | TPCDS-Q39-1 | orc / snap / block | 1.07   | 2.26        | I -52.74%  | * 23.83% * |   2.60%        | 10    | I -149.68%     | -3.58   | -14.43 |
| TPCDS(20) | TPCDS-Q39-2 | orc / snap / block | 1.00   | 2.33        | I -56.95%  | * 19.53% * |   2.07%        | 10    | I -151.89%     | -3.58   | -20.81 |
+-----------+-------------+--------------------+--------+-------------+------------+------------+----------------+-------+----------------+---------+--------+
"Base Avg" is the avg of the original time. "Avg" is the current time.

However, we also see some regressions due to the suboptimal
implementation. The follow-up JIRAs will focus on improvements:
 - IMPALA-11140: Codegen InListFilter::Insert() and InListFilter::Find()
 - IMPALA-11141: Use exact data types in IN-list filters instead of
   casting data to a set of int64_t or a set of string.
 - IMPALA-11142: Consider IN-list filters in partitioned joins.

Tests:
 - Test IN-list filter on string, date and all integer types
 - Test IN-list filter with NULL
 - Test IN-list filter on complex exprs targets

Change-Id: I25080628233799aa0b6be18d5a832f1385414501
Reviewed-on: http://gerrit.cloudera.org:8080/18141
Reviewed-by: Qifan Chen <qchen@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11120: Fix codec not set in generating ORC tables
stiga-huang [Mon, 14 Feb 2022 03:07:12 +0000 (11:07 +0800)] 
IMPALA-11120: Fix codec not set in generating ORC tables

We use 'mapred.output.compression.codec' to set the compression codec in
generating test files by Hive. However, it doesn't affect ORC files.
Instead, we need to set 'orc.compress' in tblproperties for each ORC
tables. The default value of 'orc.compress' is ZLIB which corresponds to
our 'def' codec. We only need to set it for non-def codecs.

This patch also fixes a bug in build_compression_codec_statement() that
would raise KeyError when loading lz4 non-avro tables.

Tests
 - Loaded tpch data in orc/none/none, orc/def/block, orc/snap/block,
   orc/lz4/block and verified there compression codecs.

Change-Id: I02bd5d9400864145133ff019a3d076a6cab36fcc
Reviewed-on: http://gerrit.cloudera.org:8080/18228
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-10049: Include RPC call_id in slow RPC logs
Riza Suminto [Thu, 17 Feb 2022 19:36:22 +0000 (11:36 -0800)] 
IMPALA-10049: Include RPC call_id in slow RPC logs

KRPC log slow RPC trace in the receiver side. The trace log has the
call_id info that matches with the sender. However, our slow RPC logging
in the sender side does not log this call_id. It is hard to associate
the slow RPC logs between sender and receiver.

With the recent KRPC rebase in IMPALA-10931, we can now log the call_id
on the sender side.

Testing:
I tested this with a low threshold and delays added (the same as we did
in IMPALA-9128):

  start-impala-cluster.py \
      --impalad_args=--impala_slow_rpc_threshold_ms=1 \
      --impalad_args=--debug_actions=END_DATA_STREAM_DELAY:JITTER@3000@1.0

The following is how the logs look like on the sender and receiver sides:

impalad_node1.INFO (sender):
I0217 10:29:36.278754  6606 krpc-data-stream-sender.cc:394] Slow TransmitData RPC (request call id 414) to 127.0.0.1:27002 (fragment_instance_id=d8453c2785c38df4:3473e28b00000041): took 343.279ms. Receiver time: 342.780ms Network time: 498.405us

impalad_node2.INFO (receiver):
I0217 10:29:36.278379  6775 rpcz_store.cc:269] Call impala.DataStreamService.TransmitData from 127.0.0.1:39702 (request call id 414) took 342ms. Trace:
I0217 10:29:36.278479  6775 rpcz_store.cc:270] 0217 10:29:35.935586 (+     0us) impala-service-pool.cc:179] Inserting onto call queue
0217 10:29:36.277730 (+342144us) impala-service-pool.cc:278] Handling call
0217 10:29:36.277859 (+   129us) krpc-data-stream-recvr.cc:397] Deserializing batch
0217 10:29:36.278330 (+   471us) krpc-data-stream-recvr.cc:424] Enqueuing deserialized batch
0217 10:29:36.278369 (+    39us) inbound_call.cc:171] Queueing success response
Metrics: {}

Change-Id: I7fb5746fa0be575745a8e168405d43115c425389
Reviewed-on: http://gerrit.cloudera.org:8080/18243
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11112: Impala can't resolve json tables created by Hive
pranav.lodha [Tue, 22 Feb 2022 07:02:05 +0000 (12:32 +0530)] 
IMPALA-11112: Impala can't resolve json tables created by Hive

Impala was using wrong json serde string which was causing the
subsequent errors. The error got resolved on correcting the json
serde string. Now impala can resolve json tables created by hive
and also hive can resolve json tables created in impala.
End-to-end tests are also included in
tests/metadata/test_hms_integration.py.

Change-Id: I9cac55b58dca88d900db3256ceaa25c17d7864d5
Reviewed-on: http://gerrit.cloudera.org:8080/18263
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-10871: Add MetastoreShim to support Apache Hive 3.1.2
Fucun Chu [Thu, 19 Aug 2021 03:23:30 +0000 (11:23 +0800)] 
IMPALA-10871: Add MetastoreShim to support Apache Hive 3.1.2

Like IMPALA-8369, this patch adds a compatibility shim in fe so that
Impala can interoperate with Hive 3.1.2. we need adds a new
Metastoreshim class under compat-apache-hive-3 directory. These shim
classes implement method which are different in cdp-hive-3 vs
apache-hive-3 and are used by front end code. At the build time, based
on the environment variable IMPALA_HIVE_DIST_TYPE one of the two shims
is added to as source using the fe/pom.xml build plugin.

Some codes that directly use Hive 4 APIs need to be ignored in
compilation, eg. fe/src/main/java/org/apache/impala/catalog/metastore/.
Use Maven profile to ignore some codes, profile will automatically
activated based on the IMPALA_HIVE_DIST_TYPE.

Testing:
1. Code compiles and runs against both HMS-3 and ASF-HMS-3
2. Ran full-suite of tests against HMS-3
3. Running full-tests against ASF-HMS-3 will need more work
supporting Tez in the mini-cluster (for dataloading) and HMS
transaction support. This will be on-going effort and test failures
on ASF-Hive-3 will be fixed in additional sub-tasks.

Notes:
1. Patch uses a custom build of Apache Hive to be deployed in
mini-cluster. This build has the fixes for HIVE-21569, HIVE-20038.
This hack will be added to the build script in additional sub-tasks.

Change-Id: I9f08db5f6da735ac431819063060941f0941f606
Reviewed-on: http://gerrit.cloudera.org:8080/17774
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11106 (part 2): Add "uuid" to the ignored tbl properties in test_show_create_t...
Zoltan Borok-Nagy [Fri, 25 Feb 2022 11:31:51 +0000 (12:31 +0100)] 
IMPALA-11106 (part 2): Add "uuid" to the ignored tbl properties in test_show_create_table.py

The first patch of IMPALA-11106 adds compatibility with Iceberg 0.13.
With Impala is able to compile with both Iceberg 0.12 and 0.13, and
the tests of test_iceberg.py execute successfully.

Though the test test_show_create_table.py still fails because Iceberg
0.13 adds a new table property to the table: "uuid". The value of it
cannot be determined so I added "uuid" to the ignored table properties.

Testing:
 * tested manually by using Iceberg 0.13

Change-Id: Ia6ad0cdfb6acdd1e3adcd2035b6104291e346ef0
Reviewed-on: http://gerrit.cloudera.org:8080/18273
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11135: Deflake LEFT ANTI JOIN test case in test_spilling.py
Riza Suminto [Mon, 21 Feb 2022 19:19:39 +0000 (11:19 -0800)] 
IMPALA-11135: Deflake LEFT ANTI JOIN test case in test_spilling.py

TestSpillingDebugActionDimensions.test_spilling has been flaky because a
test case from IMPALA-9725 sometimes does not spill its hash join
partition. This patch lowers the buffer_pool_limit of this test from
110MB to 105MB, just slightly above its Max Per-Host Resource
Reservation (104.61MB), to ensure consistent spilling behavior.

Testing:
After lowering the buffer pool limit, I loop the test 1000 times, and
all spill consistently in fragment "HASH_JOIN_NODE (id=14)".
To be specific, these are the num of SpilledPartitions of the first
instance (ending with "000d") of "Hash Join Builder (join_node_id=14)"
fragment across 1000 query runs:

+--------------------+----------+
| #SpilledPartitions | #Queries |
+--------------------+----------+
|                  2 |       30 |
|                  3 |       96 |
|                  4 |      674 |
|                  5 |       52 |
|                  6 |      146 |
|                  7 |        2 |
+--------------------+----------+

Change-Id: Idad9fc6ec6a0ba7fc70e0701e567da7165e40e83
Reviewed-on: http://gerrit.cloudera.org:8080/18261
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11132 Front-end test PlannerTest.testResourceRequirements can fail
Qifan Chen [Thu, 17 Feb 2022 22:23:35 +0000 (17:23 -0500)] 
IMPALA-11132 Front-end test PlannerTest.testResourceRequirements can fail

This patch addresses the potential row count over-estimation against
HBase tables by capping the estimation by the row count when available
from HMS.

Testing:
  1. ran core test successfully

Change-Id: I11c51f76212e1337a7e726097931890c2edab182
Reviewed-on: http://gerrit.cloudera.org:8080/18250
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11147: Min/max filtering crashes on Parquet file that contains partition columns
Zoltan Borok-Nagy [Tue, 22 Feb 2022 18:27:58 +0000 (19:27 +0100)] 
IMPALA-11147: Min/max filtering crashes on Parquet file that contains partition columns

Impala crashes on a Parquet file that contains the partition columns.
Data files usually don't contain the partition columns, so Impala don't
expect to find such columns in the data files. Unfortunately min/max
filtering generates a SEGFAULT when the partition column is present in
the data files.

It happens when FindSkipRangesForPagesWithMinMaxFilters() tries to
retrieve the Parquet schema element for a given slot descriptor. When
the slot descriptor refers to a partition column, we usually don't find
a schema element so we don't try to skip pages.

But when the partition column is present in the data file, the code
tries to calculate the filtered pages for the column. It uses the column
reader object corresponding to the column, but this is NULL for
partition columns, hence we get a SEGFAULT.

The code shouldn't do anything at the page-level for partition columns,
as the data in such columns are the same for the whole file and it is
already filtered at a higher level.

Testing:
 * added e2e test

Change-Id: I17eff4467da3fd67a21353ba2d52d3bec405acd2
Reviewed-on: http://gerrit.cloudera.org:8080/18265
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 months agoIMPALA-11150: Remove resource-requirements tests on functional_parquet.alltypes
Csaba Ringhofer [Wed, 23 Feb 2022 20:10:41 +0000 (21:10 +0100)] 
IMPALA-11150: Remove resource-requirements tests on functional_parquet.alltypes

These test became flaky after IMPALA-10961 as it led to smaller and
varying size for the table. This is a short term solution to make
builds green as fixing the tests properly may take some time.

Change-Id: I5bf0f963d3e053345aec27e834974eeead4190ac
Reviewed-on: http://gerrit.cloudera.org:8080/18267
Reviewed-by: Fang-Yu Rao <fangyu.rao@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Csaba Ringhofer <csringhofer@cloudera.com>