impala.git
8 hours agoIMPALA-11631 Fix impala crashes in impala::TopNNode::Heap::Close() master
Yida Wu [Fri, 30 Sep 2022 17:18:17 +0000 (10:18 -0700)] 
IMPALA-11631 Fix impala crashes in impala::TopNNode::Heap::Close()

The bug is introduced by IMPALA-11631, if RematerializeTuples()
fails in ReclaimTuplePool(), it returns immediately with an error,
however, some Heap unique_ptr in the partition_heaps_ could be
already moved to the rematerialized_heaps, and set to nullptr,
while the Close() of the TopNNode will try to call Close() on all
the Heap unique_ptr in the partition_heaps_, which leads to a
crash.

There could be two issues, the calling on a nullptr as described
above and a potential memory leaking. Because Heap doesn't call
Close() in the destructor, the unique_ptr may not release all
the resources properly if we don't call the Close() explicitly
for the Heap.

The patch changes the logic of moving each Heap object after
one rematerialize process succeeds, instead, we will move all the
Heap objects in the partition_heaps_ only when all the rematerialize
processes succeed. Therefore, there will be no half released
partition_heaps_, all the Heap should be called Close() during the
TopNNode closing. Also, added checking for nullptr Heaps in the
Close() process of TopNNode.

Because it could be difficult for a testcase to inject an error
for this case to create a crash. I did some hacking in the
code to inject a memory allocation failure in certain cases,
reproduced the issue, and proved the patch can solve the issue
manually.

Tests:
Ran core tests.
Manual test.

Change-Id: Iaf45b6ef777f68e1843c076a935e4189acc6990b
Reviewed-on: http://gerrit.cloudera.org:8080/19087
Reviewed-by: Abhishek Rawat <arawat@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
17 hours agoIMPALA-11637: Add DCHECK in AdmissionController::UpdateExecGroupMetric
Riza Suminto [Thu, 29 Sep 2022 07:04:38 +0000 (00:04 -0700)] 
IMPALA-11637: Add DCHECK in AdmissionController::UpdateExecGroupMetric

There has been occurrences where an impala backend crash and lead to
metric admission-controller.executor-group.num-queries-executing.*
goes negative. While we still investigating the exact scenario leading
into this negative metric issue, this patch add a DCHECK in
AdmissionController::UpdateExecGroupMetric to ensure that such case
does not happen in regular nightly tests.

Testing:
- Run and pass exhaustive test.

Change-Id: Icee9ae58d14d69a1548da3eccb51a00a7d727c13
Reviewed-on: http://gerrit.cloudera.org:8080/19095
Reviewed-by: Abhishek Rawat <arawat@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
17 hours agoIMPALA-11639: Upgrade Spring framework to 5.3.20
wzhou-code [Tue, 4 Oct 2022 19:33:30 +0000 (12:33 -0700)] 
IMPALA-11639: Upgrade Spring framework to 5.3.20

This patch upgrade the Spring framework to 5.3.20 to
address multiple CVEs:
 - CVE-2022-22971
 - CVE-2022-22968
 - CVE-2022-22970

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

Change-Id: I33f4f1d22fc27227e31d744658a17c16b61b9677
Reviewed-on: http://gerrit.cloudera.org:8080/19091
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 days agoIMPALA-8592: Add support for insert events for 'LOAD DATA' statements
Yu-Wen Lai [Thu, 22 Sep 2022 05:35:33 +0000 (22:35 -0700)] 
IMPALA-8592: Add support for insert events for 'LOAD DATA' statements
from Impala

In this patch, we use TUpdateCatalogRequest to refresh metadata after
'LOAD DATA' instead of TResetMetadataRequest so that we can reuse the
code for 'INSERT' statements. It will fire an insert event just same
as what we did for 'INSERT' statements.

We also fix the inconsistent indentation in event_processor_utils.py.

Testing:
- Run existing test_load.py
- Added test_load_data_from_impala() in test_event_processing.py

Change-Id: I7f1b470f40e0aaf891c9f3f327af393b2f9c74bc
Reviewed-on: http://gerrit.cloudera.org:8080/19052
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
2 days agoIMPALA-11632: Exclude log4j-1.2-api in some Ranger artifacts
Fang-Yu Rao [Fri, 30 Sep 2022 18:09:23 +0000 (11:09 -0700)] 
IMPALA-11632: Exclude log4j-1.2-api in some Ranger artifacts

After RANGER-3498, Ranger's ranger-plugins-audit,
ranger-plugins-common start pulling in log4j-1.2-api, which is currently
banned by Impala's frontend. To be able to compile Impala after
RANGER-3498, this patch excludes log4j-1.2-api when adding those Ranger
dependencies mentioned above.

Change-Id: I72bf989a4fa04b23daf9093df8764670cc5e974d
Reviewed-on: http://gerrit.cloudera.org:8080/19085
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 days agoSpeed up default configuration for Docker-based tests
Laszlo Gaal [Thu, 22 Sep 2022 21:05:08 +0000 (23:05 +0200)] 
Speed up default configuration for Docker-based tests

Docker-based parallelized test runs have proven themselves to be quite a
bit faster than regular core or exhaustive mode builds. While regular
sequential builds have also enjoyed shorter runtimes recently,
Docker-based parallel builds still enjoy a speed advantage.

Scheduling the parallel build segments is currently driven from the
test driver script test-with-docker.py, and the order in which the
segments are considered is currently hard-coded. The ordering was
originally devised experimentally, by timing several test runs, then
ordering the test segments based on expected duration, from longest
to shortest.

The average wall-clock run times for various test segments have changed
since this original ordering was committed: FE tests have gotten
significantly longer, while upgrading the default worker instance
type cut shortened the serial phase(s) of E2E tests.

This patch makes two changes to achieve a shorter overall run time for
the Docker-based tests:
1. Reorders the default scheduling order of the test segments, based
   on currently measured durations
2. Increases the default suite concurrency for execution hosts:
   bumps suite concurrency from 4 to 5 for machines with memory sizes
   between 96 and 140 GBs (the currently used worker size)

The latter change is also based on measurements: memory usage reports for
total peak memory (RSS) and peak memory (RSS) per test segment both
showed significant amounts of unused memory on the current default
worker instance size (having 32 CPUs and 128 GB of RAM).
Experiments showed that this machine size can reliable handle five
concurrent containerized test sessions with some safety margin remaining,
so the patch increases the default concurrency for this machine
category.

with both changes applied the duration of a core-mode test run with
default settings is reduced from 2h45 to 2h25 (on average).

Tested by running the Docker-based default test suite in core mode,
with Ubuntu 16.04 and Rocky Linux 8.5 base images.

Change-Id: Ifb609bcfb10e9f9b281cc6b375c36c9638db168b
Reviewed-on: http://gerrit.cloudera.org:8080/19038
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 days agoIMPALA-11621: Remove hiveserver2.pid when shutting down HiveServer2
Joe McDonnell [Wed, 28 Sep 2022 18:21:28 +0000 (11:21 -0700)] 
IMPALA-11621: Remove hiveserver2.pid when shutting down HiveServer2

In HIVE-22193, Hive added graceful shutdown for HiveServer2.
This modified some of the startup scripts to maintain a
pid file. On startup, it verified that the pid is not already
running. Impala uses the hive startup script, but it kills
HiveServer2 with testdata/bin/kill-java-service.sh. If the
pid file outlives the process, then the OS may reuse the
pid and this can cause problems on startup.

This modifies testdata/bin/kill-hive-server.sh to remove
the pid file. testdata/bin/kill-java-service.sh would fail
if it did not kill HiveServer2, so it should be safe to
remove the pid file after the kill-java-service.sh call.

Testing:
 - Verified the hiveserver2.pid file is removed after shutting down.

Change-Id: I813626d06829a86854c6d2c1715f0c5f5109836d
Reviewed-on: http://gerrit.cloudera.org:8080/19051
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
7 days agoIMPALA-11562: Revert support for o3fs as default filesystem
Michael Smith [Tue, 13 Sep 2022 22:38:13 +0000 (15:38 -0700)] 
IMPALA-11562: Revert support for o3fs as default filesystem

Reverts support for o3fs as a default filesystem added in IMPALA-9442.
Updates test setup to use ofs instead.

Munges absolute paths in Iceberg metadata to match the new location
required for ofs. Ozone has strict requirements on volume and bucket
names, so all tables must be created within a bucket (e.g. inside
/impala/test-warehouse/).

Change-Id: I45e90d30b2e68876dec0db3c43ac15ee510b17bd
Reviewed-on: http://gerrit.cloudera.org:8080/19001
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 days agoIMPALA-11576: Fix for test_multiple_storage_locations on S3
Gergely Fürnstáhl [Tue, 27 Sep 2022 09:54:35 +0000 (11:54 +0200)] 
IMPALA-11576: Fix for test_multiple_storage_locations on S3

Fixed absolute/relative path handling in filesystems not supporting
block location (e.g. S3).

Testing:
 - test_multiple_storage_location passes on S3

Change-Id: I08badd96d060a2377c9a1eafa287a3adf8fa11db
Reviewed-on: http://gerrit.cloudera.org:8080/19045
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 days agoIMPALA-10791 Add batch reading for remote temporary files
Yida Wu [Tue, 26 Oct 2021 21:10:53 +0000 (14:10 -0700)] 
IMPALA-10791 Add batch reading for remote temporary files

The patch adds a feature to batch read from a remote temporary
file in order to improve the reading performance for the spilled
remote data.

Originally, the design is to use the local disk file as the buffer
for batch read from the remote file. But in practice, it
doesn't help to improve the performance. Therefore, the design
is changed to use the memory as the read buffer.

Currently, each TmpFileRemote has two DiskFile, one is for the
remote, and one is for the local buffer. The patch adds MemBlocks
to the local buffer file. Each local buffer file is divided into
several MemBlocks evenly. Moreover, in order to guarantee a
single page not being cut into two parts in different blocks,
the block size could be a little different to each other in
practice. The default block size is the minimum value between
the default file size and
MAX_REMOTE_READ_MEM_BLOCK_THRESHOLD_BYTES, which is 16MB.

When pinning a page, the system will detect if there is enough
memory for the block that holds the page. If yes, the block will
be stored in the memory until all of the pages in the block are
read or the query ends. If not, we will go reading the page
directly and disable this block, because it may be good to avoid
duplicated reads from the remote fs for the same content.

One challenge of the read buffer is where to get the extra memory
for it, because when impala starts to spill data, it means the
process lacks of memory to use. By default, impala process will
reserve 20% of the total system memory as unused memory, and here
we will use this unused memory for the read buffer because it is
reasonable to use it for the emergency case like spilling and
the memory of the read buffer will be returned immediately after
the use.

For system reliability consideration, we set a restriction that,
the maximum bytes of the read buffer memory are no more than 10%
of the total system memory and 50% of the unused memory. Also,
if the unused memory is less than 5% of the total system memory,
the read buffer will be disabled.

Two start options have been added for the new feature.

1. remote_batch_read. Default is false. If set true, the batch read
is enabled.
2. remote_read_memory_buffer_size. Default is 1G. The maximum memory
that can be used by the read buffer. The number is also restricted
by the process memory limit, which can not exceed 10% of the process
memory limit.

Added metrics ScratchReadsUseMem/ScratchBytesReadUseMem/
ScratchBytesReadUseLocalDisk to the query profile.

The patch also increases the MAX_REMOTE_TMPFILE_SIZE_THRESHOLD_MB
from 256 to 512.

Tests:
Ran core and exhaustive tests.
Added and ran TmpFileMgrTest::TestBatchReadingFromRemote.
Added e2e test test_scratch_dirs_batch_reading.

Change-Id: I1dcc5d0881ffaeff09c5c514306cd668373ad31b
Reviewed-on: http://gerrit.cloudera.org:8080/17979
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 days agoIMPALA-11418: A statement that returns at most one row need not to spool results
xqhe [Thu, 7 Jul 2022 07:36:54 +0000 (15:36 +0800)] 
IMPALA-11418: A statement that returns at most one row need not to spool results

A query that returns at most one row can run more efficiently without
result spooling. If result spooling is enabled, it will set the
minimum memory reservation in PlanRootSink, e.g. 'select 1' minimum
memory reservation is 4MB.

This optimization can reduce the statement's resource reservation and
prevent the exception 'Failed to get minimum memory reservation' when
the host memory limit not available.

Testing:
- Add tests in result-spooling.test

