)]}'
{
  "log": [
    {
      "commit": "f25fef48df6410798d23165b241872430815b5d1",
      "tree": "a4358752c892f78f5d5f6ef6e2c35cce9e42bcf2",
      "parents": [
        "31ccd07122ee4ac3fea277ad7088975efac68028"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Thu Apr 23 17:27:59 2026 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Apr 23 13:23:47 2026 +0000"
      },
      "message": "[fs,util] replace LOG_EVERY_N with KLOG_EVERY_N\n\nReplace uses of glog\u0027s LOG_EVERY_N with Kudu\u0027s KLOG_EVERY_N in\nFileBlockManager::DeleteBlock() and LogBlockManager::RemoveLogBlock(),\nadding the necessary logging.h include to both files.\n\nAlso clean up the KUDU_SOME_KIND_OF_LOG_EVERY_N macro family in\nlogging.h:\n- Split combined static variable declarations onto separate lines.\n- Add parentheses around \u0027condition\u0027 and \u0027n\u0027 macro parameters in\n  KUDU_SOME_KIND_OF_LOG_IF_EVERY_N for safer expansion.\n- Suppress bugprone-macro-parentheses clang-tidy warnings on\n  .stream() call sites with NOLINT annotations.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I4095f2473e5420e05f9f0ced3ef585d8e06cf1db\nReviewed-on: http://gerrit.cloudera.org:8080/24228\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "31ccd07122ee4ac3fea277ad7088975efac68028",
      "tree": "109a02db56410dda0b4eeb9daa5306d793b183a6",
      "parents": [
        "c2c233f5e3067950abe71c09e7390931e0aa315f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Apr 10 13:58:02 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 22 20:28:24 2026 +0000"
      },
      "message": "[rpc] add read/write event handling latency histograms\n\nThis changelist adds metrics for tracking latencies of registered read\nand write handlers invoked by the libev\u0027s I/O event loop mechanism.\nThe idea is to be able to tell how much time it took a registered\nhandler to start reading/writing of pending data since the beginning\nof a loop prompted by corresponding I/O events.\n\nTwo pairs of histograms have been added:\n\n  * Histograms of read/write handler latencies for currently active RPC\n    connections.  Each of the histograms is updated when a registered\n    handler is invoked on a reactor thread as a part the libev\u0027s event\n    loop.  These per-connection histograms are available as a part\n    of the output at the \u0027/rpcz\u0027 endpoint of the embedded webserver.\n\n  * Histograms of maximum read/write latencies among all RPC connections\n    that have already been closed.  Each of the histograms is updated\n    with connection\u0027s lifetime maximum read/write handler latency upon\n    shutting down the connection.  These histograms are available as\n    server-level metrics that can be fetched from the \u0027/metrics\u0027 and\n    the \u0027/metrics_prometheus\u0027 endpoints of the embedded webserver.\n    These are named \u0027reactor_ev_loop_max_read_latency_us\u0027 and\n    \u0027reactor_ev_loop_max_write_latency_us\u0027 correspondingly.\n\nCollecting/updating the newly introduced metrics is gated by the\n\u0027--rpc_connection_collect_io_handler_latency\u0027 runtime flag, which is set\n\u0027false\u0027 by default.  The rationale for the default setting is this:\nthe \u0027reactor_active_latency_us\u0027 metric is always enabled and collected\nby ReactorThread::InvokePendingCb() as a duration of running all the\nregistered callbacks per libev event handling loop, including I/O and\ntimer watchers.  If it shows high numbers, then by setting the\n\u0027--rpc_connection_collect_io_handler_latency\u0027 flag to \u0027true\u0027 via the\n\u0027kudu master/tserver set_flag\u0027 CLI tool it\u0027s possible to get\nper-connection stats when necessary.  It\u0027s relatively cheap to update\nand maintain the newly introduced metrics, but it adds at least a few\nmicroseconds into every I/O handler invocation, so it\u0027s better\nto enable it only for troubleshooting.\n\nChange-Id: I8f7208d1adfe95bc9e909f7db04221dbb15ea552\nReviewed-on: http://gerrit.cloudera.org:8080/24181\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "c2c233f5e3067950abe71c09e7390931e0aa315f",
      "tree": "8c978b7710c641cc62c1dabe7f75c5e45d3a2b8b",
      "parents": [
        "3aeb9025e4efe9657cf40853de6d0b5dcade91f0"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Mon Apr 20 20:51:49 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 22 18:12:41 2026 +0000"
      },
      "message": "[fs] fix startup progress tracking containers_processed counter\n\nThe /startup web page’s “Opening container files” progress reports\ncontainers_processed based on OpenContainer() completion, but the\nexpensive work happens in LoadContainer() which runs asynchronously.\nThis causes the progress to jump to 100% long before containers are\nactually loaded.\n\nMove the containers_processed increment into the LoadContainer()\ncompletion callback so the counter reflects actual loading progress.\nAdd a fault injection flag for testing intermediate progress values.\n\nChange-Id: Ia372ad51b5d44ce80b27f611979388d0b685560d\nReviewed-on: http://gerrit.cloudera.org:8080/24215\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "3aeb9025e4efe9657cf40853de6d0b5dcade91f0",
      "tree": "de3757fb0e70da1825b07cc5079ca29f530d7538",
      "parents": [
        "a0a7b25dbd0086f21b7ca5b04af93098bcc4d14b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Apr 21 13:30:11 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 22 02:05:20 2026 +0000"
      },
      "message": "[rpc] nano-optimizations on RPC feature flags\n\nAvoid memory re-allocations and allow for optimizations (e.g., memcpy())\nwhen copying elements between std::vector and protobuf\u0027s RepeatedField.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I77ec723ad8aed3dcc18e3a653740ddf1da95fb2c\nReviewed-on: http://gerrit.cloudera.org:8080/24221\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "a0a7b25dbd0086f21b7ca5b04af93098bcc4d14b",
      "tree": "969d31e77905f03078a74bed1cb197d6f933232b",
      "parents": [
        "be9e859daa2155cdc51e0e7ba547b8b3d0d7022b"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Apr 13 21:40:20 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Apr 17 13:09:44 2026 +0000"
      },
      "message": "KUDU-3685: add MiniPrometheus\n\nMiniPrometheus is a thin wrapper around a real Prometheus subprocess\nfor use in integration tests. It supports static scrape targets\nand HTTP service discovery, and exposes a minimal API surface\n(GetTargets, WaitForActiveTargets, Query) sufficient to verify\nend-to-end scraping and SD behavior.\n\nThe helper is intended to be used alongside InternalMiniCluster\nto answer open questions raised in the Prometheus SD patch review\n(https://gerrit.cloudera.org/#/c/21723/).\n\nChange-Id: Icdc4d3e6ee6ab0bd89c20c21b75d4d8e6518993e\nReviewed-on: http://gerrit.cloudera.org:8080/24189\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "be9e859daa2155cdc51e0e7ba547b8b3d0d7022b",
      "tree": "c086fba3e7825429423c6fc9b6169d85a19b098b",
      "parents": [
        "f1531669cc74f73fa9cbadedf062fff90aad9f44"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 31 11:11:52 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Apr 16 14:45:21 2026 +0000"
      },
      "message": "[Python] add compatibility testing\n\nThe Kudu Python client declares support for Python 2.7 and 3.6–3.11\nin its trove classifiers, but had no mechanism to verify that the build,\ntest suite, and sdist packaging actually work across all those versions.\n\nbuild-support/python-compat/ fills this gap with shell scripts that\nbootstrap each interpreter via the deadsnakes PPA and exercise the\nfull build+test+package cycle per version:\n  bootstrap-deadsnakes-python.sh  install all supported interpreters\n  test-client.sh                  build extension + run test suite\n  test-packaging.sh               sdist round-trip in a clean venv\n\ntest-client.sh supports a -j [N] flag for parallel execution across\nversions (mirroring make -j semantics).  Parallel builds are safe\nbecause each version gets its own isolated copy of the source tree\nunder /tmp: setup.py generates several files in-tree at import time\n(config.pxi, version.py, kudu/*.cpp) that would otherwise race when\nmultiple interpreters build concurrently.  The source tree is cleaned\nonce up-front and then copied per version with cp -aL (dereferencing\nsymlinks such as version.txt -\u003e ../version.txt) so every build starts\nfrom a known-clean state.\n\nTools like tox exist for exactly this kind of test-matrix work, but\nsupporting a range that stretches back to Python 2.7 requires older\nvirtualenv versions that conflict with modern toolchains, making a\ntox setup more brittle than the straightforward shell scripts here.\n\nThese scripts are intended to be run manually by developers when\nadding or dropping a supported Python version, and as part of the\nrelease checklist to confirm packaging works across the full matrix.\nThey are not wired into CI.\n\nDONT_BUILD\n\nChange-Id: Id1f4e6c837a0a3e9da531627ec38f1c452341c11\nReviewed-on: http://gerrit.cloudera.org:8080/24155\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "f1531669cc74f73fa9cbadedf062fff90aad9f44",
      "tree": "74fa2d44e663f37e9233b5048e9ee358de2ea185",
      "parents": [
        "bee410f8afe3d9e602ff3bc743596692fae784e1"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 15 15:35:26 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Apr 16 14:44:59 2026 +0000"
      },
      "message": "[gitignore] ignore .qtcreator dir\n\nChange-Id: I44cf78d4b25ed1a4f6a7dd17a03da7a410bce740\nReviewed-on: http://gerrit.cloudera.org:8080/24195\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "bee410f8afe3d9e602ff3bc743596692fae784e1",
      "tree": "ca3228119d97ea251a98fde9e012840e885a76dc",
      "parents": [
        "c8baa0cf1141c792a8535f564b48a2b9c3393d7b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Apr 14 19:44:05 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Apr 15 12:23:39 2026 +0000"
      },
      "message": "modernize code with WARN_UNUSED_RESULT attribute\n\nSince introduction of the \u0027nodiscard\u0027 attribute for Status [1] and\nadding `-Werror` compiler flag [2], there isn\u0027t a need to annotate\nmethods/functions with WARN_UNUSED_RESULT in the C++ code that is\nsupposed to compile with the C++17 and newer standards.  This changelist\nremoves the WARN_UNUSED_RESULT where applicable, and also replaces\nWARN_UNUSED_RESULT with [[nodiscard]] for methods/functions returning\nother than Status types.\n\nNOTE: it\u0027s still there for code that\u0027s compiled with the C++98 standard.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\n[1] https://github.com/apache/kudu/commit/8f136bb21\n[2] https://github.com/apache/kudu/commit/ef7483f78\n\nChange-Id: I83166e0dddec57e5b11ef958615848bde4165a72\nReviewed-on: http://gerrit.cloudera.org:8080/24194\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "c8baa0cf1141c792a8535f564b48a2b9c3393d7b",
      "tree": "f4f9b057e3964a7ef8bf20fed2cc3505bf94721b",
      "parents": [
        "35f51f402a5f154b6b9c5f6bb38022f200d32c56"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Mar 06 14:29:43 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 14 13:09:22 2026 +0000"
      },
      "message": "KUDU-3729 Prefer follower moves in auto-rebalancing\n\nAdd --auto_rebalancing_prefer_follower_replica_moves (default: true).\n\nWhen multiple tables are equally imbalanced, the greedy algorithm\nprefers a move whose source server hosts a follower replica for that\ntable. If no such candidate exists among the ties, it falls back to\na leader-sourced move. When false, equal-skew ties are broken as\nbefore with no leader/follower distinction.\n\nChange-Id: I0b56ae5ef8db5fe15ab25df1d1cebe84fd3b8f2c\nReviewed-on: http://gerrit.cloudera.org:8080/24085\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "35f51f402a5f154b6b9c5f6bb38022f200d32c56",
      "tree": "2809b0b25420b3d12420166ae8434bbe2f7f4e6c",
      "parents": [
        "948a8577b019926f1c86c9a0a9cc5310b1fecaf0"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Apr 13 20:02:21 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 14 10:14:01 2026 +0000"
      },
      "message": "KUDU-3685: Add Prometheus to thirdparty\n\nAdd Prometheus to thirdparty to support implementing MiniPrometheus for\ntests.\n\nDo not build Prometheus from source, since it would currently be the\nonly third-party component requiring Go tooling. Instead, download the\nPrometheus release binary.\n\nTested that the install works, and Prometheus can start up on:\nUbuntu22, Ubuntu18, Rhel88\n\nChange-Id: I22ec4d34cb5f486aca3e2d624b17528774c2be09\nReviewed-on: http://gerrit.cloudera.org:8080/24187\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "948a8577b019926f1c86c9a0a9cc5310b1fecaf0",
      "tree": "72ce2193683db9ef313ef00c81e7cbfef917b890",
      "parents": [
        "d8712fee7dbdf2f2590d0bc01c99454e06189c63"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Apr 13 16:58:17 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 14 08:57:43 2026 +0000"
      },
      "message": "[server] fix typo in acceptor\u0027s effective accept backlog\n\nThis is a follow-up to 6c02274ce275615fbbc83703b6f695a0a53c87f1.\n\nChange-Id: I02171593bbf46f2cafe01f91f3db542426645b49\nReviewed-on: http://gerrit.cloudera.org:8080/24186\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "d8712fee7dbdf2f2590d0bc01c99454e06189c63",
      "tree": "abf5bd45c6a5777db456957890eaf096b7f75bcb",
      "parents": [
        "7c8d8079be030d5f26bcceca5af39b57d6afb0bc"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 31 10:58:19 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 14 08:55:50 2026 +0000"
      },
      "message": "fix flaky TestTableStatistics stat assertions\n\n`live_row_count` and `on_disk_size` return -1 when the master has\nnot yet received a tablet-server heartbeat carrying the stat. Tests\nthat asserted \u003e\u003d 0 immediately after table creation could therefore\nfail intermittently.\n\nReplace the narrowly-scoped `_wait_for_live_row_count` helper with a\ngeneric `_wait_for_stat(client, table_name, get_stat, min_value)`\nthat accepts a callable to extract any stat field. All stat\nassertions in TestTableStatistics now poll through this helper\ninstead of reading stats once and asserting immediately.\n\nChange-Id: I6d5cd69802ec2139e8df4c87903e3c6196e26ae3\nReviewed-on: http://gerrit.cloudera.org:8080/24152\nTested-by: Kudu Jenkins\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "7c8d8079be030d5f26bcceca5af39b57d6afb0bc",
      "tree": "7653bf0f98ddb688795be3e6c47206118dc7cefc",
      "parents": [
        "748ef105309d0a5423660ea100f33ec56fb5cc45"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Mar 25 18:44:21 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Apr 09 13:00:31 2026 +0000"
      },
      "message": "docs: add Flink replication guide\n\nAdd kudu_flink_replication.adoc covering the end-to-end operational\nguide for the Flink-based replication job: overview, prerequisites,\nsecurity (Kerberos/Ranger), job lifecycle (start/stop/savepoint),\nconfiguration reference, supported types, metrics, monitoring\n(Prometheus + Grafana), schema change handling, resource sizing,\nDR failover, and troubleshooting.\n\nIncludes a sequence diagram illustrating the full snapshot and\nincremental diff scan flow.\n\nThe Monitoring section references the example stack introduced in\nthe companion change that adds examples/flink-replication/.\n\nChange-Id: I684d608165af636bd4a799351926b68322469218\nReviewed-on: http://gerrit.cloudera.org:8080/24139\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "748ef105309d0a5423660ea100f33ec56fb5cc45",
      "tree": "b07c0a91cb22a4bda75a1132fbd7a5ba4c653cc2",
      "parents": [
        "b08896a95a9e1d873d723e42688d15cadbb57675"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Apr 06 21:20:15 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 08 02:00:11 2026 +0000"
      },
      "message": "[rpc] add PREDICT_FALSE() for unlikely error scenarios\n\nI was looking at the RPC code to clarify a few perf-related questions\nand found that PREDICT_{TRUE,FALSE}() were not used uniformly throughout\nthe code.  This patch adds these macros in the rest of relevant places,\nwhere applicable.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I3178a37ec371ca4db2b818a67cf04f52b72f2dd0\nReviewed-on: http://gerrit.cloudera.org:8080/24173\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "b08896a95a9e1d873d723e42688d15cadbb57675",
      "tree": "a2f46e8d5b0110e9321f0822cc4699e94f6c2f29",
      "parents": [
        "3c59615bd5516b582137d0811c7f870d3e505987"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 12:09:14 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 07 10:58:35 2026 +0000"
      },
      "message": "[examples] add replication demo\n\nAdds a self-contained Docker Compose environment demonstrating\nKudu-to-Kudu replication with Apache Flink.\n\nThe setup includes two Kudu clusters (source + sink), a Flink cluster,\na Python ingest simulator, and a Prometheus + Grafana observability\nstack with a pre-built replication dashboard — all wired together and\nready to run.\n\nA Makefile covers the full workflow: building the replication JAR,\nstarting and stopping the stack, submitting and savepointing the Flink\njob, and verifying row counts across clusters. Version pins and tunables\nare centralized in .env.\n\nChange-Id: Iebf29efaebc91d9831f57fc884a2acbab31715ce\nReviewed-on: http://gerrit.cloudera.org:8080/24127\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "3c59615bd5516b582137d0811c7f870d3e505987",
      "tree": "36c3b41d2e906846a9e56fc97a03356de321ee73",
      "parents": [
        "99d498fb5fe30828a2f52b4b6b8609f2c97ddaeb"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 31 14:20:07 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Apr 07 10:55:14 2026 +0000"
      },
      "message": "Fix misleading Javadoc for writer.maxBufferSize\n\nThe Javadoc for writer.maxBufferSize incorrectly described it as\n\"maximum size in bytes of the client-side write buffer\". It actually\nmaps to KuduSession\u0027s mutationBufferMaxOps, which is a count of\nbuffered mutation operations, not a byte size.\n\nThe confusion likely stems from the parameter name in the Flink\nconnector (KuduWriterConfig.maxBufferSize), which implies a byte\nquantity, while the connector\u0027s own source comment clarifies:\n\"Reference from AsyncKuduSession mutationBufferMaxOps 1000.\"\n\nChange-Id: I2e79b888ecc4bd0ef815aeadec9003027b7d6b3a\nReviewed-on: http://gerrit.cloudera.org:8080/24157\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "99d498fb5fe30828a2f52b4b6b8609f2c97ddaeb",
      "tree": "a69fd2bf4a866e19cd4a2ef982076170959cecea",
      "parents": [
        "80c1b1dcb5d065f739fd74b0177f1f72e09733d9"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 15:20:07 2026 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Apr 02 17:55:16 2026 +0000"
      },
      "message": "KUDU-3755 tool: add leave_files to control shell\n\nAdd a leave_files boolean field to CreateClusterRequestPB so callers\ncan opt out of the unconditional cluster-root deletion that the\ncontrol shell performs on exit.\n\nAdd TestLeaveFiles, TestDeleteOnExit, and\nTestPreserveFilesOnAbnormalExit to ControlShellToolTest to verify both\nnormal exit paths and that files are preserved when the shell exits\nabnormally.\n\nChange-Id: Ifa09d63d614190d25cb9b1c6706fd0db992eb5eb\nReviewed-on: http://gerrit.cloudera.org:8080/24122\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "80c1b1dcb5d065f739fd74b0177f1f72e09733d9",
      "tree": "baeb47cd66d5a2f6ac314a8cf454ddbe890b4635",
      "parents": [
        "49610a0f323e422f7e4f1379a208d657463135a8"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 01 11:17:30 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Apr 02 02:24:27 2026 +0000"
      },
      "message": "KUDU-3758 avoid TransferPayload copying for CreateForCall{Request,Response}\n\nEven if copying of Slice objects is shallow (the underlying memory isn\u0027t\ncopied, just the pointer and the size are copied), it makes sense to\navoid heap memory allocation and copying of Slice objects themselves.\nThe latter happens when there are more than two side-cars in per RPC, so\nTransferPayload (boost::container::small_vector\u003cSlice, 4\u003e typedef)\nstarts allocating its elements on the heap.\n\nChange-Id: Ia26e1a18fbb903a4df2ab7b20549fca3c2b06ad2\nReviewed-on: http://gerrit.cloudera.org:8080/24160\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "49610a0f323e422f7e4f1379a208d657463135a8",
      "tree": "8e695c01b1dadbbf1d016dc4714ac1c56d9b9df2",
      "parents": [
        "737e339d3813d1a520eb46b96ab91eb44555c025"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Tue Mar 24 22:00:10 2026 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Apr 01 08:01:04 2026 +0000"
      },
      "message": "[fs] fix partial blocks deletion case in rocksdb\n\nThis fixes a bug in rocksdb block deletion logic where only a partial\nnumber of total blocks are successfully deleted, but the function\nreturns total number of blocks as \u0027deleted\u0027 inside the out parameter\ni.e., \u0027deleted_block_ids\u0027. However, the same case is handled in native\ncontainer by resizing the out parameter to correct number of blocks that\nwere deleted successfully, at the end of function scope.\n\nThe fix is to apply the same scoped cleanup logic for rocksdb method as\nwell by resizing the \u0027deleted_block_ids\u0027 out parameter with total number\nof committed blocks. A unit test is added to verify the same.\n\nChange-Id: Ifb553fbf9a88f0cdb392f926289bbdf5f18b5d29\nReviewed-on: http://gerrit.cloudera.org:8080/24134\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "737e339d3813d1a520eb46b96ab91eb44555c025",
      "tree": "b4d214abc5e1b8bda5a5c2028decea21d5191e83",
      "parents": [
        "67d60d77347f66f9949061573ac8b69adab681e2"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 27 21:03:14 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 31 12:00:59 2026 +0000"
      },
      "message": "KUDU-3757 usability improvement for unsafe/experimental flags\n\nThis changelist allows for keeping customization for an \u0027experimental\u0027\nor \u0027unsafe\u0027 flag when its effective value remains set as by default.\n\nThis is a follow-up to 27ac602108ab5e6b4e2211c2bfae3b36badc3121.\n\nChange-Id: I78b6cc2a4611f3e8056e3d65658bc052f07e1f50\nReviewed-on: http://gerrit.cloudera.org:8080/24151\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "67d60d77347f66f9949061573ac8b69adab681e2",
      "tree": "d680577af95b4517317e49b512fc75f90075cfc7",
      "parents": [
        "3ccae3b4cf1cea4511e64c03c0241d2ed83b11e7"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Mar 25 14:43:06 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Mar 30 09:41:27 2026 +0000"
      },
      "message": "docker: upgrade Java environment to Java 17\n\nUpdate all package references from Java 8 to Java 17 across\nall supported OS images (yum, apt, zypper).\n\nTested on: rockylinux:8, rockylinux:9, ubuntu:bionic,\nubuntu:focal, ubuntu:jammy, opensuse/leap:15.\n\nChange-Id: I5c05b023eb7c7e32ba31d332cf645140d33075f1\nReviewed-on: http://gerrit.cloudera.org:8080/24136\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "3ccae3b4cf1cea4511e64c03c0241d2ed83b11e7",
      "tree": "08056c32a0592187f8b9d510fa7df11ae80edf88",
      "parents": [
        "8ae10c9a2e7f7bfac97df6cf503df1979c4be53e"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sun Mar 22 12:31:17 2026 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Mar 25 18:36:01 2026 +0000"
      },
      "message": "Fix JaCoCo aggregation skipped on test failure\n\njacocoAggregatedReport was skipped whenever any test failed because\nGradle\u0027s hard dependency chain (jacocoAggregatedReport -\u003e\njacocoTestReport -\u003e test) caused it to be blocked by the failed test\ntask.\n\nWire test.finalizedBy jacocoTestReport (coverage builds only, via\n-PgenerateCoverage) so per-subproject reports are always generated from\n.exec files even on partial test failure. Remove dependsOn test to break\nthe blocking chain. Split the Gradle invocation into two steps in\nbuild-and-test.sh: run tests first, then aggregate; the second step\nfinds jacocoTestReport UP-TO-DATE and never re-runs tests.\n\nTested with overriding the Jenkins coverage job:\nhttps://jenkins.kudu.apache.org/job/coverage/61/console\n\nChange-Id: I618069d3d3dc9548d97fcdcc5bed3fca9db67ae6\nReviewed-on: http://gerrit.cloudera.org:8080/24128\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "8ae10c9a2e7f7bfac97df6cf503df1979c4be53e",
      "tree": "78b6af8ac51f70934ab52e86585abba8882db03e",
      "parents": [
        "68f10dd41067059260a5fb5c725b178b69c38aed"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Fri Mar 20 15:51:04 2026 +0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Mar 25 08:45:24 2026 +0000"
      },
      "message": "[metrics] Export hostname as a Prometheus label\n\nIn https://gerrit.cloudera.org/c/24096/ we enabled exporting entity\nattributes as Prometheus labels via --metrics_prometheus_use_entity_labels.\nHowever, when Prometheus scrapes multiple Kudu nodes, there is no label\nto identify the source node.\n\nThis patch adds a \u0027hostname\u0027 label to each metric, allowing the source\nnode to be identified without relying on Prometheus relabel_configs.\nA new runtime flag --metrics_prometheus_export_hostname (default: true)\nis provided so that users who prefer to handle hostname labeling via\nPrometheus relabel_configs can opt out.\n\nChanges:\n- Add \u0027hostname\u0027 field to MetricPrometheusOptions; pass it from\n  ServerBase::Start() via messenger_-\u003ehostname() through the handler\n  chain into MetricEntity::WriteAsPrometheus(), where it is appended\n  as a label when the entity-labels flag is on and hostname is non-empty.\n- Add --metrics_prometheus_export_hostname runtime flag (default true).\n  When set to false, the hostname label is omitted even if\n  --metrics_prometheus_use_entity_labels is true and hostname is available.\n- Add four unit tests covering: hostname label present (both flags on),\n  no effect in legacy mode (entity labels off), opt-out via export flag\n  (export_hostname off), and empty hostname (no label).\n\nChange-Id: I43b4c8ea5736e99c20b25a2ffea3c6c8dcb9d27e\nReviewed-on: http://gerrit.cloudera.org:8080/24121\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "68f10dd41067059260a5fb5c725b178b69c38aed",
      "tree": "a3f973b3deaa33c2aba15d9880d7266d0d9ac113",
      "parents": [
        "2991ce9722f692a4d964b0d92e9e200309fee2ad"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Mar 12 20:39:15 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 11:54:18 2026 +0000"
      },
      "message": "KUDU-3750 python: per-test master/tserver flags\n\nAdd @master_flags and @tserver_flags decorators to KuduTestBase.\nTests needing specific cluster flags spin up a dedicated\nmini-cluster; all other tests share a single class-level cluster.\nUnlike Java where every test runs on a fresh cluster, the shared\ncluster keeps the Python test suite fast since Python tests run on\nJenkins builders and cannot utilize dist-test.\n\nChange-Id: I648adcd692b2093e99cb541b9f809ef0bb6bec0f\nReviewed-on: http://gerrit.cloudera.org:8080/24099\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "2991ce9722f692a4d964b0d92e9e200309fee2ad",
      "tree": "5ac40bc0e487e194a367f8d452d1040a75b27f26",
      "parents": [
        "57b1c243d63f3ede28f7985747ea6b52b6e6f951"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Tue Mar 10 15:31:08 2026 +0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 11:48:09 2026 +0000"
      },
      "message": "KUDU-3692 Export entity attributes as Prometheus labels\n\nAdd a runtime flag, --prometheus_use_entity_labels (default false), to control\nthe Prometheus exposition format.\n\nWhen enabled, entity identity and part of attributes are exported as labels\ninstead of being embedded in metric names, improving Prometheus naming compliance\nand enabling aggregation by entity attributes.\n\nThis change also:\n- Deduplicates HELP/TYPE lines for metrics shared across many entities.\n- Escapes Prometheus label values (\\, \", and newlines).\n- Ensures histogram _sum/_count lines carry labels and unit_type.\n- Keeps the legacy, prefix-based format when the flag is disabled.\n\nUpdate Prometheus-related unit/integration tests and the output checker to\nvalidate the new format and preserve legacy coverage.\n\nChange-Id: I690918d06f19c393369b8fc43c3ec90dd2231d3d\nReviewed-on: http://gerrit.cloudera.org:8080/24096\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "57b1c243d63f3ede28f7985747ea6b52b6e6f951",
      "tree": "65b31f8a6f2bf97e7653ee0aaf059d2acf21d15e",
      "parents": [
        "7787e6615480130620f6acc79b99a7d9ef9b351d"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Tue Mar 17 15:29:42 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 11:05:06 2026 +0000"
      },
      "message": "KUDU-3753 Replace HTTP links with HTTPS\n\nUpdate documentation and example files to use HTTPS URLs instead of\nHTTP wherever the destination supports it.\n\nChange-Id: Ib95f103c031f1f36e7fb00d8a76a8c129d672cb2\nReviewed-on: http://gerrit.cloudera.org:8080/24108\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "7787e6615480130620f6acc79b99a7d9ef9b351d",
      "tree": "a1bb44ae0e259a2be3c6d9a1e288da70942c61e3",
      "parents": [
        "3a5468b651ad64ac6e09f94bae9fffde09c4211d"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Tue Mar 10 16:49:22 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Mar 20 10:55:24 2026 +0000"
      },
      "message": "KUDU-3749 Fix range key hex encoding\n\nksck, auto-rebalancer, and PartitionKey::DebugString() serialize\nrange keys into hex strings. Make the encoding consistent and safe by\ntreating each byte as unsigned before widening, avoiding signed-char\nsign extension.\n\nChange-Id: I6d7f0304c0f5bb88ae79a28c740a8791c2eaa03a\nReviewed-on: http://gerrit.cloudera.org:8080/24086\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "3a5468b651ad64ac6e09f94bae9fffde09c4211d",
      "tree": "182af0d739d4b38e8caad0cfe190b72830ee59ae",
      "parents": [
        "ad93bb73de58b60d855812b3ba3e60e4d9834a43"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Mar 18 17:04:59 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 20 01:24:43 2026 +0000"
      },
      "message": "[client] make zlib\u0027s compress symbols local in libkudu_client\n\nBefore this patch, The client_symbol-test on RHEL9.6 x86_84 was failing\nbecause of the compress zlib\u0027s symbols not being local:\n\n  Found bad symbol \u0027compress\u0027\n  Found bad symbol \u0027compress2\u0027\n  Found bad symbol \u0027compressBound\u0027\n\nThat\u0027s only with the very recent src from the master branch: 1.18.0,\n1.18.1 and 1.18.x versions do not have such an issue.  Also, this isn\u0027t\nan issue at least on RHEL8.8 and Ubuntu 24.04 LTS with the same sources.\n\nI didn\u0027t do RCA to understand what\u0027s the underlying reason, but [1]\nlooks like one of the usual suspects because of the changes to the\nlinker type in use.  The other contributing factor might be the fact\nthat the system libz is also linked in as a dynamic library (that\u0027s been\nso for quite some time, it seems).  Why to link system libz when we do\nhave our own in 3rd-party?  It\u0027s a good question: unless I\u0027m missing\nsomething, it should be addressed in a separate changelist.  We either\nneed to fix linker search paths for zlib or switch to the OS-provided\nzlib (perhaps, the former).  This patch is to address the inconsistency\nin the set of available symbols in the kudu_client library and fix\nthe recently discovered client_symbol-test\u0027s failure.\n\n[1] https://github.com/apache/kudu/commit/1d789a87a\n\nChange-Id: I78f1c38772050c6fd588141dc6aa499708b87fc5\nReviewed-on: http://gerrit.cloudera.org:8080/24116\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "ad93bb73de58b60d855812b3ba3e60e4d9834a43",
      "tree": "b1493c8afecd85ee00a503f5127eccb974535e92",
      "parents": [
        "07148adc8b1ea21ab089857e39de46f7fa68ddab"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Mar 18 15:44:13 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 20 00:33:51 2026 +0000"
      },
      "message": "[server] use the \u0027counter\u0027 type for the \u0027uptime\u0027 metric\n\nThis patch changes the type of the \u0027counter\u0027 metric from \u0027gauge\u0027\n\u0027counter\u0027: the metric\u0027s value monotonically increases by definition.\n\nI didn\u0027t add any automated tests to cover this update, but I manually\nverified that the \u0027uptime\u0027 metric is now listed as a metric of the\n\u0027counter\u0027 type when fetching data from master\u0027s and tserver\u0027s\n\"/metrics_prometheus\" HTTP endpoint.\n\nChange-Id: I00ef652ff5b38c600593b7fab7664d8e990f8669\nReviewed-on: http://gerrit.cloudera.org:8080/24115\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "07148adc8b1ea21ab089857e39de46f7fa68ddab",
      "tree": "44efbd29808838391a7a31b495b554d5069be58c",
      "parents": [
        "55b63f0724695f24158574a1c246238405931eb2"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Tue Mar 17 16:20:19 2026 +0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 17 13:05:13 2026 +0000"
      },
      "message": "[build] ignore local Claude configuration\n\nAdd `.claude/` to .gitignore to avoid committing local AI tool configuration\nfiles that are not relevant to the repository.\n\nChange-Id: I9a9c88699435fb205e471e973ae6fa0515b93b54\nReviewed-on: http://gerrit.cloudera.org:8080/24106\nTested-by: Kudu Jenkins\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "55b63f0724695f24158574a1c246238405931eb2",
      "tree": "c54c4c06c08a14a09764500bd68a0e35f641a6f8",
      "parents": [
        "73a05c4b0843bc79f9073432a8357c6847eec550"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Feb 27 16:00:34 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Mar 17 13:03:21 2026 +0000"
      },
      "message": "KUDU-3743 Add table statistics to Python client\n\nWrap KuduTableStatistics and KuduClient::GetTableStatistics in the\nPython client, exposing on_disk_size, live_row_count,\non_disk_size_limit, and live_row_count_limit as read-only properties on\na new TableStatistics class.\n\nChange-Id: Ia7b36f62a4ef018e0e08e83ad04d451ca1c1dcd7\nReviewed-on: http://gerrit.cloudera.org:8080/24051\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "73a05c4b0843bc79f9073432a8357c6847eec550",
      "tree": "0a0b77055a7e2d3adcc331f9a00962de561bdf83",
      "parents": [
        "e890295e33935dc85851ea1d5aeeed2585bc791f"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Wed Jan 07 18:59:02 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Mar 14 04:06:17 2026 +0000"
      },
      "message": "[tools] Add --preserve_table_ids flag to unsafe_rebuild\n\nWhen rebuilding master metadata using `kudu master unsafe_rebuild`,\nthe tool previously generated new table IDs. This causes issues when\nfine-grained access control is enabled (--tserver_enforce_access_control),\nbecause the access control system validates table IDs. After a rebuild,\nthe new table IDs don\u0027t match the original ones stored in tablet metadata,\ncausing operations like `kudu perf table_scan` and Impala queries to fail\nwith authorization errors.\n\nThis patch adds a new `--preserve_table_ids` flag and enabled by default\nthat preserves the original table IDs from tablet servers\u0027 metadata.\n\nChanges:\n- Added table_id field to TabletStatusPB in tablet.proto\n- Modified TabletReplica::GetTabletStatusPB() to populate table_id\n- Added --preserve_table_ids flag to MasterRebuilder\n- Added consistency check for table_id across replicas when flag is enabled\n- Added unit tests for the new functionality\n\nChange-Id: I6ae4353564922312d646f0323271d804e32e3b0d\nReviewed-on: http://gerrit.cloudera.org:8080/23844\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "e890295e33935dc85851ea1d5aeeed2585bc791f",
      "tree": "ce3b08f4b1be2f7817c931c0410db87089f0424c",
      "parents": [
        "a4c7dcc6355f0c05a64f27685565694c389b7e5b"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Feb 25 15:45:22 2026 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 13 18:27:07 2026 +0000"
      },
      "message": "Add swagger verification test target\n\nWire the swagger spec checker into the master test suite via a\nscript wrapper so it runs with regular test execution.\n\nAlternatives considered:\n- Standalone custom target (e.g. verify_swagger_spec): lower risk but opt‑in,\n  so it’s easy to miss in day‑to‑day testing.\n- Top‑level docs target (like doxygen): runs too infrequently.\n- CI‑only hook: ensures coverage in CI but not in local dev runs.\n\nChosen approach:\n- Add a test wrapper under the master tests so it runs regularly with\n  ctest/test suites while keeping the checker isolated and lightweight.\n\nManual testing:\n- ctest -R verify_swagger_spec-test\n\nChange-Id: I4f5523eb1fa6792cd81e469169962704d0d27e3b\nReviewed-on: http://gerrit.cloudera.org:8080/24034\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "a4c7dcc6355f0c05a64f27685565694c389b7e5b",
      "tree": "95098b6f85fcf3969dc4bedc55f44f236c793c73",
      "parents": [
        "b0273b01f0e3180a3d6e9adc2d65b135a837d8af"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Mar 12 16:30:42 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 13 15:12:35 2026 +0000"
      },
      "message": "[java] update Netty up to 4.1.131.Final version\n\nThis is to pick up numerous fixes, improving interoperability with\nBouncyCastle security providers and to address a bunch of CVEs.\nThe CVEs addressed aren\u0027t related to the functionality that Kudu uses,\nbut it\u0027s nice to have those fixed to please security scanners.\n\nChange-Id: Ib8088e5586bebfc935257f78801e87856ad03657\nReviewed-on: http://gerrit.cloudera.org:8080/24094\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "b0273b01f0e3180a3d6e9adc2d65b135a837d8af",
      "tree": "bd98b3e0508848a366e3981d9cf144c35d6244cc",
      "parents": [
        "d4374abba171d41c0d56005dee789085295c6bc7"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Mon Jan 05 18:05:47 2026 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Mar 10 04:52:03 2026 +0000"
      },
      "message": "KUDU-3728 Add range-aware rebalancing to auto_rebalancer\n\nThis patch adds support for range-aware rebalancing in the\nauto_rebalancer, allowing each range partition of a table to be\nbalanced independently. This feature was previously only available in\nthe manual rebalancer CLI tool.\n\nThe implementation leverages the existing TwoDimensionalGreedyAlgo\nalgorithm infrastructure that already supports range-aware balancing\nthrough the TableIdAndTag grouping mechanism. When enabled, tablets\nare grouped by {table_id, range_key_begin} pairs instead of just\ntable_id, allowing the rebalancer to treat each range partition as a\nseparate entity for balancing purposes.\n\nChange-Id: Idf716bef8c21395da98dd7c9e33001190d9b5587\nReviewed-on: http://gerrit.cloudera.org:8080/23909\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d4374abba171d41c0d56005dee789085295c6bc7",
      "tree": "afd2f3c0dad5e9d0043ae6d1b5f40f81831f1105",
      "parents": [
        "a7719836eb6e943c4961e613ea39c5e164d14a52"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Mar 04 23:32:07 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Mar 10 04:44:58 2026 +0000"
      },
      "message": "[common] remove ignored \u0027const\u0027 qualifier on return type\n\nAdding \u0027const\u0027 qualifier for an rvalue return type doesn\u0027t make much\nsense, and it\u0027s ignored by the compiler.  This changelist removes\nsuch qualifiers to avoid warnings issued by the C++ compiler when\n-Wignored-qualifiers flag is present, for example:\n\n  src/kudu/rpc/inbound_call.h:103:3: warning: \u0027const\u0027 type qualifier on return type has no effect [-Wignored-qualifiers]\n\nJust in case, I verified that the generated symbols for the kudu_client\nlibrary stay the same before and after this patch.  As expected, this\npatch doesn\u0027t affect the generated symbols, so this doesn\u0027t introduce\nany compatibility in the C++ client ABI.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I605f13d489d63269df43eb8102488630ceeff6ce\nReviewed-on: http://gerrit.cloudera.org:8080/24072\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "a7719836eb6e943c4961e613ea39c5e164d14a52",
      "tree": "b087046e88b846baf2e837413aef92a62f01bd82",
      "parents": [
        "3b86a9cf9ed0aa41bb0f82d025da92ee36b90e40"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Mar 09 12:09:11 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Mar 09 22:20:31 2026 +0000"
      },
      "message": "[build-support] fix Jenkins build\n\nThere are no words.\n\nThis is a follow-up to ab4da27ef20e57b92e87861afb9cacb765e4df6f.\n\nChange-Id: Ib2f3cd76ca10e6e537870a12f61aaf5644889bf3\nReviewed-on: http://gerrit.cloudera.org:8080/24082\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "3b86a9cf9ed0aa41bb0f82d025da92ee36b90e40",
      "tree": "e26940a8c26d70caeca0c153c5bf81dd5e013627",
      "parents": [
        "9b8aef91451cbbf646a59232eec8f3acbb7016a4"
      ],
      "author": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Mon Mar 02 11:13:09 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Mar 09 15:32:39 2026 +0000"
      },
      "message": "[infra] Update build-and-test.sh for Java 17\n\nThis change adds the ability to switch between Java 8 and 17 during\ntesting on dist-test/jenkins.\n\nIf the string \"JAVA8_OVERRIDE\" is present in the commit message - in a\nsingle line, then the build will use Java 8, otherwise Java 17 will be\nthe default.\n\nChange-Id: Id1d6d65fbd58a8c96d1dca958fc66207893bb99e\n(cherry picked from commit e81698be507a36e56499d68fb3454176b7626435)\nReviewed-on: http://gerrit.cloudera.org:8080/24040\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "9b8aef91451cbbf646a59232eec8f3acbb7016a4",
      "tree": "c3f237f5a43eb618352eca1431bd7e3a69e5463a",
      "parents": [
        "ab4da27ef20e57b92e87861afb9cacb765e4df6f"
      ],
      "author": {
        "name": "zchovan",
        "email": "zchovan@cloudera.com",
        "time": "Mon Aug 04 15:24:11 2025 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Mar 09 15:32:30 2026 +0000"
      },
      "message": "[build][java] KUDU-3681: Move to JDK17\n\nThis change aims to support building and running the java bits with Java 17.\n\nThe changes:\n* natively set release version when building with Java 9+\n* use \u0027org.apache.tomcat:annotations-api\u0027 as a compileOnly dependency for the\n  \u0027javax.annotations\u0027 package, since that was deprecated in Java 9\n* upgrade jacoco dependency from 0.8.6 to 0.8.8 for Java17 compatibility\n* upgrade the Hive dependency to 4.1.0\n* after this change, it is no longer possible to compile Kudu java bits\n  with JDK versions lower than 17\n\nChange-Id: I1f73c0d3a79e1c37b12a173881273b4b68d718b3\nReviewed-on: http://gerrit.cloudera.org:8080/23259\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "ab4da27ef20e57b92e87861afb9cacb765e4df6f",
      "tree": "f9228b75f682b81e32951905cbe96a2cc5e47fe0",
      "parents": [
        "2f16608ab4490867a98faa4a08b43d08f5851162"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Wed Mar 04 08:55:03 2026 +0000"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Mar 06 22:06:24 2026 +0000"
      },
      "message": "[build] Allow CLEAN_THIRDPARTY label in commit messages.\n\nAllow a label in commit messages signaling that a clean build of\nthirdparty is needed, since the commit is incompatible with\nthe current master version.\n\nThis will spare us from manually running workspace cleanup every time a\nnew revision of the commit is built.\n\nAlso, the DONT_BUILD label should not depend on git show tabulating the\ncommit message with exactly 4 spaces, and it should not scan the diff,\nonly the commit message.\n\nChange-Id: Id0b3187f763df171cb2786ddfd495811ece31693\nReviewed-on: http://gerrit.cloudera.org:8080/24067\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "2f16608ab4490867a98faa4a08b43d08f5851162",
      "tree": "2206bda794c00d8dbd42a68061f687bdb9c4676d",
      "parents": [
        "63d9c39267bc7f35dc3a2e7535148b28088b229a"
      ],
      "author": {
        "name": "宋家成",
        "email": "songjiacheng@thinkingdata.cn",
        "time": "Mon Feb 26 17:29:21 2024 +0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Mar 02 14:30:52 2026 +0000"
      },
      "message": "Auto-rebalancer: clear replace marker on failed moves\n\nWhen CheckMoveCompleted fails, best-effort clear the replace marker on\nthe source replica and drop the move so rebalancing can continue.\nAdd a test that forces move failure and verifies no replica remains\nmarked for replacement.\n\nChange-Id: I99dafa654878b9d6d8162d84500913ae0655692b\nReviewed-on: http://gerrit.cloudera.org:8080/21073\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "63d9c39267bc7f35dc3a2e7535148b28088b229a",
      "tree": "aee41e6ac5365c580a5b490fb774be7d2e1f8afa",
      "parents": [
        "73ae1d78fc631e5b27e44f8ca33d1eb1988ca70a"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Tue Aug 26 18:35:07 2025 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Feb 26 19:27:25 2026 +0000"
      },
      "message": "KUDU-3734 include undo size while picking rowsets\n\nAs part of compaction improvement effort, this change is focussing on\ntaking into consideration the size of undo deltas while picking rowsets\nduring rowset compaction. I could not find any historical reason to why\nit was not done before. Maybe there was some analysis done that ended\nin a conclusion that considering undo deltas may not be right approach\nwhen estimating upper bound fractional solution in the knapsack. The\nsize of undo deltas are taken into consideration while deciding whether\na new rowset (a potential compaction \u0027candidate\u0027) fits into the budget\nand is at least denser than least dense candidate in knapsack.\n\nThe test data used here has significant undo deltas that fits perfectly\ninto the OOM scenario. Total size of uncompacted data is 29GB.\n\nWith this patch, rowset compaction never hit OOM and the resident\nmemory kept well within limits (~1GB).\n\nWithout this patch, compaction hit OOM on a node with limited memory\nwhere rowset compaction peak memory touched ~30GB.\n\nTesting with different scenarios:\n1. Compaction that takes into consideration:\n   - Base data\n   - Redo deltas\n   - Undo delats\n   Budget for compaction (tablet_compaction_budget_mb) is 1024 MB\n\nResult: Rowset 211 was skipped due to 1024 MB size constraint.\nBudgeted compaction selection:\n  [ ] RowSet(211)( 1945M) [0.0000, 1.0000]\n  [ ] RowSet(217)(  1M) [0.0027, 0.1953]\n  [x] RowSet(216)(  1M) [0.5341, 0.5341]\n  [x] RowSet(218)(  1M) [0.5341, 0.5341]\n  [x] RowSet(219)(  1M) [0.5341, 0.5341]\n\n2. Compaction that takes into consideration:\n   - Base data\n   - Redo deltas\n   - Undo delats\n   Budget for compaction (tablet_compaction_budget_mb) is 2048 MB\n\nResult: Rowset 211 was NOT skipped with 2048 MB size limit.\nBudgeted compaction selection:\n  [x] RowSet(211)( 1945M) [0.0000, 1.0000]\n  [x] RowSet(217)(  1M) [0.0027, 0.1953]\n  [x] RowSet(216)(  1M) [0.5341, 0.5341]\n  [x] RowSet(218)(  1M) [0.5341, 0.5341]\n  [x] RowSet(219)(  1M) [0.5341, 0.5341]\n\n3. Compaction that takes into consideration:\n   - Base data\n   - Redo deltas\n   Compaction budget (tablet_compaction_budget_mb) is default 128 MB\n\nResult: Rowset 211 with size 1M (ignoring UNDO deltas) included.\nBudgeted compaction selection:\n  [x] RowSet(211)(  1M) [0.0000, 1.0000]\n  [x] RowSet(217)(  1M) [0.0026, 0.2015]\n  [x] RowSet(216)(  1M) [0.5358, 0.5385]\n  [x] RowSet(218)(  1M) [0.5385, 0.5404]\n  [x] RowSet(219)(  1M) [0.5404, 0.5404]\n\nNote: This is different from rowset compaction batching effort.\n\nChange-Id: I351c0ba96a02e6ded5153adf9d981083a8c40592\nReviewed-on: http://gerrit.cloudera.org:8080/23348\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "73ae1d78fc631e5b27e44f8ca33d1eb1988ca70a",
      "tree": "5a2a629a1e09d8f005da4b3a82b61541d769f9a9",
      "parents": [
        "d3802e7e5761d206a1793c3d3165d1bc754134d8"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Feb 19 14:25:42 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Feb 20 18:48:10 2026 +0000"
      },
      "message": "[java] update log4j from 2.24.3 to 2.25.3\n\nThis refresh is at least to address CVE-2025-68161.\n\nChange-Id: I94310d01a50656a5c84658ee4539e86889608d10\nReviewed-on: http://gerrit.cloudera.org:8080/24005\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d3802e7e5761d206a1793c3d3165d1bc754134d8",
      "tree": "f61d3758d8e3fbc71aa15da841fb61454eb2c823",
      "parents": [
        "e4170f0b47bf60adcffb1d155222014222e3f338"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Mon Jan 26 15:25:13 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Feb 20 13:08:21 2026 +0000"
      },
      "message": "KUDU-3700 Add swagger verification script docs\n\nDocument usage and expected output for the swagger verification helper to\nmake it easy to run manually and possibly in CI.\n\nManual testing:\n- ./build-support/verify_swagger_spec.py\n- Manual negative checks by temporarily changing swagger path/method/param\n  confirmed mismatch output\n\nExamples:\n- Path coverage: swagger paths (with server base /api/v1) must match\n  registered /api/... handlers in source.\n  Swagger verification failed with 2 issue(s):\n  - Swagger path missing in source: /api/v1/leaders\n  - Source path missing in swagger: /api/v1/leader\n- HTTP methods: methods inferred from req.request_method checks must match\n  swagger operations.\n  Swagger verification failed with 2 issue(s):\n  - Swagger missing methods for /api/v1/tables: POST\n  - Swagger has extra methods for /api/v1/tables: PUT\n- Path parameters: swagger path params must match \u003cparam\u003e names in the\n  handler path.\n  Swagger verification failed with 1 issue(s):\n  - Parameter mismatch for GET /api/v1/tables/{table_id}:\n    swagger\u003d[\u0027table_uuid\u0027] source\u003d[\u0027table_id\u0027]\n\nChange-Id: I3ca60becef11eb2170544f87fafc5d9aa4110a31\nReviewed-on: http://gerrit.cloudera.org:8080/23904\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "e4170f0b47bf60adcffb1d155222014222e3f338",
      "tree": "d001c78dba9ba1c5fe705077c8fc2bb0d7d5e7a8",
      "parents": [
        "0a63f0318421e4ec58f79e3c185b496db8025d42"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Feb 11 13:25:04 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Feb 12 18:42:20 2026 +0000"
      },
      "message": "KUDU-3738 enable range-aware rebalancing by default in CLI tools\n\nSince the restriction on the range-aware rebalancing has been lifted\nwith [1], it\u0027s become possible to rebalance a whole Kudu cluster with\nrange-aware rebalancing enabled.  Range-aware rebalancing reduces the\nrisk of hot-spotting for range-partitioned tables, so it makes sense\nto enable it by default. This changelist does exactly so.\n\n[1] https://github.com/apache/kudu/commit/1f89113a6\n\nChange-Id: I41251ace905ae2869ff8c0084d1e119b3b81d4be\nReviewed-on: http://gerrit.cloudera.org:8080/23966\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "0a63f0318421e4ec58f79e3c185b496db8025d42",
      "tree": "1483117832c80f3154931723a3e2ffa5eacfa854",
      "parents": [
        "cad295f98a9eb2b390eb096d34e445fb27b8cca2"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Feb 09 22:42:54 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Feb 10 23:41:26 2026 +0000"
      },
      "message": "[tserver] log errors on invalid schemas\n\nTo help troubleshoot issues like KUDU-3723, it\u0027s useful to report on\ninvalid table and partition schemas sent by the catalog manager to\ntablet servers.  This patch adds corresponding logs, and wraps the\nrelated rare conditions with EXPECT_FALSE().\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I2b0d05106cb5c8e0acc8cacd34c9703dbc25b4b7\nReviewed-on: http://gerrit.cloudera.org:8080/23956\nTested-by: Kudu Jenkins\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "cad295f98a9eb2b390eb096d34e445fb27b8cca2",
      "tree": "7598ffdfea8d02c3afddee53d0463754ea0bea4c",
      "parents": [
        "fdfb2e027f108849a546e371c0cad4d3323c361e"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Dec 09 17:55:55 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Feb 10 23:17:09 2026 +0000"
      },
      "message": "KUDU-3723 fix interpretation of new range partition specs\n\nIn the context of KUDU-2671, a new notation for specifying hash schema\nof a range partition has been added.  With the introduction of\nrange-specific hash schemas, the client side is free to send in\ninformation on the newly added range partition as if it had a custom\nhash schema, even if the new range\u0027s hash schema is the same as the\ntable-wide one.  However, the system catalog should have normalized\nthe provided information, and stored the information on ranges with\nthe table-wide and custom hash schemas differently.  The normalization\npart was missing, and that was the reason for the reported issue.\n\nThis changelist addresses the problem and adds a new test scenario that\ntriggers an assertion without the fix.\n\nChange-Id: Icceb138a919cd7afb572c6dd74695a3fcaaac99e\nReviewed-on: http://gerrit.cloudera.org:8080/23778\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "fdfb2e027f108849a546e371c0cad4d3323c361e",
      "tree": "f498291459fd66f43565ba04d2c2ef7c76f58a3e",
      "parents": [
        "514a3ff1a3b0ed912498a079ba73c7afcdd1a753"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Mon Nov 10 17:58:56 2025 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Feb 09 18:56:47 2026 +0000"
      },
      "message": "[webserver] Restrict UI pages to GET/HEAD methods only\n\nCurrently, the web server UI pages return 200 OK regardless of the\nHTTP method used. Display pages like \"/\", \"/tables\", \"/tablet-servers\"\naccept POST, PUT, DELETE and other methods even though they\u0027re purely\ninformational read-only pages. This could lead to unintended\ninteractions and doesn\u0027t follow HTTP best practices.\n\nThis patch adds HTTP method validation for display pages. Pages\nregistered with StyleMode::STYLED (human-readable UI pages with CSS\nand navigation) now only accept GET and HEAD requests. Other HTTP\nmethods (POST, PUT, DELETE, etc.) return 405 Method Not Allowed with\nan appropriate Allow header.\n\nFunctional endpoints like /metrics, and REST API endpoints registered\nwith StyleMode::UNSTYLED or StyleMode::JSON continue to accept all\nHTTP methods as before, since they may legitimately need POST for\noperations.\n\nThe design uses StyleMode as a signal for method restrictions since\nSTYLED pages are semantically read-only displays for human viewing,\nwhile functional endpoints are machine-consumable and may need to\naccept writes. This approach requires no API changes and automatically\napplies the correct restrictions based on existing semantics.\n\nChange-Id: Ie232bd50785bb750ecaa0a7e19403e573ac193eb\nReviewed-on: http://gerrit.cloudera.org:8080/23657\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "514a3ff1a3b0ed912498a079ba73c7afcdd1a753",
      "tree": "615c9c9c70a660a769ed22f5f00287b41f47d85c",
      "parents": [
        "5c07add3c06a23a7333ff87daccd1ac79ae7d855"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Feb 04 16:27:41 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Feb 09 18:52:42 2026 +0000"
      },
      "message": "[codegen] fix build on macOS\n\nThis addresses linker error on macOS:\n\n    void google::MakeCheckOpValueString\u003cstd::nullptr_t\u003e(...), referenced from:\n        ... google::MakeCheckOpString\u003cstd::nullptr_t, void*\u003e(...) in jit_frame_manager.cc.o\n  ld: symbol(s) not found for architecture x86_64\n\nThis is a follow-up to 0efbebd487e7d0c7f21ab0d5a91e0fa70046af83.\n\nChange-Id: I00743d0a452ab5e33c3441cac4e06ff1bf58b7a6\nReviewed-on: http://gerrit.cloudera.org:8080/23943\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "5c07add3c06a23a7333ff87daccd1ac79ae7d855",
      "tree": "6312ba4ae36710adf59343e69a4dd50f7bd4cd2c",
      "parents": [
        "8a0c4bd44365c5ce81554796ae9b1f2c3444c410"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Mon Feb 09 09:01:54 2026 +0000"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Feb 09 17:28:03 2026 +0000"
      },
      "message": "[consensus] Fix heartbeat batching upper limit.\n\nmulti_raft_heartbeat_window_ms should be no more than\nraft_heartbeat_interval_ms / 2.\nCurrently it is capped at FLAGS_consensus_rpc_timeout_ms / 2,\nwhich is simply wrong.\n\nChange-Id: Ib52f21238c7c9e76828edf5582f12b063234f56b\nReviewed-on: http://gerrit.cloudera.org:8080/23952\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "8a0c4bd44365c5ce81554796ae9b1f2c3444c410",
      "tree": "1a525533b73aa24785f4d79e4a2f27098711f906",
      "parents": [
        "2c7757b26a649864d64be0494820ae3678a8663b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Feb 06 16:17:44 2026 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Feb 09 15:53:46 2026 +0000"
      },
      "message": "[consensus] report tablet ID with CheckOpInSequence in AdvanceCommittedIndex\n\nTo help in troubleshooting of WAL corruption issues, it makes sense\nadding the tablet\u0027s identifier into the log message emitted by\nPendingRounds::AdvanceCommittedIndex() when CheckOpInSequence() returns\nnon-OK status.  Given that corruption isn\u0027t expected, add EXPECT_FALSE()\nwhere appropriate.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I70df3ea624140d73c1ae4d3664d30b74dbfc91cb\nReviewed-on: http://gerrit.cloudera.org:8080/23949\nTested-by: Kudu Jenkins\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "2c7757b26a649864d64be0494820ae3678a8663b",
      "tree": "6aba6640c8c2e8ba681b2c4e8ff1a8b895d7d812",
      "parents": [
        "1d789a87aa6d9ce42b8894761907e634a68aa293"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Jan 22 23:21:49 2026 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Feb 09 15:49:37 2026 +0000"
      },
      "message": "KUDU-3736 add CodegenTest.CodegenRandomSchemas scenario\n\nThis new test scenario reproduces SIGSEGV crash on RedHat9 with libgcc\nversions 11.5.0-10 and newer.  At least, without KUDU-3736 fix in place,\nrunning the scenario with --codegen_test_random_schemas_runtime_sec\u003d-1\ncrashes every time on x86_64 RHEL9 when the following libgcc package\nis installed:\n\n  libgcc-11.5.0-11.el9.x86_64\n\nChange-Id: Ic51e8fec02f74ecc11fa740f05ffeb9a7f41d8d9\nReviewed-on: http://gerrit.cloudera.org:8080/23893\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "1d789a87aa6d9ce42b8894761907e634a68aa293",
      "tree": "f8922e50e92d7d7edeb5bc4afbdd0613b01074da",
      "parents": [
        "469eff5f42f5e44e8950d9060c5203192c5d2220"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Thu Jan 22 14:06:13 2026 +0000"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Feb 07 04:02:15 2026 +0000"
      },
      "message": "[cmake_modules] fix linker detection\n\nKuduLinker.cmake does not work as intended.\nThe code is meant to prioritize:\n1. lld\n2. lld built in thirdparty\n3. gold\n\nHowever, the check for the thirdparty linker always fails,\nbecause it uses:\n  -fuse-ld\u003d{kudu}/thirdparty/clang-toolchain/bin/lld\nbut it should use:\n  -fuse-ld\u003dlld -B{kudu}/thirdparty/clang-toolchain/bin\n\ng++ does not accepts a path in -fuse-ld, only clang (and\nfake mac g++) does.\n\nThe GNU gold linker is officially deprecated.\nThis change will be needed for upgrading to\nLLVM 16 with ORC codegen, since gold crashes\nwith an internal linker error on RHEL 9.\n\nChange-Id: I567caf9b73b75020facce8ce800e50662af60f39\nReviewed-on: http://gerrit.cloudera.org:8080/23892\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "469eff5f42f5e44e8950d9060c5203192c5d2220",
      "tree": "8008c8c08b3c95da2f373451e309df7ccad054e0",
      "parents": [
        "a1b87977403a7ea1875869cc557b9e3e3086227b"
      ],
      "author": {
        "name": "Ashwani Raina",
        "email": "araina@cloudera.com",
        "time": "Sat Nov 22 00:33:49 2025 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Feb 07 03:03:44 2026 +0000"
      },
      "message": "KUDU-1457 [8/n] Parameterize tests with ip config\n\nThis patch enables IP based tests to take constants instead of strings\nfor paramterization, thereby, adding type-safety and improved compile\ntime checks. Convert parameter type to readable string to improve\nreadability. Add helper function to convert IPMode value to its\ncorresponding string value that can be directly used to set the\nip_config_mode flag.\n\nChange-Id: Ic72efea2045b12300ccf0e80873c405828c15a30\nReviewed-on: http://gerrit.cloudera.org:8080/23707\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "a1b87977403a7ea1875869cc557b9e3e3086227b",
      "tree": "e023954c4d249f9380611add306b3323b9ce27dc",
      "parents": [
        "0efbebd487e7d0c7f21ab0d5a91e0fa70046af83"
      ],
      "author": {
        "name": "Ashwani Raina",
        "email": "araina@cloudera.com",
        "time": "Sun Nov 23 02:05:14 2025 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Feb 05 11:36:49 2026 +0000"
      },
      "message": "KUDU-1457 [7/n] Use correct URL host for ip mode\n\nThis patch uses correct URL host for a given IP config mode. If\nwebserver is running on wildcard address, tests using URL as input\nto FetchURL need to make use of a corresponding loopback address.\nFor example, for a webserver running on \u00270.0.0.0\u0027, URL host is\n\u0027127.0.0.1\u0027 and similarly, for a webserver running on \u0027[::]\u0027, URL\nhost is \u0027[::1]\u0027.\n * Based on IP config mode, choose correct service principal name.\n * Ensure test certificate contains subject name that matches with\n   target hostname for non-IPv4 cases (i.e. when IP address is ::1).\n   For this, new certificate and corresponding key is added with same\n   configuration with additional subject name to accomodate \u0027::1\u0027.\n * Add a few more tests to IP config coverage.\n\nChange-Id: I152b0755f286edce1738683b5d2cdf5804f4ff2a\nReviewed-on: http://gerrit.cloudera.org:8080/23711\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "0efbebd487e7d0c7f21ab0d5a91e0fa70046af83",
      "tree": "a659785b2be9e96709b2dbaf8edd502161bace87",
      "parents": [
        "6dc40cf777cf7c7ac02d2c323748b12f8c79a143"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Jan 30 00:53:45 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Feb 03 15:57:49 2026 +0000"
      },
      "message": "KUDU-3736 fix SIGSEGV in codegen with libgcc-11.5.0-10+\n\nFormer libgcc versions used a mutex-protected linked list to store\ninformation on EH frames.  Addressing the scalability bottlenecks of\nthe __{register,deregister}_frame() API in the former implementation,\nthe new implementation in unwind-fde-dw2.c [1] and related headers\nnow uses the read-optimized b-tree approach [2].  The b-tree uses\nthe start address of a memory range as key.\n\nWhile the lock and the related bottleneck are now gone, the b-tree-based\nimplementation is heavily reliant on a few invariants regarding the\nproperties of frames/sections being (de)registered.  In particular,\nthere is a range invariant (a.k.a. the \"non-overlapping rule\") which\nthe new implementation heavily relies upon when updating and rebalancing\nthe b-tree when inserting/removing elements.  At least, this rule is\nreferred to in the commit description at [3]:\n\n  * There must not be two frames that have overlapping address ranges\n\nWhile the former implementation might have tolerated when this rule\nwasn\u0027t honored, the new b-tree implementation is susceptible to UB\n(undefined behavior) in such a case because the tree logic assumes\nthe presence of clear range boundaries for its separators.\n\nAs it turns out, this applies not only to a pair of particular frame\ndescription entries (FDEs), but also to the whole range span of FDEs\nthat come along with corresponding CIE entry in the data structure\nthat is supplied to __{register,deregister}_frame() invocations. In\nparticular, in classify_object_over_fdes() the span is calculated by\ngoing over each FDE of the supplied CIE/FDE chunk, and, as a result,\nget_pc_range() returns an address range spanning from\nmin(beginning address of all FDEs) up to max(end address of all FDEs).\n\nIn its turn, the implementation of RuntimeDyld\u0027s SectionMemoryManager\nin LLVM uses mmap() with MAP_ANON and MAP_PRIVATE flags to allocate\nmemory for jitted object sections, including the .eh_frame section.\nThat results in quite an arbitrary placement of the mmap-ed/allocated\nmemory ranges since the placement of an allocated range isn\u0027t controlled\nby MCJIT execution engine beyond providing an \u0027address hint\u0027 for the\nplacement of a newly allocated memory range.  The kernel is free to use\nany range in the address space of the process that it finds appropriate\ngiven the size of the requested memory range if its first attempt to\nestablish the new mapping at the closest memory page boundary fails\nbecause there is an existing memory mapping at that address already [4].\n\nThe address space of a running Kudu tablet server process might become\nfragmented when there are many jitted code references kept alive, while\nother references might have been used and then purged out of the codegen\ncache and other references dropped by already completed scanners,\ncompaction operations, etc.  Eventually, it\u0027s possible to end up in a\nmemory layout that\u0027s illustrated below:\n\n  object A sections:         [.....][...][...]\n  object B sections:  [.....]                 [...][...]\n\n.eh_frame section contents for the layout above wouldn\u0027t comply with\nthe \"non-overlapping rule\" for the FDEs span, and the new libgcc\nimplementation could end up with receiving SIGSEGV in an attempt to\nregister .eh_frame section for one of those objects or updating the\nb-tree upon de-registering corresponding .eh_frame section.\n\nThe situation described above manifested itself in Kudu tablet servers\ncrashing with SIGSEGV on RHEL9 with libgcc 11.5.0-11 installed.\nThe libgcc package of 11.5.0-11 version came with the updates pushed\ninto the RedHat package repos along with newly released RHEL 9.7 on\n2025-11-12 (November 11, 2025).  From the libgcc\u0027s package changelog [5]\nit\u0027s clear that RedHat\u0027s libgcc switched to the b-tree-based EH frame\nimplementation since version 11.5.0-10, and it\u0027s here to stay.\n\nThis patch addresses the issue of Kudu tablet servers crashing in the\ncodegen by providing a custom implementation of the section memory\nmanager for the LLVM\u0027s MCJIT execution engine.  In essence, it reserves\nthe memory area for subsequent allocations of all the codegenned\nobjects\u0027 sections, so they are now guaranteed to be adjacent and\nlocalized in the pre-allocated memory area.  This approach ensures\nthat the ranges of all the FDEs provided to the libgcc\u0027s\n__{register,deregister}_frame() API cannot interleave with ranges\nof any other FDEs and range spans defined by their boundary entries\nregistered by a Kudu tablet server during its life cycle.\n\n[1] https://github.com/gcc-mirror/gcc/blob/1c0305d7aea53d788f3f74ca9a2bd9fb764c0109/libgcc/unwind-dw2-fde.c\n[2] https://github.com/gcc-mirror/gcc/blob/1c0305d7aea53d788f3f74ca9a2bd9fb764c0109/libgcc/unwind-dw2-btree.h\n[3] https://gcc.gnu.org/cgit/gcc/commit/libgcc/unwind-dw2-btree.h?id\u003d21109b37e8585a7a1b27650fcbf1749380016108\n[4] https://www.man7.org/linux/man-pages/man2/mmap.2.html\n[5] https://rhel.pkgs.org/9/red-hat-ubi-baseos-x86_64/libgcc-11.5.0-11.el9.x86_64.rpm.html\n\nChange-Id: I691d2f442c3148f235847c4c8e56767577804b1a\nReviewed-on: http://gerrit.cloudera.org:8080/23925\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\n"
    },
    {
      "commit": "6dc40cf777cf7c7ac02d2c323748b12f8c79a143",
      "tree": "38d1291d50573f3056a354900a879e8d805eed13",
      "parents": [
        "3722ed49c19ce54c7feae2fa944e32b1d4ed8d2d"
      ],
      "author": {
        "name": "Ashwani Raina",
        "email": "araina@cloudera.com",
        "time": "Tue Nov 25 00:39:02 2025 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Feb 02 16:03:20 2026 +0000"
      },
      "message": "KUDU-1457 [6/n] Enable IPv6-only mode for webserver\n\nThis patch adds config inside config_options for callers to set socket\noption i.e. IPV6_V6ONLY. This is useful when webserver is expected to\nserve only IPv6 requests and refuse any IPv4 request.\nAlso, a couple of unit tests are added to test two scenarios:\n1. Webserver running in dual stack mode. Both types of connection\n   requests i.e., IPv4 and IPv6, are accepted by the server.\n2. Webserver running in IPv6-only mode. Only one type of connection\n   i.e., IPv6, is accepted by the server.\n\nChange-Id: I3db4195c82ee1e7843a3ea84681e080905030eb7\nReviewed-on: http://gerrit.cloudera.org:8080/23710\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "3722ed49c19ce54c7feae2fa944e32b1d4ed8d2d",
      "tree": "ebebd0ee3b0978b3990cc7f1ad22f9129fd2c4bb",
      "parents": [
        "2b38a893d5e734a1366fd96c5e70365512fa0d90"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Jan 16 19:24:57 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jan 27 05:32:26 2026 +0000"
      },
      "message": "[net] make SockAddr::HashCode() return size_t\n\nThis patch changes the return type of SockAddr::HashCode() from uint32_t\nto size_t (since the underlying hash function effectively operates with\n64-bit integers on x86_64 anyway) and brings more consistency into\nthe specialization of the std::hash\u003cT\u003e::operator()(const T\u0026) for the\nSockaddr type.  This addresses UBSAN warnings on implicit conversion of\nintegers (when enabled) and makes SockAddr::HashCode() consistent with\nthe expectations for std::hash\u003cT\u003e::operator() template specialization.\n\nChange-Id: Ia228dfd6cf932a2378ba7e7cafbc07a381313c12\nReviewed-on: http://gerrit.cloudera.org:8080/23876\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "2b38a893d5e734a1366fd96c5e70365512fa0d90",
      "tree": "1b9b2148e5069681b603fe4f7761acf61c03b047",
      "parents": [
        "f8e57b5131bae879e537595893269dcd2c52c7d9"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Fri Jan 23 16:20:15 2026 -0800"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Mon Jan 26 21:18:36 2026 +0000"
      },
      "message": "[examples] Bump up Kudu version to 1.18.1 for examples\n\nThis also bumps the spark libraries to version 3.5.5\n\nChange-Id: Iac1022dbfb36255b4715306221a8bf64e53432dd\nReviewed-on: http://gerrit.cloudera.org:8080/23903\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "f8e57b5131bae879e537595893269dcd2c52c7d9",
      "tree": "6b83bba1130a83c046e989a9719b11ab93a4baf2",
      "parents": [
        "dc97ec0b05873ab390e761f8b8ff9a02038ec65b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Jan 23 11:15:44 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Jan 24 04:13:42 2026 +0000"
      },
      "message": "[test_util] report random seed only with verbose logging\n\nUsually, it\u0027s not important to know the exact seed used to initialize\na random engine, and logging about that every time just pollutes test\noutput.  This patch changes LOG(INFO) to VLOG(1) for SeedRandom().\n\nChange-Id: I148fdbdda5ddc7750ca7ea9fdaedd0e93875394f\nReviewed-on: http://gerrit.cloudera.org:8080/23899\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "dc97ec0b05873ab390e761f8b8ff9a02038ec65b",
      "tree": "8e43193ccee5840d057b39af0a0c8378f4a58dc9",
      "parents": [
        "79812b258e87abf35f95177021c07b785f402bd6"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Thu Jan 15 13:18:05 2026 +0000"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Jan 22 22:48:28 2026 +0000"
      },
      "message": "Fix clean TSAN build.\n\nIf you run:\ngit clean -xfd (or start with a clean vm).\nBUILD_TYPE\u003dTSAN ./build-support/jenkins/build-and-test.sh\n\nIt fails, because thirdparty/installed/uninstrumented/bin/flatc\nis hardwired in java/kudu-flatbuffers/build.gradle.\n\nThere is no reason to include the tsan version instead.\n\nSolution:\nBuild the uninstrumented version even for TSAN build.\n\nFix clean TSAN build.\n\nIf you run:\ngit clean -xfd (or start with a clean VM), then\nBUILD_TYPE\u003dTSAN ./build-support/jenkins/build-and-test.sh\n\nit fails because thirdparty/installed/uninstrumented/bin/flatc\nis hard-wired in java/kudu-flatbuffers/build.gradle.\n\nSolution:\nBuild the uninstrumented version even for TSAN builds.\n\nChange-Id: Id45e8c98e43df7d769a87b41e50f4781ca234061\nReviewed-on: http://gerrit.cloudera.org:8080/23740\nTested-by: Kudu Jenkins\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "79812b258e87abf35f95177021c07b785f402bd6",
      "tree": "bf06c3228ff73dd975a1c340a4adad1547727950",
      "parents": [
        "3332cc1810eec928af6236a77e73332df84008bd"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Dec 05 18:13:02 2025 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jan 20 22:00:21 2026 +0000"
      },
      "message": "auto_rebalancer: enforce max_moves_per_server per tserver\n\nPreviously, auto_rebalancing_max_moves_per_server was enforced\nglobally, allowing individual tservers to temporarily exceed the\nlimit. This could disrupt workloads on those servers.\n\nImplement per-tserver move tracking with a moves_per_tserver_ map\nthat is updated when moves are scheduled in ExecuteMoves() and\ndecremented when they complete in CheckReplicaMovesCompleted().\nGetMovesUsingRebalancingAlgo() now checks per-tserver limits before\nscheduling moves.\n\nAlso fix TestMaxMovesPerServer flakiness by using ASSERT_EVENTUALLY\nto handle race conditions during metric sampling, and verify limits\nper-tserver in addition to aggregate.\nDisabled leader rebalancing during the test to prevent interference,\nas the test only verifies replica move limits.\n\nAddresses TODO at auto_rebalancer.cc:338.\n\nTested auto_rebalancer-test.cc by running it a 1000 times in debug\nmode on dist-test and all tests were successful.\n\nChange-Id: Ic1b73045719dc69cc9e3353d318b7381f144a20d\nReviewed-on: http://gerrit.cloudera.org:8080/23755\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "3332cc1810eec928af6236a77e73332df84008bd",
      "tree": "8ca6344de93e83dd34ad12f8fe79c7a9959449c7",
      "parents": [
        "242b465f8cc16aaf0ca80d76f602d2a551d75e76"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Jan 08 17:29:12 2026 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sat Jan 10 10:09:57 2026 +0000"
      },
      "message": "[Java] Fix TLS truststore init for FIPS providers\n\nIn some field deployments running with a proprietary FIPS-compliant\ncrypto provider, the default KeyStore implementation rejects\nKeyStore.load((LoadStoreParameter) null) with\nIllegalArgumentException(\"\u0027param\u0027 arg cannot be null\"), causing TLS\ntrust-store construction in SecurityContext.trustCertificates() to fail.\n\nFix SecurityContext to initialize the in-memory KeyStore via\nload(null, new char[0]) instead of the 1-arg overload, avoiding the\nnull-parameter path while preserving \"empty keystore\" semantics.\nThis is not a breaking change: both calls are valid KeyStore\ninitialization forms and for JDK keystores load(null, ...) is the\ndocumented way [1] to create an empty KeyStore. We only make the\ninitialization more compatible with FIPS-oriented providers.\n\n[1]: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/security/KeyStore.html#load(java.io.InputStream,char%5B%5D)\n\nChange-Id: I361341146c9115a17df182c397dbf4119ec68464\nReviewed-on: http://gerrit.cloudera.org:8080/23841\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "242b465f8cc16aaf0ca80d76f602d2a551d75e76",
      "tree": "29d9b52b7be9500b0e01b5b5d9908ada68727261",
      "parents": [
        "76ee290123ebe2d7d6aa45c288d626b3b5ad06bb"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Jan 02 21:46:38 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jan 06 06:28:03 2026 +0000"
      },
      "message": "[codegen] relax memory ordering for metric updates\n\nSince \u0027code_cache_hits\u0027 and \u0027code_cache_queries\u0027 are used as metric\ngauges only and aren\u0027t consumed in any way that would require strong\nconsistency guarantees, it makes sense to switch from the\n\u0027memory_order_seq_cst\u0027 to the \u0027memory_order_relaxed\u0027 when updating\nthe underlying \u0027{hit,query}_counter_\u0027 atomic counters.\n\nChange-Id: Id874786ff5c6f83c1b84b747064808e2d939d3fb\nReviewed-on: http://gerrit.cloudera.org:8080/23820\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "76ee290123ebe2d7d6aa45c288d626b3b5ad06bb",
      "tree": "db01a6eae001cf81cc0e4f08dc8f502d606a7d5f",
      "parents": [
        "8ae4fe1b04a0625aae59269f675cee424196603d"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Dec 15 00:48:13 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jan 06 06:27:57 2026 +0000"
      },
      "message": "[codegen] encode projection key once\n\nThere is no need to encode row projection key multiple times: one time\nwhen scheduling a compilation task, another time when running it, and\none more time when inserting a new entry into the codegen cache.\n\nThe latter two steps were done by the same thread in the codegen\ncompilation pool, and there is just a single thread in the pool.\nApparently, it\u0027s better to encode the key only once by the thread which\nschedules the compilation task upon requesting the corresponding row\nprojection.\n\nWith this update, there isn\u0027t a need for JITWrapper::EncodeOwnKey()\nmethod anymore.\n\nChange-Id: Ief2a1cf184c86c33031f90d92a10755da3e86e0b\nReviewed-on: http://gerrit.cloudera.org:8080/23819\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "8ae4fe1b04a0625aae59269f675cee424196603d",
      "tree": "1d0ef75a1bfc05cb942b6f5f5948647e05c5639c",
      "parents": [
        "0e12730071affdb5f2b165b5b4b2d54c6a2520f5"
      ],
      "author": {
        "name": "Ashwani Raina",
        "email": "araina@cloudera.com",
        "time": "Sat Nov 08 20:07:43 2025 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Jan 02 18:39:43 2026 +0000"
      },
      "message": "KUDU-1457 [5/n] Enable IPv6-only mode for rpc\n\nAs part of adding IPv6 support, a config flag was added to represent\nthe modes in which a Kudu cluster can be configured. Out of the three\npossible modes, if user selects \u0027ipv6\u0027 mode, it should essentially\nentertain tcp requests from only \u0027ipv6\u0027 clients and any incoming \u0027ipv4\u0027\nrequest should fail with \u0027address family not supported\u0027 error.\n\n- This patch takes care of that by setting a socket option (IPV6_V6ONLY)\n  at protocol level.\n- Add a few unit tests to test the added code for different modes and\n  clients from different families.\n- Miscellaneous changes to improve readability.\n\nChange-Id: Ic84ba301d0faa36e928eec54872d02f28a4f793f\nReviewed-on: http://gerrit.cloudera.org:8080/23651\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "0e12730071affdb5f2b165b5b4b2d54c6a2520f5",
      "tree": "9c8a7e917ce578c4d21173951bb772619ac8abfc",
      "parents": [
        "dc741732bb6a40213e11a13869fad06a49a209a3"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Dec 15 00:06:04 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Dec 18 22:54:47 2025 +0000"
      },
      "message": "[benchmarks] flatbuffers used as header-only library\n\nSince the flatbuffers are used as a header-only library in serdes-test,\nthere is no need to link in libflatbuffers.\n\nChange-Id: Ie7e5fb55d5fe6840c96e9d47bd8f7fe7186546ef\nReviewed-on: http://gerrit.cloudera.org:8080/23791\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "dc741732bb6a40213e11a13869fad06a49a209a3",
      "tree": "f129583e2d5107609d789d90e8c974110434f27f",
      "parents": [
        "468897755969d686fb08386f42f7835685e7953a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Dec 12 21:48:21 2025 -0800"
      },
      "committer": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Sat Dec 13 11:13:31 2025 +0000"
      },
      "message": "KUDU-3545 fix race condition when (un)registring EH frames\n\nThis patch addresses race condition in libgcc which is triggered by\nconcurrent registering/unregistering of EH frames by LLVM\u0027s\nRTDyldMemoryManager.  Also, since libgcc expects a null-terminated\nlist of FDEs, this patch adds extra 4 zero bytes in the end of each\nsection allocated for EH frames.\n\nI added a new test scenario to reproduce the race, and it was triggering\nTSAN warnings every time if rolling back the fix (see below).  For more\nrobust and more reliable race reproduction, I added a new flag\n(tagged as \u0027hidden\u0027, default value is 1) to control the maximum number\nof threads in the codegen compiler thread pool:\n  --codegen_compiler_manager_pool_max_threads_num\nWe might start using it later to allow for parallel compilation of row\nprojection functions in the presence of concurrent scan requests.\n\n  WARNING: ThreadSanitizer: data race (pid\u003d3406438)\n    Write of size 8 at 0x7b4000008228 by thread T6 (mutexes: write M1879):\n      #0 memmove sanitizer_common/sanitizer_common_interceptors.inc:791:3 (codegen-test+0x2edb86)\n      #1 \u003cnull\u003e \u003cnull\u003e (libgcc_s.so.1+0x1345d)\n      #2 llvm::RuntimeDyldELF::registerEHFrames()\n      #3 llvm::RuntimeDyld::registerEHFrames()\n      #4 llvm::MCJIT::finalizeLoadedModules()\n      #5 llvm::MCJIT::finalizeObject()\n      #6 kudu::codegen::ModuleBuilder::Compile()\n      ...\n\n    Previous write of size 8 at 0x7b4000008228 by thread T5 (mutexes: write M1869):\n      #0 malloc /root/Projects/kudu/thirdparty/src/llvm-11.0.0.src/projects/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:652:5 (codegen-test+0x2b2c34)\n      #1 \u003cnull\u003e \u003cnull\u003e (libgcc_s.so.1+0x1318a)\n      #2 llvm::RuntimeDyldELF::registerEHFrames()\n      #3 llvm::RuntimeDyld::registerEHFrames()\n      #4 llvm::MCJIT::finalizeLoadedModules()\n      #5 llvm::MCJIT::finalizeObject()\n      #6 kudu::codegen::ModuleBuilder::Compile()\n      #7 kudu::codegen::RowProjectorFunctions::Create()\n      #8 kudu::codegen::CodeGenerator::CompileRowProjector()\n      ...\n\n  SUMMARY: ThreadSanitizer: data race (/lib64/libgcc_s.so.1+0x1345d)\n\nChange-Id: Ia91ada71f663451e11149a190def6a8ccd0b4ef5\nReviewed-on: http://gerrit.cloudera.org:8080/23785\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Attila Bukor \u003cabukor@apache.org\u003e\nTested-by: Attila Bukor \u003cabukor@apache.org\u003e\n"
    },
    {
      "commit": "468897755969d686fb08386f42f7835685e7953a",
      "tree": "921a1214b14c70811324ee3822f194b79548cb96",
      "parents": [
        "8627147206282050fa1783523e79e16d3c496328"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Dec 04 19:46:51 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Dec 05 23:48:19 2025 +0000"
      },
      "message": "KUDU-1261 fix logging in AsyncAlterTable::SendRequest()\n\nThis is a benign issue, but it might be confusing seeing warnings like\nbelow when tables with no array columns are being altered:\n\n  W20251204 22:27:13.216799 74859 catalog_manager.cc:5107] could not convert tablet\u0027s e0095f443bdf45b28951fe4ef72a0c0b schema from PB: OK\n\nChange-Id: Iee7d0bc62b6be2cd6721ae361ec3d92b870f288a\nReviewed-on: http://gerrit.cloudera.org:8080/23749\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "8627147206282050fa1783523e79e16d3c496328",
      "tree": "d2715f8dcd97af4818fac5b2bff4a4fb0f3025af",
      "parents": [
        "6799d13cc53190604d141ca1ebf26882edb3b88a"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Thu Dec 04 16:07:02 2025 -0800"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Fri Dec 05 17:05:02 2025 +0000"
      },
      "message": "[Java] Fix signing jars\n\nThe old configurations.archives is tied to the deprecated uploadArchives\ntask and is not used by the maven-publish plugin[1]. This patch updates the\nsigning configuration to sign the actual Maven publication used during\npublishing.\n\nThis change has been tested manually.\n\n[1] https://docs.gradle.org/7.6.2/userguide/publishing_signing.html\n\nChange-Id: I138790487ce586bdfd59bc1f1b9c250696ad586a\nReviewed-on: http://gerrit.cloudera.org:8080/23746\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "6799d13cc53190604d141ca1ebf26882edb3b88a",
      "tree": "7793ca7ecdf8e0daceeb03fccf663ed3032d2dce",
      "parents": [
        "59f88bf4847e68a12ebe83ed0ede9a5cdce8fcb2"
      ],
      "author": {
        "name": "James Teng",
        "email": "763851927@qq.com",
        "time": "Sun Nov 30 17:04:51 2025 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Dec 05 05:19:36 2025 +0000"
      },
      "message": "KUDU-3722 unit mismatch in ProceedWithFlush\n\nMaintenanceManager\u0027s ProceedWithFlush function uses units inconsistent\nwith process_memory::UnderMemoryPressure when checking memory pressure:\nsoft_limit and pressure_threshold are treated as decimals (0–1)\nwhile used_memory_percentage is a percentage (0–100). This causes\nProceedWithFlush to always return true once memory usage exceeds\nmemory_pressure_percentage, which is not the intended behavior\nintroduced by KUDU-3407.\n\nThis patch converts soft_limit and pressure_threshold to percentages,\nreplaces division with an equivalent multiplication form, and updates\nthe relevant tests.\n\nChange-Id: Icb4c299a83c61bd934d67f32446696988bbe3a08\nReviewed-on: http://gerrit.cloudera.org:8080/23726\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "59f88bf4847e68a12ebe83ed0ede9a5cdce8fcb2",
      "tree": "a985bc7c858b9b8d65db68c2b1e77bfe8041fa53",
      "parents": [
        "de1960871a2f035cf10fde55b0269a751e3493c1"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Wed Nov 26 12:33:50 2025 +0000"
      },
      "committer": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Wed Dec 03 10:29:08 2025 +0000"
      },
      "message": "Add .env, venv, and .venv to gitignore.\n\nWhen working with a Python virtual environment, it is much more practical\nto keep it inside the Git repository directory (e.g. Copilot prefers this).\n\nChange-Id: I5d70ef8b2e2e7f4c86d3b554b792acd6461de95f\nReviewed-on: http://gerrit.cloudera.org:8080/23718\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "de1960871a2f035cf10fde55b0269a751e3493c1",
      "tree": "92e679d9f53adbae8d3eda17a911b7aeec7f4fa5",
      "parents": [
        "7f20a7fcd598581ea4a72ef6f5481df06e868cb2"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Nov 22 21:04:42 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Dec 03 03:30:53 2025 +0000"
      },
      "message": "KUDU-2501 more instrumentation for TestNonRandomWorkloadLoadgen\n\nThis patch adds a bit of instrumentation to help with troubleshooting\nof the ToolTest.TestNonRandomWorkloadLoadgen scenario when it fails.\n\nAlso, with this patch now all the test table\u0027s tablets are verified\nto have zero bloom filter lookups after the test workload completes:\nthis is done by using \u0027*\u0027 pattern for tablet identifier instead of\n\u0027nullptr\u0027 in the original version.  The original version verified only\nthe very first tablet in the metrics output, and that wasn\u0027t correct.\n\nChange-Id: Ia9b4a63a00ecbf9af9151fef8eead10c627688c5\nReviewed-on: http://gerrit.cloudera.org:8080/23708\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "7f20a7fcd598581ea4a72ef6f5481df06e868cb2",
      "tree": "a56953bd8f04bc7e1ee9e9420205a281543b8b83",
      "parents": [
        "c139cafbcc69be151d6c43f8fc592f4aa5cfa108"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Nov 21 11:54:04 2025 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Nov 27 09:47:56 2025 +0000"
      },
      "message": "[rest] Return HTTP 503 for non-leader masters\n\nNon-leader masters now return HTTP 503 (Service Unavailable) instead\nof HTTP 500 (Internal Server Error) when handling REST API requests.\n\nThis change provides more semantically correct HTTP status codes:\n- HTTP 500 suggests an internal malfunction or unexpected error\n- HTTP 503 indicates the service exists but is temporarily unavailable\n  at this particular server instance\n\nThe non-leader master is functioning correctly; it simply cannot\nservice the request because it\u0027s not in the leader role. This is a\ntemporary condition that can change during leader elections, making\n503 the appropriate status code.\n\nChange-Id: I62fa177f93b40daae542000aff64b6b432e38467\nReviewed-on: http://gerrit.cloudera.org:8080/23702\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "c139cafbcc69be151d6c43f8fc592f4aa5cfa108",
      "tree": "7e5943bf01393568abd9b2c1a1a4825745ee73e4",
      "parents": [
        "513862e737d5a68c5683eadd1efd28dacc2dbd74"
      ],
      "author": {
        "name": "zchovan",
        "email": "zchovan@cloudera.com",
        "time": "Fri Nov 21 10:12:44 2025 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Nov 25 09:12:47 2025 +0000"
      },
      "message": "[java] Fix test result xml generation\n\nRecently the kudu-backup Java module, has started generating result xml\nfiles with ~1Gb in size. This has resulted in unusable logs archiving in\ndist-test (the __ARCHIVE_TOO_BIG__ when trying to access the test logs).\nAdditionally this would make any sort of test result parsing in Jenkins\ndifficult, as the memory usage would be huge.\n\nThis fix adds a new configuration file, to configure the Parquet\nlibraries log level to INFO, as the DEBUG level logging is excessivley\nverbose. The worst offender test (testBackupWithSplitSizeBytes) has\npreviously generated ~300Mb of output, after this patch this went down\nto ~0.5Mb.\n\nChange-Id: Ib1f3353598ed24d296043e11a966e5ac7ca60e7e\nReviewed-on: http://gerrit.cloudera.org:8080/23701\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "513862e737d5a68c5683eadd1efd28dacc2dbd74",
      "tree": "21beb0f0ac6df676e2c18b56a1a18969ac6a3094",
      "parents": [
        "99c137d66ff3e498799d82d68c11bd16d4764d3a"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Wed Nov 19 14:35:37 2025 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Nov 24 08:25:15 2025 +0000"
      },
      "message": "[docs] Document tablet_history_max_age_sec behavior\n\nThis updates the known issues section with the behavior of the flag\n--tablet_history_max_age_sec and suggestions to improve cluster\nperformance.\n\nChange-Id: Ic86db57eab6da21c0fe2e8721f120318bdccba79\nReviewed-on: http://gerrit.cloudera.org:8080/23694\nTested-by: Kudu Jenkins\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "99c137d66ff3e498799d82d68c11bd16d4764d3a",
      "tree": "0cb1864a2ae31beacf7055c67919bdc9b686bf2a",
      "parents": [
        "8bbf0d2f05a5cd31850eaecd618ba582d9221a23"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Nov 21 12:20:16 2025 +0100"
      },
      "committer": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Mon Nov 24 08:04:45 2025 +0000"
      },
      "message": "[java] Fix compiler warnings in array support\n\n- Add explicit byte cast in Array1dSerdes validity bitmap logic\n- Use %s instead of %d in Preconditions format string\n- Remove unused variable in ArrayCellViewHelper.toDecimalArray()\n- Remove unused helper method in TestArraySerdes\n\nChange-Id: I52c9862a9019441e47f749fa5326f314470f91fc\nReviewed-on: http://gerrit.cloudera.org:8080/23703\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "8bbf0d2f05a5cd31850eaecd618ba582d9221a23",
      "tree": "7c6e7d3004881b2150a3fda073acbceda4bf08e1",
      "parents": [
        "4179b6de569a996e5292622ab1cbcb5b787f5930"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Nov 19 15:16:09 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Nov 20 19:38:59 2025 +0000"
      },
      "message": "[rpc,util] __thread --\u003e thread_local\n\nThis patch changes \u0027__thread\u0027 GCC-specific extension to the C++11-based\n\u0027thread_local\u0027 for better portability.  At supported platforms, Kudu\nde facto compiles with GCC/G++ and CLANG only (both support \u0027__thread\u0027\nand treat it the same as \u0027thread_local\u0027), but it doesn\u0027t hurt to have\nmore portable code.\n\nI also fixed typo in service_queue.h and changed include guards\nto \u0027pragma once\u0027 in threadlocal.h and striped64.h.\n\nThere are no functional modifications in this changelist.\n\nChange-Id: I237f707f2a8755796ad14effeef007c670641643\nReviewed-on: http://gerrit.cloudera.org:8080/23696\nTested-by: Kudu Jenkins\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "4179b6de569a996e5292622ab1cbcb5b787f5930",
      "tree": "36da01422e4c7f94200e2a17842c0ed424a97d2d",
      "parents": [
        "fefef37ed6dbc64e210a57eac4b1979a91651c75"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sun Oct 26 13:08:20 2025 +0100"
      },
      "committer": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Thu Nov 20 13:09:27 2025 +0000"
      },
      "message": "KUDU-3662: Add stress test for checkpoint recovery\n\nAdd TestReplicationCheckpointStress to verify data durability under\nextreme failure conditions. The test aggressively triggers the\ncheckpoint race condition by:\n\n- Creating table with multiple partitions (high split count)\n- Inserting data continuously across partitions\n- Repeatedly crashing and restoring from checkpoints mid-replication\n- Verifying no data loss after multiple crash/recovery cycles\n\nTest validates that the checkpoint race condition fix in\nMetricWrappedKuduEnumerator correctly handles:\n- Splits finishing between snapshot and checkpoint completion\n- Multiple concurrent splits in various states (active, buffered)\n- At-least-once semantics with idempotent UPSERT sink operations\n\nTest stability: Timeouts carefully tuned based on checkpoint and\ndiscovery intervals to avoid flakiness. Verified by running 1024\niterations on dist-test with debug build - no flakiness detected.\n\nChange-Id: Ic463c143a5330bf8db7c5b026a8b4dbe83b7a769\nReviewed-on: http://gerrit.cloudera.org:8080/23608\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "fefef37ed6dbc64e210a57eac4b1979a91651c75",
      "tree": "6e46fca08e1567a8805f95f5de0085bd5d4932c4",
      "parents": [
        "e08855500fa10474d1d1cd7914f91767d5ee1cab"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sun Oct 26 13:08:41 2025 +0100"
      },
      "committer": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Thu Nov 20 13:09:16 2025 +0000"
      },
      "message": "KUDU-3662: Fix race condition in Kudu replication\n\nImplement fix for data loss race condition where splits finishing\nbetween checkpoint snapshot and checkpoint completion are lost,\ncausing records to be skipped on job restart.\n\nRace condition scenario (without fix):\n1. Split finishes, reader sends SplitFinishedEvent to enumerator\n2. Enumerator removes split from pending immediately\n3. Checkpoint snapshot is taken (split already removed from state)\n4. Job crashes before notifyCheckpointComplete\n5. On restore, split is missing from checkpoint -\u003e data loss\n\nSolution:\nWrap KuduSourceEnumerator to defer split removal until checkpoint\ncompletes, following Flink\u0027s CheckpointListener buffering contract [1].\nWhen SplitFinishedEvent arrives:\n- Delegate processes the event normally\n- Re-add finished split back to pending (if removed by delegate)\n- Track split ID in splitsPendingRemoval buffer\n- Only remove from pending in notifyCheckpointComplete()\n\nOn restore from checkpoint:\n- Re-enqueue all restored pending splits to unassigned for replay\n- Clear pending to unblock timestamp advancement\n- Guarantees at-least-once processing (splits may be replayed)\n\nStateless reader wrapper:\nTo prevent duplicate split assignment issues on restore, wrap\nKuduSourceReader with StatelessKuduReaderWrapper that returns empty\nstate on checkpoint. This ensures all split lifecycle management flows\nthrough the enumerator, eliminating potential crashes from duplicate\nsplit IDs in reader\u0027s internal tracking. Since the Kudu connector does\nnot implement split progress tracking (splits are atomic scan tokens),\nthere is no efficiency loss from re-reading splits on restore.\n\nRestored pending splits contain two types:\n1. Active splits being read when checkpoint was taken - must be replayed\n2. Buffered splits finished by reader but held in pending waiting for\n   checkpoint to complete - records may be in-flight, must be replayed\n\nCannot distinguish between types, so re-enqueue all. With stateless\nreader, this creates clean lifecycle without duplicates. Clearing\npending after re-enqueue unblocks timestamp advancement immediately\n(within seconds as splits are reassigned, not minutes waiting for\nprocessing to complete).\n\nAdditional changes:\n- Add StatelessKuduReaderWrapper to prevent duplicate split assignment\n- Add TestMetricWrappedKuduEnumerator verifying the fix and including\n  canary test to detect upstream resolution of FLINK-38575\n- Add checkpoint configuration to ReplicationJobConfig with validation\n  ensuring checkpointing interval \u003c discovery interval\n- Add TestReplicationCheckpoint for end-to-end checkpoint recovery\n- Extend ReplicationTestBase with checkpoint test utilities\n\n[1]: https://github.com/apache/flink/blob/master/flink-core/src/main/\njava/org/apache/flink/api/common/state/CheckpointListener.java\n\nChange-Id: I605a914aaa86b1bdf47537a5b21789de27972add\nReviewed-on: http://gerrit.cloudera.org:8080/23607\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "e08855500fa10474d1d1cd7914f91767d5ee1cab",
      "tree": "12d216bba59b1f27b97d1e33755fb0d48507bef6",
      "parents": [
        "879a8f9e2a94f36f1019d7201617fb61d88e9701"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Nov 18 15:19:00 2025 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Nov 20 12:10:04 2025 +0000"
      },
      "message": "[util] remove chromium-based Atomics from env_posix.cc\n\nWith this patch, Atomic64 and Barrier_AtomicIncrement() are no longer\nused in env_posix.cc: the logic of PosixEnv::gettid() is now implemented\nusing std::atomic.  Also, the global static and thread-local static\nvariables are moved inside of the PosixEnv::gettid() method which is an\nimprovement as well, according to Clang-Tidy.\n\nIn addition, I added a new test scenario to verify that the generated\nthread identifiers are indeed unique.  I didn\u0027t want to rely on existing\nCHECK()/DCHECK() assertions in various places for indirect verification\nof a few explicit invariants.\n\nApart from the new test scenario, there are no functional modifications\nin this changelist.\n\nChange-Id: I63d883de66c51d5d4a6c7eb1eebe63713f1f6dcc\nReviewed-on: http://gerrit.cloudera.org:8080/23689\nTested-by: Kudu Jenkins\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "879a8f9e2a94f36f1019d7201617fb61d88e9701",
      "tree": "57248dade650d421f4cb16f084a6da0fd613d8b8",
      "parents": [
        "27d5373ce4df12ea393de301a17dcef664e62acd"
      ],
      "author": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Mon Nov 17 18:25:44 2025 +0100"
      },
      "committer": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Wed Nov 19 14:21:29 2025 +0000"
      },
      "message": "KUDU-3716 Add version to IPKI CA CSR\n\nOpenSSL 3.4.0 added a version check to certificate signing that causes\nsigning previously working CSRs to fail with the below error:\n\nRuntime error: failed to self-sign cert: CSR signature verification error: error:05800091:x509 certificate routines::unsupported version:crypto/x509/x_all.c:47:X509_REQ_verify_ex\n\nThis patch fixes this problem by setting the version on the CSR.\n\nWhile X509_REQ_set_version() has been there since forever,\nthe version constant X509_REQ_VERSION_1 was added only in OpenSSL 3.0,\nso this X509_REQ_set_version() call is added only in OpenSSL \u003e\u003d 3.0.\n\nChange-Id: I735a56d444009a867fbcab9b78d0053cea593b95\nReviewed-on: http://gerrit.cloudera.org:8080/23681\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Attila Bukor \u003cabukor@apache.org\u003e\n"
    },
    {
      "commit": "27d5373ce4df12ea393de301a17dcef664e62acd",
      "tree": "891eae586da5c370aab2632ed2468c9ffd4fc376",
      "parents": [
        "314edd777541daa3200ab1ae9d685f1be26ce5c0"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Mon Sep 15 12:02:22 2025 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Mon Nov 17 23:44:49 2025 +0000"
      },
      "message": "[Java] Resolve ClassNotFoundException: kudu.DefaultSource\n\nIn kudu-spark-tools module, having the minimize() removes the needed class,\norg/apache/kudu/spark/kudu/DefaultSource.class.\n\nAlong with that we exclude \u0027META-INF/services/**\u0027 in kudu-spark-tools and\nkudu-spark. But without META-INF/services/org.apache.spark.sql.sources.DataSourceRegister\nSpark cannot discover DefaultSource, even though the class itself is there.\n\nThis commit addresses these issues and has been tested manually.\n\nERROR yarn.Client: [main]: Application diagnostics message: User class threw exception: org.apache.spark.SparkClassNotFoundException: [DATA_SOURCE_NOT_FOUND] Failed to find the data source: kudu. Please find packages at `https://spark.apache.org/third-party-projects.html`.\n\tat org.apache.spark.sql.errors.QueryExecutionErrors$.dataSourceNotFoundError(QueryExecutionErrors.scala:725)\n\tat org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:649)\n\tat org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSourceV2(DataSource.scala:699)\n\tat org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:208)\n\tat org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:172)\n\tat org.apache.kudu.spark.tools.Verifier$.run(IntegrationTestBigLinkedList.scala:371)\n\tat org.apache.kudu.spark.tools.Verifier$.main(IntegrationTestBigLinkedList.scala:451)\n\tat org.apache.kudu.spark.tools.IntegrationTestBigLinkedList$.main(IntegrationTestBigLinkedList.scala:107)\n\tat org.apache.kudu.spark.tools.IntegrationTestBigLinkedList.main(IntegrationTestBigLinkedList.scala)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n\tat org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:748)\nCaused by: java.lang.ClassNotFoundException: kudu.DefaultSource\n\tat java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)\n\tat java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:592)\n\tat java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)\n\tat org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$5(DataSource.scala:635)\n\tat scala.util.Try$.apply(Try.scala:213)\n\tat org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$4(DataSource.scala:635)\n\tat scala.util.Failure.orElse(Try.scala:224)\n\tat org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:635)\n\t... 12 more\n\nChange-Id: Ic0b8f07ea46759dc92d5ed2105a5480a0cf56464\nReviewed-on: http://gerrit.cloudera.org:8080/23605\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "314edd777541daa3200ab1ae9d685f1be26ce5c0",
      "tree": "9d66d326509c9e27029b9bbecc1e1f81671600ea",
      "parents": [
        "1520269ab2fe898e6bf4a05ca5ffdae174a0c5fe"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Oct 15 11:40:54 2025 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Nov 11 10:42:19 2025 +0000"
      },
      "message": "Enable REST API endpoints in webserver crawl test\n\nModified WebserverCrawlITest to enable REST API endpoints by setting\nenable_rest_api \u003d true in the cluster options.\n\nAlso added exclusion logic for large JavaScript bundles (like\nswagger-ui-bundle.js) to prevent test failures. The HTML parser\n(gumbo-query) incorrectly treats minified JavaScript as parseable\nHTML content and extracts code fragments as malformed URLs, causing\ncurl errors when the test tries to fetch them. These JavaScript files\nare still validated by the initial HTTP fetch; we simply skip the\ninappropriate step of parsing them for links.\n\nChange-Id: I5be128536d4f104e2d3bfa55c02b81e6f114d5fc\nReviewed-on: http://gerrit.cloudera.org:8080/23548\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "1520269ab2fe898e6bf4a05ca5ffdae174a0c5fe",
      "tree": "534a80fc8ac0b88e1b15775889709a244e5613f1",
      "parents": [
        "26776e78010239732879677123295b02dac7d92a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 10 15:00:34 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Nov 11 04:34:05 2025 +0000"
      },
      "message": "KUDU-1261 \u0027array_max_elem_num\u0027 flag for \u0027kudu perf loadgen\u0027\n\nPrior to this patch, the `kudu perf loadgen` CLI tool used 256 as the\nhard-coded limit for the maximum possible number of elements in an array\ncell to generate.  With this changelist, it\u0027s now configurable using\nthe newly introduced flag --array_max_elem_num which is set to 256\nby default.\n\nChange-Id: I831c692b3a997091de17b34fe3e9c092c3386f6d\nReviewed-on: http://gerrit.cloudera.org:8080/23661\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "26776e78010239732879677123295b02dac7d92a",
      "tree": "79afec74fbbcc5bd2c4ba60345e450e64a19c6e2",
      "parents": [
        "d8a95cfcdd8eae9153e1245ede66aaa0b7a1732b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Nov 06 20:52:35 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 10 22:37:37 2025 +0000"
      },
      "message": "[docs] refresh `kudu master add` documentation\n\nThis changelist updates the documentation on using the `kudu master add`\nCLI tool (which is effectively obsolete starting with Kudu 1.16.0).\nIt turned out the original version was quite misleading.  There is an\nevidence that it confused users who attempted it because of the\nomission of a few crucial points, especially if running the procedure\nin a secure (i.e. Kerberized) Kudu cluster.\n\nThis changelist addresses the issue, at least clarifying on the\nessential points of the procedure.  At the time of writing, the current\nKudu version is 1.18.0, and the `kudu master add` CLI tool is obsolete.\nHowever, recently I found that there are still Kudu clusters of the\n1.15.0 version in the wild, so I thought it makes sense to update the\ndocs on the procedure to avoid confusing and misleading users who might\ntry applying it at their 1.15.0 Kudu clusters.\n\nThis is a follow-up to 336c65bfd84a5115dc5c6be6521751d53aa0c286.\n\nChange-Id: I8d2ae84d596a0c3ffe840cc16d3ac0d0d28d05bc\nReviewed-on: http://gerrit.cloudera.org:8080/23649\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "d8a95cfcdd8eae9153e1245ede66aaa0b7a1732b",
      "tree": "d3aaf4a32fb401682c3c0e92c7e4055ac8e99be7",
      "parents": [
        "d40c99fdbee927bbeba220f77cf2b5444587cbc6"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Oct 29 10:59:47 2025 +0100"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Nov 10 16:37:12 2025 +0000"
      },
      "message": "[java] Split TestKuduClient into smaller modules\n\nThe monolithic TestKuduClient class (~2600 lines with 50 tests) was\ncausing regular timeouts on TSAN builds. This commit splits it into\n6 focused test modules that can run independently, significantly\nreducing timeout risk on slow builds.\n\nTest modules:\n- TestKuduClientBasic (7 tests): Basic table operations, timestamps,\n  and soft delete functionality\n- TestKuduClientDataTypes (8 tests): Data type tests including strings,\n  VARCHAR, binary, timestamps, dates, and decimals\n- TestKuduClientScanner (7 tests): Scanner lifecycle, expiration,\n  keep-alive, limits, predicates, and non-covered ranges\n- TestKuduClientAdvanced (8 tests): Auto-incrementing columns, array\n  types, and custom hash schemas per range partition\n- TestKuduClientConcurrency (10 tests): Concurrent operations,\n  read-your-writes consistency, concurrent flush, and session lifecycle\n- TestKuduClientSecurity (10 tests): Authentication, certificates,\n  location assignment, and cluster ID\n\nThe original TestKuduClient.java has been removed entirely. CI/Jenkins\nshould run the individual test classes rather than a suite wrapper.\n\nVerified with dist-test: 1000 runs of each individual module complete\nsuccessfully without timeouts.\n\nChange-Id: I3fcedb050ce4deea1c317b3cf3687502cbe81ce7\nReviewed-on: http://gerrit.cloudera.org:8080/23609\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "d40c99fdbee927bbeba220f77cf2b5444587cbc6",
      "tree": "7bd514dde882585c2c97adeab603a460316cd216",
      "parents": [
        "706af2d0bc1ba6845527b967ef777c208707be20"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sun Oct 19 14:57:10 2025 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Nov 10 09:50:13 2025 +0000"
      },
      "message": "KUDU-3662: Fix shading in kudu-replication\n\nMark Flink core APIs (flink-streaming-java, flink-core,\nflink-clients, flink-connector-base) as compileUnshaded (Maven\n\u0027provided\u0027 scope). These are supplied by the Flink cluster at\nruntime and should not be bundled to avoid classpath conflicts.\n\nBundle flink-connector-kudu but exclude its kudu-client\ndependency to avoid duplicates, using our shaded kudu-client\ninstead.\n\nAdd shadowJar exclusions for cluster-provided dependencies:\nHadoop classes, commons-cli, and logging bindings (slf4j,\nlogback, log4j).\n\nExtend testImplementation from compileUnshaded to ensure test\ncode can compile against the Flink APIs.\n\nThis follows the standard Flink connector packaging pattern as\ndocumented at:\nhttps://nightlies.apache.org/flink/flink-docs-release-1.20/docs/dev/\nconfiguration/overview/\n\nChange-Id: I57660c7c97fd440309f69f5d5e0d028aa88042dc\nReviewed-on: http://gerrit.cloudera.org:8080/23606\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "706af2d0bc1ba6845527b967ef777c208707be20",
      "tree": "3696935fba3144ac569add87e5c4fbea4296ef80",
      "parents": [
        "b0c0059aecea5a977a7490a65b7d0840ed5bed76"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Nov 05 18:14:34 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 10 08:17:17 2025 +0000"
      },
      "message": "[tools] update \u0027kudu master add\u0027 in-line help\n\nSince the \u0027kudu master add\u0027 CLI tool has become de facto obsolete after\na significant improvement in usability of adding new Kudu masters in\nthe 1.16.0 release [1], it makes sense to reflect on that in the inline\ntool\u0027s help/usage blurb.\n\nThis changelist does exactly so by adding an appropriate NOTE.\nIn addition, I updated the help message to clarify on a few crucial\npoints and also removed irrelevant optional flag --logtostderr\nfrom the list of the flags advertised by the tool.\n\n[1] https://github.com/apache/kudu/commit/7e66534d0\n\nChange-Id: Ida92fda5d6d3f4edd9f04796efa090bef7c540bd\nReviewed-on: http://gerrit.cloudera.org:8080/23647\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "b0c0059aecea5a977a7490a65b7d0840ed5bed76",
      "tree": "90a332fac6395e1f3828a14e47d874d5ac9b1cca",
      "parents": [
        "0670796586b932f0e471919cbb24faf734dfb250"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 31 18:41:53 2025 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Nov 06 18:56:07 2025 +0000"
      },
      "message": "[java] mention the -DshowTestOutput flag in README\n\nThe `showTestOutput` option [1] is a shortcut to change the default\nbehavior of storing the logs when running the Gradle\u0027s \u0027test\u0027 task.\n\nThis changelist mentions it in the README.adoc file, so now it\u0027s easier\nto find when necessary.\n\n[1] https://github.com/apache/kudu/commit/7cdc9f7c7\n\nChange-Id: I40d95279cb28729015aef837e99d0693a9114741\nReviewed-on: http://gerrit.cloudera.org:8080/23617\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "0670796586b932f0e471919cbb24faf734dfb250",
      "tree": "e7f71ee20b03c1a29a715d4d85de7db42ecf0428",
      "parents": [
        "9b92708a6544e9c4119a471b8c881e3689d3a8ec"
      ],
      "author": {
        "name": "Ashwani Raina",
        "email": "araina@cloudera.com",
        "time": "Thu Oct 30 15:34:42 2025 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Nov 06 13:58:54 2025 +0000"
      },
      "message": "[test] Skip test if hostname has no DNS record\n\nWith IPv6 support, some tests, that make use of DNS resolution,\ncan end up with error if the ip_config_mode is set to a family for\nwhich \u0027hostname\u0027 has no corresponding DNS record.\nFor example, if a hostname resolves to just an IPv4 address on a system,\nrunning the test with ip_config_mode as \u0027IPv6\u0027 fails because\ngetaddrinfo doesn\u0027t find any DNS record for the provided hostname with\ndesired family set to \u0027IPv6\u0027.\n\nThis patch avoids such scenarios by, proactively, checking whether DNS\nrecord exists or not and skips the test if it doesn\u0027t.\n\nChange-Id: Id377c73a752e18324dbd83aad7e613b3ba99ee6b\nReviewed-on: http://gerrit.cloudera.org:8080/23611\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "9b92708a6544e9c4119a471b8c881e3689d3a8ec",
      "tree": "3d3c991ed4017ffa5648c25b9716beb27aefe5ee",
      "parents": [
        "9086312cb997cbb271be69d28691b14092d5d619"
      ],
      "author": {
        "name": "gabriellalotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Thu May 08 14:22:21 2025 +0000"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Nov 06 02:47:26 2025 +0000"
      },
      "message": "Add OpenAPI specification for REST API endpoints\n\nCreate a hand-written swagger/kudu-api.json specification rather than\nimplementing automated generation infrastructure. This approach was\nchosen for several practical reasons:\n\n- Kudu\u0027s REST API currently has only 3 main endpoints\n  (/api/v1/tables, /api/v1/tables/\u003ctable_id\u003e, /api/v1/leader) with ~5\n  total method/path combinations. The overhead of automated generation\n  (C++ fluent APIs, annotation parsers, or complex macros) would\n  exceed the maintenance burden of manual updates.\n\n- These endpoints are relatively stable and not changing frequently,\n  reducing the risk of documentation drift.\n\n- A single JSON file is easier to review, debug, and modify than\n  custom C++ infrastructure or parsing scripts.\n\n- No additional build steps, external tools, or runtime overhead. The\n  specification is immediately available when the server starts.\n\n- If the API grows significantly or changes frequently, we can revisit\n  automated generation.\n\nThe OpenAPI 3.0 specification includes complete documentation for all\ncurrent endpoints with request/response schemas, parameter validation,\nand error codes. It\u0027s served at /swagger/kudu-api.json and integrates\nwith the existing Swagger UI at /api/docs.\n\nA Jira has been created for adding an automatic validation script\n(https://issues.apache.org/jira/browse/KUDU-3700).\n\nChange-Id: I3981665c78f478e89d0300f3a2fc5d68b73b8762\nReviewed-on: http://gerrit.cloudera.org:8080/23224\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "9086312cb997cbb271be69d28691b14092d5d619",
      "tree": "daae2b0267aa930ec5ec1041969252076d7a5354",
      "parents": [
        "c9617d1211eff12e15d5aed976d6c2b962a618b7"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Nov 05 15:52:11 2025 +0100"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Nov 06 02:41:25 2025 +0000"
      },
      "message": "KUDU-3714: Add REST API tests for 1D array columns\n\nThis patch adds comprehensive test coverage for 1D array type columns\nin the Kudu Master REST API (rest_catalog-test.cc).\n\nWith the implementation of KUDU-1261, Kudu supports one-dimensional\narray columns. While the REST API already works with array columns\nthrough its protobuf JSON serialization, explicit test coverage was\nmissing. This change adds tests to verify that array columns work\ncorrectly through all REST API operations.\n\nChange-Id: I3828baa711671385f6c6a0a7f4f2cbd98e3dbdd5\nReviewed-on: http://gerrit.cloudera.org:8080/23635\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "c9617d1211eff12e15d5aed976d6c2b962a618b7",
      "tree": "f54cd6698a4100677f83d58a315ba6a7147c89ee",
      "parents": [
        "920b11d4931481fe3110661f3998e54ad98d7669"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 03 16:34:48 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Nov 05 16:52:41 2025 +0000"
      },
      "message": "[mini_kdc] remove duplicate code in CreateServiceKeytab()\n\nThis is a follow-up to cdbe4577a91a171718ff485acc1dd1261e73a8d2.\n\nChange-Id: I01689ec129572e9942932e05395429b3e85e5b63\nReviewed-on: http://gerrit.cloudera.org:8080/23625\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "920b11d4931481fe3110661f3998e54ad98d7669",
      "tree": "2ba6f1d53fa7cd7e0d6140c0b6f2a28a27ca4b51",
      "parents": [
        "492273ae39574dd142dfd2008f741b15cd88763a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Nov 04 15:31:03 2025 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Nov 05 12:50:52 2025 +0000"
      },
      "message": "KUDU-3712 fix flakiness in debug-util-test\n\nThis changelist addresses flakiness in various scenarios of\nDebugUtilTest.  I also took the liberty to do minor improvements\nin src/kudu/util/debug-util.h\n\nChange-Id: I934cc88e489677476b08fed376d3b522ab44af32\nReviewed-on: http://gerrit.cloudera.org:8080/23632\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "492273ae39574dd142dfd2008f741b15cd88763a",
      "tree": "6e5d841836fc5043ea7478e6a2d8d3c6d7287df3",
      "parents": [
        "dc11e1c0c9b35f6563bb6f6df35e5d45738db705"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Nov 04 20:56:23 2025 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Nov 05 12:35:18 2025 +0000"
      },
      "message": "[util] fix typo in sanitizer_options.cc\n\nPrior to the fix, compiling the project with ASAN instrumentation would\nproduce a warning like below:\n  src/kudu/util/sanitizer_options.cc:230:3: warning: expression result unused [-Wunused-value]\n    \"leak:libgssapi_krb5.so.2\\n\";\n  1 warning generated.\n\nThis is a follow-up to bae8c9f896494abffbc297a961d440b30e05e275.\n\nChange-Id: I548e13a79005047e4f2808ca5217f988d51c473c\nReviewed-on: http://gerrit.cloudera.org:8080/23634\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "dc11e1c0c9b35f6563bb6f6df35e5d45738db705",
      "tree": "dfdc30aa6f6744118a634885f5cba2fea003c2f0",
      "parents": [
        "ae8498e8a7fa8d034c8e607fe729119740c6bce5"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 31 17:53:42 2025 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Nov 05 06:36:29 2025 +0000"
      },
      "message": "[java] log test scenario name in TestKuduClient\n\nWhile trying to decipher logs from failing TestKuduClient in dist-test,\nI found it\u0027s hard to tell what exact scenario had failed.  To address\nthe issue, this changelist adds the necessary information similar to\nwhat gtest outputs when running C++ tests.\n\nI thought it would be great to do this for all the Java tests, but I\ncouldn\u0027t find a straightforward way to achieve this with JUnit4 if not\ncopying over the whole TestWatcher boilerplate.  Even if that would be\nquite a ubiquitous Java-style approach, I\u0027m not ready to do so.\nInstead, I think this boilerplate can be added on a test-by-test basis,\nwhen we find it\u0027s necessary: the majority of the tests aren\u0027t flaky\nas of today, and running tests with Gradle\u0027s \u0027test\u0027 task allows for\nper-scenario reporting already.\n\nMeanwhile, with JUnit5 the Extension concept [2] has been introduced,\nand it allows for having the necessary functionality by adding the\n@ExtendWith directive instead of copying the whole TestWatcher-related\nboilerplate.  An upgrade to JUnit6 (or newer) might be an opportunity\nto revisit this, if necessary.\n\n[1] https://junit.org/junit4/javadoc/latest/org/junit/rules/TestWatcher.html\n[2] https://docs.junit.org/current/api/org.junit.jupiter.api/org/junit/jupiter/api/extension/Extension.html\n\nChange-Id: I6f4d0e9bf5b590f5f0ce490838658091063e2aea\nReviewed-on: http://gerrit.cloudera.org:8080/23616\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "ae8498e8a7fa8d034c8e607fe729119740c6bce5",
      "tree": "b0dc6c8a1f0924de86cb0172c777383fea082083",
      "parents": [
        "60f5e5267b92c39485a66121d3ce3cc7ef57b0e0"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 03 13:23:25 2025 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Nov 05 06:36:08 2025 +0000"
      },
      "message": "[java] log information on random seed in DEBUG level\n\nOutputting information on the random utilities seed isn\u0027t something\nneeded in day-to-day test runs, so this patch changes the log level\nfor the information from INFO to DEBUG.\n\nThere are no functional modifications in this changelist.\n\nChange-Id: I972d2fe59b65ecfa6c433dc782cd6c000485b470\nReviewed-on: http://gerrit.cloudera.org:8080/23621\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "60f5e5267b92c39485a66121d3ce3cc7ef57b0e0",
      "tree": "e2fcee042c9d5238f9a637c0acccbb37bcab6f4c",
      "parents": [
        "1d0cb013a5aad754f2ed06c25f5ec3d8a1873622"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Oct 25 00:41:05 2025 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 27 17:05:07 2025 +0000"
      },
      "message": "KUDU-1261 make ArrayCellMetadataView::Init() more robust\n\nThis makes ArrayCellMetadataView::Init() implementation more robust.\nIn particular, it no longer crashes on flatbuffers with empty Content\nand type set to String or Binary.  Neither C++ nor Java client side\ngenerates such flatbuffers content as of now, but the code should be\nrobust enough to handle any input.\n\nNew test scenarios to cover the regression are present as well.\n\nIn addition, I moved all the code in array_type_serdes-test.cc\ninto kudu::serdes namespace.\n\nChange-Id: I1f93e91b0a178fd3701f7ef3c1da855e56bb9f57\nReviewed-on: http://gerrit.cloudera.org:8080/23601\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "1d0cb013a5aad754f2ed06c25f5ec3d8a1873622",
      "tree": "4ed36bd863bfcd216a96cbf4dd3f6460fc007820",
      "parents": [
        "3e89ebf12caa2eee0f6bdf0faca32bb7e9caf664"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Mon Oct 20 15:12:10 2025 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 24 18:16:27 2025 +0000"
      },
      "message": "KUDU-1261 [Java] Add spark bindings for Array columns\n\nIntroduces end-to-end support for Array types in Kudu Spark bindings.\nExtends RowConverter, SparkUtil, and KuduRDD to serialize and deserialize\narray columns between Kudu and Spark SQL. Adds integration tests covering\nread/write and round-trip conversion for primitive and string array types.\n\nUpdates the kudu-backup metadata structure to accommodate array type\ncolumn schema.\n\nChange-Id: I786fdd1cbfbb67b4895b2e95b89addbc04341746\nReviewed-on: http://gerrit.cloudera.org:8080/23565\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    }
  ],
  "next": "3e89ebf12caa2eee0f6bdf0faca32bb7e9caf664"
}
