)]}'
{
  "log": [
    {
      "commit": "1092b077a85ee5c22716a29262f50a3dad8fd219",
      "tree": "4fb16506cfb0ab11f9e3782912a033fb7551468f",
      "parents": [
        "9bfa999bd9fb4e7d67f3a74aea50ca2f41e167ae"
      ],
      "author": {
        "name": "jasonmfehr",
        "email": "jfehr@cloudera.com",
        "time": "Wed Oct 14 09:50:16 2026 -0700"
      },
      "committer": {
        "name": "Jason Fehr",
        "email": "jfehr@cloudera.com",
        "time": "Wed Oct 14 22:36:47 2026 +0000"
      },
      "message": "IMPALA-15552: Partial Revert of IMPALA-14942 to Fix boostrap_system.sh\n\nThe patch for IMPALA-14942 included a change to the\nbin/bootstrap_system.sh script to perform a more thorough detection\nwhether or not the script is running inside a Docker container. The\nchange resulted in false positives when the script is run on machines\nthat host Docker containers.\n\nRevert the container detection changes back to the original code.\n\nTested by running the reverted code changes both inside and outside\ncontainers (including testing on Linux VMs where the previous code\nwas falsely indentifying as running inside a container).\n\nChange-Id: I43cd5c77fdf1d9c5baf67275f2ebb5ebb6b228e6\nReviewed-on: http://gerrit.cloudera.org:8080/25120\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Jason Fehr \u003cjfehr@cloudera.com\u003e\n"
    },
    {
      "commit": "9bfa999bd9fb4e7d67f3a74aea50ca2f41e167ae",
      "tree": "da6c3de035207c400f9e31f5d7e469ae401d121c",
      "parents": [
        "97c70a56615df56ca79672342d5444e8ad8866fb"
      ],
      "author": {
        "name": "Daniel Vanko",
        "email": "dvanko@cloudera.com",
        "time": "Fri Oct 02 12:26:02 2026 +0200"
      },
      "committer": {
        "name": "Noemi Pap-Takacs",
        "email": "npaptakacs@cloudera.com",
        "time": "Wed Oct 14 09:39:37 2026 +0000"
      },
      "message": "IMPALA-15413: Truncate Parquet page index min/max on UTF-8 boundaries\n\nTruncateDown()/TruncateUp() cut the per-page min/max string statistics\nat an arbitrary byte offset, splitting multi-byte UTF-8 sequences. Since\nIMPALA-12675 annotates STRING columns as UTF-8 by default, that writes a\nvalue that is not valid UTF-8 into a column the file declares as UTF8,\nwhich the Parquet spec does not allow.\n\nBoth functions now leave the value on a character boundary when the\ntruncated prefix is valid UTF-8, and keep the previous byte-wise\nbehaviour otherwise. The boundary comes from simdutf\u0027s\ntrim_partial_utf8(), wrapped as TrimPartialUtf8().\nTruncateUp() then replaces the last character whose successor still\nfits in the limit with that successor, skipping surrogates, and drops\nthe rest. When there is none (every character is U+10FFFF), it falls\nback to the byte-wise increment, so the page index is still written.\n\nThis also fixes TruncateDown() returning the whole string for inputs\nlonger than INT32_MAX, where the old cast of the length to int32_t went\nnegative.\n\nTesting:\n - extended TruncateDownTest, TruncateUpTest and Utf8UtilTest\n - added test_utf8_string_values for STRING, VARCHAR and CHAR, which\n   fails without the fix\n - test_parquet_page_index.py, string-util-test and utf8-util-test pass\n\nChange-Id: Ib50b12a62cfad863825b1994b95a339ef6e5b788\nAssisted-by: Claude Opus 5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/25008\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Noemi Pap-Takacs \u003cnpaptakacs@cloudera.com\u003e\n"
    },
    {
      "commit": "97c70a56615df56ca79672342d5444e8ad8866fb",
      "tree": "97c5a36604123e8934f4f1be7e2a11e3cb593f56",
      "parents": [
        "1a7c149d2da310f18180575aeedcb96e89e42a2a"
      ],
      "author": {
        "name": "Noemi Pap-Takacs",
        "email": "npaptakacs@cloudera.com",
        "time": "Wed Jul 08 17:26:21 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 13 18:24:21 2026 +0000"
      },
      "message": "IMPALA-15060: Bump CatalogServiceVersion\n\nImpala used to be on V2 Catalog version for a long time.\nSince then, many features caused breaking changes to the\nThrift interface in the communication between the Catalog\nand the Coordinator, either on semantic level or wire-level.\n\nThis patch increments the CatalogServiceVersion in\nCatalogService.thrift to mark these changes.\n\nChange-Id: I3cf740ae7e997b979175ad6f38554b1798a7972f\nReviewed-on: http://gerrit.cloudera.org:8080/24562\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "1a7c149d2da310f18180575aeedcb96e89e42a2a",
      "tree": "a14828b27dc0b8a1c90c3ff2cf1754f3a138ce22",
      "parents": [
        "ca40f73cbf374971d552bb6c1d6f925aef3adae7"
      ],
      "author": {
        "name": "hexianqing",
        "email": "hexianqing312@126.com",
        "time": "Tue Oct 13 18:03:18 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 13 16:23:39 2026 +0000"
      },
      "message": "IMPALA-15547: Fix LIKE pattern truncation at embedded NUL bytes\n\nIMPALA-12374 optimized constant LIKE/ILIKE patterns by trimming leading and\ntrailing % wildcards and using anchored partial regex matching. The\nconversions to StringVal used the null-terminated StringVal(const char*)\nconstructor, whose length comes from strlen(). A constant pattern with an\nembedded NUL byte was therefore silently truncated before\nConvertLikePattern() compiled the regex, producing wrong LIKE/ILIKE results.\n\nUse the length-aware StringVal(uint8_t*, int) constructor for the raw and\ntrimmed pattern in OptimizeConstantPatternMatch() to preserve every byte.\n\nTesting:\n- Added regression tests in be/src/exprs/like-predicate-test.cc covering an\n  untrimmed pattern (\"a%NULb\") and a pattern trimmed on both sides\n  (\"%aNUL_%\"), with matching and non-matching values, in case-sensitive and\n  case-insensitive modes. Verified they fail before the fix and pass after.\n\nChange-Id: Idf91f8bfdb8b8a1e6510b788bd6fbd70edcc3704\nAssisted-by: DeepSeek V4.1 Flash (opencode)\nReviewed-on: http://gerrit.cloudera.org:8080/25114\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "ca40f73cbf374971d552bb6c1d6f925aef3adae7",
      "tree": "344302a142dd5641581c047d7fa123bf8f29f80a",
      "parents": [
        "9bc003f92207fed78e821a3953285b3f7fea44a7"
      ],
      "author": {
        "name": "m-sanjana19",
        "email": "malhotrasanjana1993@gmail.com",
        "time": "Thu Oct 01 15:39:48 2026 +0530"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 13 06:33:52 2026 +0000"
      },
      "message": "IMPALA-15415: [DOCS] Documentation for HBO\n\nChange-Id: I75fc76691ceed4e74e5c1aec3a409e1c41d4db7d\nReviewed-on: http://gerrit.cloudera.org:8080/24993\nReviewed-by: Quanlong Huang \u003chuangquanlong@gmail.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "9bc003f92207fed78e821a3953285b3f7fea44a7",
      "tree": "892bada65b52683958303b2c1d2711059ef2f993",
      "parents": [
        "313c8062b6ec1d07715a8b9f3fc6c606a3ea2ab3"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Fri Oct 02 14:40:33 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 13 00:57:06 2026 +0000"
      },
      "message": "IMPALA-15468: Calcite planner: Preserve view validation errors during alias correction\n\nLimit alias correction to qualified columns with AS and preserve unaffected\nSELECT items, avoiding secondary ClassCastException on view validation errors.\n\nCover SUM(BOOLEAN) analysis failures, mixed projections and Hive-generated\naliases. Leave temporal TRUNC view coverage to IMPALA-15484.\n\nTests: 17 focused Maven methods standalone and 50 with the six pilot fixes.\nFull upstream precommit remains unverified.\n\nChange-Id: Ib51c4f3bacfdad76dc4dc4a08885b0d5e964e072\nAssisted-by: GPT-6 (Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/25006\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "313c8062b6ec1d07715a8b9f3fc6c606a3ea2ab3",
      "tree": "b29c87d13278c4fb59659951d5c300f41c7f212c",
      "parents": [
        "d13a226823d57fe7f9b64cde5fdb8fd65967cd66"
      ],
      "author": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Tue Aug 18 09:04:16 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 12 23:08:25 2026 +0000"
      },
      "message": "IMPALA-15269: Decimal operands in comparisons do not need casting\n\nIn the Calcite planner, we need to avoid the casting of decimal operands\nin binary comparisons. Before this commit, a query failed because it\ncould not find a compatible decimal to dec(22,8) and dec(36,35).\n\nTesting: Ran e2e suite with Calcite planner on to make sure there\nwere no wrong results.\n\nChange-Id: I226e4a7d105e963f3263fb8a71acb5fdef7ffa94\nReviewed-on: http://gerrit.cloudera.org:8080/24709\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "d13a226823d57fe7f9b64cde5fdb8fd65967cd66",
      "tree": "aa46f71685d6c1d49364dfe1c2f56ccac0adff67",
      "parents": [
        "cfdeef079f9706788664f0e4e4784f3f92cb308d"
      ],
      "author": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Wed Apr 01 20:10:18 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 12 22:16:33 2026 +0000"
      },
      "message": "IMPALA-14940: Calcite planner: handle broadcast and shuffle hints.\n\nThese hints have been added to the parser, rules, and physical node\nconverter in a similar way that the straight join was processed.\n\nOther added changes to handle all hints include:\n\n- The straight join was only being handled at the beginning of the query,\ne.g. \"select straight_join ...\".  The broadcast and shuffle hints are\nplaced near the JOIN keyword. Calcite had this mechanism in place, but\nit needed to be added and placed in the correct position for the validator\nto handle it.\n\n- The Calcite hints are handled with \"[]\" or \"/*+ */\", and this code was\nalso added.\n\n- Some joins were not parsing correctly that are now fixed. Impala allows\njoins that do not have the ON clause or even a comma separator. For instance,\nthis SQL statement now passes in Impala that did not pass in Calcite:\n    \"select min(t1.`1` + t2.`1`) from t t1 join t t2;\"\nSome logic was added to the parser to handle this. The \"joinType\" is treated\nas a \"COMMA\" join type since any join condition will exist in the WHERE clause\nand not attached to the SqlJoin directly.\n\n- There is an issue that the hint gets applied too broadly when multiple joins\nare in a \"from\" clause. Impala syntax allows a hint to be specified on a\nspecific join between two tables. IMPALA-15251 has been filed to address this\nat a later date.\n\n- One note on implementation: In order to honor the hint, the join ordering\nis disabled in this iteration. The idea here is that the hint is specific\nto the joining of two specific tables, and join ordering could make the\nhint irrelevant.\n\nTesting: Added one direct test to make sure cross join syntax works.\n\nWhile no direct tests are added for the hints, this is one step among many that\nwill ensure we can do a Jenkins run without the original planner as the\nfallback planner. Any test that tests shuffle and broadcast will succeed now.\nAlso, the above query without the ON clause is in the test framework and this\nquery, among others, will also no longer fallback to the original planner.\n\nChange-Id: Ie5a932cc09d3d370aa627228d0e226a92fa03168\nReviewed-on: http://gerrit.cloudera.org:8080/24257\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "cfdeef079f9706788664f0e4e4784f3f92cb308d",
      "tree": "85fa721337fc01f434bb9605174ed1e98cf6386f",
      "parents": [
        "0b78b9002c3e45d9758bfde526be0b6d7bffb4fb"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Mon Oct 12 09:19:20 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 12 21:17:11 2026 +0000"
      },
      "message": "IMPALA-14148: Include libstdc++ for older OS\n\nAdds toolchain GCC rpath for Kudu protobuf tools used during build to\nfix\n\n    protoc-gen-insertions: /lib64/libstdc++.so.6: version\n    `GLIBCXX_3.4.29\u0027 not found\n\non RedHat 8 builds.\n\nChange-Id: I42f4b136e6994b6f84c1fcd245f57aff82ed5b57\nReviewed-on: http://gerrit.cloudera.org:8080/25106\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "0b78b9002c3e45d9758bfde526be0b6d7bffb4fb",
      "tree": "0b23b27343a61bf6dd2a641144134bc9c06559f6",
      "parents": [
        "052853e12c5370b1f6d885d00adef8c13787d379"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 08 08:41:19 2026 +0300"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Mon Oct 12 18:19:04 2026 +0000"
      },
      "message": "IMPALA-14404: Test Calcite set operations\n\nAdd Calcite-only runtime coverage for UNION ALL, UNION, INTERSECT,\nand EXCEPT. Check NULLs, duplicate rows, three inputs, decimal\ncoercion, empty inputs, and Impala\u0027s set-operator precedence.\nRequire the Calcite planner in every profile and retain a scan in\ncases whose input becomes empty during execution.\n\nTest decimal input coercion directly in CoerceNodes with a UNION\nconstructed after SQL analysis, so validator-inserted casts cannot\nsatisfy the assertions.\n\nTesting on 7a3cb82b49:\n- CalciteOptimizerTest: 12 tests passed.\n- test_set_operations: all 19 SQL cases passed over HS2.\n- Disabling UNION input casts makes the new Java test fail.\n\nChange-Id: I151ee9e344dc17e0c0aa0745ccdc13962b7fb939\nAssisted-by: gpt-6-astra (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24792\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "052853e12c5370b1f6d885d00adef8c13787d379",
      "tree": "95c93e1414e554e26e48e693cf38d9498ac2adbc",
      "parents": [
        "1a26e1f7786db0bb4f0203ddbe33a6a34f6edde5"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Mon Oct 05 14:38:00 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 12 05:02:14 2026 +0000"
      },
      "message": "IMPALA-15478: Use actual file count in HBO test\n\nThe count-star HBO test expects scan cardinality 2 from the standard\nParquet orders fixture. The reported erasure-coding run has one\nfile, so its optimized count(*) scan correctly reports cardinality 1.\n\nRead the file count with SHOW FILES and substitute it in the expected\ncount-star scan plan. Keep the aggregate and ordinary scan estimates,\nHBO annotations and exact cardinality-line comparison unchanged.\nOther HBO test cases continue to use their existing golden plans.\n\nTesting: focused count-star HBO pytest passed after the rebase.\n\nChange-Id: I0df5a56a0e866529e9a2b087ad755377cdeb370f\nAssisted-by: GPT-6 (Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/25015\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "1a26e1f7786db0bb4f0203ddbe33a6a34f6edde5",
      "tree": "27bf792f02e96b089122063c19dcd2a38427bac3",
      "parents": [
        "f5fb685b1f08e85f8fc88861a77e995acd271862"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 15 10:08:09 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Fri Oct 09 19:30:49 2026 +0000"
      },
      "message": "IMPALA-14148: Update Protobuf to 3.21.9\n\nUpdates Protobuf to 3.21.9 to match Kudu so we can build updated proto\nfiles from Kudu.\n\nUpdated with fixes for ZLIB and RHEL 10, and to point to a build from\ncloudera/native-toolchain#master.\n\nChange-Id: If47164f01a97e1ff80fd109e682b9576a197a1cb\nReviewed-on: http://gerrit.cloudera.org:8080/25076\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "f5fb685b1f08e85f8fc88861a77e995acd271862",
      "tree": "34748b83d7624b02e59d340465fd03fe0e6d3ec8",
      "parents": [
        "1d961e58d9a9726f08413227d410ec43b77501de"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Thu Sep 10 21:47:50 2026 +0800"
      },
      "committer": {
        "name": "Quanlong Huang",
        "email": "huangquanlong@gmail.com",
        "time": "Fri Oct 09 07:40:18 2026 +0000"
      },
      "message": "IMPALA-14598: Store HBO cache in Redis/Valkey\n\nThis patch adds support for storing the HBO stats in Redis/Valkey, which\nlets multiple impalad coordinators read and write the same history, and\nlets the history survive coordinator restarts.\n\nTo support this a CacheBackend is implemented using JedisPool. HBO\nvalues, i.e. List\u003cTPlanNodeRun\u003e, are serialized to Thrift binary as\nTHistoricalStatsValue.\n\nThe following flags are added:\n- hbo_cache_backend: Select the HBO cache backend implementation.\n  Values: in_memory (the default per-coordinator Guava cache) or\n          redis (distributed cache backed by a Redis/Valkey server).\n  Note: When using redis, the database instance/index should be\n  dedicated solely to HBO, as HBO operations (such as clearing the\n  cache) can flush the entire database.\n- hbo_cache_redis_host: Redis/Valkey server hostname or IP address.\n  Default: localhost\n- hbo_cache_redis_port: Redis/Valkey server port. Default: 6379.\n- hbo_cache_redis_password_cmd: A Unix command whose output returns the\n  password of the Redis/Valkey server.\n  Default: \"\" (no authentication)\n- hbo_cache_redis_db: Redis/Valkey logical database index to use.\n  Default: 0. Redis supports 16 databases by default (0-15).\n- hbo_cache_redis_timeout_ms: Timeout for Redis/Valkey operations in\n  milliseconds. Default: 2000.\n- hbo_cache_redis_max_connections: Maximum number of connections in the\n  Redis/Valkey HBO cache client connection pool (JedisPool). The pool is\n  shared across all queries on a coordinator.\n  Default: 16\n- hbo_cache_redis_ttl_seconds: Time-to-live in seconds for HBO cache\n  entries in Redis/Valkey. The TTL is refreshed on every write. 0\n  disables expiry.\n  Default: 4320000 (50 days).\n\nMoved all hbo_* flags to backend-gflag-util.cc since they are only used\nin Frontend.\n\nTo test this feature, instead of adding Redis/Valkey into the\nnative-toolchain, we use the official valkey/valkey docker image and\nlaunch a Valkey container.\n\n:clear_hbo_stats() now could fail if using Redis/Valkey as the cache.\nIt\u0027s updated to show the error message in such case.\n\nTesting\n- Add FE tests that do not require a running Redis/Valkey server.\n- Add e2e tests which run a Valkey container.\n\nAssisted-by: Opus 4.8 (Claude Code)\nChange-Id: I43a171bcd436f57bcff14ceaaaa98c0f7dcec769\nReviewed-on: http://gerrit.cloudera.org:8080/24822\nReviewed-by: Aleksandr Efimov \u003cdzazheg@gmail.com\u003e\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "1d961e58d9a9726f08413227d410ec43b77501de",
      "tree": "ad14a0ac7d9e5cb9ce48a3240ded701342189018",
      "parents": [
        "5d6ca16dd9382d89c0aaefdf0f72c060ceaf0f96"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Oct 08 18:16:20 2026 +0200"
      },
      "committer": {
        "name": "Joe McDonnell",
        "email": "joemcdonnell@cloudera.com",
        "time": "Fri Oct 09 02:33:25 2026 +0000"
      },
      "message": "IMPALA-15526: Fix self-join typo in tpcds-unmodified q78\n\nThe cs join of tpcds-unmodified q78 had cs_item_sk\u003dcs_item_sk instead\nof cs_item_sk\u003dss_item_sk, unlike the TPC-DS specification and the\ntpcds and tpcds_partitioned copies. The join then matched on year and\ncustomer only and became many-to-many.\n\nSince tpcds-unmodified is the performance test workload, this also\nchanges q78 baseline numbers.\n\nTesting:\n- No functional test runs this query (TestTpcdsUnmodified only runs\n  q31, q35a, q48, q59 and q89).\n\nChange-Id: I9b5c6c11cc7badd70a1667527b98d3e71125fac8\nAssisted-by: Claude Opus 5.5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/25074\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "5d6ca16dd9382d89c0aaefdf0f72c060ceaf0f96",
      "tree": "2ab525a6826f057bfce6f936d4d28a8043c083dc",
      "parents": [
        "f58f5a837ec7521ba2dfe4e61148fbd2abbdcaea"
      ],
      "author": {
        "name": "Joe McDonnell",
        "email": "joemcdonnell@cloudera.com",
        "time": "Thu Jun 18 16:35:13 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Oct 08 22:45:57 2026 +0000"
      },
      "message": "IMPALA-15316: Support huge pages with aggressive decommit off\n\nCurrently, running with tcmalloc_aggressive_memory_decommit\u003dfalse\nis incompatible with using madvise_huge_pages\u003dtrue. Gperftools\nTCMalloc can hold on to memory and potentially break up huge\npages. That can lead to deceptive memory usage metrics.\n\nThis changes the system allocator to use mmap for huge pages\nwhen tcmalloc_aggressive_memory_decommit\u003dfalse. This bypasses\nmalloc and avoids any issues with TCMalloc behavior. This does\nnot add a new startup flag. Instead, it is now possible to use\ntcmalloc_aggressive_memory_decommit\u003dfalse together with\nmadvise_huge_pages\u003dtrue. Users can disable the mmap behavior\nby using madvise_huge_pages\u003dfalse.\n\nThis adds the buffer-pool.mmapped-bytes metric to track memory\nallocated via mmap. This is included in the process memory\ntracker.\n\nThis does not change the behavior when building with Google\nTCMalloc, as it is already huge page aware.\n\nTesting:\n - Ran tests with tcmalloc_aggressive_memory_decommit\u003dfalse\n   and madvise_huge_pages\u003dtrue.\n\nChange-Id: I13ac5f065104d5cf35efb5029ba3c4d482904096\nReviewed-on: http://gerrit.cloudera.org:8080/24761\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "f58f5a837ec7521ba2dfe4e61148fbd2abbdcaea",
      "tree": "752346c40f3cf1cb857fe434754d81afe191c15d",
      "parents": [
        "68ea38cd5f2f2d403351bc5b8a3b5a253dfe17ca"
      ],
      "author": {
        "name": "Nandor Kollar",
        "email": "kollar.nandor@gmail.com",
        "time": "Thu Oct 01 16:37:25 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Oct 08 20:47:13 2026 +0000"
      },
      "message": "IMPALA-13591: Fix NPE when dropping column used in old partition spec\n\nDropping an Iceberg column that was previously used in a partition spec\n(but no longer in the active spec) causes an NPE during table metadata\nreload. convertPartitionSpec() assumes all partition field source columns\nexist in the current schema, which fails after spec evolution + column\ndrop.\n\nWhen findColumnName() returns null for a dropped source column, create a\nVOID placeholder partition field instead of crashing. The BE already\nskips VOID fields everywhere it iterates partition specs.\n\nTesting: Added regression test in iceberg-alter-v2.test that creates a\ntable with bucket(7, p), evolves to bucket(7, i), drops column p, and\nverifies both DDL success and data readability.\n\nChange-Id: Ie5f1439b31d7f460008760909306607018ac094f\nAssisted-by: Claude Opus 4.6 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24994\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "68ea38cd5f2f2d403351bc5b8a3b5a253dfe17ca",
      "tree": "69a0e1cdc44872c8cb289690fa845606dc3a3707",
      "parents": [
        "7e586ff1f57444ed4c89500061585d6933095ba8"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Oct 06 21:36:39 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Oct 08 19:39:04 2026 +0000"
      },
      "message": "IMPALA-15320: Enforce write capabilities for Iceberg and Kudu DML\n\nRoute MERGE, UPDATE, DELETE and OPTIMIZE through the common WRITE\ncapability check. This enforces the existing bucketed-table and HMS\nwrite restrictions and replaces the REST-only guard.\n\nKeep REST tables limited to INSERT INTO and preserve the Kudu\nexception to HMS access-type checks.\n\nTesting:\n- Focused Linux Java and fesupport build\n- AnalyzerCapabilityTest: 3 tests\n- AnalyzeModifyStmtsTest: capabilities, UPDATE and MERGE (4 tests)\n- AnalyzeStmtsTest#TestOptimizeNoOp\n\nChange-Id: I7aa7c539a00a0adf8c8c39727e25e274bc98c866\nAssisted-by: GPT-6 (Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/25034\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "7e586ff1f57444ed4c89500061585d6933095ba8",
      "tree": "c9bb66fd6192172d323f7240fec364929b595504",
      "parents": [
        "5ba3d8d69fc5c9f7052901565ab0e22586408d67"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 01 11:37:19 2026 +0300"
      },
      "committer": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Thu Oct 08 17:31:44 2026 +0000"
      },
      "message": "IMPALA-15312: Say when HBO changed a join\u0027s build side\n\nIMPALA-15236 puts the provenance of an HBO cardinality next to the\nnumber: the strategy that matched, the hash key, the estimate the planner\ncomputed itself and the ratio between the two. That says where the number\ncame from, not whether it changed anything.\n\nJoin inversion is where the two come apart. Planner.invertJoins() weighs\nthe two inputs by cardinality, row size and parallelism, so a corrected\nestimate can flip the verdict while the shape of the plan, its operator\ncounts and its node ids all stay put. On an outer-join-heavy report this\nturned sixty joins from RIGHT OUTER back to LEFT OUTER, and comparing the\ntwo plans by operator counts called them identical.\n\nRun the same cost model a second time on the estimates the planner\ncomputed for the two inputs, and record the outcome on the join when the\nverdicts differ. At EXTENDED and above the join then prints\n\n  HBO chose the build side: without it this join would have been inverted\n\nThe comparison is local. A match further down the tree is already folded\ninto both numbers, so this answers \"did the substitution on an input\ndecide this\", not \"would the plan differ under use_hbo_stats\u003dfalse\" - the\nsecond question needs a second planning pass, which is more than a detail\nline is worth.\n\nTesting:\n- New HboJoinInversionTest, three cases: no match leaves no note; a\n  seeded match that removes an inversion is recorded and printed; the\n  line stays out of the default explain level. The history is seeded\n  directly, so the tests do not depend on an earlier run.\n\nChange-Id: Ifc9517936c3f93865917a5f3fa3924c641374fcd\nAssisted-by: claude-opus-5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24781\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\n"
    },
    {
      "commit": "5ba3d8d69fc5c9f7052901565ab0e22586408d67",
      "tree": "f6658684b6a61917c519bd47f33c85f2e35b48df",
      "parents": [
        "baf1e8fe93af058d48bc468ab2d3a7b5f52ebbb3"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 08 15:32:14 2026 +0000"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 08 15:57:07 2026 +0000"
      },
      "message": "IMPALA-14148: Revert \"Update Protobuf to 3.21.9\"\n\nThis reverts commit baf1e8fe93af058d48bc468ab2d3a7b5f52ebbb3.\n\nReason for revert: native-toolchain build was incomplete, only covered\nUbuntu 20.04, 24.04, and RHEL 8.\n\nChange-Id: I0b3356583755826fdf12c83250f60c9ea66fdf46\nReviewed-on: http://gerrit.cloudera.org:8080/25064\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "baf1e8fe93af058d48bc468ab2d3a7b5f52ebbb3",
      "tree": "2731ad6165f4b1153098b035d5feb4719c13bf05",
      "parents": [
        "51e080d2933eae166c1cb50e2e0d1785bea5e25b"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 15 10:08:09 2026 -0700"
      },
      "committer": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Thu Oct 08 07:53:25 2026 +0000"
      },
      "message": "IMPALA-14148: Update Protobuf to 3.21.9\n\nUpdates Protobuf to 3.21.9 to match Kudu so we can build updated proto\nfiles from Kudu.\n\nChange-Id: I25e2c5e1a870ed0cf37da1297ffafb8e259ad606\nReviewed-on: http://gerrit.cloudera.org:8080/24936\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\n"
    },
    {
      "commit": "51e080d2933eae166c1cb50e2e0d1785bea5e25b",
      "tree": "f6658684b6a61917c519bd47f33c85f2e35b48df",
      "parents": [
        "4a0f79afdb84f75e42377a5c8cd4559760e10348"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 08:43:28 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 08 03:26:49 2026 +0000"
      },
      "message": "IMPALA-15511: Add RESULTS: RETRY\u003dN[@SLEEP_MS] to query tests\n\nAdds a RETRY\u003dN option to the RESULTS subsection of query tests. If\nverifying the results fails, the query is re-executed up to N times\nin total. An optional @SLEEP_MS suffix sleeps that many milliseconds\nbefore each retry, e.g. RETRY\u003d10@1000 for 10 attempts with 1000ms\nbetween them. This is useful for waiting on asynchronous operations.\n\nUses RESULTS: RETRY\u003dN@SLEEP_MS to retry queries while waiting on\nasynchronous Kudu operations.\n\nChange-Id: Ia9ca0f5f923298a46b32b313a3eaffd19e0e0bd6\nAssisted-by: Claude Sonnet 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/25047\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "4a0f79afdb84f75e42377a5c8cd4559760e10348",
      "tree": "5b0be00c54312ef80b77e46cd140e3d0278d2aee",
      "parents": [
        "bd230581587e4254ccf25cb2a1ea080b8d14ea10"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 08:43:45 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 08 03:26:49 2026 +0000"
      },
      "message": "IMPALA-15463: Use Kudu live row count stats\n\nUse Kudu\u0027s getLiveRowCount() when HMS row count isn\u0027t available. This\naffects planning and SHOW TABLE STATS.\n\nUpdates tests that previously relied on Kudu returning -1 rows.\n\nChange-Id: I17d806fa9f849bb66fac5dfb500f83fc6d115b58\nReviewed-on: http://gerrit.cloudera.org:8080/24976\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "bd230581587e4254ccf25cb2a1ea080b8d14ea10",
      "tree": "c460cd3e8e5b705ed1bfe4342e3051fddeea8c28",
      "parents": [
        "3ed95af420c104d5a61bca67c5a2747603613f28"
      ],
      "author": {
        "name": "Balazs Hevele",
        "email": "bhevele@cloudera.com",
        "time": "Wed Oct 07 10:59:08 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 19:53:49 2026 +0000"
      },
      "message": "IMPALA-15491: Restore CDP_PARQUET_VERSION\n\nCDP_PARQUET version was disabled temporarily, in IMPALA-14700, because\nthe version wasn\u0027t high enough to support LZ4_RAW compression, and\nImpala used APACHE_PARQUET_VERSION instead.\nNow that CDP_PARQUET is a high enough version, it is re-enabled.\n\nTesting:\n-built impala and ran lz4_raw compression test\n\nChange-Id: Ia2fb48c19ae0f9e3b70547500e58df85b738dee8\nReviewed-on: http://gerrit.cloudera.org:8080/25042\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "3ed95af420c104d5a61bca67c5a2747603613f28",
      "tree": "a459b238ca7d20537fefe2904fd9ed1f8aa75908",
      "parents": [
        "040ff46ae14e6894213ecc22874614377314fac5"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 15 10:43:24 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 18:35:59 2026 +0000"
      },
      "message": "IMPALA-15358: Cap Kudu DML writers to partition count\n\nFor INSERT/UPSERT into a partitioned Kudu table, the planner inserts a\nKUDU-partitioned exchange ahead of the KuduTableSink. At runtime,\nKrpcDataStreamSender routes each row to channel (partition_index %\nnum_channels), where partition_index is the actual Kudu tablet index\n(bounded by the table\u0027s tablet count). The writer fragment\u0027s instance\ncount, however, was sized like any other fragment (mt_dop / cost-based\nscaling) with no awareness of the target table\u0027s partitioning. Whenever\nthe scheduler assigned more writer instances than the table has tablets,\ninstances index \u003e\u003d tablet count never received rows, causing work skew.\n\nCap the writer fragment\u0027s instance count at the Kudu table\u0027s partition\ncount via an RPC, reusing the existing MAX_FS_WRITERS mechanism\n(DmlStatementBase.maxTableSinks_). KuduTableSink now honors the same cap\nvia PlanFragment.getNumNodes()/getNumInstances().\n\nUpdates Kudu support for MAX_FS_WRITERS and CPC to match HDFS.\n\nAlso caps CTAS based on an estimate of the number of tablets.\n\nAdds planner and end-to-end tests. Planner tests with CPC use\napproximate segment-costs as they\u0027re susceptible to small differences in\nstatistics that can vary across environments.\n\nChange-Id: Ia3644fb245ceac72e91ed70c8c0392f65df75fde\nAssisted-by: Claude Sonnet 4.5, 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24852\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "040ff46ae14e6894213ecc22874614377314fac5",
      "tree": "22306bcb1f4ce1d9f5bbae9aa39e31938364abe0",
      "parents": [
        "500b38b388cb12e065a2573ba262a437e753c55d"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Wed Oct 07 14:15:11 2026 +0200"
      },
      "committer": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Wed Oct 07 17:00:00 2026 +0000"
      },
      "message": "IMPALA-15506: Add utility to test Spark with impala minicluster\n\nAdd convenience scripts to test Spark (4.1.3 by default) with\nthe Impala minicluster. Based on similar scripts for Trino:\nstart/stop/run sql with run-spark.sh/kill-spark.sh/spark-sql.sh\n\nThe official Spark docker image is used unmodified, so there is no\nimage to build. run-spark.sh bind mounts the Iceberg runtime jar and\na conf directory assembled from the minicluster configuration, and\npasses everything the image would otherwise bake in as environment\nvariables. The jar is downloaded from Maven Central on the first run.\nBoth mount sources live under testdata/bin/minicluster_spark and are\ngitignored.\n\nNo tests added at this point, the goal is only to help with testing\nSpark\u003c-\u003eImpala interop.\n\nThe main motivation was GEOMETRY testing, so newest (1.12.0) Iceberg\nis used in Spark instead of Impala\u0027s 1.11.0. Versions used can be\noverridden with env vars read by run-spark.sh.\n\nChange-Id: I7c87024e898f49e5c4afb737463f728210d018c6\nAssisted-by: Claude Opus 5\nReviewed-on: http://gerrit.cloudera.org:8080/25043\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\n"
    },
    {
      "commit": "500b38b388cb12e065a2573ba262a437e753c55d",
      "tree": "c16be9bd4d99e4375464ab54fa98a0cc5611b85c",
      "parents": [
        "d2b99d164a4fef66cd8e975e1ba257459986e370"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Oct 01 01:00:30 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 15:52:52 2026 +0000"
      },
      "message": "IMPALA-15461: Look up Iceberg partition specs by id\n\nImpala assumed that the partition spec with id N is at position N of\nthe table\u0027s spec list. Since Iceberg 1.8.0,\nExpireSnapshots.cleanExpiredMetadata(true) removes unused specs and\ncan leave e.g. only spec 1. On such tables HdfsTableDescriptor read\npast the end of its spec vector and crashed impalad, and the frontend\nthrew IllegalStateException in getDefaultPartitionSpec(). With specs\n[1, 2] and default spec 1 both silently used spec 2. The Iceberg\ndelete sink had the same problem for files of non-default specs.\n\nThis patch looks up specs by id. HdfsTableDescriptor keeps them in a\nmap and resolves the default spec in a new Init(), which returns an\nerror if it is missing. IcebergDeleteSinkBase and\nFeIcebergTable.Utils.getDefaultPartitionSpec() also look up by id.\n\nTesting:\n - Added BE, FE and EE tests for tables with non-dense spec ids.\n\nAssisted-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I8a0aa3364048a3e7957593ca8f98592b43f2fcd8\nReviewed-on: http://gerrit.cloudera.org:8080/24991\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "d2b99d164a4fef66cd8e975e1ba257459986e370",
      "tree": "86bae68191f51e81c85c6b344d115c068a59c136",
      "parents": [
        "930fc6149d015811f9c99edf187b64bc183facb4"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Wed Sep 30 22:56:02 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 15:47:32 2026 +0000"
      },
      "message": "IMPALA-14778: Fix Close() crashes in Iceberg metadata and Paimon scans\n\nIcebergMetadataScanNode::Close() crashed impalad when Open() did not\ncomplete:\n - If the scanner was never created, e.g. because a UNION closed an\n   unopened child after a cancellation or after reaching its LIMIT,\n   Close() dereferenced a null \u0027metadata_scanner_\u0027.\n - If the base table was dropped, failed to load or was no longer an\n   Iceberg table when Open() reloaded it, the Java scanner\u0027s\n   constructor threw, and Close() passed the uninitialized\n   \u0027jmetadata_scanner_\u0027 to DeleteGlobalRef().\n\nThis patch initializes the pointer and checks the scanner in Close().\nJniFrontend.getCatalogTable() throws TableNotFoundException instead of\nreturning null, and IcebergMetadataScanner checks the table, so these\ncases fail with \"Cannot scan metadata table ...\" and the load error as\nthe cause. IcebergMetadataScanNode::GetNext() now calls\nExecDebugAction() like other scan nodes.\n\nPaimonJniScanner and PaimonJniScanNode::Close() had the same two bugs\nand are fixed the same way. PaimonJniScanner::Close() now calls the Java\nclose() through JniCall, so an exception from it is logged instead of\nbeing left pending on the thread.\n\nIcebergMetadataScanner also leaked the JNI global reference to the\nbase table, and the Java scanner never closed its Iceberg iterators,\nleaving manifest readers open, e.g. for ENTRIES. Close() now deletes\nthe reference and calls the new Java close(), and the rows iterator\nof each task is closed when the scan moves to the next task.\n\nTesting:\n - Added EE tests for the crashing cases, a metadata table query to\n   test_failpoints.py, and FE tests.\n - Checked manually that \u0027JNI global refs\u0027 (jcmd Thread.print) no\n   longer grows with metadata table queries.\n\nAssisted-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I0519035ecdca966bdc1a26147a157dc62bad2d8f\nReviewed-on: http://gerrit.cloudera.org:8080/24989\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "930fc6149d015811f9c99edf187b64bc183facb4",
      "tree": "e107a84cde9a94417a64a3967b565a2d4497b143",
      "parents": [
        "60c28011ec727ff17817546cbc267bb7834fe979"
      ],
      "author": {
        "name": "Anubhav Jindal",
        "email": "anubhavjindal30@gmail.com",
        "time": "Mon Oct 05 14:14:13 2026 -0700"
      },
      "committer": {
        "name": "Jason Fehr",
        "email": "jfehr@cloudera.com",
        "time": "Wed Oct 07 14:54:15 2026 +0000"
      },
      "message": "IMPALA-12232: Validate JWT aud/iss claims\n\nValidate configured audienceClaims and issuerClaims after token signature\nverification for both JWT and OAuth auth flows, including HS2 HTTP and\nwebserver paths.\n\nExtend oauth_servers parsing to accept audienceClaims/issuerClaims and\nalign claim validation behavior with JWT RFC requirements for aud/iss\nsemantics.\n\nAddress follow-up review feedback by adding targeted null checks,\npreserving HTTP error response headers in test transport code, and\nstrengthening JwtHttp negative tests to assert claim-specific auth\nfailures from WWW-Authenticate headers.\n\nRemove obsolete --jwt_validate_signature usage in JwtHttpTest startup\nflags so custom-cluster tests use supported oauth_servers options.\n\nTesting:\n- Linux: fe mvn test -Dtest\u003d\u0027JwtHttpTest#testJwtAuthWithWrongIssuerClaim+\n  testJwtAuthWithWrongAudienceClaim+testJwtAuthWithMissingAudienceClaim\u0027\n- Linux: be/build/debug/util/oauth-server-config-test\n\nChange-Id: I0a00b126359f2bc7e2f73d894cebc2b9014c7375\nAssisted-by: GPT-5.3 (Cursor)\nReviewed-on: http://gerrit.cloudera.org:8080/24472\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Jason Fehr \u003cjfehr@cloudera.com\u003e\n"
    },
    {
      "commit": "60c28011ec727ff17817546cbc267bb7834fe979",
      "tree": "93fc6f17b5d2dd3bb1367fc75b1e387de8088618",
      "parents": [
        "1f34ea915e78dd5a8872a2f403b54624ad9676aa"
      ],
      "author": {
        "name": "Daniel Vanko",
        "email": "dvanko@cloudera.com",
        "time": "Fri Aug 28 15:18:08 2026 +0200"
      },
      "committer": {
        "name": "Noemi Pap-Takacs",
        "email": "npaptakacs@cloudera.com",
        "time": "Wed Oct 07 11:06:58 2026 +0000"
      },
      "message": "IMPALA-15318: Stop impalads before clearing custom-cluster tmp dirs\n\n_impala_cluster_teardown() cleared the tmp dirs (e.g. the\n--lineage_event_log_dir target) while impalads were still running, so\nthe lineage flush thread aborted the daemon\n(abort_on_failed_lineage_event\u003dtrue) -- an ASAN use-after-free in CI.\nNow stop the impalads first: a hard kill for tmp-dir tests, a graceful\nshutdown only for workload_mgmt (to flush query-log rows), and skip both\nwhen no cluster was expected to start (so no clients are closed).\n\nChange-Id: I88642ca68db3d3237f97cd1ef095e7c85081c965\nAssisted-by: Claude Opus 4.8 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24764\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Xuebin Su \u003cxsu@cloudera.com\u003e\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\n"
    },
    {
      "commit": "1f34ea915e78dd5a8872a2f403b54624ad9676aa",
      "tree": "6e9ad23d554b6c7acc2cd2fe7babe319f6339bf1",
      "parents": [
        "90d923b49ed81b05951ca851c2cdc81351037923"
      ],
      "author": {
        "name": "jasonmfehr",
        "email": "jfehr@cloudera.com",
        "time": "Wed Aug 26 10:47:15 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 04:51:36 2026 +0000"
      },
      "message": "IMPALA-14942: [tools] Impala devcontainer\n\nContains code, configuration, and modifications to enable building\na devcontainer image for Impala and running that image for purposes\nof development and experimentation.\n\nTest accomplished by using a devcontainer for developing and testing\nother changes.\n\nRegression testing performed by checking out this change and running\nbootstrap_development.sh on a new Ubuntu Linux VM and by passing the\nubuntu-22.04-dockerised-tests build on this change.\n\nGenerated-by: Github Copilot (Claude Sonnet 4.5, GPT-5.3-Codex)\nChange-Id: I6aa834494003619fcdfbd98f3bfc7c74d3e1554c\nReviewed-on: http://gerrit.cloudera.org:8080/23848\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "90d923b49ed81b05951ca851c2cdc81351037923",
      "tree": "af736ea09c7d67feb05f0444b6b8756f4a7fa0f2",
      "parents": [
        "bb537fbea23bd880b7fd9dc81f7ddbf9636dfa67"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Wed Jul 15 21:14:44 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 04:40:02 2026 +0000"
      },
      "message": "IMPALA-15189: Support HBO for SortNode cardinality\n\nBy default, a SortNode leaves the total row count unchanged. However,\nwhen combined with a limit (TopN, Partitioned TopN, or a total sort with\na LIMIT), the output row count decreases. This extends HBO to support\ntracking and using the cardinality of these limit-applying SortNodes.\n\nThe HBO key string of a SortNode consists of\n - Type: TOTAL, PARTIAL, TOPN, PARTITIONED_TOPN\n - IncludeTies: true/false for Top-N\n -- Only true for RANK() with LIMIT pushdown.\n - OrderKind: LEXICAL, ZORDER\n - Limit and Offset:\n -- LIMIT, OFFSET for non-PARTITIONED_TOPN\n -- PerPartitionLimit for PARTITIONED_TOPN where OFFSET is always 0.\n - Partition Exprs for PARTITIONED_TOPN\n - Order Exprs\n - Child key\n\nLocal sort nodes in a distributed sort plan are skipped in the HBO key\nstring for two reasons:\n - to ensure SingleNodePlanner and DistributedPlanner use the same key\n   string for the merge/final sort node, either a final Top-N or a\n   merging-exchange.\n - Backend tracks the summed cross-instance cardinality for local sort\n   nodes but the planner needs single instance cardinality which is the\n   same as the cardinality of the final sort node.\n\nTo be specific, local sort node and final sort node shares the same HBO\nkey but only final sort node writes the HBO stats. The final sort node\ncan be a merging-exchange with SortInfo, LIMIT and OFFSET. Such\nExchangeNodes are not cardinality-preserving so we should generate HBO\nkey strings for them. To make all kinds of ExchangeNode delegate the HBO\nkey string generation to its child, i.e. regardless of whether it\u0027s\ncardinality-preserving, this patch renames isCardinalityPreserving() to\nignoredInHboCardKey() so ExchangeNode can always return true in it.\n\nTo verify the cardinality of MERGING-EXCHANGE which only shown in\nEXPLAIN output if explain_level \u003e\u003d 2, this patch extends\n_run_hbo_explains() to support DISTRIBUTEDPLAN sections in the golden\ntest files.\n\nTesting\n - Added FE tests on HBO key strings\n - Added e2e tests\n\nAssisted-by: Opus 4.8 (Claude Code)\nChange-Id: Ib829887a91593bee124d56e661e714575fe3be97\nReviewed-on: http://gerrit.cloudera.org:8080/24592\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "bb537fbea23bd880b7fd9dc81f7ddbf9636dfa67",
      "tree": "03204c0fd8e78f52a748ae221975241d852d3965",
      "parents": [
        "384a41b8d1c20946aafbadf94e1e187a7509e91a"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Mon Sep 28 18:16:36 2026 +0200"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 02:49:24 2026 +0000"
      },
      "message": "IMPALA-15452: Fix rendering of special characters in the Web UI\n\nPlan node labels on the query plan page and the fields of imported\nquery profiles were added to the page as HTML, so values containing\ncharacters like \u0027\u003c\u0027 or \u0027\u0026\u0027 were displayed incorrectly. Add them as\ntext instead.\n\nTesting:\n- Checked the modified scripts with values that contain special\n  characters.\n\nChange-Id: I1dce193718317a32df5b9977444b8f44ebc1ecec\nAssisted-by: Claude Fable 5.1 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/25038\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "384a41b8d1c20946aafbadf94e1e187a7509e91a",
      "tree": "16c7ea16b652e6a9677b8ca5345ace00a3b50eef",
      "parents": [
        "0281cdad344f11a716f5ea58a9c5dc33939665d1"
      ],
      "author": {
        "name": "jasonmfehr",
        "email": "jfehr@cloudera.com",
        "time": "Mon Sep 28 11:04:30 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 02:49:24 2026 +0000"
      },
      "message": "IMPALA-15448: Executor Webserver JWT/OAuth Auth Removal\n\nRemoves non-functioning JWT/OAuth authentication from the executor\u0027s\ndebug webservers.\n\nManually tested using a combination of LDAP and JWT/OAuth auth.\n\nChange-Id: I805461fbb73d579a00d5ab9dbca312199d1d2d9f\nReviewed-on: http://gerrit.cloudera.org:8080/25037\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "0281cdad344f11a716f5ea58a9c5dc33939665d1",
      "tree": "91fa7319d6af79d164c2ddb3e9eafd9c787c09bc",
      "parents": [
        "893cf933b6880ab7dd30bc9f6b16eac71c92e8f5"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Fri Sep 11 16:16:26 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 02:49:24 2026 +0000"
      },
      "message": "IMPALA-15345: Resolve \u0027..\u0027 segments before trusted_jar_paths check\n\nBackendConfig.isJarPathAllowed() compared the raw driver.url / HDFS\nlocation string against the configured --trusted_jar_paths prefixes\nusing String#startsWith(). That string is later turned into a Hadoop\nPath and resolved by the filesystem, which collapses \u0027.\u0027 and \u0027..\u0027\nsegments. A URL such as \u0027\u003ctrusted_dir\u003e/../../secret.jar\u0027 therefore\npassed the prefix check while actually resolving to a JAR outside the\ntrusted directory, letting Impala load and execute attacker-controlled\ncode in impalad.\n\nResolve both the candidate path and each allowlist entry through\nHadoop\u0027s Path class (which performs the same \u0027.\u0027/\u0027..\u0027 collapsing)\nbefore comparing, and require the resolved path to be nested inside,\nor equal to, a resolved trusted directory rather than merely share a\nstring prefix.\n\nTesting:\n- Added BackendConfigTest cases covering \u0027..\u0027-escape rejection,\n  legitimate in-directory \u0027..\u0027/\u0027.\u0027 usage, sibling-directory-name\n  spoofing, and malformed allowlist entries.\n\nChange-Id: I4288aba344d7d0cd07c9fb8281fc8d3c0490e432\nAssisted-by: Claude Sonnet 5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/25036\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "893cf933b6880ab7dd30bc9f6b16eac71c92e8f5",
      "tree": "81034488e663f6f79d55fe7c863add9d0569b83a",
      "parents": [
        "2051d0f0b6d02f57a0ea7a126909f3b07dba0025"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 01 11:35:35 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Oct 07 02:23:42 2026 +0000"
      },
      "message": "IMPALA-11917: Codegen branch-free reads of nullable scalar slots\n\nAfter the LLVM 22 upgrade, TPC-DS Q99\u0027s streaming aggregation was ~20%\nslower than with LLVM 5. Its UpdateTuple compiled to 269 instructions\nwith 22 branches (LLVM 5: 84 instructions, 5 branches).\n\nGetSlotRef wraps each slot read in a null-check diamond. Once several\nreads of the same slots are inlined into a single function, LLVM 22\nno longer merges these diamonds. Each read keeps its own branch and\nconditional load, and the packed *Val is rebuilt via shifts and cmovs.\nReplacing the phi with a select after the branch doesn\u0027t help, because\nInstCombine converts a select back into a phi when a dominating branch\ntests the same condition.\n\nWhen the tuple is not nullable and the slot is a nullable simple scalar\n(i.e. not string, timestamp, collection, struct or variant), GetSlotRef\nnow loads the slot unconditionally and selects on the null bit. This\nis safe because the slot is always within the tuple\u0027s memory. With no\nbranch on the null bit, LLVM combines the null checks and CSEs the\nloads across expressions, so UpdateTuple compiles to 88 instructions\nwith 6 branches. 09:AGGREGATE STREAMING in Q99 drops from 39-41ms to\n32-33ms, matching LLVM 5.\n\nCodegen for other types didn\u0027t change as they showed no improvement.\n\nTesting:\n- Q99 results on tpcds20_parquet match with codegen enabled and\n  disabled.\n- Ran tests/query_test/test_tpcds_queries.py.\n\nChange-Id: I6edaf90100cc3360a7c93d3218eb6956fcec24f0\nAssisted-by: Claude Opus 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24997\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "2051d0f0b6d02f57a0ea7a126909f3b07dba0025",
      "tree": "f9854db6c387c21968ce22d4dc33b10093673569",
      "parents": [
        "b2dc597ef32172ea29ee587556c565eb55308919"
      ],
      "author": {
        "name": "zhangyifan27",
        "email": "chinazhangyifan@163.com",
        "time": "Wed Feb 11 11:21:01 2026 +0800"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Oct 07 01:35:07 2026 +0000"
      },
      "message": "IMPALA-14714: Fix incorrect results for anti-join with constant ON clause predicates\n\nThis patch fixes incorrect query results when using LEFT/RIGHT ANTI JOIN\nwith constant predicates in the ON clause (e.g., ON FALSE, ON NULL or ON TRUE).\n\nPreviously, constant anti-join predicates were incorrectly handled:\n- They were marking the entire query as having an empty result set\n- They were being assigned to scan nodes instead of join nodes\n- They were being migrated into inline views incorrectly\n- They were being pushed into the operands of a UNION/VALUES inline view\n  on the preserved side of the anti-join, which emptied that input\n\nThe fix adds special handling for anti-join conjuncts to:\n1. Skip them in markConstantConjunct() to avoid marking query as empty\n2. Route constant ON clause predicates to canEvalOnClauseConjunct()\n3. Ensure constant anti-join predicates are evaluated at join nodes\n4. Prevent migration of anti-join predicates into inline views\n5. Exclude anti-join conjuncts from the union-operand push-down in\n   SingleNodePlanner.createUnionPlan(), so they stay unassigned and are\n   evaluated at the anti-join node\n\nTesting:\n- Added test cases covering ON FALSE, ON TRUE, and mixed predicates for\n  both LEFT and RIGHT ANTI JOIN\n- Added test cases for constant UNION ALL inline views on the preserved\n  side, covering ON FALSE, ON NULL, RIGHT ANTI JOIN and mixed predicates\n\nChange-Id: I0e0f4a69263bb0ff11f421a1a340dffb904c6842\nReviewed-on: http://gerrit.cloudera.org:8080/23962\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "b2dc597ef32172ea29ee587556c565eb55308919",
      "tree": "60645174e3da4f83772544b7da19d00ca6a97694",
      "parents": [
        "91f13aabdb1e18ab44ac07ef2efc57323afb468f"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Mon Oct 05 17:57:17 2026 +0000"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 20:24:23 2026 +0000"
      },
      "message": "IMPALA-15484: Calcite planner: Support temporal TRUNC overloads\n\nResolve temporal TRUNC calls through the native function resolver,\nincluding DATE, TIMESTAMP and legacy string-date inputs. Keep numeric\nscale inference unchanged and reject numeric temporal unit arguments.\n\nCover nested temporal views with full result metadata parity.\n\nTests: 19 focused Maven methods standalone and 50 with the six pilot fixes.\nThe unchanged production delta passed 84 strict HS2 executions on 2f022a5,\nalso with Gerrit 24260 PS6. Native 2f022a5, codegen disabled.\n\nChange-Id: I9e92f3c9de42ade5630673ee9f062ae675458ad7\nAssisted-by: GPT-6 (Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/25019\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "91f13aabdb1e18ab44ac07ef2efc57323afb468f",
      "tree": "244b71c724f0c5a85051c1e86a16c1c8efef4cb6",
      "parents": [
        "346901c75e147e3a414f94bce85260b6db2f3bd4"
      ],
      "author": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Thu Apr 09 07:14:55 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 06 20:22:57 2026 +0000"
      },
      "message": "IMPALA-14946: Catch \"trunc\" error within Calcite planner\n\nFor the following query:\n\nselect dayofyear(trunc(\u00272014-11-11\u0027, string_col))\nfrom functional.alltypestiny limit 1;\n\n...the Calcite planner now throws the same exception as the original\nplanner does. Previous to this commit, a java exception was being\nthrown. This allows the test framework to match error messages when\nthere is no fallback planner.\n\nChange-Id: I766c138fae027ba0d919daa5cce38dc93d7144d1\nReviewed-on: http://gerrit.cloudera.org:8080/24260\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "346901c75e147e3a414f94bce85260b6db2f3bd4",
      "tree": "3c3ad49982a5c43598ef8a831038605aebdb3a35",
      "parents": [
        "ef5d7c4a02ad4577a1227340e3051b325a146544"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Oct 01 13:38:45 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 06 18:55:44 2026 +0000"
      },
      "message": "IMPALA-11917: Update LLVM CPU attribute whitelists for LLVM 22\n\nLLVM 22 host detection reports cx8, fxsr and sahf, which were not\nwhitelisted and so were explicitly disabled. Disabling cx8 also\ndisables cx16 and limits atomics to 32 bits on x86-64. Add them to\nthe x86 whitelist and drop the hle and smap entries, which are not\nLLVM features. Also add attrs for future use (clflushopt, clwb, pku,\nsha, vaes, vpclmulqdq, xsavec, xsaves).\n\nOn AArch64, LLVM 22 no longer reports \u0027crypto\u0027; replace it with aes\nand sha2, and add lse, rand and sm4. Extend CpuAttrWhitelist to check\nthat the baseline attrs remain enabled.\n\nAssisted-by: Claude Sonnet 5.5 (GitHub Copilot)\nChange-Id: Iddd147d466b40052852ad6e136ee3ddfd59c46ac\nReviewed-on: http://gerrit.cloudera.org:8080/24999\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "ef5d7c4a02ad4577a1227340e3051b325a146544",
      "tree": "be7496e39461005d5167f23bf26716735e3d90a8",
      "parents": [
        "d6638f0d9ea2b66f18cbf76e3c25c59026b9851d"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Sep 17 20:13:09 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 06 17:15:29 2026 +0000"
      },
      "message": "IMPALA-15371: Support IS [NOT] NULL on VARIANT columns\n\n\u0027v IS NULL\u0027 and \u0027v IS NOT NULL\u0027 were rejected during analysis for\nVARIANT columns. The reason was that there was no is_null_pred()\nbuiltin for VARIANT: the builtins are registered for the types of\nType.getSupportedTypes(), which are all scalar, and when VARIANT read\nsupport was added a VARIANT had no expression ABI yet. So the check\nonly turned a \"no matching function\" error into a clearer message.\n\nSince IMPALA-15057 a VARIANT is a self-contained value (VariantVal) at\nthe UDF boundary, just like the scalar types, therefore the builtins\ncan simply be instantiated for it.\n\nOnly SQL NULL is NULL. A variant null in the column is a regular value,\nso \u0027v IS NULL\u0027 is false for it. Note that variant_get() does return SQL\nNULL when there is a variant null at the path, hence\nvariant_get(v, \u0027$\u0027) IS NULL can differ from v IS NULL.\n\nThe predicate is pushed down to Iceberg the same way as for the other\ntypes. This is safe: Iceberg only uses it to prune whole files by their\nNULL counts, which it derives from the required metadata column of the\nVARIANT, and it never replaces the evaluation of the predicate.\n\nTesting:\n* FE: extended AnalyzeExprsTest.TestIsNullPredicates\n* e2e tests added\n\nChange-Id: Id0b17821f6c8a988abf93494b7dbeb8f6f7db216\nAssisted-by: Claude Fable 5.1 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24881\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "d6638f0d9ea2b66f18cbf76e3c25c59026b9851d",
      "tree": "d15a3919175919c27ee4d098c67eab981cb2e5fc",
      "parents": [
        "18b020455ddf655ff26ad764558a27cbdd5b79de"
      ],
      "author": {
        "name": "jasonmfehr",
        "email": "jfehr@cloudera.com",
        "time": "Wed Sep 23 08:50:08 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 14:07:52 2026 +0000"
      },
      "message": "IMPALA-15412: Fix Formatting of error_description in WWW-Authenticate Header\n\nRemoves the extra trailing newline and space in the error_description\nkey-value part of the WWW-Authenticate http header. This header is\nreturned when JWT/OAuth auth fails.\n\nTesting accomplished by manually verifing the WWW-Authenticate http\nheader value using curl and by existing JWT/OAuth custom cluster\ntests passing.\n\nChange-Id: Ifbb593c82afca89394560d21c5ad9a5c49ad2a53\nAssisted-by: GPT-5.3-Codex (Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24929\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "18b020455ddf655ff26ad764558a27cbdd5b79de",
      "tree": "5f7ca169e93d60dafab84c7f45865efbe6765709",
      "parents": [
        "115f6690957b84080143e3a2c9bb19cd8e27110d"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Fri Sep 18 11:41:17 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 06 13:23:20 2026 +0000"
      },
      "message": "IMPALA-13052: Estimate reservoir sample memory\n\nsample(), appx_median() and histogram() keep a ReservoirSampleState per\ngroup, allocated by FunctionContext::Allocate() outside the tuple and\nthe reservation, but the planner counted only the 12-byte StringValue\nslot. The state with its initial sample array takes about 600 bytes per\ncall and group even for one row, and up to 1.3MB (2.3MB for DECIMAL) at\n20000 samples. For the grouping query in the Jira the merge aggregation\nwas estimated at 18MB; it is now estimated at 312MB per instance, and\nthree instances used 0.90GB together.\n\nAggregationNode now adds this memory, mirroring the state and its\nFreePool and MemPool allocations; static asserts in\naggregate-functions-ir.cc fail the build if the state or sample sizes\nchange. The FreePool part is not specific to aggregations and goes to\nPlannerContext.calculateFreePoolBytes(). The estimate takes the rows per\ngroup from the first phase so that merges are covered. Running short of\nthis memory never makes an aggregation spill (IMPALA-3304), so it is\nadded after the caps that assume spilling. On lineitem the estimate was\nwithin 1% of the measured memory at 4, 600 and 60K rows per group before\nIMPALA-15381, and at 4 rows it still is: 592 bytes against 598.\n\nA streaming preaggregation keeps the planner\u0027s usual group count,\nbounded by PREAGG_BYTES_LIMIT when set, which errs high: 1.5M groups per\ninstance for the Jira query, where each instance holds about 500K. The\nbackend\u0027s limit on hash table growth (STREAMING_HT_MIN_REDUCTION) is not\nmirrored, because it depends on how the input of one instance reduces.\nThe planner expects a reduction of 1.33 both for the Jira query, which\nreduced fourfold and kept all its groups, and for a COUNT(DISTINCT) over\nunique rows, whose preaggregation stopped at 98,304 groups.\n\nExecution and the row size of the intermediate tuple are unchanged;\nadmission control sees larger estimates for queries with these\nfunctions.\n\nDECIMAL samples occupy 40 bytes after the DecimalVal alignment change\nin master. Match the frontend size and backend guard to the current\n8-byte alignment. Rounded allocations and planner estimates are\nunchanged.\n\nTesting:\n- New reservoir-sample-agg.test: the Jira examples, groups at 20000\n  samples, COUNT(DISTINCT), MEM_ESTIMATE_SCALE_FOR_SPILLING_OPERATOR,\n  PREAGG_BYTES_LIMIT and a table without stats. Reverting each part of\n  the estimate separately fails the cases that part covers.\n- TpcdsPlannerTest and nine aggregation planner test files produce the\n  same plans. With PLANNER\u003dCALCITE the new estimates are the same.\n\nFocused follow-up validation: the native layout probe reproduces the\nold assertion failure and passes with 40 bytes. The reservoir fixture\npasses on Original; Calcite golden-plan differences are identical in\nbaseline and candidate. No full rebuild was run.\n\nChange-Id: Id6eec3daf7fea9b027ff0be9c95c6ee5a3cf323d\nReviewed-on: http://gerrit.cloudera.org:8080/24883\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "115f6690957b84080143e3a2c9bb19cd8e27110d",
      "tree": "b7dab3438f8dcf633b2e2d9d524dc9482698601f",
      "parents": [
        "89252b07b880766659464a38f444d48ec1ae1ea9"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 08 14:11:44 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Oct 06 01:51:09 2026 +0000"
      },
      "message": "IMPALA-15339: Calcite planner: Plan REAL and binary literals\n\n  set planner\u003dcalcite;\n  select cast(1.5 as real);   -- Unsupported RexLiteral: DOUBLE\n  select x\u0027616263\u0027;           -- Unsupported RexLiteral: BINARY\n\nRexLiteralConverter has no case for REAL or for BINARY, so a plan\ncarrying either literal stops where the literal becomes an Impala\nexpression, with the type mapped both ways by ImpalaTypeConverter and\nthe row type already derived. The REAL one is ordinary Impala SQL: the\noriginal planner answers 1.5.\n\nAdd both. Calcite\u0027s REAL is Impala\u0027s DOUBLE, which is how the type\nconverter already reads it. A binary literal is a ByteString, and\nImpala\u0027s StringLiteral takes bytes and holds them as bytes when they are\nnot valid UTF-8.\n\nThe message named DOUBLE for a REAL literal because it printed the\nliteral\u0027s own type name rather than the type the switch is on, pointing\nat a case that was there. Print the latter.\n\nBehind the binary case is the double conversion IMPALA-15338 skips for a\ntimestamp. Calcite folds a projection of constants into a VALUES row, so\nthe literal reaches ImpalaValuesRel, which re-creates it from its text --\nwhich bytes that are not text do not have. Skip that conversion for a\nbinary value on the same grounds: the literal already carries the\ndeclared type, which is the only thing the round trip establishes.\n\nBytes that are not valid UTF-8 therefore go from a refusal to a value.\nThat direction is checked rather than assumed: the end-to-end case reads\nthem back as FF00FE with length 3, and EXPLAIN renders a plan holding\none.\n\nTesting:\n- New CalciteMissingLiteralTest, 5 tests: a binary literal plans in a\n  projection and in a VALUES row; bytes that are not valid UTF-8 plan; a\n  REAL literal plans in both places; the same value written as a cast\n  still plans. Reverting the binary case fails three of them with\n  \"Unsupported RexLiteral: BINARY\" and leaves the cast green; reverting\n  REAL fails one, now naming REAL; reverting the skip fails only the\n  non-UTF-8 one, with \"non-utf8 string\".\n- New calcite.test case, executed through TestCalcitePlanner.\n- calcite-planner module suite: no class changed its result.\n\nChange-Id: I9dcf194fc0fa604bc570853b7853650f8d60a0dd\nAssisted-by: claude-opus-5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24794\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "89252b07b880766659464a38f444d48ec1ae1ea9",
      "tree": "7639fb02741cde58eb4626112d6f392b7f55d854",
      "parents": [
        "48d66cb5cbf6b5e4baa1d12415d2a3d1f882868c"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 24 10:40:17 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 00:31:13 2026 +0000"
      },
      "message": "IMPALA-11917: Upgrade to GCC 15 and LLVM 22\n\nUpgrades to GCC 15, which also requires upgrading to Clang 12+. Upgrades\nto LLVM 22 as a recent stable version that doesn\u0027t show a performance\nregression in Impala.\n\nSwitches LLVM code generation to opaque pointers. Explicitly ensures\ntypes are defined in generated code now that they\u0027re not part of the\npointer definition.\n\nLLVM and GCC became more aggressive optimizing i128 access assuming\n16-byte alignment, but our memory allocation is only 8-byte aligned.\nApplies fixes so 128-bit int alignment is correctly identified. In\nparticular aligned was added to DecimalVal in udf.h; explicit padding\nwas added to preserve backwards compatibility with UDFs compiled on\nx86_64. UDF layout on aarch64 was normalized to match, so UDFs compiled\non aarch64 that use DecimalVal will need to be recompiled.\n\nUpdates boolean, tinyint, and smallint type layout as LLVM on aarch64\nnow matches x86_64.\n\nAvoids GlobalISel on aarch64 as it hangs in DEBUG builds.\n\nFixes possible signed integer overflow during UBSAN in\nIcebergFunctions::TruncatePartitionTransformNumericImpl.\n\nFixes code now flagged by Clang or _GLIBCXX_ASSERTIONS.\n\nFixes invalid memory_order use in atomicops, detected by UBSAN. Store\nwith memory_order_acquire and load with memory_order_release are\nundefined according to the C++ standard. _GLIBCXX_ASSERTIONS is enabled\nin UBSAN and asserts. Updates their semantics to match the old\nx86-specific implementation from atomicops-internals-x86.h.\n\nAdds handle_segv\u003d0 to UBSAN options to match ASAN, fixing FE tests.\n\nRemoves custom SectionMemoryManager as fix is present as\nhttps://github.com/llvm/llvm-project/commit/35b2b24e62 in LLVM 22.1.\n\nRemoves AnalyzeTemporaryDtors as it was removed in LLVM 18. Disables new\nclang-tidy checks; will be addressed in follow-up commits.\n\nTesting:\n- Passed DEBUG, RELEASE, ASAN, TSAN, and UBSAN builds. TSAN and ASAN\n  builds are 20% faster, the rest unchanged.\n- Passed RELEASE on ARM.\n- Shows ~1% improvement in perf-AB-test runs with codegen caching\n  disabled.\n\nAssisted-by: Claude Sonnet 4.5, 5 (GitHub Copilot)\nChange-Id: I7dda730fa98ebe3825969265627a560b0c3095f9\nReviewed-on: http://gerrit.cloudera.org:8080/24940\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "48d66cb5cbf6b5e4baa1d12415d2a3d1f882868c",
      "tree": "6b84bc176f7c75f94d04b3eba186a3d583aae489",
      "parents": [
        "f7fe436ef57326d3b4dc18a82a3477ae76d2598b"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Sep 30 10:27:44 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 00:31:13 2026 +0000"
      },
      "message": "IMPALA-11917: Use std::move instead of unqualified move\n\nQualifies calls to move() as std::move() in headers so they don\u0027t rely\non argument-dependent lookup or a using declaration.\n\nChange-Id: Id6d366200aa60af11baf05cae9364633cfd7585a\nAssisted-by: Claude Sonnet 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24983\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "f7fe436ef57326d3b4dc18a82a3477ae76d2598b",
      "tree": "1f57939f3462275190e2e85cf9aa24e1a7b5c1c9",
      "parents": [
        "8e4b32db984945ca82a7d6c931b2316aee2c385c"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Sep 30 10:34:22 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 00:31:13 2026 +0000"
      },
      "message": "IMPALA-11917: Qualify enum values in compression-util.cc\n\nQualifies the case labels in THdfsCompressionToProto() and\nCompressionTypePBToThrift() with their enum names instead of relying on\nunscoped lookup of the enumerators.\n\nChange-Id: Iae882884a694a652ab5ef6835c07a58dcf675106\nAssisted-by: Claude Sonnet 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24985\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "8e4b32db984945ca82a7d6c931b2316aee2c385c",
      "tree": "57ebfa42b9d74bd8fee0a07f757fa1116484fd93",
      "parents": [
        "03cb447653e539fb4c18896a8bb913a1e4b594ff"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Sep 30 10:32:18 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Oct 06 00:31:13 2026 +0000"
      },
      "message": "IMPALA-11917: Drop redundant const from Codec::CodecMap\n\nThe map\u0027s value_type already makes the key const, and a const mapped\ntype is not needed, so use std::map\u003cstd::string, THdfsCompression::type\u003e\nand update the matching iterator type in HdfsScanner.\n\nChange-Id: Id2762bed6408e9171b9ce59ef4f31dabeef69217\nAssisted-by: Claude Sonnet 5.5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24984\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "03cb447653e539fb4c18896a8bb913a1e4b594ff",
      "tree": "112ef6a5a2c53cf56c16d217b3f7d83eb1ae6a77",
      "parents": [
        "1e71cb4d835f6976caa13b3c7ee29c6034c781ca"
      ],
      "author": {
        "name": "Joe McDonnell",
        "email": "joemcdonnell@cloudera.com",
        "time": "Fri Aug 14 14:47:44 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Mon Oct 05 21:03:08 2026 +0000"
      },
      "message": "IMPALA-15188: Skip generating HTML profile diff for benchmark results\n\nBy default, report_benchmark_results.py produces an HTML profile\ndiff. For large profiles, this diff takes a long time to produce\nand is difficult to use. Chrome struggles to display it even on\na local machine. This stops generating it by default and adds\nthe --generate_html_profile_diff option to manually turn it on.\n\nFor TPC-DS at scale, this makes a big difference:\nTime with --generate_html_profile_diff:\nreal    9m19.840s\nuser    9m3.266s\nsys     0m14.781s\n\nTime without --generate_html_profile_diff:\nreal    0m31.230s\nuser    0m20.017s\nsys     0m10.565s\n\nTesting:\n - Ran on JSON files produced by the perf-AB-test job\n\nChange-Id: Ie29cdff4a679a05b4816654256762edcca97e80d\nReviewed-on: http://gerrit.cloudera.org:8080/24695\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "1e71cb4d835f6976caa13b3c7ee29c6034c781ca",
      "tree": "909c5ca2ffea1df5fb8a8945cef3f9f906046fbd",
      "parents": [
        "07fb2294e8ed47afa930ded008c7e719f05bd0b7"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 08 13:20:37 2026 +0300"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Mon Oct 05 20:59:49 2026 +0000"
      },
      "message": "IMPALA-15338: Calcite planner: Plan a TIMESTAMP literal in a VALUES row\n\n  set planner\u003dcalcite;\n  values (timestamp \u00272024-01-01 00:02:03.456\u0027);\n\n  ParseException: Syntax error in line 1:\n  values (timestamp \u00272024-01-01 00:02:03.456\u0027)\n          ^\n  Encountered: TIMESTAMP\n\nThe parse error is the original planner\u0027s: only Calcite\u0027s parser accepts\nthis statement, and when the Calcite planner refuses it,\nFrontend.getTExecRequestWithFallback passes it on as unsupported SQL.\nThat handoff is separate from the fallback_planner option and happens\nwith fallback_planner\u003dnone too, which is why the failure reads as a\nsyntax error rather than as a planner refusal.\n\nWhat the Calcite planner refuses is the literal.\nImpalaValuesRel.getValuesExprs converts each literal of a VALUES row\ntwice: RexLiteralConverter builds a cast from the literal\u0027s text and has\nthe backend fold it, which is where the TimestampLiteral comes from, and\ngetLiteralExprWithType then re-creates that literal from its own text\nthrough LiteralExpr.createFromStr, to give it the type the column\ndeclares. createFromStr has no case for TIMESTAMP and throws.\n\nSkip the second conversion when the literal is a timestamp that already\ncarries the declared type. Only a timestamp takes that path; every other\ntype still goes through createFromStr, which is what gives a literal the\ncolumn\u0027s type when the two differ. Teaching createFromStr about\nTIMESTAMP is the other repair, but it would have to fold a cast to build\nthe value and has no analyzer to fold with.\n\nAdd UnionNode.getConstExprLists() so a test can read the constant rows a\nunion carries. A TIMESTAMP literal reaches thrift as the backend\u0027s\nsixteen raw bytes, so that list is where its value is still legible.\n\nTesting:\n- New CalciteValuesLiteralTest, 5 tests: a timestamp literal in a VALUES\n  row plans and keeps its nanoseconds; a DATE literal and a cast still\n  plan; rows of different width keep their own literals. With the change\n  reverted the two timestamp tests fail with \"Literal unsupported:\n  TIMESTAMP\" and the other three stay green.\n- New calcite.test case, executed through TestCalcitePlanner: the rows\n  come back as 2024-01-01 00:02:03.456000000 and\n  1970-01-01 00:00:01.234567891. With the change reverted it fails with\n  the syntax error above.\n- calcite-planner module suite: no class changed its result.\n\nAssisted-by: claude-opus-5 (Claude Code); gpt-5 (OpenAI Codex)\nChange-Id: If8b5eebe9b5fa94066ff2f9410cab799fc6a3497\nReviewed-on: http://gerrit.cloudera.org:8080/24793\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "07fb2294e8ed47afa930ded008c7e719f05bd0b7",
      "tree": "59500f43df27db7357c46f72b67d59e090965f9e",
      "parents": [
        "52c9ac263606587d2d37a3657af01d4b5e297fd2"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Jun 09 00:10:27 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 05 20:34:27 2026 +0000"
      },
      "message": "IMPALA-15081: Text time filters in profile tool\n\nAdd --min_time and --max_time to impala-profile-tool as text\nalternatives to the existing Unix epoch millisecond filters. The\nshorter names distinguish text input from --min_timestamp and\n--max_timestamp; mixing the two forms is rejected.\n\nAccept ISO-8601 extended date/time (RFC 3339 style), with seconds\nand an optional fraction of up to nine digits. A timezone is required:\nZ or a numeric offset in +HH:MM, +HHMM or +HH form. Named timezones\nare not accepted. Examples:\n  --min_time\u003d2026-08-03T01:54:55.212Z\n  --min_time\u003d2026-08-03T07:24:55.212+05:30\n  --max_time\u003d2026-08-02T23:54:55.212-0200\n\nUse absl::ParseTime for calendar and offset conversion, with syntax\nvalidation for the supported input forms. Round lower bounds up and\nupper bounds down for inclusive filtering at millisecond precision,\nincluding timestamps before the epoch.\n\nAdd regression coverage for offset boundaries, malformed timestamps,\nboth text flags, sub-millisecond rounding and mixed filter forms.\n\nChange-Id: I2c43e7535db48518b7d9dd0cbb87398e639c3b72\nAssisted-by: GPT-6 (Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24422\nReviewed-by: Arnab Karmakar \u003carnabk1108@gmail.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "52c9ac263606587d2d37a3657af01d4b5e297fd2",
      "tree": "65f12951c081c2faff206b06211d9385e34133d7",
      "parents": [
        "2e8fb1d8b7ec3ecbfe8878a03b6dcf2af942e785"
      ],
      "author": {
        "name": "Nandor Kollar",
        "email": "kollar.nandor@gmail.com",
        "time": "Fri Sep 25 09:43:49 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Oct 05 16:46:11 2026 +0000"
      },
      "message": "IMPALA-15364: Reject ALTER TABLE ADD COLUMNS with NOT NULL and no default on Iceberg tables\n\nPreviously, ALTER TABLE ADD COLUMNS on an Iceberg table silently\naccepted NOT NULL columns without a default value. The NOT NULL\nconstraint was then quietly dropped, making the column nullable.\nThis is incorrect because existing rows would have no valid value\nfor the new required column.\n\nThis patch adds an analysis-time check in AlterTableAddColsStmt\nthat rejects adding a NOT NULL column without a default value on\nIceberg tables, mirroring the existing validation for Kudu tables.\nThe error message is: \"A new non-null column must have a default\nvalue: \u003ccolumn definition\u003e\".\n\nNote that since Iceberg v2 tables do not support default values,\nthis means NOT NULL columns cannot be added via ALTER TABLE on v2\ntables at all. Users can either add the column as nullable, or\nupgrade to format version 3 which supports default values:\n  ALTER TABLE t ADD COLUMNS (j INT NOT NULL DEFAULT 0)\n\nTesting:\n- Updated AnalyzeDDLTest#TestAlterTableAddColumn to expect an\n  AnalysisError for NOT NULL without default on Iceberg.\n- Added a new AnalysisError case in TestAlterTableAddColumns for\n  multi-column ADD COLUMNS on Iceberg.\n- Added an end-to-end test case in iceberg-alter-v2.test.\n\nChange-Id: I9bf294664ef83d26ca90db28df0993805d5ce67e\nAssisted-by: Claude Opus 4.6 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24944\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "2e8fb1d8b7ec3ecbfe8878a03b6dcf2af942e785",
      "tree": "6aeba16835ee93db658385a114cbc39523783a63",
      "parents": [
        "55e46a6739de79fdad885951c140c15e9ac7eb85"
      ],
      "author": {
        "name": "Arnab Karmakar",
        "email": "arnabk1108@gmail.com",
        "time": "Mon Sep 28 03:47:05 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Sun Oct 04 01:33:25 2026 +0000"
      },
      "message": "IMPALA-15365: Iceberg UUID partition transform support\n\nAdds partition transform support for the Iceberg UUID type. The Iceberg\nspec only allows the identity, bucket(N, col) and void partition\ntransforms on UUID columns. Impala now rejects the other transforms\n(year, month, day, hour and truncate) at analysis time for CREATE TABLE\nand ALTER TABLE ... SET PARTITION SPEC, instead of failing later in\nIceberg.\n\nThe Iceberg Java library compares UUIDs with the signed\njava.util.UUID.compareTo(), while Parquet writes UUID min/max bounds in\nunsigned byte order. This is a bug in the Java library, not in the\nIceberg spec, which stores UUIDs as 16 big-endian bytes. Because of it,\nIceberg\u0027s metrics evaluation can skip data files that contain matching\nrows. UUID value predicates are therefore not pushed to Iceberg and are\nevaluated by the scan. IS NULL and IS NOT NULL are still pushed.\n\nDROP PARTITION, SHOW FILES ... PARTITION and SHOW PARTITIONS ... WHERE\naccept \u003d, !\u003d, IN and NOT IN on UUID columns that are identity\npartitioned in every partition spec. Iceberg matches these values\nexactly against the partition values, so byte order does not matter.\nFor \u003d and IN, Iceberg also prunes manifests by their partition summary\nbounds. This assumes the summaries were written by the Iceberg Java\nlibrary (Impala, Trino, Spark), which builds them with the same signed\ncomparison. Range comparisons on UUID columns are rejected in these\nstatements.\n\nTesting:\n- FE tests: identity, bucket and void are accepted on UUID columns and\n  the other transforms are rejected, for CREATE TABLE and SET PARTITION\n  SPEC.\n- e2e tests on the new iceberg_uuid_test_part fixture for reads, scan\n  predicates, EXPLAIN, DROP PARTITION, SHOW FILES and SHOW PARTITIONS,\n  including \u003d, !\u003d, IN and NOT IN.\n- Trino interop tests for partition evolution from identity to bucket\n  and for DROP PARTITION on Trino-written identity partitions.\n- Added the iceberg_uuid_test_part fixture (Iceberg V3,\n  identity(uuid_identity), bucket(4, uuid_bucket)), generated with the\n  Iceberg Java API (version 1.11.0). One data file holds values on both\n  sides of the sign bit. All data files are added in a single append,\n  so one manifest\u0027s uuid_identity summary spans the sign bit.\n\nChange-Id: I1dc3af4418285d6ea1d489912419be470e668f29\nAssisted-by: Claude Opus 5.5 (Cursor)\nReviewed-on: http://gerrit.cloudera.org:8080/24973\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "55e46a6739de79fdad885951c140c15e9ac7eb85",
      "tree": "571de7f813440a19078de926318d527a8ad00831",
      "parents": [
        "c9c8c9df8edabc8415e86e2214652a73a50ae94b"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Sep 17 10:55:14 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Oct 02 21:26:43 2026 +0000"
      },
      "message": "IMPALA-15141 (part 1): Keep codegen enabled for queries on VARIANT\n\nThe planner set the query-wide disable_codegen_hint for every query\nthat scans a VARIANT column, so these queries lost codegen in all of\ntheir fragments, even in operators that never touch VARIANT values.\nThis patch removes the hint and makes the backend safe without it.\nExpressions that involve VARIANT are still interpreted.\n\nThe hint also protected codegen paths that cannot deal with VARIANT:\n* Exec nodes call ScalarExpr::GetCodegendComputeFn() directly (e.g.\n  for conjuncts, hash/sort keys and partition exprs), bypassing\n  ShouldCodegen(). GetCodegendComputeFn() now returns an expected\n  error for expressions that involve VARIANT, so these callers fall\n  back to interpretation, but only for the given operator.\n* LlvmCodeGen::GetSlotType() now knows the layout of VARIANT slots\n  (two StringValues), so TupleDescriptor::GetLlvmStruct() works for\n  tuples that have a VARIANT slot.\n* Only the Parquet scanner can read VARIANT, but Iceberg tables can\n  also have Avro and ORC data files with VARIANT columns. The planner\n  now rejects scans that read VARIANT from non-Parquet data files,\n  similarly to UUID (IMPALA-15200).\n\nTuple::CodegenMaterializeExprs() still falls back if the destination\ntuple has a VARIANT slot (TOP-N, UNION ALL).\n\nTesting:\n* added e2e tests to check that the planner does not disable codegen\n* added Iceberg V3 test tables with VARIANT in Avro, ORC and mixed\n  data files, generated with the Iceberg Java API\n\nChange-Id: I6e3c59cc41bab7421e0dd450e08944ffc3889241\nAssisted-by: Claude Fable 5.1 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24882\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "c9c8c9df8edabc8415e86e2214652a73a50ae94b",
      "tree": "165732897d2a4758510fcbbeca6b972601a940df",
      "parents": [
        "59ef46a6ca0dc6867924005436e79352992e7159"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 22 14:42:53 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Oct 02 16:41:24 2026 +0000"
      },
      "message": "IMPALA-15394: Add missing scan properties to the HBO scan key\n\nHdfsScanNode.generateHboKeyString() keys a scan by its table and\nconjuncts. Some scans of the same table and conjuncts return different\nrows, and their input stats match too, so HBO gives one the cardinality\nof the other:\n- An optimized count(*) scan returns one row per file or row group.\n  After \"SELECT count(*) FROM t\" on a Parquet table with 15 files and\n  13.66M rows, \"SELECT * FROM t\" is planned with cardinality\u003d15 (from\n  HBO), and every estimate above the scan follows.\n- A partition key scan, e.g. \"SELECT DISTINCT year FROM t\", returns one\n  row per scan range.\n- A sampled scan (TABLESAMPLE) reads only part of the files, while its\n  input rows count every partition with a sampled file (or all files of\n  an Iceberg table).\n- Conjuncts on the items of a collection, together with the\n  IsNotEmptyPredicate of the join, filter the rows of the scan. On\n  functional_parquet.complextypestbl the scan returned 2 rows for\n  \"a.item \u003e 1\" and 0 for \"a.item \u003e 100\" under the same key.\n\nThis patch adds \u003cCOUNT_STAR\u003e, \u003cPARTITION_KEY_SCAN\u003e and \u003cSAMPLE:percent\u003e\nmarkers and the canonicalized collection conjuncts to the scan key. The\ncollection is named by its canonical path, so the key doesn\u0027t depend on\nthe aliases. The seed of a sample is left out: it picks other files but\nreads the same share of the table.\n\nTesting:\n- Added HboKeyStringTest.testCountStarScanNodeKey,\n  testPartitionKeyAndSampledScanNodeKeys and\n  testCollectionConjunctsInScanNodeKey. Removing each marker or the\n  collection conjuncts, or naming the collection by its alias, fails\n  the test that covers it.\n- Added e2e cases to test_hbo.py: a regular scan after a count(*) scan\n  or a partition key scan, and item conjuncts of a joined collection.\n  Without this patch each gets the cardinality of the other query from\n  HBO.\n\nChange-Id: I03183aa998f90bf834dba4ce9ad2f2e57fef1140\nAssisted-by: claude-opus-5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24913\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "59ef46a6ca0dc6867924005436e79352992e7159",
      "tree": "543e69f03f759c9990587dd31f82b2f5b19b3159",
      "parents": [
        "2f022a5ca0fc99670bcf197a1f89016cdf78d114"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Fri Jul 17 18:59:51 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Oct 02 14:53:11 2026 +0000"
      },
      "message": "IMPALA-7996: Optimize constant-false outer joins\n\nConstant FALSE or NULL ON conjuncts eliminate usable equi-join\npredicates during expression rewriting. The classic planner then\nchooses a nested-loop join although the join cannot produce a match.\n\nAdd a synthetic non-matching hash predicate for outer joins and drop\nredundant remaining ON conjuncts. The predicate is what keeps this a\nhash join: left where the analyzer put it, among the other conjuncts,\nthe FALSE leaves the planner choosing a nested loop join, and the\nconstant buys nothing. Replace the non-preserved input of\nleft and right outer joins with EmptySetNode.\n\nBroadcast the empty build for constant-false left outer joins, even\nwith a SHUFFLE hint. Invert right outer joins so their empty input also\nbecomes the broadcast build. Keep full outer joins partitioned and use\nrandom distribution on both inputs to avoid constant-key skew.\n\nAdd planner coverage for single-node and distributed plans with\nliteral, folded, and typed NULL predicates. Add query tests with\nconstant inline views to verify preserved-side row counts.\n\nChange-Id: I6505825fc958720eec12e13d546661834f221b80\nAssisted-by: gpt-5.6-sol (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24597\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "2f022a5ca0fc99670bcf197a1f89016cdf78d114",
      "tree": "892d86e95b4902178a138a67cc5ba9437eb715fa",
      "parents": [
        "7c1b8395691c16eddaba31db4c89e383be00bf70"
      ],
      "author": {
        "name": "Arnab Karmakar",
        "email": "arnabk1108@gmail.com",
        "time": "Thu Oct 01 08:05:41 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Oct 01 20:26:47 2026 +0000"
      },
      "message": "IMPALA-15465: Make TestWebPage::test_log_level execute serially\n\nTestWebPage::test_log_level calls /set_glog_level to raise impalad\u0027s\nverbosity to 3. That setting is process-wide, so while the test runs\nin the parallel suite, every concurrent query also runs with VLOG_ROW\nenabled. This can crash concurrent tests by exercising rarely used\nverbose-logging code, such as the DCHECK in\nIcebergBufferedDeleteSink::VLogBufferedRecords().\nMark test_log_level as execute_serially so its log level changes won\u0027t\naffect other tests in the parallel suite.\n\nTesting:\n - Ran webserver/test_web_pages.py::TestWebPage::test_log_level\n\nChange-Id: I73aa90319f63a6c4132624c9a2c42116f2b59ebd\nReviewed-on: http://gerrit.cloudera.org:8080/24995\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "7c1b8395691c16eddaba31db4c89e383be00bf70",
      "tree": "b0e548ed1dc57ba9a023397ebab2cc8999de6bec",
      "parents": [
        "5c1fa71229eac5944bc4e80895ceefcf81888d6d"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Thu Oct 01 10:57:46 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Oct 01 16:44:04 2026 +0000"
      },
      "message": "IMPALA-15137: Fix some flaky TestAdmissionControllerWithACService tests\n\n_execute_and_collect_profiles() started the queries in quick\nsuccession, expecting them to reach the admission queue in the same\norder - the fetching of results happens in the original order and was\nnot prepared for out of order admission (the next query can\u0027t be\nadmitted before the results of the previous are fetched as result\nspooling is disabled for these queries).\n\nAs ExecuteStatement RPC waits only for planning to finish and admission\nis done on a different thread, a query requested later can actually\nreach the admission queue earlier. This is more likely in tests with\nadmissiond where the gap between planning and admission is longer,\nleading to frequent test failures in the ACService case.\n\nThe fix is to serialize admission by waiting for a query to reach the\nadmission queue (admitted, queued or rejected) before starting the\nnext one. This adds some delay to the function (worst case around 100ms\nper query start when admissiond is used), but this seems small enough\nto not alter the semantics of the calling tests.\n\nAssisted-by: Claude Opus 5 (Claude Code)\nChange-Id: I6e0bc611adee662f1e9ce2722ac843dc11dcb3ad\nReviewed-on: http://gerrit.cloudera.org:8080/24987\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "5c1fa71229eac5944bc4e80895ceefcf81888d6d",
      "tree": "b45a14491b1791a26eeae7f13bf19e42f70cb102",
      "parents": [
        "e1f3e318ca31095348f28b71b6a693472dd2555a"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Fri Sep 25 13:11:44 2026 +0200"
      },
      "committer": {
        "name": "Peter Rozsa",
        "email": "prozsa@cloudera.com",
        "time": "Thu Oct 01 12:22:48 2026 +0000"
      },
      "message": "IMPALA-15423: Fix non-ASCII strings in Iceberg metadata tables\n\nIcebergRowReader copied strings from the JVM with JniUtfCharGuard,\nwhose size was the number of UTF-16 code units of the string, while\nits buffer held the modified UTF-8 encoding. Non-ASCII characters\ntake more bytes than code units, so the strings were truncated, e.g.\n\u0027Zürich\u0027 was returned as \u0027Züric\u0027. Modified UTF-8 also differs from\nstandard UTF-8 for supplementary characters and NUL.\n\nThe metadata scanner also leaked JNI local references: the byte\narrays of string and binary values, and the keys and values of map\nentries were never deleted. The fragment thread is attached to the\nJVM, so these references kept the objects alive until the thread\ndetached, i.e. for the whole scan.\n\nThis patch:\n - converts strings to UTF-8 byte arrays on the Java side and copies\n   them with JniByteArrayGuard,\n - deletes these local references after use, and pushes a local frame\n   for each row, so the remaining references of a row are freed too,\n - makes JniUtfCharGuard::get_size() return the size of its buffer.\n   None of its remaining callers use it.\n\nTesting:\n - Added EE tests that read partition values with non-ASCII\n   characters (including a supplementary character) and with NUL from\n   the files and partitions metadata tables. They failed without the\n   fix.\n - Checked with a class histogram of the coordinator JVM that a scan\n   of the files table of a table with 1824 data files no longer keeps\n   the map values alive until the end of the scan.\n - Ran test_iceberg.py.\n\nChange-Id: I862e327e4b7b93dfabb660d88a21e04ee7b03cd5\nAssisted-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24949\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\n"
    },
    {
      "commit": "e1f3e318ca31095348f28b71b6a693472dd2555a",
      "tree": "2a5ad63b3f0665094873da0909e24e6983253493",
      "parents": [
        "40e89e2085d312506607c9572259cf218cbd3cba"
      ],
      "author": {
        "name": "Stamatis Zampetakis",
        "email": "zabetak@gmail.com",
        "time": "Fri Aug 28 15:03:03 2026 +0000"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 30 23:04:13 2026 +0000"
      },
      "message": "IMPALA-15334: Decompose unrewritable CTE suggestions to explore more rewrites\n\nIn some cases the suggester returns CTEs that are not rewritable (cannot\nbe used by the rewrite algorithm). Although, the entire CTE may not be\nrewritable parts of it are so by decomposing it further we can find more\nsharing opportunities.\n\nThe commits adds MaterializedViewSubTreeSplitter to decompose a plan\ninto maximal rewritable trees following the limitations imposed by\nCalcite\u0027s materialized view rules.\n\nChange-Id: I5aa335a0d61ea4b4a85a22f57e13e1e2083d0736\nReviewed-on: http://gerrit.cloudera.org:8080/24870\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "40e89e2085d312506607c9572259cf218cbd3cba",
      "tree": "e5527c8737701000988a097cbfc91311d055dc95",
      "parents": [
        "446ea6afcab91d9a7bc1a19f986553c6e9b67342"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Fri Sep 11 19:40:27 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 29 20:58:41 2026 +0000"
      },
      "message": "IMPALA-15037: Add profile counters for HBO\n\nThis patch adds the following profile counters for HBO:\n- HBOStats.HitCount: Number of reads that found the key in the cache.\n- HBOStats.ReadCount: Number of cache-backend lookups performed.\n- HBOStats.ReadTime: Time spent reading HBO stats from the cache.\n- HBOStats.TotalTime: Total time in using HBO stats, including time spent\n  in generating HBO key strings.\n\nTesting\n - Add e2e tests\n\nAssisted-by: Opus 4.8 (Claude Code)\nChange-Id: Ief6235094df8a16a283c395f74486d71c46bb142\nReviewed-on: http://gerrit.cloudera.org:8080/24844\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "446ea6afcab91d9a7bc1a19f986553c6e9b67342",
      "tree": "e7c2cec07f5e76c2b5f5367ac842c344f6a552db",
      "parents": [
        "9297acd1bb0abeadff268cda0d2d551b12c48931"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Tue Sep 29 15:42:31 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 29 20:54:20 2026 +0000"
      },
      "message": "IMPALA-14177: Fix test_client_fetch_time_stats(_incomplete) on ARM\n\nOn systems where Impala uses CLOCK_MONOTONIC_COARSE the tests nearly\nalways failed since enabling long polling by default (IMPALA-14686):\nthe first \"inactive period\" took less than 1ms, which was counted as 0\nwith a ms precision clock, leading to ignoring the first request in\nclient_wait_time_stats_.\n\nThe coarse clock was used in the clocksource !\u003d \"tsc\" case, which\ncorresponds to ARM VMs in case of current Impala tests, but is not\nspecific to ARM in general.\n\nChanges:\n- always update client_wait_time_stats_ after the timer is started\n  (it is possible to get a request before it starts, which is\n  intentionally ignored in the counter: IMPALA-10180)\n- added sleeps to tests to be more deterministic\n- fix parsing logic in the tests (get_time_summary_stats_counter)\n  which parsed Sum\u0027s value as Max due to greedy regexp\n- close hs2 connection in tests when it fails - earlier the test\n  failures also led to TestValidateMetrics.test_metrics_are_zero\n  errors\n\nChange-Id: I7a3b6d72109110c078abdae7483fb9f4c5df7f07\nAssisted-by: Claude Opus 5.0\nReviewed-on: http://gerrit.cloudera.org:8080/24972\nReviewed-by: Arnab Karmakar \u003carnabk1108@gmail.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "9297acd1bb0abeadff268cda0d2d551b12c48931",
      "tree": "d0c3abf4ec817fc1ec325eb361a0d3c6c92c5551",
      "parents": [
        "1a23e7759d1c9cb6dfc9709c50d578b3d1111bf4"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Fri Sep 25 13:00:49 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 29 18:11:44 2026 +0000"
      },
      "message": "IMPALA-15421: Fix dropped conjuncts in Iceberg predicate subsetting\n\nIcebergScanPlanner collected the residual expressions of the\nFileScanTasks into a TreeSet ordered by\nExpressionUtil.toSanitizedString(). The sanitized string replaces\nliteral values with placeholders, e.g. both \u0027id !\u003d 11\u0027 and\n\u0027id !\u003d 21\u0027 become \u0027id !\u003d (2-digit-int)\u0027, so the set only kept one of\ntwo different residuals. With ICEBERG_PREDICATE_PUSHDOWN_SUBSETTING\n(on by default) the conjunct of the lost residual was then skipped\nfrom the scan node, and the query returned rows that should have been\nfiltered out. This happens when non-identity partition transforms\n(e.g. truncate or day) leave different residuals for different files.\n\nThis patch keys the residuals by Expression.toString(), which prints\nthe literals in full. It uses a TreeMap so the order of the retained\nconjuncts stays deterministic. Consecutive files often have the same\nresidual object (e.g. every file of an unpartitioned table), so the\nstring conversion is skipped for them. This also removes the cost of\nsanitizing the residual of every file during planning. A predicate\nthat is part of multiple residuals is only retained once.\n\nTesting:\n - Added EE tests with truncate and day partition transforms. Both\n   returned wrong results without the fix.\n - Ran PlannerTest and test_iceberg.py.\n\nChange-Id: Ic2b0ef09255ead578ab4328885002819dddee013\nAssisted-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24947\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "1a23e7759d1c9cb6dfc9709c50d578b3d1111bf4",
      "tree": "f7e4970243d59fa98015e9bf9729e367fc31b899",
      "parents": [
        "66db905e078d0962517f7e7982a18c0e6ee3f2bc"
      ],
      "author": {
        "name": "Daniel Vanko",
        "email": "dvanko@cloudera.com",
        "time": "Fri Sep 25 19:29:22 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 29 10:28:58 2026 +0000"
      },
      "message": "IMPALA-15411: Add is_valid_utf8() builtin\n\nIMPALA-12675 turned on UTF-8 validation on the Parquet write path, so an\nINSERT or CTAS writing non-UTF-8 bytes into an annotated STRING column\nfails with PARQUET_INVALID_UTF8_STRING. The error points at one byte,\nbut there was no way to find which rows are affected.\n\nis_valid_utf8(STRING) -\u003e BOOLEAN closes that gap:\n\n  SELECT * FROM t WHERE NOT is_valid_utf8(s);\n\nIt calls impala::IsValidUtf8(), the same simdutf-based primitive the\nParquet writer uses, so it accepts exactly what the write path accepts.\nIt validates bytes, not characters, so the result does not depend on\nUTF8_MODE. NULL returns NULL, the empty string is valid.\n\nThe error message and the incompatible-changes note now name it.\n\nTesting:\n - extended Utf8Test\n - added is_valid_utf8() call and error message check to e2e test\n\nChange-Id: Ia1c8b537bdfc7c35839d53eb43fbe841c71c4a51\nAssisted-by: Claude Opus 5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24950\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "66db905e078d0962517f7e7982a18c0e6ee3f2bc",
      "tree": "2bc99e7208ca9d42df8b50acdd4b348d91a100c0",
      "parents": [
        "5c42a6cdbcd50b004d72c2a3a73be3b68825be04"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Fri Sep 25 13:01:02 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 29 10:03:46 2026 +0000"
      },
      "message": "IMPALA-15422: Fix fall-through in system table DECIMAL writer\n\nThe switch in WriteDecimalSlot() (system-table-scanner.cc) had no\nbreak statements, so after writing the value with the correct width\nit also wrote it as a Decimal16Value to the same address. All DECIMAL\ncolumns of sys.impala_query_live are DECIMAL(18,3), i.e. 8 bytes\nwide, so every write also overwrote the next 8 bytes of the tuple.\nDepending on the selected columns, this zeroed other slots or null\nindicators. E.g. \u0027select backends_count, total_time_ms from\nsys.impala_query_live\u0027 returned 0 for backends_count.\n\nThis patch adds the missing break statements.\n\nTesting:\n - Added a custom cluster test that selects backends_count together\n   with each DECIMAL column of sys.impala_query_live. It failed\n   without the fix.\n\nChange-Id: I395a217c443f52d3588e0d25bdb1859fb245d04c\nAssisted-by: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24948\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "5c42a6cdbcd50b004d72c2a3a73be3b68825be04",
      "tree": "ee1611841b83a27c89d0db1abefca967da2c8687",
      "parents": [
        "3d4d47dc30c9913d34bd0ac0331fc15d31e5dab5"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Wed Sep 16 18:14:24 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Sep 28 19:46:43 2026 +0000"
      },
      "message": "IMPALA-15360: Fix /catalog estimated memory column fails to render\n\ngetReadableSize() in www/scripts/common_util.js actually receives a\nstring type value. When larger than 1e3, it\u0027s divided by 1e3 then\nbecomes a number. However, if the original value is smaller than 1e3, it\nkeeps using the string type which doesn\u0027t have the toFixed() function.\nThis fails the column rendering in DataTables.\n\nThis patch fixes the issue by explicitly cast the value to a number.\nAlso adds unit tests for the function.\n\nTesting\n - Ran tests/webui/run-js-tests.sh\n\nAssisted-by: Opus 4.8 (Claude Code)\nChange-Id: Id8e339c6fe6698c170cc1a41ba731c4f35d132ce\nReviewed-on: http://gerrit.cloudera.org:8080/24880\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "3d4d47dc30c9913d34bd0ac0331fc15d31e5dab5",
      "tree": "746b7f3cf5dac6748027b9049bd0f17c4e4e9169",
      "parents": [
        "ada9dbf7bca2445a10b3797154fd78c40d4548f3"
      ],
      "author": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Wed Apr 01 21:04:30 2026 -0700"
      },
      "committer": {
        "name": "Steve Carlin",
        "email": "scarlin@cloudera.com",
        "time": "Fri Sep 25 23:52:17 2026 +0000"
      },
      "message": "IMPALA-14911: Calcite planner: Fix boolean to numeric comparison\n\nThis commit fixes the following failure in the Calcite planner:\n\nselect count(*) from functional.alltypestiny\nwhere smallint_col \u003e sleep(100);\n\nThe coercion method for binary comparison is overridden to return\nthe common type as the numeric so that the internals of Calcite\ncreate the cast around the boolean operand. Calcite only applied\nthe cast to \"equals\" binary comparisons. For Decimal, the common\ntype is FLOAT.\n\nThe booleanEquality method was also overridden because Calcite\ndoes coercion in there as well. it will always return false so\nthat all binary comparison coercions are done in the overridden\ncommonTypeForBinaryComparison method.\n\nThe RexBuilder makeCast method had to be overridden because the\ndefault Calcite handles boolean casting with a case statement\nwhereas Impala can handle casts the boolean directly to a\nnumeric type.\n\nChange-Id: I764dcbd2fd0d1323bfb964ed91d94cd3def594c0\nTesting: added e2e test\nReviewed-on: http://gerrit.cloudera.org:8080/24217\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Steve Carlin \u003cscarlin@cloudera.com\u003e\n"
    },
    {
      "commit": "ada9dbf7bca2445a10b3797154fd78c40d4548f3",
      "tree": "7ae92b5e32277b7ce1ccbb81aa51c4dd13fd21e9",
      "parents": [
        "10e79eba8b9dbda0d9fea18d38df8955e4c6b2fd"
      ],
      "author": {
        "name": "Arnab Karmakar",
        "email": "arnabk1108@gmail.com",
        "time": "Wed Sep 16 04:06:27 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Sep 25 20:53:41 2026 +0000"
      },
      "message": "IMPALA-15203: Add aggregate function support for UUID columns\n\nThis patch adds support for common aggregate functions on Iceberg UUID\ncolumns, including COUNT, MIN, MAX, COUNT(DISTINCT), NDV, and\nsampled_ndv. MIN/MAX comparisons use RFC 4122 byte ordering on the raw\n16-byte representation. For approximate distinct counting (NDV and\nsampled_ndv), UUID reuses the existing STRING HLL update functions\nsince both types cross the UDF boundary as StringVal and require the\nsame hashing behavior.\n\nAdditionally, this patch registers planner helper builtins (aggif, case,\ndecode, murmur_hash) needed for grouping sets and multi-class DISTINCT\naggregates over UUID columns. COMPUTE STATS skips UUID columns via\nignoreColumn() until stats gathering is fully validated.\n\nKey changes:\n- BE: Implement MinUuid and MaxUuid aggregate update functions that\n  compare raw 16-byte UUID values.\n- BE: Add AggIfUpdateUuid/AggIfMergeUuid using inline intermediate slots.\n- BE: Fix SetAnyVal in agg-fn-evaluator to always bind inline\n  intermediate StringVal ptr to the current tuple slot, even when NULL.\n  This applies to TYPE_CHAR, TYPE_FIXED_UDA_INTERMEDIATE, and TYPE_UUID,\n  preventing stale pointer writes in the interpreted aggregate path.\n- BE: Exclude UUID from codegen optimizations that assume numeric\n  MIN/MAX semantics (default-value initialization and null-bit\n  shortcuts).\n- BE: Enable hash-table codegen for TYPE_UUID.\n- FE: Enable aggif, case, decode builtins for UUID.\n- FE: Skip UUID columns in COMPUTE STATS via ignoreColumn() and allow\n  column whitelists that exclude UUID columns.\n\nTesting:\n- Testdata: Add iceberg_uuid_test to functional_schema_template.sql so\n  the table is available for ad-hoc testing.\n- Add positive test cases for MIN, MAX, COUNT, COUNT(DISTINCT),\n  GROUP BY, NDV with precision, sampled_ndv, and HAVING clauses.\n- Add tests for aggif/case/decode with grouping sets and multi-distinct\n  aggregates.\n- Test COMPUTE STATS rejection for table-level and UUID column, and\n  positive case for non-UUID column whitelist.\n- Retain negative tests confirming that SUM and AVG are correctly\n  rejected at analysis time for UUID.\n\nChange-Id: I2187495c8be5b95ecff3f458b6549916466e9c83\nAssisted-by: Composer 2.5 (Cursor)\nReviewed-on: http://gerrit.cloudera.org:8080/24871\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "10e79eba8b9dbda0d9fea18d38df8955e4c6b2fd",
      "tree": "d37927735216894f698f5e1ad9ca389ff28e7c00",
      "parents": [
        "5ad4bf7afc380eb6e6a4352ba7846c4fca8431c6"
      ],
      "author": {
        "name": "Balazs Hevele",
        "email": "bhevele@cloudera.com",
        "time": "Fri Sep 25 09:05:49 2026 +0200"
      },
      "committer": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Fri Sep 25 13:06:19 2026 +0000"
      },
      "message": "IMPALA-15386: Bump boost and mold versions\n\nBumping Boost version to 1.92.0, which contains geospatial fixes.\n\nAlso updating mold for IMPALA-15407, since their version got updated in\nthe same toolchain build:\nUpdates to mold 2.42.1, which is reported to be the last mold 2 release.\n\nChange-Id: I6180edba176dac80f53ed8366ebcdfa795f608c0\nReviewed-on: http://gerrit.cloudera.org:8080/24942\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\n"
    },
    {
      "commit": "5ad4bf7afc380eb6e6a4352ba7846c4fca8431c6",
      "tree": "b510e1da31d7d7fb98f50ce2b1ca5a706be97ace",
      "parents": [
        "6a8a5a52ba77b644e4b8a25f38c4c0a30217431b"
      ],
      "author": {
        "name": "Noemi Pap-Takacs",
        "email": "npaptakacs@cloudera.com",
        "time": "Wed Sep 23 16:35:33 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Sep 25 00:39:58 2026 +0000"
      },
      "message": "IMPALA-15409: Fix file paths in OPTIMIZE and replace deprecated ContentFile.path()\n\nOptimizeStmt with file filtering sends the paths of the selected\ndata files to the catalog, which matches them against the\nDataFile locations to decide which files need to be replaced.\n\nWith a partition value containing \u0027/\u0027, \u0027\"\u0027 or \u0027\u003d\u0027 and other\nspecial characters, no path matched and OPTIMIZE failed with\n\"Files to delete cannot be empty\".\nIt was a hidden bug because every existing OPTIMIZE test used\nplain ASCII partition values.\n\nUsing ContentFile.location() to retrieve the paths fixes the issue.\n\nThis patch also replaces the now deprecated Iceberg\nContentFile.path() calls with ContentFile.location() throughout\nthe frontend.\n\nTesting:\n - new e2e test test_optimize_special_char_partitions\n\nChange-Id: Ia6df5387f520acd556468ee888c127d99f8fc00d\nAssisted-by: Claude Opus 5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24927\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "6a8a5a52ba77b644e4b8a25f38c4c0a30217431b",
      "tree": "8200af55def992f11088e052dced302933df5bc9",
      "parents": [
        "1f2018be7bbb060cae71f18f4d6c42c527019d98"
      ],
      "author": {
        "name": "Mihaly Szjatinya",
        "email": "mszjat@pm.me",
        "time": "Thu Sep 24 20:17:36 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Fri Sep 25 00:33:48 2026 +0000"
      },
      "message": "IMPALA-9821: Change DataSketches functions to return BINARY\n\nDataSketches functions were added before BINARY type support\n(IMPALA-9482), leading to the current STRING based solution, which is\nincompatible with other systems (like Hive). After adding BINARY, the\nchanging of signatures (IMPALA-9821) was delayed, waiting for a major\nversion, because it is not a backward compatible. Now it is added in\npreparation for Impala 5.0.\n\nWhen Hive writes DataSketches to ORC tables, it correctly stores them as\nBINARY. Impala\u0027s ds_*_sketch() functions, however, historically returned\nSTRING when reading Hive-created ORC tables, thus causing a type\nmismatch error — the original issue in the Jira description, which was\nsolved by IMPALA-9482 without adding an explicit test for that exact\nscenario. \u0027datasketches-hll-hive-orc.test\u0027 adds a regression test for\nthat.\n\nAfter IMPALA-9482 fixed the ORC scanner to accept BINARY columns,\na frontend analysis error remained (if using sketches with consumer\nfunctions):\n\n  AnalysisException: No matching function with signature:\n    ds_hll_estimate(BINARY)\n\nThis patch completes the fix by:\n\n1. Changed return types to BINARY:\n   - ds_hll_sketch(), ds_cpc_sketch(), ds_theta_sketch(),\n     ds_kll_sketch()\n\n2. Changed parameter types to BINARY for all consumer functions:\n   - HLL: ds_hll_estimate, ds_hll_estimate_bounds_as_string,\n     ds_hll_union_f, ds_hll_stringify, ds_hll_union (UDAF)\n   - CPC: ds_cpc_estimate, ds_cpc_stringify, ds_cpc_union_f,\n     ds_cpc_union (UDAF)\n   - Theta: ds_theta_estimate, ds_theta_exclude,\n     ds_theta_union_f, ds_theta_intersect_f, ds_theta_union\n     (UDAF), ds_theta_intersect (UDAF)\n   - KLL: ds_kll_quantile, ds_kll_n, ds_kll_rank,\n     ds_kll_quantiles_as_string, ds_kll_pmf_as_string,\n     ds_kll_cdf_as_string, ds_kll_stringify, ds_kll_union\n     (UDAF)\n\nThanks to IMPALA-9482 (BINARY type support), this only requires\nFE changes — no backend modifications needed. The C++ UDFs already\ntreat StringVal as raw bytes.\n\nBackward compatibility: All STRING sketch columns require migration.\nExisting queries passing STRING sketches to consumer functions will\nfail at analysis time with a type mismatch. Migrate by retyping the\nsketch column in place with ALTER TABLE ... CHANGE COLUMN from STRING\nto BINARY; the on-disk bytes are unchanged. Alternatively, store\nsketches in BINARY columns or wrap them with CAST(col AS BINARY) at\nthe call site. Queries that only call ds_*_sketch() to create sketches\nare unaffected — the return type changes silently from STRING to\nBINARY, which only matters when INSERTing into a typed column.\n\nInterop caveat: This fix enables reading Hive-written ORC sketch\ncolumns. A separate interop hazard remains (IMPALA-9939): when the\n*source column* being sketched is of STRING type, Impala hashes\nthe values as UTF-8 bytes while Hive uses UTF-16 chars. The\nresulting sketches are not mergeable across engines regardless of\nhow they are stored (BINARY or STRING). To sketch string data\ncompatibly, cast the source to BINARY in Hive:\n  ds_hll_sketch(CAST(col AS BINARY))\n\nTesting:\n- Added testdata/workloads/functional-query/queries/QueryTest/\n  datasketches-hll-hive-orc.test demonstrating the ORC interop fix\n- Updated the four existing sketch test files for BINARY return\n  types for tests/query_test/test_datasketches.py\n\nChange-Id: Id4a6b54089dd356e37257bc24adeb1eb98e82c25\nAssisted-by: Claude Sonnet 4.6 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24590\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "1f2018be7bbb060cae71f18f4d6c42c527019d98",
      "tree": "5bc0a66454da6a309a0912de51b98ac595376e98",
      "parents": [
        "b69b3ea7492ac8a8bdfa8431e6f583e0ca86b8f5"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Sat Aug 22 22:48:09 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Sep 24 22:17:03 2026 +0000"
      },
      "message": "IMPALA-15280: Take referenced partitions from the final plan\n\nHdfsScanNode registers its partitions with the descriptor table from\ncomputeScanRangeLocations(), which runs while the scan\u0027s subtree is\nbeing built. The descriptor table therefore describes every scan the\nplanner ever constructed, not the scans that ended up in the plan. A\nsubtree that is replaced afterwards leaves its partitions behind, and\ntoThrift() ships partition descriptors that nothing reads. The TODO\nabove the tuple descriptors in DescriptorTable.toThrift() already names\nthis situation.\n\nHave each HdfsScanNode remember the ids it registered, and once the\nplan is final, keep the union over the scans still reachable from the\nplan fragments. Taking what the surviving scans registered, rather than\nderiving the partitions again, is what makes this safe: HdfsScanNode is\nthe only caller of addReferencedPartition(), so the new set is by\nconstruction a subset of the old one, it is the same set whenever every\nscan that was built survives, and no scan can lose a partition it still\nreads.\n\nDeriving the partitions again from the scan would not give the same\nanswer. The loop in computeScanRangeLocations() walks\ngetSampledOrRawPartitions(), so a TABLESAMPLE scan registers the\nsampled partitions and not partitions_, and a scan under a simple limit\nleaves the loop once it has rows enough and never reaches the rest.\nWhat each scan registered is the only record of what it asked for.\n\nThe walk covers every fragment, not the getFragmentsInPlanPreorder()\nsubset that createPlanExecInfo() uses: that one skips fragments reached\nthrough a join build, and a scan below one of those still runs.\n\nA table whose scans are all gone now ends up with an empty set rather\nthan the partitions its replaced scan had registered. That state is not\nnew: getReferencedPartitions() allocates an empty set for any table\ntoThrift() asks about, so a table whose tuple is still materialized\nwhile nothing scans it already ships a descriptor with no partitions -\nthe situation the TODO above the tuple descriptors names. The backend\ntakes it today.\n\nThe EmptySetNode replacements on master - createScanNode() on conjuncts\nimplied false, the empty SPJ result set, dropped union operands - all\nhappen before the discarded side is planned, so no plan is expected to\nchange here. This is a prerequisite for IMPALA-7996, which replaces the\npruned input of a constant-false outer join after that input has been\nbuilt and trips PlannerTestBase.testHdfsPartitionsReferenced without\nit.\n\nTesting:\n- PlannerTest, which asserts on every query that each partition in the\n  descriptor table is covered by a scan range. PlannerTestBase used to\n  check only the single-node plan and now checks the distributed and\n  parallel plans too.\n\nChange-Id: I553281e7c77e3297585360f37160bc3f9d69a208\nAssisted-by: claude-opus-5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24723\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "b69b3ea7492ac8a8bdfa8431e6f583e0ca86b8f5",
      "tree": "9c1817f154db17af1d1e7821d1b92aedcfa27086",
      "parents": [
        "e99a13c1c575fd39594dc0c91251f97650c46130"
      ],
      "author": {
        "name": "Peter Rozsa",
        "email": "prozsa@cloudera.com",
        "time": "Fri Sep 11 15:55:27 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Sep 24 21:06:34 2026 +0000"
      },
      "message": "IMPALA-15347: Move static S3 credential handling into S3ConnCredentials\n\nExtracts the --s3a_access_key_cmd / --s3a_secret_key_cmd handling out of\nHdfsFsCache into a new S3ConnCredentials class. The flags and the\ncommand execution now live in s3-conn-credentials.{h,cc}; Init() runs\nonce at daemon startup (after HdfsFsCache::Init()) and stores the result\nas a generic fs.s3a.* config map. HdfsFsCache::GetConnection() consumes\nthat map when building a connection instead of two ad-hoc static strings.\n\nBehaviour is unchanged: setting only one of the two flags is still\nignored (now with a warning), and so is a command that succeeds but\nprints nothing, so the keys in the Hadoop client configuration are never\noverridden with empty ones. The secret-key error message previously\nsaid \"Access Key\"; it now says \"Secret Key\".\n\nThis prepares HdfsFsCache for taking per-query vended credentials in the\nsame map form.\n\nChange-Id: Ie48cbb0c313f32242c4fce6603eab3e54d08cabd\nAssisted-by: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24837\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "e99a13c1c575fd39594dc0c91251f97650c46130",
      "tree": "56a4b450536e7f2b8f9c9fef74d76609f781eed7",
      "parents": [
        "893783e1190f924fa5bb097029ae5a84477690c8"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Sep 24 16:36:41 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Sep 24 19:42:46 2026 +0000"
      },
      "message": "IMPALA-15416: Fix compound predicate push-down test for Calcite\n\nTestIcebergTable.test_compound_predicate_push_down failed in the\nCalcite planner build with an unexpected NumRowGroups value (10\ninstead of 12) for the query with the following predicate:\n\n  not (col_bi + 1 !\u003d 123 or col_db \u003d 2.71822 or col_i \u003d -1)\n\nThe legacy planner cannot push this predicate down to Iceberg, as\n\u0027col_bi + 1 !\u003d 123\u0027 cannot be converted to an Iceberg expression.\nCalcite pushes the NOT into the OR, so the predicates become\nseparate conjuncts, and \u0027NOT col_db \u003d 2.71822\u0027 is pushed down to\nIceberg. Since the Iceberg 1.11 upgrade (IMPALA-15330) Iceberg\nskips data files for NOT_EQ predicates when the lower and upper\nbounds are equal to the literal, which is true for two data files.\n\nThis patch adds a CALCITE_PLANNER_RUNTIME_PROFILE section for the\nquery that expects 10 row groups.\n\nTesting:\n * ran test_compound_predicate_push_down with both planners\n\nChange-Id: Ia0ddf3dcce34d93755511d0234339b153de6b72b\nAssisted-by: Claude Opus 5.5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24934\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "893783e1190f924fa5bb097029ae5a84477690c8",
      "tree": "e34c6509517ad3d9fb1e2e9b6c73114e9c8af91c",
      "parents": [
        "a6af29eee0287a9ee60f726393e3df64b28ed5d4"
      ],
      "author": {
        "name": "Daniel Vanko",
        "email": "dvanko@cloudera.com",
        "time": "Fri Jul 17 10:19:44 2026 +0200"
      },
      "committer": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Sep 24 16:39:38 2026 +0000"
      },
      "message": "IMPALA-12675: Set PARQUET_ANNOTATE_STRINGS_UTF8 to true by default and turn on validation\n\nNow that Impala has a BINARY type for binary data and broader UTF-8\nsupport, STRING columns written to Parquet are annotated with the\nUTF-8 logical type by default (PARQUET_ANNOTATE_STRINGS_UTF8 now\ndefaults to true).\n\nTo keep the annotation truthful, STRING values are validated as UTF-8\non the Parquet write path (using the simdutf library) whenever the\nannotation is enabled. A value that is not valid UTF-8 aborts the write\nwith PARQUET_INVALID_UTF8_STRING. Validation is an inseparable\nconsequence of the annotation: there is no option to keep the\nannotation while writing unvalidated values, since that would produce a\nfile whose metadata lies about its contents. To store non-UTF-8 bytes,\nset PARQUET_ANNOTATE_STRINGS_UTF8 to false to omit the annotation, or\nuse a BINARY column. CHAR/VARCHAR (always text) and BINARY columns are\nnot validated. Iceberg tables always annotate STRING columns as UTF-8\n(a spec requirement that is not configurable), so their STRING values\nare always validated; use a BINARY column to store non-UTF-8 bytes\nthere.\n\nDetails:\n * Consume the simdutf 9.0.0 library from the native toolchain:\n   add IMPALA_SIMDUTF_VERSION, register the package in\n   bin/bootstrap_toolchain.py, locate it with a new\n   cmake_modules/FindSimdutf.cmake, and link it via IMPALA_DEPENDENCIES.\n * Validate once per non-null value in\n   HdfsParquetTableWriter::AppendRow().\n * Returning error if the string is not valid UTF-8, showing the\n   offending byte and its offset.\n * Update the docs, including a new Impala 5.0.x entry in\n   impala_incompatible_changes.xml documenting the default flip as a\n   behaviour change.\n\nValidation adds little to write time. CTAS of tpch.lineitem (6M rows)\nto Parquet, 30 runs each on a local 3-node minicluster release build\n(trimmed mean):\n\n    PARQUET_ANNOTATE_STRINGS_UTF8 | CTAS time\n    ------------------------------+----------\n    false (no validation)         | ~1.12s\n    true  (validate)              | ~1.22s\n\nThat is about +0.1s, or ~9%. The SIMD-accelerated simdutf scan is cheap\nrelative to the rest of the write path.\n\nTesting:\n * added new be test: Utf8UtilTest\n * set PARQUET_ANNOTATE_STRINGS_UTF8\u003dfalse in test_datasketches.py so it\n   can write the binary data into STRING columns (until IMPALA-9821)\n * add new tests to test_iceberg.py and test_scanners.py\n * modified existing e2e testcases to match new estimations\n\nChange-Id: Ia95bcba978863ffb5d603fdf81bb2c75ba06f7da\nAssisted-by: Claude Opus 4.8 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24570\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Zoltan Borok-Nagy \u003cboroknagyz@cloudera.com\u003e\n"
    },
    {
      "commit": "a6af29eee0287a9ee60f726393e3df64b28ed5d4",
      "tree": "9ffc30df5d2e48075bb0737bb1a38905c90ec1a7",
      "parents": [
        "a01435f32bbf90ef44a1a4fed4d4dbc46c1325c3"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Wed Sep 16 21:51:08 2026 +0200"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 24 15:19:12 2026 +0000"
      },
      "message": "IMPALA-15214: [DOCS] Update CPU requirements\n\nThe requirements page still listed SSSE3, but since IMPALA-9690\n(Impala 4.0) the daemons refuse to start on x86-64 CPUs without AVX2,\nunless the deprecated --enable_legacy_avx_support flag relaxes this to\nAVX.\n\nThe CPU requirement moves out of \"Hardware Requirements for Optimal\nJoin Performance\" into a new \"CPU Requirements\" section, since it is a\nhard requirement, not a performance recommendation. It now covers AVX2\nand the legacy AVX mode on x86-64, the ARMv8-A + CRC32 requirement on\nARM64 (IMPALA-15369), and how to check a machine. The 4.0.x\nincompatible changes section lists the AVX2 requirement too, because\nthe external 4.0 release notes mention only AVX.\n\nTesting:\n - Built the HTML docs with DITA-OT and checked the rendered pages.\n\nChange-Id: I413ac12719cbbcdd4cbdf99e77f24ab10d41651d\nAssisted-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24931\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "a01435f32bbf90ef44a1a4fed4d4dbc46c1325c3",
      "tree": "47cf8eda46b35aeb78bc3f4a0c67efc2c3bc8ca2",
      "parents": [
        "8bcbb4dc8e53fadb18adfe495aaa075630e4f6dc"
      ],
      "author": {
        "name": "Xuebin Su",
        "email": "xsu@cloudera.com",
        "time": "Sun Sep 20 17:51:01 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Thu Sep 24 11:29:46 2026 +0000"
      },
      "message": "IMPALA-15385: Make AVG_COLLECTION_SIZE a query option\n\nAVG_COLLECTION_SIZE affects the cardinalty estimation of some plan\nnodes, which in turn affects the memory estimation.\n\nThis patch changes AVG_COLLECTION_SIZE from a hard-coded constant to\na query option so that user can set it for each query.\n\nTesting:\n- Added a new PlannerTest.\n\nChange-Id: I518f76b38ba926e6ece196f6e90c60f1fa15b5ff\nReviewed-on: http://gerrit.cloudera.org:8080/24902\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "8bcbb4dc8e53fadb18adfe495aaa075630e4f6dc",
      "tree": "5b509bed7935f6bf91bbfbcd192dd020ebcbf798",
      "parents": [
        "d757d3dfe5c7cdcc48aed2064ed28bbed3ef9ffe"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 22 21:47:10 2026 +0300"
      },
      "committer": {
        "name": "Quanlong Huang",
        "email": "huangquanlong@gmail.com",
        "time": "Thu Sep 24 11:24:43 2026 +0000"
      },
      "message": "IMPALA-15398: [DOCS] Document :clear_hbo_stats()\n\nIMPALA-15234 added the :clear_hbo_stats() admin function, and the docs\ndo not mention it. Add a topic next to the other statements: the\nsyntax, the ALL privilege on the server that authorization requires,\nthe coordinator scope of the clear, and its best-effort behavior.\n\nTesting:\n- xmllint well-formedness check on the new topic and on impala.ditamap\n\nChange-Id: Ia09a35636080b9234d26c1262940526dc1bbcd99\nAssisted-by: claude-opus-5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24917\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Quanlong Huang \u003chuangquanlong@gmail.com\u003e\n"
    },
    {
      "commit": "d757d3dfe5c7cdcc48aed2064ed28bbed3ef9ffe",
      "tree": "dc0f25ddda6a2342cd35e227f9d2f480de055cd1",
      "parents": [
        "8e7626ce231edca0807e7cf423923bed484fe4d4"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 22 09:58:46 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 20:03:44 2026 +0000"
      },
      "message": "IMPALA-15397: Update test after S3 reports encrypted\n\nAfter IMPALA-15291, S3 files now report as encrypted, so update\nIS_ENCRYPTED for test_io_metrics.\n\nChange-Id: I3f6739353d77a1fe1ce1b21cbab5009879f69c3b\nReviewed-on: http://gerrit.cloudera.org:8080/24915\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "8e7626ce231edca0807e7cf423923bed484fe4d4",
      "tree": "abe1c251cac8460e2d7f05d42b66820936b1b27d",
      "parents": [
        "a95c64c756f66156399f9e4de2a5067f34765e37"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Mon Sep 14 10:28:32 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 19:37:10 2026 +0000"
      },
      "message": "IMPALA-15346: Fix IllegalStateException in createInsertEvents\n\nThis fixes an IllegalStateException in createInsertEvents when inserting\nempty results into an unpartitioned table.\n\nThe exception is thrown in CatalogOpExecutor.createInsertEvents() when\nasserting the number of updated partitions to be 1. The map of updated\npartitions is created in CatalogOpExecutor.getFileMetadata() which loads\nfile metadata like checksums. It unintentionally skips adding partitions\nthat have an empty new file list by putting the put() statement in the\nfor-loop that iterates the file list. This patch fixes it by moving the\nput() statement outside that for-loop. Also simplifies the case of empty\nnew file list.\n\nThe Preconditions check is updated to log the actual number of updated\npartitions.\n\nTesting\n - Added custom-cluster test\n\nChange-Id: I0eb366f55f4e95b229a57297e42d14760b31be21\nReviewed-on: http://gerrit.cloudera.org:8080/24835\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "a95c64c756f66156399f9e4de2a5067f34765e37",
      "tree": "361731dea2adc70c9859b74666a5ce79b8048312",
      "parents": [
        "820e108c83ebc653a9b21fb54039586768f3b74e"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Tue Sep 22 09:09:07 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 19:29:26 2026 +0000"
      },
      "message": "IMPALA-15381: Reduce reservoir RNG state\n\nboost::mt19937_64 makes ReservoirSampleState 2536 bytes. FreePool\nrounds the allocation to 4 KiB, so sampling aggregates use 4624\nbytes per function and group with their initial sample array.\n\nUse pcg32 to reduce the state to 48 bytes. The sampling sequence\nchanges, so approximate results can change.\n\nTesting:\n- Full release build\n- HistogramTest.*\n- Large appx_median(), sample(), and histogram() queries\n- Updated the Init() allocation size in alloc-fail-init.test\n\nChange-Id: I9e046e3f0c1b91f1761ce578601a330bd864eb84\nAssisted-by: gpt-5.6-sol (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24896\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "820e108c83ebc653a9b21fb54039586768f3b74e",
      "tree": "c8c3de7a7a02486194af9ece421c7d7ad2bff3aa",
      "parents": [
        "f7fdd88c6cc5a301bfbea3a8b6a5b83dd2064680"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Wed Sep 23 14:26:22 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 19:11:40 2026 +0000"
      },
      "message": "IMPALA-15374: Roll back current_row_ when undoing a level read ahead\n\nCollection column readers drive their children through the\nnon-batched interface, so a child always has one level read ahead.\nWhen the scanner skips rows for such a child,\nBaseScalarColumnReader::SkipRows() undoes that read ahead but did not\nroll back \u0027current_row_\u0027, which NextLevels() had already incremented\nfor the level being un-read. SkipTopLevelRows() then counted from a\nstarting point one too high, so the counter drifted by one per\nskipped range within a row group.\n\nWhich symptom this produces depends on the page index. Without it the\nvalues stay aligned but LastProcessedRow() is too high, so a\ncollection reader that fills the file position slot reports positions\nthat are too large:\n\n  set parquet_late_materialization_threshold\u003d1;\n  select file__position, int_array, id from complextypestbl\n  where id % 2 \u003d 0;\n\nreturned positions 1, 4, 7, 0 instead of 1, 3, 5, 0; 7 is past the\nend of the seven row file. With the page index the rows to skip are\ncomputed as \u0027skip_row_id - LastProcessedRow()\u0027, so the reader skips\none row too few and falls behind the columns it is read with,\nsilently pairing rows with the wrong collection value:\n\n  set batch_size\u003d4;\n  select c_custkey, count(o.o_orderkey), min(o.o_orderkey)\n  from customer_nested_multiblock_multipage c left join c.c_orders o\n  where c_custkey \u003e 280 and c_custkey % 9 \u003d 2 group by c_custkey;\n\nreturned customer 289\u0027s orders for customer 290, and none for\ncustomer 299.\n\nRoll the counter back under the same condition NextLevels() uses to\nadvance it, before \u0027rep_level_\u0027 is invalidated. Levels read ahead at\nthe end of a row group never advanced it and have \u0027rep_level_\u0027 \u003d\u003d\nROW_GROUP_END, so they are left alone.\n\nBroken since IMPALA-3841, which added the read ahead undo along with\nlate materialization for collections. Only readers driven through the\nnon-batched interface are affected: top level scalar readers never\nread a level ahead, and struct and VARIANT readers are still\nexcluded.\n\nTesting:\n - Added QueryTest/parquet-late-materialization-collections.test with\n   a query per symptom, run with late materialization and the page\n   index on and off. Both fail without the fix.\n - Ran test_parquet_late_materialization.py, test_nested_types.py and\n   test_parquet_stats.py.\n - customer_nested_multiblock_multipage is now loaded during dataload.\n\nChange-Id: Icaf0aab770d87505513b0168f52f96480eda3202\nAssisted-by: Claude Fable 5.1 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24886\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "f7fdd88c6cc5a301bfbea3a8b6a5b83dd2064680",
      "tree": "79c0090ac3454454fb5745ee69a90f10f54d30cc",
      "parents": [
        "88b903cf591b95d68223afaa78ef433da20ddb99"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Sep 23 08:49:30 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Wed Sep 23 17:04:18 2026 +0000"
      },
      "message": "IMPALA-15363: Update builder to Rocky 8\n\nThe toolchain builder for RHEL 8 changed from CentOS to Rocky, so update\nthe toolchain mapping to match.\n\nChange-Id: Ice71eff8f2669fe6a33157b8ca80f12d452cac43\nReviewed-on: http://gerrit.cloudera.org:8080/24928\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "88b903cf591b95d68223afaa78ef433da20ddb99",
      "tree": "1f1539d64133a010d239bb768150d2d56b533ead",
      "parents": [
        "fd26e466263e331359088099b946dd7f211f0d93"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Fri Sep 11 12:58:49 2026 +0200"
      },
      "committer": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Wed Sep 23 12:03:16 2026 +0000"
      },
      "message": "IMPALA-15367: Bump thrift to 0.24.0 - java parts\n\nMetastore thrift classes are still pulled in from Hive\nand are generated with Thrift 0.16.0, which seems genarally\ncompatible with 0.24.0 runtime.\n\nThrift 0.24.0 moved from HttpClient 4 to 5, which required\nworkarounds in some tests:\n- JdbcTest: xfail hs2-http tests until Hive also uses Thrift 0.24\n- TestCaseLoaderTest: xfail until Hive also uses Thrift 0.24\n- LdapHS2Test: don\u0027t compile when using Apache Hive, where Impala\n               uses Thrift 0.11.0\n\nThe xfails can be removed once Impala gets a cdp dependency with\nHive that uses Thrift 0.24.0 (IMPALA-15384).\n\norg.apache.httpcomponents has both versions 4 and 5 in Impala,\nwhich is normal as they use different group and arfifact id. There\nare many dependencies that use 4 besides old Thrift.\n\nChange-Id: I9e15704c9db4b802e5c0ca7fd3e652aa37ee1f2f\nAssisted-By: Claude Opus 4.8\nReviewed-on: http://gerrit.cloudera.org:8080/24820\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Quanlong Huang \u003chuangquanlong@gmail.com\u003e\n"
    },
    {
      "commit": "fd26e466263e331359088099b946dd7f211f0d93",
      "tree": "27f5c30b2f1ae1fed48afab5205631c272ae8305",
      "parents": [
        "d0e181c7ef4dfde667254d56c9ded6c2d79abee9"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Sat Sep 19 12:56:45 2026 +0300"
      },
      "committer": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Wed Sep 23 10:59:17 2026 +0000"
      },
      "message": "IMPALA-15361: Read Hive 4 timestamp stats\n\nHive 4 reconstructs persisted TIMESTAMP statistics in the dedicated\nTimestampColumnStatsData union field based on the column type,\nregardless of which engine wrote them. Impala also uses\nLongColumnStatsData when it writes the statistics directly.\n\nRead NDV and null counts from both representations and keep low and high\nvalues unset. Handle Hive 4 field 8 in Hive3MetastoreShimBase so both\nApache and CDP Hive 3 shims use it without referencing the Hive 4 API.\n\nAdd unit coverage for both representations. The Hive 4 case is skipped\nwhen the timestampStats API is unavailable.\n\nTesting:\n- Frontend build and ColumnStatsTest with Hive 4.0.1 (0 skipped)\n- Frontend build and ColumnStatsTest with Apache Hive 3.1.3 (1 skipped)\n- Frontend build and ColumnStatsTest with CDP Hive 3 (1 skipped)\n\nChange-Id: I0b99acbe65665226938b2e4ac5191063d3925426\nAssisted-by: gpt-5.6-sol (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24894\nReviewed-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\nTested-by: Csaba Ringhofer \u003ccsringhofer@cloudera.com\u003e\n"
    },
    {
      "commit": "d0e181c7ef4dfde667254d56c9ded6c2d79abee9",
      "tree": "fc9d0a0d0084b8a5069f0c89628511a084776b24",
      "parents": [
        "74159a83430aa0b9ea0ac4dcb9a4c965ebf3a681"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 15 14:00:30 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 01:42:19 2026 +0000"
      },
      "message": "IMPALA-15357: Update Kudu to current master\n\nUpdates Kudu to master as of 16 Sept 2026, built with Java 17 builders\nfrom IMPALA-15363.\n\nChange-Id: I78b320d5d12059839eccbeb260487e54c6bcc1f7\nReviewed-on: http://gerrit.cloudera.org:8080/24856\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "74159a83430aa0b9ea0ac4dcb9a4c965ebf3a681",
      "tree": "01094d13efd5880db92ac4157194523526ec5f59",
      "parents": [
        "efdd0713f37a46aa7161902c7410059a25cdd517"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Thu Sep 17 16:05:24 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Wed Sep 23 01:17:26 2026 +0000"
      },
      "message": "IMPALA-15369: Check for the CRC32 extension at startup on ARM64\n\nOn aarch64, Impala is built with -march\u003darmv8-a+crc, and native code\nand codegen use CRC32 instructions for hashing (HashUtil::Hash(),\nLlvmCodeGen::GetHashFunction()) without checking for them at runtime.\nThe CRC32 extension is optional in ARMv8.0, so on such CPUs the daemons\ncrash with SIGILL once a CRC32 code path runs, instead of failing at\nstartup with a clear message.\n\nThis change adds a CpuInfo::CRC32 hardware flag. CpuInfo::Init() now\nalso parses the \u0027Features\u0027 line of /proc/cpuinfo, which is where the\nkernel lists the CPU features on aarch64 (x86_64 uses \u0027flags\u0027).\nCpuInfo::EnforceCpuRequirements() fails on aarch64 if CRC32 is not\nsupported. All daemons already call it from InitCommonRuntime() and\nexit with an error message if it fails, like for the AVX/AVX2\nrequirement on x86_64.\n\nTesting:\n - Core tests show no new errors on ARM machine\n\nChange-Id: Ic01f8f8009e6e2d8dbfd324d83353b0d4dbf1d4c\nAssisted-by: Claude Opus 5.5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24888\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "efdd0713f37a46aa7161902c7410059a25cdd517",
      "tree": "665c3c115806a4dea878ff296812891921b7fd35",
      "parents": [
        "a45095e75da4437cb1bfeb098149b2fa1e6249af"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 17 16:29:26 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 18:41:14 2026 +0000"
      },
      "message": "IMPALA-15376: Fix SIGABRT in AnalyticEvalNode::GetNext on empty window_tuples_\n\nAnalyticEvalNode::GetNext() unconditionally called\nwindow_tuples_.front() when deciding whether to transfer the prev\ntuple pool to the output batch. window_tuples_ can legitimately be\nempty at that point (e.g. right after all window tuples have been\npopped, or when prev_pool_last_window_idx_ was recorded as the -1\nsentinel), so calling front() on the empty deque is undefined\nbehavior. Under _GLIBCXX_ASSERTIONS on GCC 15+ (enabled whenever\n__OPTIMIZE__ is unset, e.g. -O0/UBSAN/DEBUG_NOOPT builds) this\naborts the process.\n\nReproduced by a query combining an analytic/window function with an\nouter ORDER BY + LIMIT, e.g.:\n\n  select * from (\n    select l_partkey, l_quantity, l_orderkey,\n      rank() over (partition by l_partkey, l_quantity\n                   order by l_orderkey desc) rk\n    from lineitem) dt\n  order by l_partkey, l_quantity, l_orderkey, rk\n  limit 10\n\nwhich plans to a local TopNNode pulling rows from AnalyticEvalNode via\nGetNext() in TopNNode::Open().\n\nGuard the front() access by short-circuiting when window_tuples_ is\nempty, since an empty window_tuples_ means nothing remains that could\nstill reference prev_tuple_pool_, so it\u0027s always safe to transfer.\n\nChange-Id: Ic17c5a6ea4cfada1faf7a1715aa83489c2db7658\nAssisted-by: Claude Sonnet 5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24893\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "a45095e75da4437cb1bfeb098149b2fa1e6249af",
      "tree": "164cfa389f1614a69bf165924e5a28a242474da4",
      "parents": [
        "eeaa8bcb8b150585e1c359cdf22c119844e8b330"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Fri Sep 18 12:25:59 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 18:38:18 2026 +0000"
      },
      "message": "IMPALA-15373: Fix FILE__POSITION for complex readers in later row groups\n\nReadFilePositionNonBatched() returns \u0027row_group_first_row_ +\nLastProcessedRow() + 1\u0027, but \u0027row_group_first_row_\u0027 was only assigned in\nBaseScalarColumnReader::Reset(). The file position slot is attached to\n(*column_readers)[0] whatever kind of reader that is, so when that is a\ncomplex reader (collection, struct or VARIANT) the offset stayed 0 and\nthe second and later row groups reported row-group-relative positions.\nThis also mis-applies Iceberg position deletes, which match on\nFILE__POSITION.\n\nA regression from IMPALA-11780, which made \u0027current_row_\u0027\nrow-group-relative and added the compensating term only on the scalar\npath.\n\nPass the offset to ComplexColumnReader::Reset() as well, mirroring\nInitScalarColumns(). complex_readers_ holds every complex reader,\nincluding nested ones and the one CreateCountingReader() builds, so all\nof them are covered. LastProcessedRow() stays row-group-relative, so\nskip_row_id and the page index arithmetic are unaffected. ORC does not\nshare the bug.\n\nTesting:\n - Two expected results in virtual-column-file-position-parquet.test\n   encoded the old behaviour and are corrected to the true row indexes.\n - Added regression queries over all row groups of two different files.\n - The struct and VARIANT paths are fixed by the same change but have no\n   regression test, because no checked-in file has both a top level\n   struct or VARIANT column and more than one row group.\n - Ran test_scanners.py -k test_virtual_column_file_position_parquet.\n\nChange-Id: Ieb186c5727ae2a0cd53fb0c68ac540b8cd9fa8c7\nAssisted-by: Claude Fable 5.1 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24885\nReviewed-by: Zoltan Borok-Nagy \u003cboroknagyz@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "eeaa8bcb8b150585e1c359cdf22c119844e8b330",
      "tree": "22fa587b4e91d9e63a18a97cf95d0d248f493bc2",
      "parents": [
        "3740ee388821188b4ff3f9f2cfe6d2f2c5981f75"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Mon Sep 07 13:39:04 2026 +0300"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Tue Sep 22 18:32:31 2026 +0000"
      },
      "message": "IMPALA-15234: Add a way to clear the HBO cache\n\nAdd :clear_hbo_stats() using the existing admin statement framework.\nWith authorization enabled, the command requires ALL privilege on the\nserver. No SQL grammar changes are needed.\n\nCall CacheBackend.clear() through JNI. The in-memory backend clears\nthe cache on the coordinator handling the command. A shared backend\ncan provide a wider scope through the same interface.\n\nThe clear removes entries currently stored in the cache. It does not\nserialize concurrent writers, so queries can store runs after it\nreturns.\n\nTests cover clearing populated and empty caches, command analysis,\nserver-level privileges, and removal of HBO estimates in EXPLAIN.\n\nChange-Id: Ib58305e96f05ba49eb03d935765620915964308a\nAssisted-by: claude-opus-5 (Claude Code); gpt-6-astra (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24711\nReviewed-by: Quanlong Huang \u003chuangquanlong@gmail.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "3740ee388821188b4ff3f9f2cfe6d2f2c5981f75",
      "tree": "d22523775366324f1ef7a05d5a403a12ed70c0e6",
      "parents": [
        "ee07fc1720549464faf6de3c3ea6d11303b089dc"
      ],
      "author": {
        "name": "Nandor Kollar",
        "email": "kollar.nandor@gmail.com",
        "time": "Fri Sep 11 11:44:01 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 16:07:20 2026 +0000"
      },
      "message": "IMPALA-15033: Optimize simple LIMIT queries on Iceberg V2 tables\n\nWhen OPTIMIZE_SIMPLE_LIMIT is enabled and an Iceberg V2 table has\nenough delete-free data files to satisfy the LIMIT, bypass the\nexpensive delete-join pipeline and scan only the minimum subset of\nthose files.\n\nThe optimization fires early in IcebergScanPlanner.createScanPlan()\nand produces a simple IcebergScanNode with just the selected files.\nIt is skipped for OPTIMIZE TABLE statements, queries with WHERE\nclauses, and when there aren\u0027t enough delete-free rows to cover the\nlimit.\n\nAlso cleans up Boolean.valueOf(true/false) to Boolean.TRUE/FALSE in\nSelectStmt.checkSimpleLimitStmt().\n\nTesting: added iceberg-optimize-simple-limit.test covering mixed\ndelete/no-delete files, optimization disabled, no-delete tables,\nall-deletes tables, and WHERE clause disqualification.\n\nChange-Id: I416d947e3c6e3fb0e4c2da056d75f70c08ac9676\nAssisted-by: Claude Opus 4.6 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24818\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "ee07fc1720549464faf6de3c3ea6d11303b089dc",
      "tree": "e13f6930f6e056fbc436a6303153b1bd6216feee",
      "parents": [
        "c3483c2946bee72b75960788bf3bbd13d2b9a7b7"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Tue Sep 22 09:40:43 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 15:22:39 2026 +0000"
      },
      "message": "IMPALA-15393: Fix TLS minimum version handling after Thrift 0.24 bump\n\nThrift 0.24.0 bump (IMPALA-15354) changed SSL_CTX initialization\nto use SSL_CTX_set_min_proto_version() instead of SSL_CTX_set_options()\nto set (dis)allowed protocol versions. An unintended\nconsequence was allowing lower versions than the system\u0027s default minimum,\nwhich was not possible with flags like SSL_OP_NO_TLSv1.\n\nThis caused test failures in some environments (RHEL 8.6) in cases\nwhere the minimum version was not set (ThriftServerBuilder::ssl_version()),\npassing default tls1 which overrode 1.2 from the system default. In tests\nthat disable tls1.2, this could lead to a version list with a gap like\ntls1, tls1.1, tls1.3. AFAIK normally tls1.3 would be negotiated in this\ncase, but on RHEL 8.6 the SSL handshake failed.\n\nIn production the tls version is always set, and the only effect was that\nImpala may lower the version to 1.2 when the system policy mandates 1.3.\n\nTwo separate fixes are added:\n- ThriftServerBuilder\u0027s default is set to tls1.2 (only affects tests)\n- SSL_CTX_set_min_proto_version is only called if the version is\n  increased, not lowered\n\nAssisted-by: Claude Opus 4.8 (Claude Code)\nChange-Id: I7542445bcf6623b15ba8c66aaba585983e11afc7\nReviewed-on: http://gerrit.cloudera.org:8080/24912\nReviewed-by: Peter Rozsa \u003cprozsa@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "c3483c2946bee72b75960788bf3bbd13d2b9a7b7",
      "tree": "e82c2c9be0d00a698c2c6686f08e5d90ab72e639",
      "parents": [
        "de51ad486dde94c7aea5d00da96acf9266afc6bf"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Mon Sep 21 18:40:08 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 11:24:42 2026 +0000"
      },
      "message": "IMPALA-15387: Reset next_levels_consumed_ for each row group\n\nComplexColumnReader::Reset() did not clear next_levels_consumed_, added\nby IMPALA-3841. In a new row group the parent collection skipped its\nnested child in the first NextLevels(), treated itself as empty and read\nlevels again, so a scalar sibling read its levels twice. From the first\npage boundary on, that sibling returned the next row\u0027s value.\n\nTesting:\n- Added a two-level query over customer_nested_multiblock_multipage to\n  parquet-late-materialization-unique-db.test. Expected result computed\n  with pyarrow; a build without the fix returns 11908,9964,29547222652.\n\nChange-Id: I7a1fe611da5dfebd99fa62f694a719675822935f\nAssisted-by: Claude Opus 5 (Claude Code)\nReviewed-on: http://gerrit.cloudera.org:8080/24910\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "de51ad486dde94c7aea5d00da96acf9266afc6bf",
      "tree": "e6281988ee8315233e377428b62842d8bea67955",
      "parents": [
        "71c347b55997a674d557fbdcb18ec7e79861704f"
      ],
      "author": {
        "name": "stiga-huang",
        "email": "huangquanlong@gmail.com",
        "time": "Tue Aug 25 23:03:38 2026 +0800"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 06:17:21 2026 +0000"
      },
      "message": "IMPALA-15290: Retry for exists check in HadoopFsCommandLineClient\n\nHadoopFsCommandLineClient.exists() currently ignores the stdout and\nstderr of the hdfs CLI command. When it returns false, it could due to\ntransient errors like S3 503 Slow Down error. In such error cases,\nstderr is not empty.\n\nThis adds a retry in exists() when the command exits with non-zero\nstatus and non-empty stderr. Also adds logging to show stdout and stderr\nfor further debugging.\n\nTesting\n - Ran test_execute_remove_orphan_files locally.\n - Ran tests/query_test/test_iceberg.py on S3.\n\nAssisted-by: Opus 4.8 (Claude Code)\nChange-Id: I071472529ec1b923e74e960a24e19b9e70c80011\nReviewed-on: http://gerrit.cloudera.org:8080/24744\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "71c347b55997a674d557fbdcb18ec7e79861704f",
      "tree": "047f7211675f326cc34de7bc0c68f5efe78a0bf9",
      "parents": [
        "e55545f2d1ad901e30fb663ba566de4e173ba98e"
      ],
      "author": {
        "name": "Zoltan Borok-Nagy",
        "email": "boroknagyz@cloudera.com",
        "time": "Fri Sep 18 13:22:55 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Tue Sep 22 00:58:41 2026 +0000"
      },
      "message": "IMPALA-15375: Materialize the file position slot before evaluating conjuncts\n\nWith late materialization only the readers whose slots a conjunct or runtime\nfilter reads are materialized before the conjuncts are evaluated; the rest\nare materialized afterwards, for the surviving rows only.\n\nThe file position slot has no reader of its own. CreateColumnReaders()\nattaches it to (*column_readers)[0], whichever reader that is. The split\nonly looked at each reader\u0027s own slot, so a conjunct on FILE__POSITION did\nnot move that reader into the filter group. When it was a non-filter reader\nthe conjunct was evaluated against a slot that had not been written yet,\nreading whatever InitTupleBuffer() left there.\n\nRows went missing silently:\n\n  set parquet_late_materialization_threshold\u003d1;\n  select string_col, file__position from alltypes_tiny_pages\n  where id \u003d 6285 and file__position \u003d 7000;\n\nreturned no rows, against one with late materialization disabled. The\nIceberg _row_id virtual column is affected the same way on V3 tables, as it\nis rewritten to an expression over FILE__POSITION.\n\nTreat the reader that writes the slot as a filter reader whenever a conjunct\nreads it. That is always safe, since filter readers are simply materialized\nfor every row. If the reader is a collection it becomes filter_readers_[0]\nand the existing max_rep_level() check falls back to\nAssembleRowsWithoutLateMaterialization.\n\nTesting:\n - Added two queries to virtual-column-file-position-parquet.test, which\n   runs with parquet_late_materialization_threshold in {-1, 1, 17}. The\n   second keeps another non-filter column so late materialization stays\n   enabled. Both fail without the fix.\n - Ran test_scanners.py -k \"virtual_column or mixing\" and\n   test_parquet_late_materialization.py.\n\nChange-Id: I13fc71b5f81088e7efd1d64b8828b30268c40fb8\nAssisted-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24887\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "e55545f2d1ad901e30fb663ba566de4e173ba98e",
      "tree": "dc861a12595b2287a5e431e8adbb3871e29e1ca5",
      "parents": [
        "3f2973b2b0dffa3542a089ca6e0ddc6cbe410c07"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 17 10:12:07 2026 -0700"
      },
      "committer": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Mon Sep 21 23:30:06 2026 +0000"
      },
      "message": "IMPALA-15379: Fix UBSan VLA-bound-0 aborts\n\nExecNode::CodegenEvalConjuncts declared a C-style VLA\n(llvm::Function* conjunct_fns[conjuncts.size()]) to hold codegen\u0027d\nconjunct functions. When a scan node has zero conjuncts (e.g. a\nquery with no WHERE clause), conjuncts.size() is 0, and a VLA with a\nruntime bound of 0 is undefined behavior. UBSan\u0027s vla-bound check\nflags this as fatal in future Clang versions, aborting impalad mid-query\n(reproduced by\nTestNestedCollectionsInSelectList::test_array_in_select_list).\n\nTuple::CodegenMaterializeExprs and\nTupleRowComparatorConfig::CodegenLexicalCompare have similar cases when\ninputs are empty.\n\nReplace VLAs with a std::vector.\n\nChange-Id: I9d476f5adc47d2a9e368a8960fa4e7c3817f43fd\nAssisted-by: Claude Sonnet 5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24890\nReviewed-by: Jiyoung Yoo \u003cjiyoung@cloudera.com\u003e\nReviewed-by: Joe McDonnell \u003cjoemcdonnell@cloudera.com\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\n"
    },
    {
      "commit": "3f2973b2b0dffa3542a089ca6e0ddc6cbe410c07",
      "tree": "0218badcc0697e515641ed387260a55bbb54597f",
      "parents": [
        "7845bcc2239ba948eb8f2f2dc6bc89b7857fcf09"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Sat Sep 19 12:56:51 2026 +0300"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Sep 21 20:30:08 2026 +0000"
      },
      "message": "IMPALA-15382: Propagate request pool JNI errors\n\nResolveRequestPool() ignored the status from JniUtil::CallJniMethod()\nand then inspected a default result. If Java threw during short-name\nconversion or pool resolution, the client could see denied access\nwith an empty pool.\n\nReturn the JNI error before inspecting the result. Add a backend\nregression test for short-name conversion failures.\n\nTesting:\n- AdmissionControllerTest.ResolveRequestPoolJniError\n\nChange-Id: I89ea3edfa725e87ebc513b35308c45992e37896a\nAssisted-by: gpt-5.6-sol (OpenAI Codex)\nReviewed-on: http://gerrit.cloudera.org:8080/24895\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "7845bcc2239ba948eb8f2f2dc6bc89b7857fcf09",
      "tree": "b5b45c3b194fb827f5fccdfa1f08090efb593e85",
      "parents": [
        "4036a01b9f77d208fd78f25a703e331e3e18840e"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 17 11:12:56 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Sep 21 20:28:38 2026 +0000"
      },
      "message": "IMPALA-15377: Fix ASAN heap-buffer-overflow in ParquetDeltaEncoder for empty pages\n\nParquetDeltaEncoder::FinalizePage() unconditionally wrote a page header\neven when zero values had been written (total_value_count_ \u003d\u003d 0), using an\nuninitialized first_value_ and requiring more space than WorstCaseOutputSize(0)\n(which returns 0) reserves. This caused a heap-buffer-overflow write in\nBitWriter::PutAligned via WriteHeader, hit by\nParquetDeltaLengthByteArrayDecoderTest.EmptyPage on ASAN builds.\n\nMake FinalizePage() return 0 immediately for an empty page instead of writing\na header, matching the WorstCaseOutputSize(0) \u003d\u003d 0 contract.\n\nChange-Id: I52aaff63ab76dd25ceeb6a7d840d4c483cf518b1\nAssisted-by: Claude Sonnet 5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24892\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "4036a01b9f77d208fd78f25a703e331e3e18840e",
      "tree": "9ac45652ce67e703d710fe43fe57ffbc7c8dda8b",
      "parents": [
        "af856f584e8a9ecaec406dcecc804cfc4b383a38"
      ],
      "author": {
        "name": "Csaba Ringhofer",
        "email": "csringhofer@cloudera.com",
        "time": "Thu Jul 02 20:47:07 2026 +0200"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Sep 21 13:47:32 2026 +0000"
      },
      "message": "IMPALA-15161: Add GEOMETRY type + make WKB_EXPERIMENTAL default\n\nAdd GEOMETRY as a new primitive type so that geospatial\nfunctions in WKB_EXPERIMENTAL mode use typed signatures\n(e.g. st_point returns GEOMETRY, st_x accepts GEOMETRY)\ninstead of raw BINARY.\n\nHIVE_ESRI mode is unchanged, all functions keep their\nBINARY signature in that case.\n\nThe default is changed to WKB_EXPERIMENTAL - before it\nwas NONE, but overriden to HIVE_ESRI in test cluster\nstartup to make testing easier. The change is done\nhere to allow meaningful FE tests for GEOMETRY\n(otherwise no function would accept/return GEOMETRY):\nproduction + BE/FE tests: NONE-\u003eWKB_EXPERIMENTAL\nEE tests: HIVE_ESRI-\u003eWKB_EXPERIMENTAL\n\nAs users who relied on HIVE_ESRI had to specify it in\ncommand line flag, it will still override the default\nlib and keep old behavior.\n\nType system:\n- Parser: added GEOMETRY as non-reserved keyword\n- Frontend: proper distinct Type\n- Backend: minimal change, piggyback on TYPE_STRING\n- Block any CAST to/from GEOMETRY - later STRING (WKT)\n  and BINARY (WKB) casts may be added.\n- Reject GEOMETRY columns in CREATE TABLE\n- Don\u0027t allow returning to client in select list (IMPALA-15244)\n\nGEOMETRY in generic expression contexts:\n- No comparison (\u003c, \u003d) operators\n- Conditional functions coalesce/if/isnull/ifnull/nvl work\n  on GEOMETRY\n- Allow a bytes() builtin returning the byte length (currently\n  WKB length)\n- Can be used in analytical functions (e.g. last), also added\n  for BINARY where it was unsupported without reason\n\nMetastore integration:\n- HMS doesn\u0027t have GEOMETRY column type, so a GEOMETRY column\n  is reported to HMS as \"binary\" while Impala keeps GEOMETRY\n  internally (CatalogOpExecutor.buildFieldSchemaList). This\n  lets a CREATE VIEW expose a GEOMETRY column; the real type\n  is recomputed from the view query when the view is used.\n\nTests:\n- Usual FE tests for new types\n- Minimal BE tests because Java UDFs can\u0027t be called from\n  exprs-test.cc\n- Minimal EE tests - more meaningful test will be added\n  with Iceberg table integration\n- Swapped role test_geospatial_library.py and\n  test_geospatial_functions.py due to new default lib\n\nChange-Id: I0ff29cb15ab45f3899bf453041e605a32f195c27\nAssisted-by: Claude Opus 4.8\nReviewed-on: http://gerrit.cloudera.org:8080/24534\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "af856f584e8a9ecaec406dcecc804cfc4b383a38",
      "tree": "21e80c58e1cf261bfddad43c045ff3544a3a20a0",
      "parents": [
        "cd5b2678d9b2f104ec348f5cf532eca54214514e"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Thu Sep 17 10:12:22 2026 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Mon Sep 21 00:06:38 2026 +0000"
      },
      "message": "IMPALA-15378: Fix OOB read in OrcSchemaResolver::ResolveColumnByName\n\nTranslateColPaths() can legitimately return an empty\ntable_col_path/file_col_path pair: when the table is full ACID but\nthe underlying file is not, and col_path refers only to the\nsynthetic ACID \"row\" pseudo-column, neither schema has a\ncorresponding node, so nothing is pushed to either output path.\nResolveColumnByName() did not account for this and unconditionally\nindexed table_path[0], reading out of bounds on the empty vector\n(caught by libstdc++\u0027s _GLIBCXX_ASSERTIONS, aborting impalad).\nResolveColumnByPosition() already handles this correctly since its\nloop naturally no-ops on an empty path.\n\nAdd the same empty-path guard to ResolveColumnByName(), leaving\n*node as root_ and *missing_field as false, matching\nResolveColumnByPosition()\u0027s behavior.\n\nChange-Id: Ia269c7cebc88f6bf1d7269316beab438ecd803ba\nAssisted-by: Claude Sonnet 5 (GitHub Copilot)\nReviewed-on: http://gerrit.cloudera.org:8080/24891\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    },
    {
      "commit": "cd5b2678d9b2f104ec348f5cf532eca54214514e",
      "tree": "c58a31c3489b8aeda1fc3d38c4cffb95719a4986",
      "parents": [
        "a64de029b8d20b25497f8fbe093c4ed6e536cae0"
      ],
      "author": {
        "name": "Michael Smith",
        "email": "michael.smith@cloudera.com",
        "time": "Fri Oct 24 11:47:21 2025 -0700"
      },
      "committer": {
        "name": "Impala Public Jenkins",
        "email": "impala-public-jenkins@cloudera.com",
        "time": "Sun Sep 20 19:24:34 2026 +0000"
      },
      "message": "IMPALA-14527: Set mold as the default linker\n\nSets mold as the default linker to improve build performance.\n\nSpeeds rebuilds of \u0027./buildall.sh -skiptests\u0027 by ~40s while using only\n10GiB of memory instead of 70+GiB with IMPALA_BUILD_THREADS\u003d24.\n\nRemoves the guard in bootstrap_development.sh limiting\nIMPALA_BUILD_THREADS for linking as it\u0027s no longer needed.\n\nChange-Id: I0112f23feb1bfdf36977fafc16f366c54fea5546\nReviewed-on: http://gerrit.cloudera.org:8080/23594\nReviewed-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\nTested-by: Impala Public Jenkins \u003cimpala-public-jenkins@cloudera.com\u003e\n"
    }
  ],
  "next": "a64de029b8d20b25497f8fbe093c4ed6e536cae0"
}