Change-Id: Icd4d73c21106048df68a270cf03d4abd56bd3aac
Reviewed-on: http://gerrit.cloudera.org:8080/18711
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 days agoIMPALA-11614: Fix test_metrics_are_zero for Ozone
Michael Smith [Mon, 26 Sep 2022 19:26:21 +0000 (12:26 -0700)] 
IMPALA-11614: Fix test_metrics_are_zero for Ozone

Fixes TestValidateMetrics.test_metrics_are_zero failure and avoids
incrementing the `num-missing-volume-id` metric for Ozone paths because
Ozone currently returns a list of nulls representing volume IDs.
Therefore the metric does not provide useful feedback with Ozone.

Change-Id: Ie0646063361185e04837a8c0fb2842fc4ce3f08f
Reviewed-on: http://gerrit.cloudera.org:8080/19044
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 days agoIMPALA-11420: Support CREATE/ALTER VIEW SET/UNSET TBLPROPERTIES
xiabaike [Mon, 5 Sep 2022 11:07:56 +0000 (11:07 +0000)] 
IMPALA-11420: Support CREATE/ALTER VIEW SET/UNSET TBLPROPERTIES

Add TBLPROPERTIES support to the view, here are some examples:
  CREATE VIEW [IF NOT EXISTS] [database_name.]view_name
    [(column_name [COMMENT 'column_comment'][, ...])]
    [COMMENT 'view_comment']
    [TBLPROPERTIES (property_name = property_value, ...)]
    AS select_statement;

  ALTER VIEW [database_name.]view_name SET TBLPROPERTIES
    (property_name = property_value, ...);

  ALTER VIEW [database_name.]view_name UNSET TBLPROPERTIES
    (property_name, ...);

Change-Id: I8d05bb4ec1f70f5387bb21fbe23f62c05941af18
Reviewed-on: http://gerrit.cloudera.org:8080/18940
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11611: Replace THRIFT_HOME with THIFT_JAVA_HOME in fe/pom.xml
Riza Suminto [Sat, 24 Sep 2022 12:41:15 +0000 (05:41 -0700)] 
IMPALA-11611: Replace THRIFT_HOME with THIFT_JAVA_HOME in fe/pom.xml

IMPALA-11369 should replace all occurrences of THRIFT_HOME with either
of THRIFT_CPP_HOME, THRIFT_JAVA_HOME, or THRIFT_PY_HOME. However, it
miss replacing THRIFT_HOME to THRIFT_JAVA_HOME in fe/pom.xml.

This reference has not cause an issue in compilation so far, but it
should be replaced with the right one. This patch does that replacement.

Testing:
- Run and pass ./buildall.sh -skiptests -notests

Change-Id: Ic39d47375353bb4d98399b5ff765d63aa331f63d
Reviewed-on: http://gerrit.cloudera.org:8080/19040
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11585: Build quickstart_client with Ubuntu 20
Michael Smith [Wed, 14 Sep 2022 18:30:15 +0000 (11:30 -0700)] 
IMPALA-11585: Build quickstart_client with Ubuntu 20

Ubuntu 20.04 only provides the python3-pip package. Update building
quickstart_client to use python3-pip on Ubuntu 20.04.

Change-Id: Ife89b7db88dd58e96ba1b3e3972ca97204332dd4
Reviewed-on: http://gerrit.cloudera.org:8080/18984
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11438, IMPALA-11594: update test for non-HDFS
Michael Smith [Fri, 23 Sep 2022 16:32:45 +0000 (09:32 -0700)] 
IMPALA-11438, IMPALA-11594: update test for non-HDFS

Updates the new create_table_like_parquet test to work with S3 and Ozone
filesystem schemes in addition to HDFS.

Change-Id: Ibd8d4c6b96c3ed607556793e6b822944a879a1f8
Reviewed-on: http://gerrit.cloudera.org:8080/19037
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11572: deflake test_mt_dop_skew_lpt part 2
Zoltan Borok-Nagy [Fri, 23 Sep 2022 13:41:02 +0000 (15:41 +0200)] 
IMPALA-11572: deflake test_mt_dop_skew_lpt part 2

I suspect the test is still flaky because of parallel execution
of other tests that have high CPU usage, hence marking the test
for serial execution to make it more stable.

Also printing out the query profile to stdout when we observe a
skew.

Change-Id: I521685d683d51a52e54ad138f8466dd41c844f72
Reviewed-on: http://gerrit.cloudera.org:8080/19035
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11511: Add build options for reducing binary sizes
Joe McDonnell [Fri, 9 Sep 2022 23:40:05 +0000 (16:40 -0700)] 
IMPALA-11511: Add build options for reducing binary sizes

Impala's build produces dozens of C++ binaries
that link in all Impala libraries. Each binary is
hundreds of megabytes, leading to 10s of gigabytes
of disk space. A large proportion of this (~80%) is debug
information. The debug information increases in newer
versions of GCC such as GCC 10.

This introduces two options for reducing the size
of debug information:
 - IMPALA_MINIMAL_DEBUG_INFO=true builds Impala with
   minimal debug information (-g1). This contains line tables
   and can resolve backtraces, but it does not contain
   variable information and restricts further debugging.
 - IMPALA_COMPRESSED_DEBUG_INFO=true builds Impala with
   compressed debug information (-gz). This does not change
   the debug information included, but the compression saves
   significant disk space. gdb is known to work with
   compressed debug information, but other tools may not
   support it. The dump_breakpad_symbols.py script has been
   adjusted to handle these binaries.
These are disabled by default.

Release impalad binary sizes:
Configuration                  | Size (bytes) | % reduction over base
Base                           | 707834808    | N/A
Stripped                       |  83351664    | 88%
Minimal debuginfo              | 215924096    | 69%
Compressed debuginfo           | 301619286    | 57%
Minimal + compressed debuginfo | 120886705    | 83%

Testing:
 - Generated minidumps and resolved them
 - Verified this is disabled by default

Change-Id: I04a20258a86053d8f3972b9c7c81cd5bec1bbb66
Reviewed-on: http://gerrit.cloudera.org:8080/18962
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11582: Implement table sampling for Iceberg tables
Zoltan Borok-Nagy [Thu, 15 Sep 2022 12:04:34 +0000 (14:04 +0200)] 
IMPALA-11582: Implement table sampling for Iceberg tables

This patch adds table sampling functionalities for Iceberg tables.
From now it's possible to execute SELECT and COMPUTE STATS statements
with table sampling.

Predicates in the WHERE clause affect the results of table sampling
similarly to how legacy tables work (sampling is applied after static
partition and file pruning).

Sampling is repeatable via the REPEATABLE clause.

Testing
 * planner tests
 * e2e tests for V1 and V2 tables

Change-Id: I5de151747c0e9d9379a4051252175fccf42efd7d
Reviewed-on: http://gerrit.cloudera.org:8080/18989
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
9 days agoIMPALA-11508: Deflake test_expire_snapshots
Zoltan Borok-Nagy [Fri, 23 Sep 2022 14:35:47 +0000 (16:35 +0200)] 
IMPALA-11508: Deflake test_expire_snapshots

Before this patch test_expire_snapshots failed frequently. The patch is
only a few lines of code, but there are some subtleties here:

IcebergCatalogOpExecutor.alterTableExecute() didn't use Iceberg
transactions to carry out the operation. This means that
expireSnapshots() resulted in an ALTER TABLE operation on its own
which we also got during event processing.

Because this ALTER TABLE event didn't had the catalog version set we
didn't recognized it as a self-event. This caused unnecessary table
reloads during the tests which manifested in
InconsistentMetadataFetchException: "... table ... changed version
between accesses" errors.

With this patch IcebergCatalogOpExecutor.alterTableExecute() takes
an Iceberg transaction object and invokes expireSnapshots() in the
context of this Iceberg transaction. This Iceberg transaction also
sets table properties "impala.events.catalogServiceId" and
"impala.events.catalogVersion". And because everything happens in
a single Iceberg transaction we only create a single ALTER TABLE
which we can recognize during event processing (based on the
table properties), avoiding unnecessary table reloads.

Testing:
 * executed test_expire_snapshots in a loop

Change-Id: I6d82c8b52466a24af096fe5fe4dbd034a1ee6a15
Reviewed-on: http://gerrit.cloudera.org:8080/19036
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
12 days agoIMPALA-11599/IMPALA-11605: GCC 10: Fix gdb and change to flatbuffers 1.9
Joe McDonnell [Thu, 22 Sep 2022 22:35:45 +0000 (15:35 -0700)] 
IMPALA-11599/IMPALA-11605: GCC 10: Fix gdb and change to flatbuffers 1.9

This contains two fixes for issues introduced by
IMPALA-9999's upgrade to GCC 10:
IMPALA-11599: Builds toolchain gdb with the OS compiler,
fixing an issue where it could not run on Centos 7 due
to problems with its RPATH / finding appropriate libstdc++.
IMPALA-11605: Reverts to flatbuffers 1.9, which avoids
a mismatch with the version that Hive uses. This avoids
classpath incompatibility issues.

Testing:
 - Verified that toolchain gdb works on Centos 7
 - Verified that interoperability with Hive is restored

Change-Id: Ieaafdb1da05cab60b254115faaae55dba8b67dfd
Reviewed-on: http://gerrit.cloudera.org:8080/19034
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
12 days agoIMPALA-10660: Impala shell prints DOUBLEs with less precision in HS2 than beeswax
Peter Rozsa [Fri, 9 Sep 2022 16:30:50 +0000 (18:30 +0200)] 
IMPALA-10660: Impala shell prints DOUBLEs with less precision in HS2 than beeswax

This change adds a shell option called "hs2_fp_format"
which manipulates the print format of floating-point values in HS2.
It lets the user to specify a Python-based format specification
expression (https://docs.python.org/2.7/library/string.html#formatspec)
which will get parsed and applied to floating-point
column values. The default value is None, in this case the
formatting is the same as the state before this change.
This option does not support the Beeswax protocol, because Beeswax
converts all of the column values to strings in its response.

Tests: command line tests for various formatting options and
       for invalid formatting option

Change-Id: I424339266be66437941be8bafaa83fa0f2dfbd4e
Reviewed-on: http://gerrit.cloudera.org:8080/18990
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
13 days agoIMPALA-11583: Use Iceberg API to update stats
Zoltan Borok-Nagy [Fri, 16 Sep 2022 13:42:03 +0000 (15:42 +0200)] 
IMPALA-11583: Use Iceberg API to update stats

Before this patch we used HMS API alter_table() to update an Iceberg
table's statistics. 'alter_table()' API calls are unsafe for Iceberg
tables as they overwrite the whole HMS table, including the table
property 'metadata_location' which must always point to the latest
snapshot. Hence concurrent modification to the same table could be
reverted by COMPUTE STATS.

In this patch we are using Iceberg API to update Iceberg tables.
Also, table-level stats (e.g. numRows, totalSize, totalFiles) are not
set as Iceberg keeps them up-to-date.

COMPUTE INCREMENTAL STATS without partition clause is the same as
plain COMPUTE STATS for Iceberg tables. This behavior is aligned
with current behavior on non-partitioned tables:
https://impala.apache.org/docs/build/html/topics/impala_compute_stats.html

COMPUTE INCREMENTAL STATS .. PARTITION raises an error.

DROP STATS has been also modified to not drop table-level stats for
HMS-integrated Iceberg tables.

Testing:
 * added e2e tests for COMPUTE STATS
 * added e2e tests for DROP STATS
 * manually tested concurrent Hive INSERT and Impala COMPUTE STATS
   using latest Hive
 * opened IMPALA-11590 to add automated interop tests with Hive

Change-Id: I46b6e0a5a65e18e5aaf2a007ec0242b28e0fed92
Reviewed-on: http://gerrit.cloudera.org:8080/18995
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-11160: Ignore stale ALTER_PARTITION events on transactional tables
stiga-huang [Tue, 20 Sep 2022 02:41:24 +0000 (10:41 +0800)] 
IMPALA-11160: Ignore stale ALTER_PARTITION events on transactional tables

When applying ALTER_PARTITION events on transactional tables, we refresh
the partition using the metadata in events if
hms_event_incremental_refresh_transactional_table is enabled (which is
the default). This could be wrong if the ALTER_PARTITION event is stale.
The partition metadata will be rolled back to a stale state.

This patch compares the eventId with the createEventId of the table and
ignores those ALTER_PARTITION events that have older (smaller) event
ids. Note that we already do this for many other event types,
ALTER_PARTITION is somehow missing the checks.

Eventually we should depend on the lastSyncedEventId and replace
createEventId with it. The self-event detection can also be replaced
since self-events are also stale events. These will be addressed in
IMPALA-10976.

Tests
- Verified locally with local-catalog mode and event-processor enabled
  and iterated test_acid_compute_stats for 1400 times. Without the fix,
  the test would fail in tens of runs.

Change-Id: I5bb8cfc213093f3bbd0359c7084b277a3bd5264a
Reviewed-on: http://gerrit.cloudera.org:8080/19020
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-9999: Switch to GCC 10.4
Joe McDonnell [Sat, 8 Jan 2022 02:01:48 +0000 (18:01 -0800)] 
IMPALA-9999: Switch to GCC 10.4

This upgrades GCC and libstdc++ to version 10.4. This
required patching or upgrading several dependencies
so they could compile with GCC 10. The toolchain
companion change has details on what items needed
to be upgraded and why.

The toolchain companion change switches GCC to build
with toolchain binutils rather than host binutils. This
means that the python virtualenv initialization needs
to include binutils on the path.

This disables two warnings introduced in the new GCC
versions (Wclass-memaccess and Winit-list-lifetime).
These two warnings occur in our code and also in
dependencies like LLVM and rapidjson. These are not
critical warnings, so they can be addressed
independently and reenabled later.

Binary sizes increase, particulary when including
debug symbols:
                         | GCC 7.5     | GCC 10.4
impalad RELEASE stripped |  83204768   |  88702824
impalad RELEASE          | 707278904   | 971711456
impalad DEBUG stripped   | 106677672   |  97391944
impalad DEBUG            | 725864760   | 867647512

Testing:
 - Multiple test jobs (core, release exhaustive, ASAN)
 - Performance testing for TPC-H and TPC-DS shows
   a modest improvement (2-4%).
 - Code compiles without warnings on debug and release

Change-Id: Ibe6857b822925226d39fd4d6413457ef6bbaabec
Reviewed-on: http://gerrit.cloudera.org:8080/18134
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
2 weeks agoIMPALA-11578: Exclude locality test for remote FS
Michael Smith [Tue, 13 Sep 2022 18:13:38 +0000 (11:13 -0700)] 
IMPALA-11578: Exclude locality test for remote FS

Exclude test_scheduler_locality when the filesystem can only be remote.

Change-Id: Ie6198421f21bc2520773ecbb34ffaf65969ebc43
Reviewed-on: http://gerrit.cloudera.org:8080/18980
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-11572: deflake test_mt_dop_skew_lpt
Zoltan Borok-Nagy [Mon, 12 Sep 2022 13:49:46 +0000 (15:49 +0200)] 
IMPALA-11572: deflake test_mt_dop_skew_lpt

test_mt_dop_skew_lpt was flaky. Also, it calculated the
min(bytes_read) / max(bytes_read) globally across all fragment
insteances, not just among the intra-node fragment instances.

To deflake the test, this test:
 * calculate intra-node min(bytes_read) / max(bytes_read) ratios
   instead of global ones
 * print out the ratios so we'll know the numbers when the test fails
 * eliminate compression codec test dimension which is not used anyway

Change-Id: I823542c21fe8f10f43a501fe4175da883eaf2f99
Reviewed-on: http://gerrit.cloudera.org:8080/18970
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2 weeks agoIMPALA-11573: Certain methods used by the replanning feature can be improved
Qifan Chen [Fri, 9 Sep 2022 22:29:20 +0000 (18:29 -0400)] 
IMPALA-11573:  Certain methods used by the replanning feature can be improved

This patch improves certain methods used by the replan feature
(IMPALA-10992) so that they can be called by the external frontend
component in Hive. Specifically, the declaration of these methods
becomes public static, and the initialization of a static data
member checks whether the dependent object exists.

Testing:
1. Run unit tests;
2. Run "core" tests.

Change-Id: I334523f86e4292e9591306179eb1ab43be316c99
Reviewed-on: http://gerrit.cloudera.org:8080/18968
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Quanlong Huang <huangquanlong@gmail.com>
2 weeks agoIMPALA-11438: Add tests for CREATE TABLE LIKE PARQUET STORED AS ICEBERG
Gergely Fürnstáhl [Mon, 12 Sep 2022 12:55:55 +0000 (14:55 +0200)] 
IMPALA-11438: Add tests for CREATE TABLE LIKE PARQUET STORED AS ICEBERG

Impala already supports said statement, added query tests for it.

Testing:
 - Generated parquet table with complex type by hive
 - Created hive and iceberg table from said file, provides same output
for describe statement

Change-Id: Ia363b913e101fd49b62a280721680f0eb88761c0
Reviewed-on: http://gerrit.cloudera.org:8080/18969
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11580: Fix memory leak in legacy catalog mode when applying incremental partit...
stiga-huang [Tue, 13 Sep 2022 08:23:40 +0000 (16:23 +0800)] 
IMPALA-11580: Fix memory leak in legacy catalog mode when applying incremental partition updates

In the legacy catalog mode, catalogd propagates incremental metadata
updates at the partition level. While applying the updates, impalad
reuses the existing partition objects and moves them to a new HdfsTable
object. However, the partition objects are immutable, which means their
reference to the old table object remains unchanged. JVM GC cannot
collect the stale table objects since they still have active reference
from the partitions, which results in memory leak.

This patch fixes the issue by recreating a new partition object based on
the existing partition object with the new table field.

Tests:
 - Verified locally that after applying the patch, I don’t see the
   number of live HdfsTable objects keeps bumping.

Change-Id: Ie04ff243c6b82c1a06c489da74353f2d8afe423a
Reviewed-on: http://gerrit.cloudera.org:8080/18978
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
3 weeks agoIMPALA-11422: Bump Apache Hive to 3.1.3
Fucun Chu [Mon, 11 Jul 2022 16:33:36 +0000 (00:33 +0800)] 
IMPALA-11422: Bump Apache Hive to 3.1.3

This patch bump up version of Apache Hive to 3.1.3.

Change-Id: I395a99cccf0a8902b3fd47235c32b69c5494f291
Reviewed-on: http://gerrit.cloudera.org:8080/18716
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11557: Fix memory leak in BlockingRowBatchQueue
hexianqing [Fri, 9 Sep 2022 09:43:10 +0000 (17:43 +0800)] 
IMPALA-11557: Fix memory leak in BlockingRowBatchQueue

'batch_queue_' is a pointer to store the RowBatches. It's
initialized in the constructor but not deleted in the destructor.

The way to fix in the patch is to use std::unique_ptr.

Change-Id: I656316b6575ce74a03b83fcd45e772c763835d56
Reviewed-on: http://gerrit.cloudera.org:8080/18960
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Quanlong Huang <huangquanlong@gmail.com>
3 weeks agoIMPALA-11528: Catalogd should start up with a corrupt Hive function.
Steve Carlin [Mon, 29 Aug 2022 21:57:19 +0000 (14:57 -0700)] 
IMPALA-11528: Catalogd should start up with a corrupt Hive function.

This commit handles the case for a specific kind of corrupt function
within the Hive Metastore in the following situation:

A valid Hive SQL function gets created in HMS. This UDF is written in
Java and must derive from the "UDF" class. After creating this function
in Impala, we then replace the underlying jar file with a class that
does NOT derive from the "UDF" class.

In this scenario, catalogd should reject the function and still start
up gracefully. Before this commit, catalogd wasn't coming up. The
reason for this was because the Hive function
FunctionUtils.getUDFClassType() has a dependency on UDAF and was
throwing a LinkageError exception, so we need to include the UDAF
class in the shaded jar.

Change-Id: I54e7a1df6d018ba6cf5ecf32dc9946edf86e2112
Reviewed-on: http://gerrit.cloudera.org:8080/18927
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Tamas Mate <tmater@apache.org>
3 weeks agoIMPALA-9499: Display support for all complex types in a SELECT * query
Peter Rozsa [Thu, 11 Aug 2022 07:24:09 +0000 (09:24 +0200)] 
IMPALA-9499: Display support for all complex types in a SELECT * query

This change adds EXPAND_COMPLEX_TYPES query option to support the
display of complex types in SELECT statements where star (*) expression
is in the select list. By default, the query option is disabled. When
it's enabled, it changes the behaviour of star expansion to list all
top-level column fields including ones with complex types, instead of
listing the scalar column fields only. Nested complex type expansion is
also supported, eg.: struct.* will enumerate the members of the struct.
Array, map and struct types are supported.

Testing:
 - Analyzer tests check select statements when the query option is
   enabled or disabled.
 - EE tests check the proper complex type deserialization when the query
   option is enabled, and the original behaviour when the option is
   disabled.

Change-Id: I84b5e5703f9e0ce0f4f8bff83941677dd7489974
Reviewed-on: http://gerrit.cloudera.org:8080/18863
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11570: tolerate errors from dmesg in finalize.sh
Joe McDonnell [Thu, 8 Sep 2022 22:07:36 +0000 (15:07 -0700)] 
IMPALA-11570: tolerate errors from dmesg in finalize.sh

finalize.sh does a variety of diagnostic actions
at the end of a Jenkins job. The script should try
to tolerate errors from subcommands to keep going
to other diagnostic actions. dmesg has failed under
some circumstances, so this adds logic to tolerate
a failure from dmesg. This lets the script continue
to resolving minidumps.

Testing:
 - Ran on a configuration where dmesg fails and
   it proceeded to the rest of the script

Change-Id: I772b4d905482e84618c14e4d738fe179fa7a99a8
Reviewed-on: http://gerrit.cloudera.org:8080/18956
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11569: Run finalize.sh in all-tests.sh even if dataload fails
Joe McDonnell [Thu, 8 Sep 2022 22:01:43 +0000 (15:01 -0700)] 
IMPALA-11569: Run finalize.sh in all-tests.sh even if dataload fails

bin/jenkins/all-tests.sh does not run finalize.sh if
bin/bootstrap_development.sh fails. This is inconvenient,
because sometimes Impala can crash during dataload, and
it is useful for finalize.sh to resolve any minidumps.

This changes all-tests.sh to run finalize.sh even if
bootstrap_development.sh fails.

Testing:
 - Ran this on an ARM job that was failing during
   dataload. Finalize ran properly.

Change-Id: I46fcc1d552341607ada9a6c37f6a5fb13be213a5
Reviewed-on: http://gerrit.cloudera.org:8080/18955
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
3 weeks agoIMPALA-11567: Fix left outer join if the right side is subquery with complex type
Csaba Ringhofer [Thu, 8 Sep 2022 13:55:46 +0000 (15:55 +0200)] 
IMPALA-11567: Fix left outer join if the right side is subquery with complex type

Non-matching rows from the left side will null out all slots from the
right side in left outer joins. If the right side is a subquery, it
is possible that some returned expressions will be non-NULL even if all
slots are NULL (e.g. constants) - these expressions are wrapped as
IF(TupleIsNull(tids), NULL, expr) to null them in the non-matching
case.

The logic above used to hit a precondition for complex types. We can
safely ignore complex types for now, as currently the only possible
expression that returns a complex type is SlotRef, which doesn't
need to be wrapped. We will have to revisit this once functions are
added that return complex types.

Testing:
- added a regression  test and ran it

Change-Id: Iaa8991cd4448d5c7ef7f44f73ee07e2a2b6f37ce
Reviewed-on: http://gerrit.cloudera.org:8080/18954
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11540: Add logs for ALTER_TABLE events that trigger slow metadata reload
stiga-huang [Mon, 29 Aug 2022 00:14:37 +0000 (08:14 +0800)] 
IMPALA-11540: Add logs for ALTER_TABLE events that trigger slow metadata reload

ALTER_TABLE event could trigger full refresh on the table, which is
time consuming and can lead to event-processor lagging behind. We need
logs to show the difference between the before and after hmsTables so we
can further distinguish the cases that actully don't need a full table
refresh, e.g. changing the owner, changing tblproperties, etc.

Tests:
 - Attach the process using IntelliJ to pause the metadata loading for a
   while. So the metadata reloading of ALTER_TABLE event can exceed the
   threshold. Manually verified the logs.

Change-Id: Ibf344e6b423f88c9635ca8d61d53385b88ba4dce
Reviewed-on: http://gerrit.cloudera.org:8080/18926
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Quanlong Huang <huangquanlong@gmail.com>
3 weeks agoIMPALA-9448: Use Ozone TDE in minicluster
Michael Smith [Tue, 30 Aug 2022 22:26:57 +0000 (15:26 -0700)] 
IMPALA-9448: Use Ozone TDE in minicluster

Enables Ozone's Transparent Data Encryption when creating a bucket in
the minicluster. Requires `-format` to turn on encryption in an existing
minicluster.

Tested by running e2e and custom cluster tests with Ozone.

Change-Id: Icd82967cdab7b222e5876936f39e5198ba9773ea
Reviewed-on: http://gerrit.cloudera.org:8080/18931
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-10610: Support multiple file formats in a single Iceberg Table
Gergely Fürnstáhl [Thu, 1 Sep 2022 14:27:16 +0000 (16:27 +0200)] 
IMPALA-10610: Support multiple file formats in a single Iceberg Table

Added support for multiple file formats. Previously Impala created a
Scanner class based on the partitions file format, now in case of an
Iceberg table it will read out the file format from the file level
metadata instead.

IcebergScanNode will aggregate file formats as well instead of relying
on partitions, so it can be used for plannig.

Testing:

Created a mixed file format table with hive and added a test for it.

Change-Id: Ifc816595724e8fd2c885c6664f790af61ddf5c07
Reviewed-on: http://gerrit.cloudera.org:8080/18935
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
3 weeks agoIMPALA-11490: Add more metrics for event processor
stiga-huang [Sun, 4 Sep 2022 01:25:17 +0000 (09:25 +0800)] 
IMPALA-11490: Add more metrics for event processor

This patch adds more metrics to debug event processing lagging behind.
The latest event id in HMS is added so users can compare it with the
last synced event id to know how many events are waiting to be synced.
The event time of the last synced event and latest event in HMS are also
added. Users can compare them to know how long catalogd is lagging
behind. The update of the latest event id and event time are done in a
dedicated thread in case the event-processor thread is blocked by slow
metadata reloading or waiting for table locks.

This patch also fixes the wrong metrics on events fetching and
processing duration. Previously the method we used is
Timer.getMeanRate() which returns the mean rate at which the duration is
recorded. The correct method should be Timer.getSnapshot().getMean(). By
getting the snapshot, we can also expose metrics of the 75th/95th/99th
percentiles.

To facilitate metrics collection, the last durations of events fetching
and processing are also exposed.

Tests:
 - Manually verified the metrics when running some Hive workloads

Change-Id: I0e7d40a0d8e140e6b0698936e97b454cb9abdc1b
Reviewed-on: http://gerrit.cloudera.org:8080/18937
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-10918: Allow map type in SELECT list
Daniel Becker [Tue, 12 Jul 2022 15:31:48 +0000 (17:31 +0200)] 
IMPALA-10918: Allow map type in SELECT list

Adding support for MAP types in the select list.
An example of how maps are printed:
{"k1":2,"k2":null}

Nested collection types (maps and arrays) are supported in any
combination. However, structs in collections and collections in structs
are not supported.

Limitations (other than map support) as described in the commit for
IMPALA-9498 still apply, the following are to be implemented later:
- Unify HS2 / Beeswax logic with the way STRUCTs are handled.
  This could be done in a "final" logic that can handle
  STRUCTS/ARRAYS nested to each other
- Implement "deep copy" and "deep serialize" for collections in BE.
  This would enable all operators, e.g. ORDER BY and UNION.

Testing:
 - modified the FE tests that checked that maps were not allowed in the
   select list - now the test expect maps are allowed there
 - added FE and EE tests involving maps based on the array tests

Change-Id: I921c647f1779add36e7f5df4ce6ca237dcfaf001
Reviewed-on: http://gerrit.cloudera.org:8080/18736
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-10213: Add test for local vs remote scheduling
Michael Smith [Thu, 11 Aug 2022 19:03:53 +0000 (12:03 -0700)] 
IMPALA-10213: Add test for local vs remote scheduling

Impala already supports locality-aware scheduling with Ozone because it
returns location data on partitions. That data doesn't include specific
storage ids in getStorageIds, so we skip a warning that will always
trigger on Ozone.

Updates Ozone to add implicit rules mapping localhost -> 127.0.0.1 for
local development. HDFS translates localhost to 127.0.0.1 for host names
in its location data, which Impala will identify as colocated with
executors in the dev environment. Ozone doesn't, and the default Impala
hostname is the machine hostname - not localhost - so without this
change all HDFS access in the minicluster is local but all Ozone access
is remote.

Adds a test to verify local vs remote assignment by using custom
clusters with hostnames that either do or don't match storage hostnames.

Change-Id: I4e5606528404c3d4fd164c03dec8315345be5f6d
Reviewed-on: http://gerrit.cloudera.org:8080/18841
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
4 weeks agoIMPALA-11539: Mitigate intra-node skew of file scans with MT_DOP
Zoltan Borok-Nagy [Mon, 29 Aug 2022 12:53:18 +0000 (14:53 +0200)] 
IMPALA-11539: Mitigate intra-node skew of file scans with MT_DOP

Before IMPALA-9655 scan ranges were statically assigned to intra-node
fragment instances based on Longest-Processing Time algorithm:
https://github.com/apache/impala/blame/a7866a94578be6289bbac31686de4d9032ad9261/be/src/scheduling/scheduler.cc#L499-L501

From IMPALA-9655 we use dynamic intra-node load balancing for file
scans. It means fragment instances have a shared queue of scan ranges
and the fragment instances grab the next scan range to be read from
this queue.

IMPALA-9655 got rid of the LPT-algorithm which means the scan ranges
are in a random order in the queue. This can lead to a skew if there
are large scan ranges at the end.

This patch mixes the above two approaches by using a priority queue
for the scan ranges, so each fragment instance would grab the largest
scan range in the queue. This could further mitigate intra-node skewing.
Ranges that are marked to use the hdfs cache are still handled with
higher priority.

The patch intoduces a new class called ScanRangeQueueMt which implements
the above.

Testing:
 * added e2e test in which MIN(bytes_read) / MAX(bytes_read) is greater
   then 0.6 with this patch. Earlier we could see it less than 0.4.

Performance:
No significant perf change. Ran TPCH (scale 30) with mt_dop set to 10 on
a 3 node minicluster on my desktop.

+----------+------------------------+---------+------------+------------+----------------+
| Workload | File Format            | Avg (s) | Delta(Avg) | GeoMean(s) | Delta(GeoMean) |
+----------+------------------------+---------+------------+------------+----------------+
| TPCH(30) | parquet / snap / block | 3.16    | -0.37%     | 2.29       | +0.40%         |
+----------+------------------------+---------+------------+------------+----------------+

+----------+----------+------------------------+--------+-------------+------------+-----------+----------------+-------+----------------+---------+-------+
| Workload | Query    | File Format            | Avg(s) | Base Avg(s) | Delta(Avg) | StdDev(%) | Base StdDev(%) | Iters | Median Diff(%) | MW Zval | Tval  |
+----------+----------+------------------------+--------+-------------+------------+-----------+----------------+-------+----------------+---------+-------+
| TPCH(30) | TPCH-Q20 | parquet / snap / block | 1.58   | 1.55        |   +2.04%   |   2.26%   |   3.15%        | 20    |   +3.14%       | 2.53    | 2.34  |
| TPCH(30) | TPCH-Q11 | parquet / snap / block | 0.68   | 0.66        |   +2.94%   |   3.67%   |   4.18%        | 20    |   +0.90%       | 1.97    | 2.33  |
| TPCH(30) | TPCH-Q5  | parquet / snap / block | 2.02   | 1.99        |   +1.55%   |   1.48%   |   1.38%        | 20    |   +2.27%       | 2.53    | 3.40  |
| TPCH(30) | TPCH-Q1  | parquet / snap / block | 2.59   | 2.56        |   +1.22%   |   3.25%   |   3.12%        | 20    |   +1.75%       | 1.33    | 1.21  |
| TPCH(30) | TPCH-Q15 | parquet / snap / block | 2.15   | 2.13        |   +1.20%   |   1.53%   |   1.39%        | 20    |   +0.91%       | 2.38    | 2.58  |
| TPCH(30) | TPCH-Q4  | parquet / snap / block | 1.26   | 1.24        |   +1.62%   |   2.33%   |   2.77%        | 20    |   +0.36%       | 2.23    | 1.98  |
| TPCH(30) | TPCH-Q6  | parquet / snap / block | 0.74   | 0.73        |   +1.31%   |   3.23%   |   3.24%        | 20    |   +0.54%       | 1.24    | 1.27  |
| TPCH(30) | TPCH-Q7  | parquet / snap / block | 2.13   | 2.11        |   +1.03%   |   1.84%   |   1.71%        | 20    |   +0.52%       | 1.85    | 1.83  |
| TPCH(30) | TPCH-Q19 | parquet / snap / block | 2.02   | 2.00        |   +0.91%   |   1.26%   |   1.32%        | 20    |   +0.34%       | 1.80    | 2.22  |
| TPCH(30) | TPCH-Q2  | parquet / snap / block | 1.42   | 1.41        |   +0.95%   |   2.54%   |   1.58%        | 20    |   +0.07%       | 0.42    | 1.41  |
| TPCH(30) | TPCH-Q16 | parquet / snap / block | 0.93   | 0.92        |   +0.59%   |   4.06%   |   4.53%        | 20    |   +0.27%       | 0.66    | 0.43  |
| TPCH(30) | TPCH-Q12 | parquet / snap / block | 1.57   | 1.56        |   +0.68%   |   1.98%   |   2.34%        | 20    |   +0.14%       | 1.04    | 0.98  |
| TPCH(30) | TPCH-Q21 | parquet / snap / block | 10.69  | 10.66       |   +0.28%   |   0.54%   |   0.59%        | 20    |   +0.36%       | 1.56    | 1.59  |
| TPCH(30) | TPCH-Q8  | parquet / snap / block | 2.30   | 2.29        |   +0.50%   |   1.38%   |   1.57%        | 20    |   +0.09%       | 1.12    | 1.06  |
| TPCH(30) | TPCH-Q22 | parquet / snap / block | 1.01   | 1.00        |   +0.51%   |   3.40%   |   4.25%        | 20    |   +0.08%       | 0.60    | 0.42  |
| TPCH(30) | TPCH-Q13 | parquet / snap / block | 4.66   | 4.66        |   +0.08%   |   1.00%   |   0.78%        | 20    |   -0.02%       | -0.25   | 0.29  |
| TPCH(30) | TPCH-Q18 | parquet / snap / block | 6.26   | 6.25        |   +0.13%   |   2.23%   |   1.49%        | 20    |   -0.07%       | -0.16   | 0.21  |
| TPCH(30) | TPCH-Q14 | parquet / snap / block | 1.68   | 1.69        |   -0.51%   |   2.51%   |   3.81%        | 20    |   -0.05%       | -0.31   | -0.51 |
| TPCH(30) | TPCH-Q3  | parquet / snap / block | 1.86   | 1.88        |   -0.72%   |   1.83%   |   2.10%        | 20    |   -0.07%       | -0.95   | -1.15 |
| TPCH(30) | TPCH-Q9  | parquet / snap / block | 8.84   | 9.02        |   -1.93%   |   1.78%   |   2.55%        | 20    |   -2.27%       | -2.50   | -2.79 |
| TPCH(30) | TPCH-Q17 | parquet / snap / block | 8.27   | 8.45        |   -2.09%   |   1.16%   |   1.32%        | 20    |   -2.33%       | -4.01   | -5.35 |
| TPCH(30) | TPCH-Q10 | parquet / snap / block | 4.95   | 5.13        |   -3.60%   |   6.86%   |   9.75%        | 20    |   -2.53%       | -2.70   | -1.37 |
+----------+----------+------------------------+--------+-------------+------------+-----------+----------------+-------+----------------+---------+-------+

Change-Id: Ib7dc1f1665565da6c0e155c1e585f7089b18a180
Reviewed-on: http://gerrit.cloudera.org:8080/18929
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11159: Fix AttributeError in TestAsyncDDLTiming.test_ctas
Tamas Mate [Wed, 31 Aug 2022 13:48:30 +0000 (15:48 +0200)] 
IMPALA-11159: Fix AttributeError in TestAsyncDDLTiming.test_ctas

TestAsyncDDLTiming.test_ctas is likely to be flaky, additionally it
throws AttributeError when fails which hides the details of the failure.
This commit fixes the AttributeError which is caused by the Impyla tests,
the Impyla handler is a HiveServer2Cursor object that does not have an
'id' attribute. Query string can be printed instead of the query id.

Testing:
 - Triggered test failure manually and verified the result.

Change-Id: Ibe78b3a3ee070a1edeaef5cf7ae8d9565a10141d
Reviewed-on: http://gerrit.cloudera.org:8080/18933
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11551: Bump CDP_BUILD_NUMBER to use Iceberg 0.14
Zoltan Borok-Nagy [Tue, 6 Sep 2022 15:59:32 +0000 (17:59 +0200)] 
IMPALA-11551: Bump CDP_BUILD_NUMBER to use Iceberg 0.14

This patch updates CDP_BUILD_NUMBER to 31397203 which includes
Iceberg 0.14.

This newer version of Iceberg adds a couple new table properties
to the table which we can ignore during test_show_create_table.

Change-Id: If4ac72fa76b09808a65e31dd55ff662d849ac2a3
Reviewed-on: http://gerrit.cloudera.org:8080/18944
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Gabor Kaszab <gaborkaszab@cloudera.com>
4 weeks agoIMPALA-11548: Share same TTransport object for RPC input and output
Riza Suminto [Mon, 29 Aug 2022 21:41:32 +0000 (14:41 -0700)] 
IMPALA-11548: Share same TTransport object for RPC input and output

After the CPP thrift upgrade to version 0.16.0 by IMPALA-11384, we are
seeing long-running connections closed by the Thrift server due to
MaxMessageSize reached. Additional tracing log in the thrift library and
TAcceptQueueServer reveals that TTransport's message size counter was
continuously decreasing over the lifetime of the connection and was
never reset. Further investigation points down to having separate input
and output TTransport object in TAcceptQueueServer::SetupConnection as
the root cause.

This patch fixes the issue by sharing the same TTransport object for
both Thrift RPC input and output in TAcceptQueueServer::SetupConnection.
Using the same TTransport causes the counter to be decremented and reset
on the same object. TSaslTransport had a caching algorithm in
TSaslServerTransport::Factory::getTransport() that guaranteed that the
underlying transport was shared between input and output. This is no
longer necessary and has been removed.

Testing:
- Pass core tests.

Change-Id: I199d6b0c6c62e940e131eb39d38a8a51b36e11c4
Reviewed-on: http://gerrit.cloudera.org:8080/18938
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11507: Use absolute_path when Iceberg data files are outside of the table...
LPL [Tue, 23 Aug 2022 07:00:50 +0000 (15:00 +0800)] 
IMPALA-11507: Use absolute_path when Iceberg data files are outside of the table location

For Iceberg tables, when one of the following properties is used, it is
considered that the table is possible to have data outside the table
location directory:
- 'write.object-storage.enabled' is true
- 'write.data.path' is not empty
- 'write.location-provider.impl' is configured
- 'write.object-storage.path'(Deprecated) is not empty
- 'write.folder-storage.path'(Deprecated) is not empty

We should tolerate the situation that relative path of the data files
cannot be obtained by the table location path, and we could use the
absolute path in that case. E.g. the ETL program will write the table
that the metadata of the Iceberg tables is placed in
'hdfs://nameservice_meta/warehouse/hadoop_catalog/ice_tbl/metadata',
the recent data files in
'hdfs://nameservice_data/warehouse/hadoop_catalog/ice_tbl/data', and the
data files half a year ago in
's3a://nameservice_data/warehouse/hadoop_catalog/ice_tbl/data', it
should still be queried normally by Impala.

Testing:
 - added e2e tests

Change-Id: I666bed21d20d5895f4332e92eb30a94fa24250be
Reviewed-on: http://gerrit.cloudera.org:8080/18894
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11554: Bump ORC Java version to 1.7.6
stiga-huang [Tue, 6 Sep 2022 05:56:54 +0000 (13:56 +0800)] 
IMPALA-11554: Bump ORC Java version to 1.7.6

This bumps the ORC java version to be 1.7.6 so it's consistent with the
C++ version (1.7.0-p14) used in BE.

Change-Id: I9caa01889de674747137a541a8ce8946f6ac1668
Reviewed-on: http://gerrit.cloudera.org:8080/18942
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11525: Rename Exec libraries to avoid conflicts with external libraries
Peter Rozsa [Thu, 25 Aug 2022 16:51:32 +0000 (18:51 +0200)] 
IMPALA-11525: Rename Exec libraries to avoid conflicts with external libraries

This patch renames the Exec libraries to distinguish them from
external libraries like avro, kudu_client and orc
Due to IMPALA-11257, the cmake_minimum_required calls are
also removed from the new libraries

Change-Id: I042478e371049a7aed74f43c2bbfcb7900a53dd0
Reviewed-on: http://gerrit.cloudera.org:8080/18910
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11484: Create SCAN plan for Iceberg V2 position delete tables
Zoltan Borok-Nagy [Thu, 14 Jul 2022 13:33:18 +0000 (15:33 +0200)] 
IMPALA-11484: Create SCAN plan for Iceberg V2 position delete tables

This patch adds support for reading Iceberg V2 tables use position
deletes. Equality deletes are still not supported. Position delete
files store the file path and file position of the deleted rows.

When an Iceberg table has position delete files we need to do an
ANTI JOIN between data files and delete files. From the data files
we need to query the virtual columns INPUT__FILE__NAME and
FILE__POSITION, while from the delete files we need the data columns
'file_path' and 'pos'. The latter data columns are not part of the
table schema, so we create a virtual table instance of
'IcebergPositionDeleteTable' that has a table schema corresponding
to the delete files ('file_path', 'pos').

This patch introduces a new class 'IcebergScanPlanner' which has
the responsibility of doing a plan for Iceberg table scans. It creates
the aforementioned ANTI JOIN. Also, if there are data files without
corresponding delete files, we can have a separate SCAN node and its
results would be UNIONed to the rows coming from the ANTI JOIN:

              UNION
             /     \
    SCAN data       ANTI JOIN
                     /      \
              SCAN data    SCAN deletes

Some refactorings in the context of this CR:
Predicate pushdown and time travel logic is transferred from
IcebergScanNode to IcebergScanPlanner. Iceberg snapshot summary
retrieval is moved from FeFsTable to FeIcebergTable.

Testing:
 * added planner test
 * added e2e tests

TODO in follow-up Jiras:
 * better cardinality estimates (IMPALA-11516)
 * support unrelative collection columns (select item from t.int_array)
   (IMPALA-11517)
   Currently such queries return error during analysis

Change-Id: I672cfee18d8e131772d90378d5b12ad4d0f7dd48
Reviewed-on: http://gerrit.cloudera.org:8080/18847
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
4 weeks agoIMPALA-11543: Print exception message even if throwable_to_stack_trace_id fails
Csaba Ringhofer [Tue, 30 Aug 2022 15:43:32 +0000 (17:43 +0200)] 
IMPALA-11543: Print exception message even if throwable_to_stack_trace_id fails

Until now if we got the message but not the callstack, we did
not print the message, only a generic one about suspecting OOM.

Testing:
- tested manually by throwing an exception from throwableToStackTrace

Change-Id: Ia7d08abb685e687170fc4f3d7a0e38e6c5cae09c
Reviewed-on: http://gerrit.cloudera.org:8080/18930
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11464: (Addendum) Skip tests in Ozone
Michael Smith [Wed, 31 Aug 2022 17:16:27 +0000 (10:16 -0700)] 
IMPALA-11464: (Addendum) Skip tests in Ozone

Updates the skip for new recursive listing tests to match the comment so
that they're only run on HDFS. The previous skip only roughly matched
the set of all non-HDFS filesystems, and didn't automatically include
new filesystems.

Change-Id: I80de83d506138b57a969258b2f6dcf112dd2e44d
Reviewed-on: http://gerrit.cloudera.org:8080/18934
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11467: Force Boost to use /dev/random for UUID generation
zhangyifan27 [Tue, 2 Aug 2022 03:31:04 +0000 (11:31 +0800)] 
IMPALA-11467: Force Boost to use /dev/random for UUID generation

To avoid crash issue at OS with kernel lower than Linux 3.17, this patch
pick kudu's solution 35b5664f908cd1250c9f01e5dff77b653cfd12b7 into impala.

Testing:
 - run pre-built impalad at CentOS 7 kernel 3.10 with no crash.

Change-Id: Ic48bd59b0a846bcb91a6faf77156c0a49cd08ae8
Reviewed-on: http://gerrit.cloudera.org:8080/18805
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Alexey Serbin <alexey@apache.org>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
5 weeks agoIMPALA-10214, IMPALA-10375: Ozone remote file handle caching
Michael Smith [Thu, 28 Jul 2022 18:18:40 +0000 (11:18 -0700)] 
IMPALA-10214, IMPALA-10375: Ozone remote file handle caching

Enables support for caching remote file handles for Ozone. Local file
handles were already cached unintentionally, similar to HDFS. Updates
file handle cache enablement to be more stringent about enabling
caching.

File handle caching is enabled if a max_cached_file_handles is non-zero
and any of the following are true
- HDFS file is local
- HDFS file is remote and cache_remote_file_handles is enabled
- Ozone file is local or remote and cache_ozone_file_handles is enabled
- S3 file is remote and cache_s3_file_handles is enabled
- ABFS file is remote and cache_abfs_file_handles is enabled

Enables testing Ozone in test_hdfs_fd_caching, and adds tests that
remote caching can be disabled using individual flags.

Change-Id: I9df13208999c6d3b14f4c005a91ee2a92a05bdf9
Reviewed-on: http://gerrit.cloudera.org:8080/18853
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
5 weeks agoIMPALA-11529: FILE__POSITION virtual column for ORC tables
Gabor Kaszab [Mon, 22 Aug 2022 11:50:46 +0000 (13:50 +0200)] 
IMPALA-11529: FILE__POSITION virtual column for ORC tables

IMPALA-11350 implemented the FILE__POSITION virtual column for Parquet
files. This ticket does the same but for ORC files. Note, that for full
ACID ORC tables there have already been an implementation of row__id
that could simply be re-used for this ticket.

Testing:
 - TestScannersVirtualColumns.test_virtual_column_file_position_generic
   is changed to run now on ORC as well. I don't think further testing
   is required as this functionality has already been there for row__id
   we just re-used it for FILE__POSITION.

Change-Id: Ie8e951f73ceb910d64cd149192853a4a2131f79b
Reviewed-on: http://gerrit.cloudera.org:8080/18909
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11483: [DOCS] Document EXPIRE SNAPSHOTS functionality
Tamas Mate [Thu, 11 Aug 2022 14:43:44 +0000 (16:43 +0200)] 
IMPALA-11483: [DOCS] Document EXPIRE SNAPSHOTS functionality

This commit documents the Iceberg expire snapshot functionality.

Testing:
 - Built the docs locally and verified the generated html.

Change-Id: Iddd927dd1b6ee3b99dd29982018a610389e64836
Reviewed-on: http://gerrit.cloudera.org:8080/18838
Reviewed-by: Tamas Mate <tmater@apache.org>
Tested-by: Tamas Mate <tmater@apache.org>
5 weeks agoIMPALA-11496: Push down date literals to Kudu scanner
Peter Rozsa [Mon, 22 Aug 2022 09:19:24 +0000 (11:19 +0200)] 
IMPALA-11496: Push down date literals to Kudu scanner

This change enables creating, and pushing down Kudu
predicates from DATE type. Kudu planner testcases
added for DATE, BIGINT, FLOAT, DOUBLE types to
cover all supported type's predicate creation.

Change-Id: I4f323d23df3a92361390f9da387182db3f3bde3e
Reviewed-on: http://gerrit.cloudera.org:8080/18898
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11505: Fix flaky test test_kudu_txn_abort_partition_lock
wzhou-code [Thu, 25 Aug 2022 09:37:45 +0000 (02:37 -0700)] 
IMPALA-11505: Fix flaky test test_kudu_txn_abort_partition_lock

TestKuduTransaction.test_kudu_txn_abort_partition_lock fails as
exception message is unexpected due to timing issue.

This patch added a new debug action so that test code could explicitly
control over calling Commit() for Kudu transaction. Changed the test
to run first query synchronously with new debug action.

Testing:
 - Repeatedly ran test_kudu_txn_abort_partition_lock for 500 times
   in Jenkins without failure.
 - Passed core test.

Change-Id: If5a79bca6bfdac49192b76b1a31379d872db59e0
Reviewed-on: http://gerrit.cloudera.org:8080/18911
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11429: Set table owner after creating an Iceberg table
Gabor Kaszab [Tue, 9 Aug 2022 14:02:17 +0000 (16:02 +0200)] 
IMPALA-11429: Set table owner after creating an Iceberg table

Iceberg tables are created using Apache Iceberg's API. However,
currently Iceberg gets the owner of the process running Iceberg for the
owner of the newly created tables. In our case it's the user running
catalogd and not the user running the CREATE TABLE statement.

Until the Iceberg API is enhanced to accept an owner parameter for
table creation, as a workaround this patch adds an extra alter table
step right after Iceberg table creation.

TestIcebergTable.test_drop_incomplete_table test had to be skipped
with this implementation because this would run into a known bug where
Impala runs into an infinite loop when the table location is being
dropped somewhere during the execution of the first command after
CREATE TABLE. In this case the ALTER TABLE SET OWNER is going to be
the first command, so IMPALA-11509 would be triggered in case we
dropped the table location as this test would.

Testing:
  - Manually creating Iceberg tables and checking the owner.
  - Added one automated test to create Iceberg tables with different
    users and checking the output of DESCRIBE FORMATTED to verify the
    owner.
  - Turned off TestIcebergTable.test_drop_incomplete_table as described
    above.
  - Manually tested when ALTER TABLE fails (hacked Impala code) that
    the table is created properly.

Change-Id: I5cac198a4a53be3599cb582864ee5f8c269202c0
Reviewed-on: http://gerrit.cloudera.org:8080/18837
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11520: Remove functional.unsupported_types misc test
Tamas Mate [Tue, 23 Aug 2022 09:26:04 +0000 (11:26 +0200)] 
IMPALA-11520: Remove functional.unsupported_types misc test

IMPALA-9482 added support to the remaining Hive types and removed the
functional.unsupported_types table. There was a reference remaining in a
misc test. test_misc is not marked as exhaustive but it only runs in
exhaustive builds.

Change-Id: I65b6ea5ac742fbcc427ad41741d347558cb7d110
Reviewed-on: http://gerrit.cloudera.org:8080/18896
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
5 weeks agoIMPALA-11521: Fix test_binary_type
Tamas Mate [Tue, 23 Aug 2022 09:03:48 +0000 (11:03 +0200)] 
IMPALA-11521: Fix test_binary_type

Fix test_binary_type typo, it should not reference to an HBase table.

Change-Id: Id41049094b632af6326f6ee9f3886577d1fc5ee6
Reviewed-on: http://gerrit.cloudera.org:8080/18895
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11523: Fix test_http_socket_timeout in Docker-based tests
Joe McDonnell [Tue, 23 Aug 2022 18:49:47 +0000 (11:49 -0700)] 
IMPALA-11523: Fix test_http_socket_timeout in Docker-based tests

When running in the Docker-based tests, TestImpalaShell's
test_http_socket_timeout fails with a mismatch in the
error message. The test expected "Operation now in progress",
but in Docker-based tests it throws "Cannot assign requested
address". Since this is testing that a socket timeout of zero
gets an error, it seems reasonable to tolerate this extra
variant.

This modifies the test to allow this error message.

Testing:
 - TestImpalaShell.test_http_socket_timeout passes
   in the docker-based tests and in a normal core job

Change-Id: If463f1100db673bb916b094c1402f1876342c80e
Reviewed-on: http://gerrit.cloudera.org:8080/18899
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11454: Update toolchain to get smaller Kudu binaries
Joe McDonnell [Tue, 23 Aug 2022 18:12:02 +0000 (11:12 -0700)] 
IMPALA-11454: Update toolchain to get smaller Kudu binaries

This updates the toolchain to use a native-toolchain
with the fix for IMPALA-11454, which reduces the size
of the Kudu tarball by symlinking the main Kudu
binaries.

Testing:
 - Ran core job

Change-Id: Id16a64668e9bd8ca046c1a5f1b70eb8a97186fcb
Reviewed-on: http://gerrit.cloudera.org:8080/18901
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11519: [DOCS] add UTF-8 requirements
Shajini Thayasingh [Tue, 23 Aug 2022 16:01:12 +0000 (09:01 -0700)] 
IMPALA-11519: [DOCS] add UTF-8 requirements

added a note about Glibc version and en_US.UTF-8 locale
updated the notes in both topics
Change-Id: I4d7a21c787c66868219c7bd64aa31f772de2f850
Reviewed-on: http://gerrit.cloudera.org:8080/18897
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11394: Update jackson-databind to 2.12.6.1
Joe McDonnell [Mon, 22 Aug 2022 20:09:46 +0000 (13:09 -0700)] 
IMPALA-11394: Update jackson-databind to 2.12.6.1

This updates jackson-databind to address CVE-2020-36518.

Testing:
 - Ran a core job

Change-Id: I8db403a102097a22c48f5d9d42ced3b85930078f
Reviewed-on: http://gerrit.cloudera.org:8080/18891
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11513: Upgrade postregresql packge to 42.4.1
Joe McDonnell [Mon, 22 Aug 2022 20:08:04 +0000 (13:08 -0700)] 
IMPALA-11513: Upgrade postregresql packge to 42.4.1

This upgrades postgresql to address CVE-2022-31197.

Testing:
 - Ran core job

Change-Id: Ic891b75a8f3383c6bb1229a41033896873441e21
Reviewed-on: http://gerrit.cloudera.org:8080/18890
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
6 weeks agoIMPALA-10069: Support TLS 1.3 ciphersuites
Joe McDonnell [Wed, 24 Feb 2021 20:43:31 +0000 (12:43 -0800)] 
IMPALA-10069: Support TLS 1.3 ciphersuites

OpenSSL 1.1.1 adds support for TLS 1.3. TLS 1.3 has a new
set of cipher suites that are maintained separately from
the TLS 1.2 ciphers. This caused test failures on tests
that expected failures when setting invalid TLS 1.2 ciphers.
It also rendered some success test cases invalid, because
the TLS 1.3 ciphers would work even if TLS 1.2 didn't.

This adds the tls_ciphersuites startup parameter, which
customizes the TLS 1.3 cipher suites. tls_ciphersuites is
only effective when Impala is built for a system with OpenSSL
1.1.1 or above.

This uses tls_ciphersuites to fix the existing TLS 1.2 cipher
tests. It also adds a set of tests for TLS 1.3 cipher suites.

KRPC and the webserver now support ssl_minimum_version=tlsv1.3.
However, Thrift does not support this configuration yet, so
this is not supported for impalad yet. To support TLS 1.3 tests
on Thrift, this adds a disable_tls12 option to ThriftServer
and ThriftClient. This will be removed when
ssl_minimum_version=tlsv1.3 is supported.

Testing:
 - Ran the backend tests with TLS checks (rpc-mgr-test, rpc-mgr-kerberized-test,
   webserver-test, and thrift-server-test) on Ubuntu 18 and Ubuntu 20
 - Added tests for tls_ciphersuites in rpc-mgr-test and thrift-server-test
 - Ran a core test on Centos 7
 - Ran a core test on Ubuntu 16

Change-Id: I6974dae7fb429599847165614adc4eaaf338f744
Reviewed-on: http://gerrit.cloudera.org:8080/18316
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11514: Workaround s3 connection timeout issues
Joe McDonnell [Fri, 19 Aug 2022 23:33:17 +0000 (16:33 -0700)] 
IMPALA-11514: Workaround s3 connection timeout issues

When running on s3, dataload is failing with errors
like "Timeout waiting for connection from pool". The
underlying issue is a subtle issue in the async draining
codepath (HADOOP-18410). As a temporary workaround, this
adds fs.s3a.input.async.drain.threshold=512G to core-site.xml.
This disables the async drain codepath.

Testing:
 - An s3 job passed with this setting

Change-Id: I08d03eb653fdcb6955340519b0cf5ba97b10d590
Reviewed-on: http://gerrit.cloudera.org:8080/18872
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
6 weeks agoIMPALA-11492: Add langpacks-en (centos) and language-pack-en (Ubuntu)
Joe McDonnell [Fri, 22 Jul 2022 19:53:08 +0000 (12:53 -0700)] 
IMPALA-11492: Add langpacks-en (centos) and language-pack-en (Ubuntu)

Machines that don't have en_US.UTF-8 installed see
issues when running ExprTest.Utf8MaskTest.
This currently impacts the Docker-based tests.
This installs the appropriate language packs
to have en_US.UTF-8 installed.

Testing:
 - Ran docker-based tests and verified that
   ExprTest.Utf8MaskTest passes.

Change-Id: I1b8696190e4713bda787e773d48943b5dfc6335e
Reviewed-on: http://gerrit.cloudera.org:8080/18875
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
6 weeks agoIMPALA-11471: Track disk usage for build-all-flag-combinations.sh
Joe McDonnell [Wed, 3 Aug 2022 03:54:00 +0000 (20:54 -0700)] 
IMPALA-11471: Track disk usage for build-all-flag-combinations.sh

This adds some calls to df and du to track disk space
usage throughout the builds. This also cleans up the
Impala dev environment before creating the m2 archive.

Change-Id: I8ab31d8d7096b49d8404edf7521d46f23155526f
Reviewed-on: http://gerrit.cloudera.org:8080/18810
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
6 weeks agoIMPALA-11294: Remove dictionary runtime filter test workarounds
Tamas Mate [Thu, 11 Aug 2022 15:08:46 +0000 (17:08 +0200)] 
IMPALA-11294: Remove dictionary runtime filter test workarounds

This commit removes a workaround in the dictionary runtime filter tests
that was necessary till IMPALA-11047 got merged.

Testing
 - Executed e2e test locally.

Change-Id: I9697f5a1a04160dd17553603b00e15d63b49e2bf
Reviewed-on: http://gerrit.cloudera.org:8080/18839
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11500: Fix Impalad crashed in ParquetBoolDecoder::SkipValues when num_values...
LPL [Tue, 16 Aug 2022 09:22:34 +0000 (17:22 +0800)] 
IMPALA-11500: Fix Impalad crashed in ParquetBoolDecoder::SkipValues when num_values is 0

Fix Impalad crashed in the method ParquetBoolDecoder::SkipValues when
the parameter 'num_values' is 0. The function should tolerate that the
'num_values' is 0 values.

Testing:
 - Add e2e tests

Change-Id: I8c4c5a4dff9e9e75913c7b524b4ae70967febb37
Reviewed-on: http://gerrit.cloudera.org:8080/18854
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-11436: Change search bind authentication parameters
Tamas Mate [Fri, 5 Aug 2022 13:07:23 +0000 (15:07 +0200)] 
IMPALA-11436: Change search bind authentication parameters

Impala's search bind authentication intends to mimic Spring's behaviour.
However, the login username and user dn paremeters were swapped for
group searches compared to Spring. This change intends to align these
parameters.

For user search, Spring uses {0} to replace the login username.
Meanwhile, during group search {0} is used to replace the login user dn
and {1} is used to replace the login username.

Testing:
 - Ran LdapSearchBindImpalaShellTest frontend tests

Change-Id: I9808566a348f7c6200b0571fbc05e67f720f2075
Reviewed-on: http://gerrit.cloudera.org:8080/18819
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-9482: Support for BINARY columns
Csaba Ringhofer [Thu, 4 Jun 2020 22:48:33 +0000 (00:48 +0200)] 
IMPALA-9482: Support for BINARY columns

This patch adds support for BINARY columns for all table formats with
the exception of Kudu.

In Hive the main difference between STRING and BINARY is that STRING is
assumed to be UTF8 encoded, while BINARY can be any byte array.
Some other differences in Hive:
- BINARY can be only cast from/to STRING
- Only a small subset of built-in STRING functions support BINARY.
- In several file formats (e.g. text) BINARY is base64 encoded.
- No NDV is calculated during COMPUTE STATISTICS.

As Impala doesn't treat STRINGs as UTF8, BINARY and STRING become nearly
identical, especially from the backend's perspective. For this reason,
BINARY is implemented a bit differently compared to other types:
while the frontend treats STRING and BINARY as two separate types, most
of the backend uses PrimitiveType::TYPE_STRING for BINARY too, e.g.
in SlotDesc. Only the following parts of backend need to differentiate
between STRING and BINARY:
- table scanners
- table writers
- HS2/Beeswax service
These parts have access to column metadata, which allows to add special
handling for BINARY.

Only a very few builtins are allowed for BINARY at the moment:
- length
- min/max/count
- coalesce and similar "selector" functions
Other STRING functions can be only used by casting to STRING first.
Adding support for more of these functions is very easy, as simply
the BINARY type has to be "connected" to the already existing STRING
function's signature. Functions where the result depends on utf8_mode
need to ensure that with BINARY it always works as if utf8_mode=0 (for
example length() is mapped to bytes() as length count utf8 chars if
utf8_mode=1).

All kinds of UDFs (native, Hive legacy, Hive generic) support BINARY,
though in case of legacy Hive UDFs it is only supported if the argument
and return types are set explicitely to ensure backward compatibility.
See IMPALA-11340 for details.

The original plan was to behave as close to Hive as possible, but I
realized that Hive has more relaxed casting rules than Impala, which
led to STRING<->BINARY casts being necessary in more cases in Impala.
This was needed to disallow passing a BINARY to functions that expect
a STRING argument. An example for the difference is that in
INSERT ... VALUES () string literals need to be explicitly cast to
BINARY, while this is not needed in Hive.

Testing:
- Added functional.binary_tbl for all file formats (except Kudu)
  to test scanning.
- Removed functional.unsupported_types and related tests, as now
  Impala supports all (non-complex) types that Hive does.
- Added FE/EE tests mainly based on the ones added to the DATE type

Change-Id: I36861a9ca6c2047b0d76862507c86f7f153bc582
Reviewed-on: http://gerrit.cloudera.org:8080/16066
Reviewed-by: Quanlong Huang <huangquanlong@gmail.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
6 weeks agoIMPALA-10800: Tidy up the be/src/exec directory
Peter Rozsa [Wed, 3 Aug 2022 13:03:27 +0000 (13:03 +0000)] 
IMPALA-10800: Tidy up the be/src/exec directory

This change separates the scanner implementations
to different folders to make the exec directory clearer.

Change-Id: Ie936c400ea8b112073bba892497ab8a1498c418d
Reviewed-on: http://gerrit.cloudera.org:8080/18815
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11469: (Addendum) Initialize BackendConfig
Michael Smith [Tue, 9 Aug 2022 22:44:44 +0000 (15:44 -0700)] 
IMPALA-11469: (Addendum) Initialize BackendConfig

Adds FrontendTestBase base class to FileMetadataLoaderTest to ensure
BackendConfig is set. Also switches FileSystemUtilTest to use
FrontendTestBase to be more consistent around initialization.

Failure to initialize BackendConfig meant that test success would depend
on their order. If FileSystemUtilTest or another test that initialized
it were the first to use FileSystemUtil, then everything would pass. If
not, the static declaration in FileSystemUtil would fail, causing the
class to fail to be loaded. Later tests would fail with NoClassDefFound
errors.

Testing:
- Ran frontend tests individually.

Change-Id: Iaefea5ac982e42a8b0f3b693d16a8db10cc7de31
Reviewed-on: http://gerrit.cloudera.org:8080/18840
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11494: Don't always produce Ranger audit log for authorized query
Fang-Yu Rao [Thu, 11 Aug 2022 23:37:23 +0000 (16:37 -0700)] 
IMPALA-11494: Don't always produce Ranger audit log for authorized query

Before this patch, when Impala could not resolve a given table
'<db_name>.<tbl_name>' during the query analysis, Impala would still
attempt to register 2 privilege requests. One was for the table
'<tbl_name>' under the database '<db_name>' and the other was for the
table '<db_name>' under the database 'default'. The first one should be
registered since Impala had to determine whether such an access should
be allowed (even though in fact the table did not exist), whereas the
second one was incorrect in that 'default.<db_name>' definitely was not
'<db_name>.<tbl_name>' in general.

Furthermore, Impala always sent audit log entries to the Ranger server
for an authorized query against non-existing table(s).

The 2 facts described above resulted in Impala producing Ranger audit
log entries for the tables '<db_name>.<tbl_name>' and
'default.<db_name>' when a requesting user granted sufficient privileges
on the databases of '<db_name>' and 'default' submitted a query against
a non-existing table '<db_name>.<tbl_name>'. None of the audit log
entries should be generated because i) the privilege request for
'<db_name>.<tbl_name>' was allowed and '<db_name>.<tbl_name>' did not
exist, and ii) 'default.<db_name>' did not correspond to a table.

This patch fixes the 2 issues mentioned above so that Impala will not
generate any Ranger audit log entry for an authorized query against a
non-existing table.

Testing:
 - Added a frontend test case to verify no Ranger audit log entry will
   be produced for an authorized query against a non-existing table.

Change-Id: I701652e457d3118f43249e83be933713b17ce48f
Reviewed-on: http://gerrit.cloudera.org:8080/18850
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-9442: (Addendum) Fix Ozone jar name for older Ozone
Michael Smith [Mon, 15 Aug 2022 20:46:39 +0000 (13:46 -0700)] 
IMPALA-9442: (Addendum) Fix Ozone jar name for older Ozone

Ozone 1.2 changed the name of its hadoop adapter jar. Logic to link
against the jar in pom.xml was correctly updated, but the jar name used
in HADOOP_CLASSPATH assumed Ozone 1.2. Updates the jar in
HADOOP_CLASSPATH to use the correct jar for the detected Ozone version.

Change-Id: I7e401075268ebd81af8b8cac72504f0d1a4e59f1
Reviewed-on: http://gerrit.cloudera.org:8080/18852
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11257: (Addendum) Make KerberosPrograms optional
Michael Smith [Tue, 16 Aug 2022 18:24:58 +0000 (11:24 -0700)] 
IMPALA-11257: (Addendum) Make KerberosPrograms optional

Fixing CMake warnings fixed detection logic for KerberosPrograms.
Security tests aren't run in all test suites, so make KerberosPrograms
optional to reduce basic dev/test requirements.

Change-Id: I76e5c3a36b806b746cc2b59bb5cdcd8251dc0f5d
Reviewed-on: http://gerrit.cloudera.org:8080/18859
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11498: Change port range of TEZ's web UI server
Fang-Yu Rao [Wed, 10 Aug 2022 20:44:57 +0000 (13:44 -0700)] 
IMPALA-11498: Change port range of TEZ's web UI server

After TEZ-4347, by default TEZ would attempt to start a web UI server
before opening a session. The default port range for the server
specified in TezConfiguration.java (in the TEZ repository) is
"50000-50050", which does not seem to be a good choice in Impala's
testing environment in that there are always some other client programs
holding those ports when TEZ attempts to start its web UI server. As a
result, TEZ could not bind a port in the port range to start its web UI
server, resulting in TEZ session not being created, which in turn failed
some end-to-end test relying on TEZ, e.g., test_json_file_unsupported.

This patch explicitly sets the port range to "32000-32100" to avoid port
collision based on the parameter of 'ip_local_port_range', which is
"32768-60999" on the machine where Impala's tests are run.

Testing:
 - Verified in 2 Jenkins runs of exhaustive RELEASE build that we do not
   see test_json_file_unsupported fail again after this patch.

Change-Id: I3d067953f943a762ad50b0561570e96f0dc39791
Reviewed-on: http://gerrit.cloudera.org:8080/18851
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11281: Load table metadata for ResetMetadataStmt
Fang-Yu Rao [Mon, 23 May 2022 19:02:26 +0000 (12:02 -0700)] 
IMPALA-11281: Load table metadata for ResetMetadataStmt

This patch loads the metadata of the table for ResetMetadataStmt if the
table is not null and Ranger table masking is supported so that the
information about the columns of the table could be used to check
whether masking is enabled for any column in the table and thus the
update operation on a table where there is a masking policy defined on
any column could be blocked.

Testing:
 - Added an E2E test to verify the update operation on a table by a
   requesting user would be denied if there is a column masking policy
   defined on any column in the table for the requesting user even
   though the table metadata have been invalidated immediately before
   the requesting user attempts to invalidate the table metadata again.

Change-Id: I0c90b413974223886661697f11844d99a68fdebf
Reviewed-on: http://gerrit.cloudera.org:8080/18561
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11472: Reduce test dimensions for TestClientSsl
Joe McDonnell [Fri, 12 Aug 2022 03:35:17 +0000 (20:35 -0700)] 
IMPALA-11472: Reduce test dimensions for TestClientSsl

With the addition of extra dimensions for varients
of impala-shell, TestClientSsl currently runs
four different shells against three different protocols
for a total of 12 dimensions. Some tests in TestClientSsl
take a while to run (e.g. test_wildcard_ssl takes 4 minutes
on some platforms). This can take over an hour to run.

This reduces the test dimensions to only tests two
shells (dev python2 and dev python3) with two protocols
(HS2 and HS2-HTTP) for a total of 4 dimensions. This
should reduce the runtime significantly.

Testing:
 - Ran TestClientSsl locally and checked the test
   dimensions
 - Ran shell tests and checked that their test
   dimensions don't change

Change-Id: I3d4a4792a37cba2231d9999e8bfa2279ba029a05
Reviewed-on: http://gerrit.cloudera.org:8080/18843
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
7 weeks agoIMPALA-11493: Fix docker-based run-workload.py test
Joe McDonnell [Thu, 11 Aug 2022 06:11:54 +0000 (23:11 -0700)] 
IMPALA-11493: Fix docker-based run-workload.py test

The run-workload.py smoke check runs as part of
the custom cluster test segment for docker-based
tests. This requires a running Impala cluster,
so this fixes run-all-tests.sh to start the
Impala cluster when CLUSTER_TEST=true.

Change-Id: I5a07269ddf808c1470be86bb305ccf1120f4b81a
Reviewed-on: http://gerrit.cloudera.org:8080/18833
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11207: Use hadoop-cloud-storage for Cloud dependencies
Joe McDonnell [Thu, 4 Aug 2022 20:27:32 +0000 (13:27 -0700)] 
IMPALA-11207: Use hadoop-cloud-storage for Cloud dependencies

Hadoop provides hadoop-cloud-storage, which includes most of
the dependencies that Impala currently uses like hadoop-aws,
hadoop-azure, Knox's gateway-cloud-bindings, etc. Hadoop has
put in a lot of work to make sure that this package includes
the right version of dependencies (including shading some
dependencies for GCS). It seems like this is a more reliable
way to consume these dependencies.

This switches the Java build to use hadoop-cloud-storage
and removes the dependencies that it replaces. This eliminates
the need to control the version of oauth and GCS, as those
are determined by hadoop-cloud-storage.

Change-Id: I3a1631289f990513823c2b17eb9241cc1b5a7ffd
Reviewed-on: http://gerrit.cloudera.org:8080/18817
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoUpdate gerrit-auto-critic for a virtualenv API change
Laszlo Gaal [Fri, 29 Jul 2022 22:34:17 +0000 (00:34 +0200)] 
Update gerrit-auto-critic for a virtualenv API change

Recent versions of virtualenv have changed their main API during a
massive rewrite. This means that the create_environment entry point is
no longer available, scripts have to use 'cli_run' instead.

The patch updates the Gerrit auto-critic script for this change.

Change-Id: I6fb85622877b1d2835a1ed8f5a7df56185326949
Reviewed-on: http://gerrit.cloudera.org:8080/18800
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11350: Add virtual column FILE__POSITION for Parquet tables
Zoltan Borok-Nagy [Tue, 21 Jun 2022 14:14:32 +0000 (16:14 +0200)] 
IMPALA-11350: Add virtual column FILE__POSITION for Parquet tables

Virtual column FILE__POSITION returns the ordinal position of the row
in the data file. It will be useful to add support for Iceberg's
position-based delete files

This patch only adds FILE__POSITION to Parquet tables. It works
similarly to the handling of collection position slots. I.e. we
add the responsibility of dealing with the file position slot to
an existing column reader. Because of page-filtering and late
materialization we already tracked the file position in member
'current_row_' during scanning.

Querying the FILE__POSITION in other file formats raises an error.

Testing:
 * added e2e tests

Change-Id: I4ef72c683d0d5ae2898bca36fa87e74b663671f7
Reviewed-on: http://gerrit.cloudera.org:8080/18704
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11480: Retain all YARN container logs in a Jenkins run
Fang-Yu Rao [Mon, 8 Aug 2022 03:09:19 +0000 (20:09 -0700)] 
IMPALA-11480: Retain all YARN container logs in a Jenkins run

This patch explicitly sets 'yarn.nodemanager.log.retain-seconds' to a
large enough value so that all the YARN container log files created in a
Jenkins run will be archived.

Testing:
 - Verified in a Jenkins run that all the YARN container logs are indeed
   archived.

Change-Id: I10953f5de98d4312dfc563fcace17908c86be2d3
Reviewed-on: http://gerrit.cloudera.org:8080/18821
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
7 weeks agoIMPALA-11468: Port "Block Bloom filter false positive correction" from Kudu
Joe McDonnell [Fri, 29 Jul 2022 22:56:21 +0000 (15:56 -0700)] 
IMPALA-11468: Port "Block Bloom filter false positive correction" from Kudu

Block Bloom filters have a higher false positive rate than standard
Bloom filter, due to the uneven distribution of keys between
buckets. This patch changes the code to match the theory, using an
approximation from the paper that introduced block Bloom filters,
"Cache-, Hash- and Space-Efficient Bloom Filters" by Putze et al.

In scan_predicate.cc, filters are created with
BlockBloomFilter::MinLogSpace. Prior to this patch, that method will
sometimes return a value that is lower than the true answer, leading
to smaller filters and higher false positive probabilities than
expected. This patch corrects BlockBloomFilter::MinLogSpace, leading
to filters having the expected false positive rate by dint of their
larger size. The performance impact here is dependent on the extent
than a scan is bottlenecked by heap space for the filter vs. compute
time for the scan predicate application to filter false positives.

For a false positive probability of 1%, as is currently set in
scan_predicate.cc, this patch leads to an increase in filter size of
about 10% and a decrease in filter false positive probability by
50%. However, this is obscured by the coarseness of the fact that
filters are constrained to have a size in bytes that is a power of
two. Loosening that restriction is potential future work.

Porting Notes:
 - The MaxNdv() function is not present in Impala, so it is omitted.
 - This resolves a test failure for ParquetBloomFilter.FindInvalid
   when building with GCC 10 and the associated libstdc++.
 - This adds a comment noting that the test is also dependent
   on the libstdc++ implementation of unordered_set.

Change-Id: Ic992e47976274e3ef0db3633d38e5a8e886274b4
Reviewed-on: http://gerrit.cloudera.org:8080/18807
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
7 weeks agoIMPALA-11250: Adapt Webserver.TestWithSpnego for curl >= 7.64.0
Joe McDonnell [Thu, 11 Aug 2022 05:47:44 +0000 (22:47 -0700)] 
IMPALA-11250: Adapt Webserver.TestWithSpnego for curl >= 7.64.0

Curl changed behaviors in 7.64.0. Previously, it would attempt
to connect without authentication, and for the SPNEGO test,
this would result in a failed attempt. Starting in Curl 7.64,
there is no attempt without authentication, so the count of
failed attempts is one less.

This detects whether the curl version is 7.64.0 or above
and adjusts the count of failed attempts accordingly.

Testing:
 - Ran Webserver.TestWithSpnego on Ubuntu 20 (curl version 7.68)
 - Ran Webserver.TestWithSpnego on Ubuntu 16 (curl version 7.47)

Change-Id: Icc9b92b334f878792ee649dafa30aed617e55589
Reviewed-on: http://gerrit.cloudera.org:8080/18832
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Wenzhe Zhou <wzhou@cloudera.com>
7 weeks agoIMPALA-11398: Ignore Flake8 rule E126
Zoltan Borok-Nagy [Thu, 11 Aug 2022 09:42:39 +0000 (11:42 +0200)] 
IMPALA-11398: Ignore Flake8 rule E126

In Impala we use 2 spaces for indentation, however for continuation
lines we use 4 spaces (or more if it makes the code look nicer).
This violates Flake8's rule E126 which generates noise during
code reviews.

This patch adds E126 to the list of ignored rules.

Change-Id: I1beb76feed90ee524d5c2c27487561891958e54c
Reviewed-on: http://gerrit.cloudera.org:8080/18836
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Michael Smith <michael.smith@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11489: Fix int overflow in >2GB ORC files
Csaba Ringhofer [Tue, 9 Aug 2022 16:33:51 +0000 (18:33 +0200)] 
IMPALA-11489: Fix int overflow in >2GB ORC files

This can lead to returning an error "Invalid read len.", but can't lead
to other problems like reading corrupt data or crashing.

The fix is trivial, but creating automatic tests for it seems hard,
so no regression test is added.

Change-Id: Id8438d3512b0ebaafd319f369c1f6871d980a599
Reviewed-on: http://gerrit.cloudera.org:8080/18827
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Reviewed-by: Csaba Ringhofer <csringhofer@cloudera.com>
Tested-by: Csaba Ringhofer <csringhofer@cloudera.com>
8 weeks agoIMPALA-11257: Fix CMake warnings for module names and cmake_minimum_required
Joe McDonnell [Tue, 15 Mar 2022 20:03:31 +0000 (13:03 -0700)] 
IMPALA-11257: Fix CMake warnings for module names and cmake_minimum_required

This fixes a few different CMake warnings:
1. This removes cmake_minimum_required invocations except for the
   top-most CMakeLists.txt. This eliminates the warnings like this:
     Compatibility with CMake < 2.8.12 will be removed from a future version of
     CMake.

     Update the VERSION argument <min> value or use a ...<max> suffix to tell
     CMake that the project does not need compatibility with older versions.
   Moving to a later version also required setting CMAKE_ENABLE_EXPORTS
   to continue exporting symbols.
2. This modifies the module names so that they match the corresponding
   module names from Find*.cmake. This is mostly dealing with case
   differences. This address warnings like:
     The package name passed to `find_package_handle_standard_args` (PROTOBUF)
     does not match the name of the calling package (Protobuf).  This can lead
     to problems in calling code that expects `find_package` result variables
     (e.g., `_FOUND`) to follow a certain pattern.
   This fixed the detection logic for KerberosPrograms, and so it required
   adding more Kerberos packages to bin/bootstrap_build.sh.
3. This adds a missing .cc suffix. This addresses the following warning:
     CMake Warning (dev) at be/src/util/CMakeLists.txt:141 (add_library):
     Policy CMP0115 is not set: Source file extensions must be explicit.  Run
     "cmake --help-policy CMP0115" for policy details.  Use the cmake_policy
     command to set the policy and suppress this warning.

These fixes mostly match how these warnings were handled in
Apache Kudu.

Testing:
 - Ran GVO

Change-Id: I2a97dd07cdd0831e90882a2035415ac71d670147
Reviewed-on: http://gerrit.cloudera.org:8080/18444
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11450: Support building on Centos 8 alternatives
Joe McDonnell [Thu, 21 Jul 2022 22:12:22 +0000 (15:12 -0700)] 
IMPALA-11450: Support building on Centos 8 alternatives

This adds support for Rocky Linux 8 and Alma Linux 8,
which are new Centos 8 alternatives. They use the
same toolchain as Centos 8.

Testing:
 - Ran docker-based tests on Rocky Linux and Alma Linux.
   The build passed and tests ran.

Change-Id: If10d71caa90d24e14d4cf6a28f5c27e03ef3c4c6
Reviewed-on: http://gerrit.cloudera.org:8080/18773
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11456: Collapse filesystem Skip logic
Michael Smith [Mon, 25 Jul 2022 17:53:25 +0000 (10:53 -0700)] 
IMPALA-11456: Collapse filesystem Skip logic

Combines all SkipIf* classes for different filesystems into a single
SkipIfFS class. Many cases are simplified to 'not IS_HDFS', with the
rest as filesystem-specific special cases. The 'jira' option is removed
in favor of specific flags for each issue.

Change-Id: Ib928a6274baaaec45614887b9e762346a25812a1
Reviewed-on: http://gerrit.cloudera.org:8080/18781
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11408: Fill missing partition columns when INSERT INTO iceberg_tbl (col_list)
LPL [Fri, 1 Jul 2022 02:51:27 +0000 (10:51 +0800)] 
IMPALA-11408: Fill missing partition columns when INSERT INTO iceberg_tbl (col_list)

In the case of INSERT INTO iceberg_tbl (col_a, col_b, ...), if the
partition columns of Iceberg table are not in the columns permutation,
in order for data to be written to the default
partition '__HIVE_DEFAULT_PARTITION__' we will fill the missing
partition columns with NullLiteral.

Testing:
 - add e2e tests

Change-Id: I40c733755d65e5c81a12ffe09b6d16ed5d115368
Reviewed-on: http://gerrit.cloudera.org:8080/18790
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11458: Update zlib and zstd
Michael Smith [Thu, 4 Aug 2022 19:11:14 +0000 (12:11 -0700)] 
IMPALA-11458: Update zlib and zstd

Updates zlib to 1.2.12 and zstd to 1.5.2. Requires a new toolchain
build.

Ran perf-AB-test to check for performance changes with parquet using
zstd and gzip. Only significant changes were slight improvement with
gzip.

Change-Id: If96fd5e8c49e581478b249bb8894001457742023
Reviewed-on: http://gerrit.cloudera.org:8080/18816
Reviewed-by: Joe McDonnell <joemcdonnell@cloudera.com>
Tested-by: Joe McDonnell <joemcdonnell@cloudera.com>
8 weeks agoIMPALA-11362: Add expire snapshots functionality for Iceberg tables
Tamas Mate [Mon, 20 Jun 2022 11:43:17 +0000 (13:43 +0200)] 
IMPALA-11362: Add expire snapshots functionality for Iceberg tables

Iceberg table modifications can create new table snapshots, these
snapshots can be used to access an earlier version of the table. During
the lifetime of a table the number of snapshots can accumulate and older
versions can become obsolete as well. Iceberg API provides a safe
solution to remove the snapshots that are not needed anymore, the
operation is called ExpireSnapshots.

This commit adds framework to execute Iceberg maintenance operation on
tables and implements the call of an expire snapshots operation. The
following statement becomes available for Iceberg tables:
 - ALTER TABLE <tbl> EXECUTE expire_snapshots(<timestamp>)

ExpireSnapshots Iceberg API calls were meant to be chained, the calls
are expireSnapshotId, expireOlderThan and retainLast. SQL is less
suitable for chained calls, therefore this commit implements only the
expireOlderThan functionality. However, in this case the retainLast call
will fall back to its default value (1), this default can be configured
with TableProperties.MIN_SNAPSHOTS_TO_KEEP.

This commit also refactors the Iceberg e2e tests and introduces
ImpalaTestSuite for the common methods that are used in test which
compare snapshot versions in some way.

Testing:
 - Added analysis unit tests.
 - Added e2e tests.

Change-Id: Ideffee4964c18c85ca745bfb4eca08ec362416f3
Reviewed-on: http://gerrit.cloudera.org:8080/18688
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11385: Upgrade JAVA thrift components to thrift-0.16.0
Riza Suminto [Wed, 1 Jun 2022 03:23:56 +0000 (20:23 -0700)] 
IMPALA-11385: Upgrade JAVA thrift components to thrift-0.16.0

This patch upgrade the JAVA thrift components to thrift-0.16.0. Most of
refactoring revolves around moving TSerializer and TDeserializer
intantiation within try block to after the following Apache Thrift
commit from thrift-0.14.0:

63213c1 Implements TConfiguration for java

Testing:
- Pass core tests.

Change-Id: I0a146d3a36938d43225da7c12bfe676c445d3944
Reviewed-on: http://gerrit.cloudera.org:8080/18804
Reviewed-by: Riza Suminto <riza.suminto@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
8 weeks agoIMPALA-11465, IMPALA-11466: Bump CDP_BUILD_NUMBER to 30010248
Riza Suminto [Sun, 31 Jul 2022 05:02:54 +0000 (22:02 -0700)] 
IMPALA-11465, IMPALA-11466: Bump CDP_BUILD_NUMBER to 30010248

This patch bump up CDP_BUILD_NUMBER to pick Hive version
3.1.3000.7.2.16.0-127 that contains:
- thrift-0.16.0 upgrade from HIVE-25635.
- Backport of ORC-517.

This patch also contains fix for IMPALA-11466 by adding jetty-server as
an allowed dependency.

Testing:
- Build locally and confirm that the cdp components is downloaded.

Change-Id: Iff5297a48865fb2444e8ef7b9881536dc1bbf63c
Reviewed-on: http://gerrit.cloudera.org:8080/18803
Reviewed-by: Riza Suminto <riza.suminto@cloudera.com>
Tested-by: Riza Suminto <riza.suminto@cloudera.com>