)]}'
{
  "log": [
    {
      "commit": "6b1bbe17b8ab938291541389a90c67c358bba716",
      "tree": "62ece0e5a163e02d1850e30a6730b57a9ed28a6f",
      "parents": [
        "0b45a5f213f86976667a3b67ca38691e46a0ae68"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Apr 29 14:33:48 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Jun 12 08:15:17 2026 +0000"
      },
      "message": "KUDU-3767 Add global leader awareness to auto leader rebalancer (Part 1)\n\nThe leader rebalancer processes tables independently, so when picking\na destination for a leader transfer it only considers per-table leader\ndensity. If two follower tservers score equally on that metric, the\nchoice is driven by iteration order, which can consistently favour the\nsame tserver across many tables.\n\nThis patch threads a global leader count map through the per-table\nloop. Each call to RunLeaderRebalanceForTable accumulates actual leader\ncounts from the current table and updates the map as moves are planned.\nWhen two destination candidates have the same per-table score, the one\nwith the lower global leader count is preferred, steering transfers\naway from tservers that are already carrying more leaders from earlier\ntables in the same round.\n\nThis is part 1 of this addition; part 2 will be a follow-up change\nadding a post-loop global pass to detect and correct tservers that are\nglobally overloaded even when per-table balance is already achieved.\n\nChange-Id: I47e266d2a06d5c18a50270e0d5e9d4954480f308\nReviewed-on: http://gerrit.cloudera.org:8080/24246\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "0b45a5f213f86976667a3b67ca38691e46a0ae68",
      "tree": "69af4224855d1abfbcd5c220071b9f3aa6b0abbd",
      "parents": [
        "00d42c47aba225b36cc0f56485163d6976969979"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Jun 10 15:17:44 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Jun 11 01:24:26 2026 +0000"
      },
      "message": "KUDU-3781 one more test scenario for HMS Thrift TLS support\n\nThis changelist adds one more test scenario to be explicit on the\nKudu HMS Thrift client\u0027s behavior when TLS support is enabled only\nat the server side.  The client attempts to talk to the HMS server\nwithout enabling TLS on its side, but turning on other types of\nprotection mechanisms provided by SASL such as authentication,\nintegrity, privacy.\n\nThis patch does not contain any functional modifications.\n\nChange-Id: I47ab8e25507d115250fd18fcc0ff128526d4d99c\nReviewed-on: http://gerrit.cloudera.org:8080/24436\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "00d42c47aba225b36cc0f56485163d6976969979",
      "tree": "7bfe5ecfb8be6d2198e225d32adee5ed35cd27cf",
      "parents": [
        "c968d85cc9d5ea18cbabf7464cb48bbec51a63a6"
      ],
      "author": {
        "name": "Anu Sudarsan",
        "email": "anu.sudarsan@starburstdata.com",
        "time": "Wed Jun 10 14:43:41 2026 -0400"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Jun 10 23:25:41 2026 +0000"
      },
      "message": "Bump netty to 4.1.135.Final\n\nThis is for fixing the multiple CVEs reported in the scanner used by our Java upstream project which uses the client\nNetty codec-http vulnerability\nNetty codec-mqtt vulnerability\nNetty codec-redis vulnerability\nNetty handler-proxy vulnerability\n\nChange-Id: I42ebbcdb1d91d6d69fa44b416c94fcf16b4d2e27\nReviewed-on: http://gerrit.cloudera.org:8080/24434\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "c968d85cc9d5ea18cbabf7464cb48bbec51a63a6",
      "tree": "7f70a80aa993c1c82a4379b7c7debea39c2ef86f",
      "parents": [
        "39dfd48de0fee9e8b74a561f91a8838893d7c44e"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Tue Jun 09 21:09:43 2026 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jun 09 20:01:25 2026 +0000"
      },
      "message": "[subprocess] Fix buffer over-read/overflow in message discard\n\nSubprocessProtocol::DoReadAndDiscard() clears an oversized message off\nthe communication channel using a fixed 4K stack buffer, but bounded\neach read() with std::max\u003cssize_t\u003e(rem, sizeof(buf)) instead of\nstd::min(). Since this returns the greater of the two, the read length\nis never held to the buffer size. This causes two issues:\n* Stack buffer overflow: when the discarded payload is larger than\n  4K (say, 8K message), a single read() is asked to copy up to \u0027rem\u0027\n  bytes into the 4K buffer, smashing the stack.\n* Valid message subsumption: when the oversized payload is smaller than\n  4K, the read still pulls up to 4K, over-reading into and consuming the\n  following well-formed message. The next ReceiveMessage() then loses\n  that message, breaking the \"discard to re-sync the channel\" guarantee.\n\nThe bug has existed since DoReadAndDiscard() was introduced in KUDU-3450.\nThe patch fixes it by limiting each read to std::min(rem, sizeof(buf)),\nmatching the Java implementation in doReadAndDiscard.\n\nAdd two unit tests covering both scenarios: a deterministic over-read\nand an oversized-payload overflow test.\n\nChange-Id: I73da816132555cb3d29b7bbf8a6821ad3f2dec9c\nReviewed-on: http://gerrit.cloudera.org:8080/24427\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "39dfd48de0fee9e8b74a561f91a8838893d7c44e",
      "tree": "6dea8957005517b932738605a962757f9d90c493",
      "parents": [
        "43dc5b1fea55e2b819205a7962c083ddf34884f3"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Jun 08 19:05:09 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Jun 09 14:03:13 2026 +0000"
      },
      "message": "[consensus] one dependency less for consensus_metadata_proto\n\nThis removes unnecessary fs_proto item from the dependency list\nof the consensus_metadata_proto library.\n\nThis patch does not contain any functional modifications.\n\nChange-Id: I926447729420917463649ca8a7370932a1857891\nReviewed-on: http://gerrit.cloudera.org:8080/24421\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "43dc5b1fea55e2b819205a7962c083ddf34884f3",
      "tree": "73fe9948e3fd4cac0aa982e30729251f19f3d150",
      "parents": [
        "1f2e0ae1b3166b31625eef7611aeda61bf5c9726"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Thu May 07 14:28:53 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Jun 09 14:00:27 2026 +0000"
      },
      "message": "KUDU-3732 Get consensus state from CatalogManager in auto-rebalancer\n\nAutoRebalancerTask::CheckMoveCompleted() previously issued a\nGetConsensusState RPC to the tablet leader on every polling cycle\nto check whether a replica move had completed. Replace this RPC with\na read from CatalogManager, which is populated via tserver-to-master\nheartbeats.\n\nExecuteMoves now records the committed config opid_index from\nCatalogManager before sending BulkChangeConfig, storing it in\nReplicaMove.config_opid_idx. CheckMoveCompleted uses this as a\nfreshness gate: if the opid_index in CatalogManager has not advanced\npast the stored value, the heartbeat carrying the new config has not\nyet arrived and the check waits rather than applying completion or\nerror logic.\n\nAdd CatalogManager::GetTabletConsensusState() to expose the\ncommitted consensus state from the in-memory tablet map.\n\nChange-Id: Iba021539fbfaca5905fbbf4abbb6e2a61db1f7dc\nReviewed-on: http://gerrit.cloudera.org:8080/24285\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": "1f2e0ae1b3166b31625eef7611aeda61bf5c9726",
      "tree": "81267bd72535f4a1a0615fd3eb25b2f37cdda5f1",
      "parents": [
        "3638b3814e36cbcb90ebfbf02dbbfaf7a0d70843"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Mon Jun 01 21:41:29 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Mon Jun 08 17:40:31 2026 +0000"
      },
      "message": "[Java] Upgrade SLF4J to 2.0.17 and migrate to log4j-slf4j2-impl\n\n- Upgrade the global SLF4J framework from 1.7.36 to 2.0.17\n- Rename and upgrade \u0027log4j-slf4j-impl\u0027 to \u0027log4j-slf4j2-impl\u0027 in\n  dependencies.gradle.\n- Update implementation, compileOnly, and shadowJar settings across\n  all submodules (kudu-client, kudu-spark, kudu-subprocess,\n  kudu-test-utils, etc.).\n- Remove the log4j-slf4j provider from the \u0027kudu-backup\u0027 test\n  runtime path to prevent a circular loop conflict with LogCaptor\u0027s\n  underlying Logback framework during tests.\n\nChange-Id: Id4dedfa6e4a7a8b1c2c21ebfff91b3513ddfb1f2\nReviewed-on: http://gerrit.cloudera.org:8080/24390\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "3638b3814e36cbcb90ebfbf02dbbfaf7a0d70843",
      "tree": "e90dae8a38f5ebd9c6c69f816adcf67969d7de93",
      "parents": [
        "e5519e57bdb91005f7ffb5eaca841029259ef5f9"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Tue May 19 12:17:59 2026 +0530"
      },
      "committer": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Mon Jun 08 14:22:11 2026 +0000"
      },
      "message": "KUDU-3429 Make rows per block flag based (1/n)\n\nConvert hard-coded kRowsPerBlock to a flag based variable that can be\nused and modified by tests at runtime to control memory usage during\nrowset compaction.\n\nMajorDeltaCompaction and MinorDeltaCompaction also have their own\nkRowsPerBlock. The patch doesn\u0027t modify those to flags.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I65f1e0d91e718b097bcc6e3979f246a13a618edf\nReviewed-on: http://gerrit.cloudera.org:8080/24328\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "e5519e57bdb91005f7ffb5eaca841029259ef5f9",
      "tree": "e97870f82b4fa201bdda7ba360ad0094a3a50374",
      "parents": [
        "fc27ecbedf0481c7ed77b0c2cd295b9f0af8efea"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed May 27 21:07:15 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Jun 04 17:15:24 2026 +0000"
      },
      "message": "KUDU-3781: add TLS transport support for HMS client\n\nWith this patch, the Thrift client used for communication between\nKudu masters and Hive Metastore can protect its connections with TLS.\n\nA few new flags have been introduced:\n  --hive_metastore_tls_enabled (default: false)\n  --hive_metastore_tls_trusted_ca_cert_file (default: \"\")\n  --hive_metastore_tls_use_https_trusted_ca_cert (default: true)\n\nIf the latter is set to \u0027true\u0027, the trusted CA certificates are sourced\nfrom the location where --trusted_certificate_file points to, i.e. the\nsame trusted CA information is used for HTTPS-based API connections\n(KMS, JWKS, etc.) and HMS Thrift connections.  Otherwise, the trusted CA\ncertificate to validate HMS server certificate is sourced from the file\npointed to by the --hive_metastore_tls_trusted_ca_cert_file flag.\n\nIf no trusted CA certificates are provided for the Thrift HMS client,\nthe HMS server certificate must be verifiable using the system-wide\ntrusted CA certificate bundle.  Otherwise, TLS handshake between the\nKudu HMS client and the target HMS Thrift server fails, and the client\ncannot talk to the HMS.\n\nTo provide proper handling of situations where the trusted CA\ncertificate file is absent or contains invalid data and satisfy the\nrequirements of HaClient high-availability wrapper, the HmsClient\u0027s\ninstantiation scheme changed to factory-based approach returning the\nresult instance allocated on the heap and wrapped into std::unique_ptr.\nIf the trusted CA certificate file is absent or contain invalid data,\nHmsClient cannot be instantiated.\n\nTo cover the new functionality:\n  * a few new scenarios are now present in hms_client-test.cc and\n    a few are parameterized with TLS support enabled/disabled\n  * most of scenarios in hms_catalog-test.cc\n    are now parameterized with TLS support enabled/disabled\n  * most of scenarios in master_hms-itest.cc\n    are now parameterized with TLS support enabled/disabled\n\nChange-Id: I9658323ed9aebdfdf8e6847c9c3129f5c8517c65\nReviewed-on: http://gerrit.cloudera.org:8080/24383\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Attila Bukor \u003cabukor@apache.org\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "fc27ecbedf0481c7ed77b0c2cd295b9f0af8efea",
      "tree": "79e95b608f77d028afbf0d04210d40c1b9746b9a",
      "parents": [
        "60ded710ed6f5f4abff063ca63516e05079ddaac"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri May 29 21:34:02 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Jun 02 01:41:57 2026 +0000"
      },
      "message": "KUDU-3781: upgrade Thrift from 0.21.0 to 0.23.0 with recent patches\n\nThere were several CVEs with the Apache Thrift project published\nrecently and addressed in version 0.23.0 [1]:\n  * CVE-2026-43869\n  * CVE-2026-43868\n  * CVE-2026-43870\n  * CVE-2026-41603\n  * CVE-2026-41602\n  * CVE-2026-41604\n  * CVE-2026-41605\n  * CVE-2026-41606\n  * CVE-2026-41607\n  * CVE-2025-48431\n  * CVE-2026-41636\n\nEven none of the CVEs above seem to affect the Thrift C++ client\nthat Kudu uses for communication with HMS, it\u0027s a good idea to update\nthe library and keep automated security scanners happy.\n\nI also picked up recent updates on the C++ library on top of 0.23.0\nrelease from the Apache Thrift git repo that look related to security\nfixes:\n  * https://github.com/apache/thrift/commit/e96bc4015\n  * https://github.com/apache/thrift/commit/c1457c69f\n  * https://github.com/apache/thrift/commit/5748bbb6b\n  * https://github.com/apache/thrift/commit/e3c8c534c\n\nc1457c69f is the only update that might be attributed to the JIRA item\nin the summary since it addresses an issue in TSSLSocket related to\nthe wildcard name matching in TLS certificates.\n\n[1] https://app.opencve.io/cve/?product\u003dthrift\u0026vendor\u003dapache\n\nChange-Id: Idc1e7e10f92f4a078878a6861c3448aea45453a9\nReviewed-on: http://gerrit.cloudera.org:8080/24384\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\n"
    },
    {
      "commit": "60ded710ed6f5f4abff063ca63516e05079ddaac",
      "tree": "eb8010e7abbaeb8c64cd519aae4e589fb00e429a",
      "parents": [
        "94b246ae31c71ed6a660d966b984e84c8fc3d314"
      ],
      "author": {
        "name": "Zoltan Chovan",
        "email": "zchovan@cloudera.com",
        "time": "Thu May 28 13:03:55 2026 +0300"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri May 29 17:13:00 2026 +0000"
      },
      "message": "KUDU-3781: Add TLS support to MiniHms\n\nThis change adds the functionality of generating a PKCS12 keystore for\nthe MiniHms when TLS is enabled and wires the generated keystore into\nthe HMS configuration.\n\nAdded a very simple test for sanity checking, to confirm that the\nHMS configs are properly generated, this should be replaced by a more\ndetailed test, when the HMS client TLS support is added.\n\nAdditionally, ExternalMiniClusterOptions and ExternalMiniCluster were\nextended to support the added functionality.\n\nChange-Id: I8fca647fd900fafc6d737c93a4af4565631839b7\nReviewed-on: http://gerrit.cloudera.org:8080/24374\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "94b246ae31c71ed6a660d966b984e84c8fc3d314",
      "tree": "9cfd2349a0ebefbda2cf992e0716832794acfc7c",
      "parents": [
        "43e84f1101c143e0ada17c442e805a8a71c2c6d8"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Mon May 18 14:22:58 2026 +0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu May 28 11:09:14 2026 +0000"
      },
      "message": "KUDU-3778 [fs] speed up LBM startup by replaying small metadata files from memory\n\nOn startup, LogBlockContainerNativeMeta::ProcessRecords replays a\ncontainer\u0027s .metadata file through ReadablePBContainerFile::ReadNextPB,\nwhich issues two pread() syscalls per record. The total number of read\nsyscalls during container loading is therefore proportional to the\nnumber of records across all containers, and on a tserver with many\ncontainers each holding many records this turns the loading phase into\na long stream of tiny sequential reads against the kernel.\n\nAdd an opt-in fast path: when the payload fits in a configurable\nbudget, read the file once into a faststring and let\nReadablePBContainerFile parse it through an in-memory RandomAccessFile\nshim. This collapses the per-record preadv pair into a single bulk\nread per container, so the number of read syscalls during startup\ndrops from O(total records) to O(number of containers). Any IO error\nor oversized file falls back to the existing streaming reader, so\nthe optimization can only help and never break startup.\n\nThe fast path is gated by\n--log_container_metadata_inmem_replay_threshold_bytes (default 64 MiB,\nruntime/advanced/experimental); set it to 0 to disable.\n\nEncryption is intentionally left on the streaming path.\n\nBenchmarks (release build, KUDU_ALLOW_SLOW_TESTS\u003d1,\n`log_block_manager-test --gtest_filter\u003d\u0027*InMemoryReplayStartupBenchmark*\u0027`,\n5 reopens per pass, native-meta containers, encryption disabled):\n\n\"streaming\" \u003d --log_container_metadata_inmem_replay_threshold_bytes\u003d0,\n\"in-memory\" \u003d --log_container_metadata_inmem_replay_threshold_bytes\u003d64MiB.\n\n  Workload scale (batches x blocks/batch, dirs, 90% deletion):\n    200 x 500,    4 dirs ( 10k live):  154 ms -\u003e 66 ms  (2.33x, -57%)\n    500 x 1000,  8 dirs ( 50k live):  811 ms -\u003e 394 ms (2.06x, -51%)\n    1000 x 1000, 8 dirs (101k live): 1643 ms -\u003e 817 ms (2.01x, -50%)\n\n  Deletion-ratio sweep (500k writes, 500x1000 / 8 dirs):\n    deleted\u003d0%  (500k records, 500k live): 597 ms -\u003e 379 ms (1.58x)\n    deleted\u003d50% (750k records, 250k live): 734 ms -\u003e 416 ms (1.76x)\n    deleted\u003d90% (950k records,  50k live): 806 ms -\u003e 388 ms (2.08x)\n    deleted\u003d99% (995k records,   5k live): 836 ms -\u003e 386 ms (2.17x)\n  The streaming-path time scales with total records (creates+deletes); the\n  in-memory-path time is nearly flat across deletion ratios (379-416 ms).\n  That is exactly the \"O(records) preadv syscalls -\u003e O(containers) bulk\n  reads\" collapse this patch targets.\n\n  Container-density sweep (500x1000 / 8 dirs / 90% deletion, all 50k live;\n  numbers are steady-state, the first reopen of a fresh on-disk layout is\n  excluded as it is dominated by cold page-cache):\n    log_container_max_blocks\u003d-1:    788 ms -\u003e 384 ms (2.05x)\n    log_container_max_blocks\u003d10000:  38 ms -\u003e  23 ms (1.65x)\n    log_container_max_blocks\u003d1000:   28 ms -\u003e  22 ms (1.27x)\n  The optimization\u0027s absolute and relative gain both grow with the number\n  of records per container, as expected: each container\u0027s per-record\n  preadv() pair is replaced by a single bulk read at open time.\n\nReal-world perf trace:\n\nBefore (streaming, two preadv() per record):\n  7 metadata worker threads each issued ~4.2 M preadv() calls,\n  totaling ~30.8 M preadv() syscalls in ~35 s of per-thread kernel\n  time (~294 s summed across threads). preadv avg syscall duration: 8 us.\n  perf trace itself reported \"LOST \u003cn\u003e events!\" thousands of times\n  during this window, i.e. the syscall rate overran the perf ring\n  buffer.\n\nAfter (in-memory replay,\n --log_container_metadata_inmem_replay_threshold_bytes\u003d64MiB):\n  the same 7 worker threads issued 17-109 preadv() calls each,\n  totaling 358 preadv() syscalls (the file-management thread did an\n  additional ~7.7K preadv() on non-metadata files in both runs and is\n  unchanged). preadv avg syscall duration rose to 60-130 ms because\n  each call now slurps a whole ~8 MiB metadata file in one go,\n  but per-thread preadv() wall time dropped from ~35 s to ~5-6.5 s.\n  perf trace reported zero event loss.\n\nChange-Id: Iacbe12977ae945e7fa2f97a41aef250b03495cd4\nReviewed-on: http://gerrit.cloudera.org:8080/24326\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "43e84f1101c143e0ada17c442e805a8a71c2c6d8",
      "tree": "32a3c2ad910ce86fc7c09bc00f9019868a611af4",
      "parents": [
        "1a048343ec7587d70c29313e25a4ccba872f7108"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed May 27 22:50:44 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu May 28 10:14:28 2026 +0000"
      },
      "message": "KUDU-3781: build 3rd-party Thrift with OpenSSL support\n\nIn the context of the JIRA ticket it\u0027s necessary to use TLS/SSL-related\nentities in the Thrift C++ library, and those are available only\nwhen configuring the library to be built with OpenSSL support.\nThis patch explicitly enables OpenSSL support for the Thrift\nlibrary by adding -DWITH_OPENSSL\u003dON for cmake invocation.\n\nAlso, add an extra flag to be explicit that the compiler supports\nat least C++17 and remove obsolete -DWITH_PLUGIN macro.\n\nP.S. I\u0027m planning to update the library up to 0.23.0 version\n     in a follow-up changelist: there were multiple security\n     vulnerabilities published recently\n\nChange-Id: If8bb4ad61b57546c3c0c9ced0f1b9b3aabac183c\nReviewed-on: http://gerrit.cloudera.org:8080/24373\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": "1a048343ec7587d70c29313e25a4ccba872f7108",
      "tree": "394715bcee2356f829c68f7c79376c154a1bf8c2",
      "parents": [
        "6ab30abe247627112ff04a64b5a6481277dc607a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 19 21:59:14 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 26 17:19:28 2026 +0000"
      },
      "message": "KUDU-1865 reduce cross-thread allocations in RPC (part 2)\n\nWith this update, the OutboundCall::call_response_ member field\nof the CallResponse type is no longer allocated on the heap.  Instead,\nit\u0027s allocated on the stack and the move semantics is used to pass\nthe object around.\n\nI ran the same test scenario as in the \u0027part 1\u0027 to trace the asymmetry\nin tcmalloc\u0027s cross-thread allocations/deallocations and confirmed\nthat the entries related to CallResponse were gone.\n\nI also ran the test scenario to account for the total number of updates\nin tcmalloc\u0027s central free lists.  This patch results in ~1.07x times\nreduction in the total number of updates in the central free lists with\nthe default setting of TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES:\n\n  before: 367\n  after:  341\n\nThe requests-per-second performance hasn\u0027t changed per reports from\nthe RpcBench.BenchmarkCalls scenario.\n\nChange-Id: Ia5b8771f4092d5e566e91b7c7fdbf560c5fd3851\nReviewed-on: http://gerrit.cloudera.org:8080/24329\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "6ab30abe247627112ff04a64b5a6481277dc607a",
      "tree": "1112fedf24badfc4e7b37fea152100268da39371",
      "parents": [
        "66827b15b158c37363c37baa160f29a0ca1f1e63"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 12 23:33:10 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed May 20 16:21:16 2026 +0000"
      },
      "message": "KUDU-1865 reduce cross-thread allocations in RPC (part 1)\n\nThis patch was originally posted by Todd [1].  I\u0027m re-posting it\nre-based and updated -- that\u0027s the best path forward; otherwise,\nthere are too many conflicts if trying to re-base and revv the\noriginal patch in gerrit [1].\n\nTo verify that the number of cross-thread allocations is reduced with\nthis patch, I ran the target rpc-bench test scenario under customized\nenvironment to trace tcmalloc allocations/deallocations, and then used\nthe Python script attached to KUDU-1865 ticket (updated a bit) to track\ncross-thread allocations/deallocations in tcmalloc:\n\n  env TCMALLOC_TRACE\u003d1 \\\n    TCMALLOC_STACKTRACE_METHOD\u003dgeneric_fp \\\n  ./bin/rpc-bench \\\n    --server_reactors\u003d1 \\\n    --client_threads\u003d1 \\\n    --run_seconds\u003d1 \\\n    --gtest_filter\u003d\u0027*BenchmarkCalls\u0027\n\nThe results confirm that all the malloc/free asymmetry related to\nReactorTask objects is now gone.  I\u0027m planning to take care of\nthe rest of allocation/de-allocation asymmetry in hot RPC paths\nin follow-up patches.\n\nI ran the same test scenario with different parameters under a custom\nenvironment to evaluate the total number of calls that lead to acquiring\nlocks guarding the per-size-classes\u0027 central free lists in tcmalloc.\nI did so with the default and customized setting for the\nTCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES environment variable.  The\ncustomization allowed to induce more activity on tcmalloc\u0027s central\nfree lists since the sizes of the free lists were shorter than with the\ndefault setting.\n\nThe results of running rpc-bench under the perf utility on 8 CPU-core\nmachine are below.  There is an improvement:\n  * ~1.37x times reduction in the total number of calls to the free lists\n    with the default setting of TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES\n  * ~1.06x times reduction in the total number of calls to the free lists\n    with the custom setting of TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES\n\nAs for requests-per-second performance, the improvement is minuscule.\nThe target test scenario doesn\u0027t create enough memory pressure and\nconcurrency to get to the point where too much of lock contention in\ntcmalloc significantly affects RPC performance.\n\n  export TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES\u003d1048576\n\n  perf record -g -e \u0027syscalls:sys_enter_futex\u0027 \\\n  ./bin/rpc-bench \\\n    --gtest_filter\u003d\u0027*BenchmarkCalls\u0027 \\\n    --server_reactors\u003d2 \\\n    --client_threads\u003d4 \\\n    --worker_threads\u003d2 \\\n    --run_seconds\u003d60\n\n  perf script | \\\n    grep -E \u0027tcmalloc::ThreadCache::(FetchFrom|ReleaseTo)CentralCache\u0027 | \\\n    wc -l\n\nTCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES unset (using default tcmalloc setting):\n  before:       499     488     491\n  after:        373     328     376\n\nTCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES\u003d1048576\n  before:       13794   12727   12215\n  after:        12695   12137   11857\n\n[1] https://gerrit.cloudera.org/#/c/5905/\n\nChange-Id: I86a2acbd1d8cb724728034c4e91907c99cbfe32e\nReviewed-on: http://gerrit.cloudera.org:8080/24305\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "66827b15b158c37363c37baa160f29a0ca1f1e63",
      "tree": "c2a382c7ff31be0a85bdd5e47ce196199c0b321d",
      "parents": [
        "c037ba5884c705d2e1bc327c8109719289abe50b"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Thu Apr 23 16:34:40 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Sun May 17 05:28:59 2026 +0000"
      },
      "message": "KUDU-3762 - Fix catchup deadlock on LMP mismatch\n\nA Raft leader could enter an infinite LMP mismatch loop if it erroneously\nmarked a peer as unrecoverable (wal_catchup_possible \u003d false). In this\nstate, RequestForPeer() skips log-position negotiation and sends status\nupdates at the log tip. If the peer is behind, it rejects the request,\ntriggering an immediate retry loop that consumes CPU and prevents catchup.\n\nThis patch introduces is_joining_existing_cluster_ in CatalogManager to\nsilence heartbeats and background tasks during the join phase. Explicitly\nshuts down the system catalog tablet before initiating AddMaster() to\nprevent the leader from seeing a stale Index 0 state.\n\nTesting:\n- Added a test case to reproduce the issue.\n- Verified the fix resolves the loop and allows the new master to become\n  a voter.\n\nChange-Id: I00f4f840c21cc037a2aa6c023af168352fef0761\nReviewed-on: http://gerrit.cloudera.org:8080/24287\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "c037ba5884c705d2e1bc327c8109719289abe50b",
      "tree": "5d83d50bc363f1ae649cc6e6287d678f7528b1bf",
      "parents": [
        "8882db7bd58d6fbdfd06a85b979a44fe4bce14d9"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri May 15 11:19:23 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri May 15 23:55:35 2026 +0000"
      },
      "message": "KUDU-3216 fix flakiness in LeadershipChangeOnTskGeneration (take 2)\n\nThe DeleteTable RPC needs the same treatment as CreateTable\nwhen the system catalog often changes its leadership.  Otherwise, the\ntest scenario might fail with the following error:\n\n  src/kudu/integration-tests/catalog_manager_tsk-itest.cc:164: Failure\n  Failed\n  Bad status: Service unavailable: an error occurred while updating the sys-catalog: leader is not yet ready\n\nThis is a follow-up to [1] (git changelist [2]).\n\n[1] http://gerrit.cloudera.org:8080/21397\n[2] https://github.com/apache/kudu/commit/ca56ee56e\n\nChange-Id: Ia00b11e64fe8099fc0f51b7996be2d5d5c4fbb44\nReviewed-on: http://gerrit.cloudera.org:8080/24312\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "8882db7bd58d6fbdfd06a85b979a44fe4bce14d9",
      "tree": "73a3c748b51d15d4cb22b3f49ce2aa731a9f07e7",
      "parents": [
        "3e42c0e7dc2199f80eabd0413e53de79e3940f1b"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed May 06 17:14:40 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu May 14 11:46:29 2026 +0000"
      },
      "message": "KUDU-3693: Add bearer token auth for Prometheus\n\nPrometheus does not support SPNEGO, so scraping a secured Kudu cluster\nrequires an alternative authentication mechanism. Add\n--webserver_prometheus_token_cmd: when set, designated Prometheus\nendpoints (/metrics_prometheus, /prometheus-sd) accept an\n\"Authorization: Bearer \u003ctoken\u003e\" header as an alternative to SPNEGO.\nThis allows Prometheus scrapers to authenticate on an otherwise\nSPNEGO-secured cluster. Clients that do support SPNEGO (e.g.\ncurl --negotiate, Knox Gateway) can continue to use it on these\nendpoints as before.\n\nAdds unit tests in webserver-test.cc and integration tests in\nprometheus_auth-itest.cc covering correct, wrong, and missing\ntoken scenarios for both scrape and SD endpoints.\n\nExample Prometheus configs for using the Bearer token:\n\nStatic scrape config:\n    global:\n    scrape_configs:\n    - job_name: kudu\n        metrics_path: /metrics_prometheus\n        scrape_interval: 2s\n        authorization:\n        type: Bearer\n        credentials: \u003cwebserver_prometheus_token\u003e\n        static_configs:\n        - targets:\n            - 127.0.0.1:8050\n            - 127.0.0.1:8051\n            - 127.0.0.1:8052\n\nSD scrape config:\n    global:\n    scrape_configs:\n    - job_name: kudu\n        metrics_path: /metrics_prometheus\n        scrape_interval: 2s\n        authorization:\n        type: Bearer\n        credentials: \u003cwebserver_prometheus_token\u003e\n        http_sd_configs:\n        - url: http://127.0.0.1:8050/prometheus-sd\n            refresh_interval: 2s\n            authorization:\n            type: Bearer\n            credentials: \u003cwebserver_prometheus_token\u003e\n        - url: http://127.0.0.1:8051/prometheus-sd\n            refresh_interval: 2s\n            authorization:\n            type: Bearer\n            credentials: \u003cwebserver_prometheus_token\u003e\n        - url: http://127.0.0.1:8052/prometheus-sd\n            refresh_interval: 2s\n            authorization:\n            type: Bearer\n            credentials: \u003cwebserver_prometheus_token\u003e\n\nChange-Id: If8169196a2c49d64865095f3bc6da1d3bfbcecfb\nReviewed-on: http://gerrit.cloudera.org:8080/24278\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "3e42c0e7dc2199f80eabd0413e53de79e3940f1b",
      "tree": "6e325d8586f29ebe8f28b42f82385527c866d14f",
      "parents": [
        "16079e32d104c6b8ae4872c61de991194b899a56"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon May 04 17:01:25 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue May 12 13:49:27 2026 +0000"
      },
      "message": "KUDU-3690: Add filtering to /metrics_prometheus\n\nThe /metrics_prometheus endpoint now accepts the same query\nparameters as the /metrics JSON endpoint for filtering:\n\n  ?level\u003d      severity threshold (debug/info/warn)\n  ?types\u003d      entity type (server/tablet/table)\n  ?ids\u003d        entity ID substring\n  ?metrics\u003d    metric name substring\n  ?attributes\u003d key/value pairs for entity attribute matching\n\nMalformed ?attributes\u003d (odd number of values) returns HTTP 400,\nmirroring the existing JSON endpoint behaviour.\n\nChange-Id: I5c0b23ae5c184bf9e33e453736cef5e7ce8ee2e1\nReviewed-on: http://gerrit.cloudera.org:8080/24269\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "16079e32d104c6b8ae4872c61de991194b899a56",
      "tree": "34575ef1bd3db20e55d61112dc8694ecb8562ff8",
      "parents": [
        "2a6d793b9b2aee77c2eb77e92161ba5844a15aec"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Mon May 11 19:18:18 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 12 01:47:13 2026 +0000"
      },
      "message": "[tools] fix `table add_column` failing to add DECIMAL/VARCHAR columns\n\n`kudu table add_column` does not correctly support DECIMAL\nor VARCHAR columns.\n\nThe CLI never forwards precision/scale/length attributes to\nKuduColumnSpec, even though the `table create` JSON path\nalready handles type_attributes correctly in\nParseTableSchema().\n\nThe following invocations currently fail:\n\n    kudu table add_column \u003cm\u003e \u003ct\u003e c DECIMAL\n    kudu table add_column \u003cm\u003e \u003ct\u003e c \"DECIMAL(10,2)\"\n    kudu table add_column \u003cm\u003e \u003ct\u003e c VARCHAR\n\nPropagate precision/scale/length through the AddColumn()\ncode path via three new optional flags:\n--column_precision, --column_scale, and --column_length.\n\nMissing required attributes are now rejected client-side\nwith a clear error message pointing to the required flag,\ninstead of the previous server-side \"no precision provided\"\nerror.\n\nDrive-by: remove \"TIMESTAMP\" from the kDataTypeArg help\ntext. Kudu uses UNIXTIME_MICROS instead, and\nStringToDataType() does not recognize TIMESTAMP.\n\nAdds regression tests covering both DECIMAL and VARCHAR\nsuccess paths, along with missing-attribute validation.\n\nChange-Id: I4cf3cc23d1bc972c48bbc4a579503b13aad47655\nReviewed-on: http://gerrit.cloudera.org:8080/24290\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "2a6d793b9b2aee77c2eb77e92161ba5844a15aec",
      "tree": "a868a65ef406f9ce8d754b21c8973eb0e35abc72",
      "parents": [
        "1aa3a7e0f7ff8bca65864112057d9e0e7b6baaf0"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Thu May 07 21:14:32 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon May 11 19:27:22 2026 +0000"
      },
      "message": "[tools] perf loadgen: support configurable column counts for auto-created table\n\n`kudu perf loadgen` always creates a fixed 3-column table\n(`key INT64 PK`, `int_val INT32`, `string_val STRING`) when --table_name\nis not provided. Benchmarking wide-row workloads currently requires\npre-creating a table out-of-band and pointing loadgen at it via\n--table_name, which is inconvenient for parameter sweeps over column\ncount.\n\nThis patch adds two flags:\n\n  --table_num_int_columns    (default 1)\n  --table_num_string_columns (default 1)\n\nWhen both default to 1 the auto-created schema is byte-for-byte\nidentical to before (column names `int_val`, `string_val` are\npreserved). Setting either to N \u003e\u003d 2 produces N suffix-numbered\ncolumns of that type; 0 omits that column type entirely.\n\nThis patch is intentionally limited to INT32 / STRING column counts.\nDECIMAL precision, VARCHAR length, and encoding are out of scope;\nusers needing those should pre-create a table and pass --table_name.\nThey are noted as possible follow-ups.\n\nChange-Id: I5a1581a7d6056fcb1d7435f29d4670bff68fb147\nReviewed-on: http://gerrit.cloudera.org:8080/24289\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "1aa3a7e0f7ff8bca65864112057d9e0e7b6baaf0",
      "tree": "a3f8101f4eb9c9d5e5b5078aadab73527245954c",
      "parents": [
        "5e476d45c5549828d7d8c3341a0e9459a8a47b97"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Tue Apr 14 18:45:47 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu May 07 08:37:50 2026 +0000"
      },
      "message": "[auto_rebalancer] address TODO in ExecuteMoves()\n\nRemove moves that fail to be scheduled from replica_moves\ninstead of early-returning on the first error. The old code\nused RETURN_NOT_OK inside a const-ref loop, leaving unscheduled\nmoves in the vector and causing CheckReplicaMovesCompleted to\nwait on them indefinitely.\n\nExecuteMoves now takes replica_moves by pointer and handles each\nfailure per-move: log a warning and erase the move before\nreturning, so only successfully submitted moves remain.\n\nChange-Id: I6a356c52f940827075a564ab3d03e082f02a1d61\nReviewed-on: http://gerrit.cloudera.org:8080/24191\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "5e476d45c5549828d7d8c3341a0e9459a8a47b97",
      "tree": "dec359d7d897e90a4db9bf5617a4a878235681c7",
      "parents": [
        "54bc0b0cb7454006e6380e476f063224cfe77156"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Sat Aug 24 12:39:03 2024 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed May 06 09:15:12 2026 +0000"
      },
      "message": "KUDU-3538: Add Prometheus HTTP service discovery\n\nPrometheus HTTP service discovery enables automatic discovery of all\nKudu Master and TServer instances. This makes setting up monitoring for\nKudu through Prometheus much easier.\n\nThis patch adds a new /prometheus-sd endpoint on Kudu Master servers,\naccording to the Prometheus HTTP SD format [1], [2]. Leader master\nresponds with HTTP-SD JSON describing all Masters and TServers.\nFollower masters return an empty JSON array.\n\nFor example, with 3 Masters and 3 TServers running locally, the leader\u0027s\n/prometheus-sd endpoint returns:\n\n[\n  {\n    \"targets\": [\n      \"127.0.0.1:8765\"\n    ],\n    \"labels\": {\n      \"group\": \"masters\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  },\n  {\n    \"targets\": [\n      \"127.0.0.1:8767\"\n    ],\n    \"labels\": {\n      \"group\": \"masters\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  },\n  {\n    \"targets\": [\n      \"127.0.0.1:8769\"\n    ],\n    \"labels\": {\n      \"group\": \"masters\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  },\n  {\n    \"targets\": [\n      \"127.0.0.1:9875\"\n    ],\n    \"labels\": {\n      \"group\": \"tservers\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  },\n  {\n    \"targets\": [\n      \"127.0.0.1:9873\"\n    ],\n    \"labels\": {\n      \"group\": \"tservers\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  },\n  {\n    \"targets\": [\n      \"127.0.0.1:9871\"\n    ],\n    \"labels\": {\n      \"group\": \"tservers\",\n      \"cluster_id\": \"8d4a5e7e8ac14324aad96630f54f661f\",\n      \"location\": \"n/a\",\n      \"__scheme__\": \"http\"\n    }\n  }\n]\n\nI\u0027ve added basic unit tests to verify the structure of the JSON.\nMoreover, integration tests dedicated to the SD feature have been added.\n\n[1] https://prometheus.io/docs/prometheus/latest/http_sd/#writing-http-service-discovery\n[2] https://training.promlabs.com/training/relabeling/introduction-to-relabeling/hidden-labels-and-metadata/\n\nChange-Id: I931aa72a7567c0dde43d7b7ed53a2dd0fa8bc1fe\nReviewed-on: http://gerrit.cloudera.org:8080/21723\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": "54bc0b0cb7454006e6380e476f063224cfe77156",
      "tree": "c6112c4e7f68cfd43d9f6340198acfe6da9c2475",
      "parents": [
        "eebdd0d33b6174df6617b5cef07f32085ac8c475"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Thu Jan 29 20:43:12 2026 -0800"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Tue May 05 18:45:12 2026 +0000"
      },
      "message": "[build] Include OS version in kudu-binary artifact names\n\nUpdate the naming convention for published Kudu mini-cluster binary\nartifacts. Including the specific OS distribution and major version\nprevents different build environments (e.g., RHEL 8 vs. RHEL 9) from\noverwriting each other in the repository.\n\nUpdate the logic in KuduBinaryJarExtractor.java and the tests\naccordingly. Took the liberty of updating the Kudu version in\nthe test resources of kudu-test-utils.\n\nBefore:\nkudu-binary-1.19.0-SNAPSHOT-osx-x86_64.jar\nkudu-binary-1.19.0-SNAPSHOT-linux-x86_64.jar\n\nAfter:\nkudu-binary-1.19.0-SNAPSHOT-osx15-x86_64.jar\nkudu-binary-1.19.0-SNAPSHOT-rhel9-x86_64.jar\n\nChange-Id: I7f17971704dfec32a0256383bbc3029743b4674f\nReviewed-on: http://gerrit.cloudera.org:8080/23921\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "eebdd0d33b6174df6617b5cef07f32085ac8c475",
      "tree": "4df8f7a4ab6d4becaf4c2fbeb4974e56b756230c",
      "parents": [
        "24c979d5efddcf6d2c5f428c2f9605bbacc9ff4c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon May 04 18:19:45 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 05 17:54:07 2026 +0000"
      },
      "message": "KUDU-3776 fix sporadic gperftools build failure\n\nI had a build machine where KUDU-3776 was 100% reproducible starting with\na particular state of the 3rd-party workspace.  Without spending time on\nthe detailed RCA, I put together a fix that worked 100% for me at that\nmachine, while the build would fail 100% of the times if starting with\na particular state of the workspace without this patch.\n\nOne of the regular suspects is the incorrect tracking of transitive\ndependencies, but I didn\u0027t see much sense in getting to the bottom of the\nissue, given the new way of building gperftools is more consistent with\nthe build recipe provided in the top-level INSTALL file.\n\nChange-Id: Ie8c26bcc3c2625741cd05b3cc459159434e9d60b\nReviewed-on: http://gerrit.cloudera.org:8080/24272\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "24c979d5efddcf6d2c5f428c2f9605bbacc9ff4c",
      "tree": "33395207cab817f91754b789b288248a8fdcbd9f",
      "parents": [
        "0ba7f54e15c9f673bf3e350f30b8d5f1a4037b79"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 08 17:24:06 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue May 05 17:52:54 2026 +0000"
      },
      "message": "[rpc] in-bulk memory recycling for Connection::ProcessOutboundTransfers()\n\nWhile troubleshooting RPC performance issues in a highly concurrent\nworkload, I noticed a pattern of lock contention in tcmalloc.  Among\nthe captured stack traces, multiple reactor threads in a single pstack\nsnapshot often had stack traces similar to the one below.\n\nFor more context, the majority of RPCs had relatively large side-cars\nand a single RPC connection often had a multitude of outgoing in-flight\ntransfers.  The socket buffer size was around 128MB at the OS level.\n\nIt seems the issue manifests itself when many concurrent allocations\nand deallocations go through the tcmalloc\u0027s central free list, while\nthe latter is guarded by a lock.  There might be multiple reasons why\nit happens: see [1].  Regardless of the underlying reasons, a reactor\nthread is more efficient if performing as much I/O as possible at once\nwithout the risk of waiting on a synchronization primitive and then\nbeing de-scheduled off the CPU while there is still data ready to be\nwritten into a socket whose buffer isn\u0027t full yet.\n\nThis patch is an attempt to reduce the described lock contention by\nperforming pending socket I/O for all the outgoing transfers first, and\ndeallocating the memory in-bulk after completing all the pending write\nactivity.  In addition, it straightens memory ownership rules for the\nOutboundTransfer::callbacks_ field and modernizes signatures of related\nmethods to use std::unique_ptr instead of raw pointers.\n\n  #0  sys_futex (... \u003ctcmalloc::Static::pageheap_lock_\u003e)\n  #1  base::internal::SpinLockDelay (...)\n  #2  base::internal::SpinLockDelay (...)\n  #3  SpinLock::SlowLock() ()\n  #4  tcmalloc::CentralFreeList::ReleaseToSpans(...) ()\n  #5  tcmalloc::CentralFreeList::ReleaseListToSpans(...) ()\n  #6  tcmalloc::CentralFreeList::InsertRange(...) ()\n  #7  tcmalloc::ThreadCache::ReleaseToCentralCache(...) ()\n  #8  tcmalloc::ThreadCache::ListTooLong(...) ()\n  #9  google::protobuf::internal::ArenaImpl::~ArenaImpl() ()\n  #10 google::protobuf::Arena::~Arena ()\n  #11 kudu::rpc::InboundCall::~InboundCall (...)\n  #12 std::default_delete\u003ckudu::rpc::InboundCall\u003e::operator()\n  #13 std::unique_ptr\u003ckudu::rpc::InboundCall, ...\u003e::~unique_ptr (...)\n  #14 kudu::rpc::ResponseTransferCallbacks::~ResponseTransferCallbacks\n  #15 kudu::rpc::ResponseTransferCallbacks::~ResponseTransferCallbacks (...)\n  #16 kudu::rpc::ResponseTransferCallbacks::NotifyTransferFinished (...)\n  #17 kudu::rpc::OutboundTransfer::SendBuffer (...)\n  #18 kudu::rpc::Connection::ProcessOutboundTransfers (...)\n  #19 kudu::rpc::Connection::QueueOutbound (...)\n  #20 kudu::rpc::QueueTransferTask::Run (...)\n  #21 kudu::rpc::ReactorThread::AsyncHandler (...)\n  #22 ev_invoke_pending ()\n  #23 kudu::rpc::ReactorThread::InvokePendingCb (...)\n  #24 ev_run ()\n  #25 ev::loop_ref::run (...)\n  #26 kudu::rpc::ReactorThread::RunThread (...)\n\nI ran the newly added test with the paramters as below on 8 CPU core\nmachine under perf before and after this patch, 50 iterations each.\nThe idea was to oversubscribe on CPU resources and see how it runs.\n\n  mt-rpc-test --gtest_filter\u003d*Sidecar* \\\n    --mt_rpc_clients_num\u003d12 \\\n    --mt_rpc_iterations_num\u003d32768 \\\n    --mt_rpc_server_reactors_num\u003d4\u0027\n\nbefore:\n  155,551.50 msec task-clock:HG       #    7.020 CPUs utilized  ( +-  0.28% )\n   2,297,600      context-switches:HG #   14.771 K/sec          ( +-  1.44% )\n     243,684      cpu-migrations:HG   #    1.567 K/sec          ( +-  4.37% )\n     118,185      page-faults:HG      #  759.781 /sec           ( +-  0.16% )\n\n      22.159 +- 0.280 seconds time elapsed  ( +-  1.26% )\n\nafter:\n  155,350.60 msec task-clock:HG       #    7.197 CPUs utilized  ( +-  0.21% )\n   2,296,021      context-switches:HG #   14.780 K/sec          ( +-  1.43% )\n     226,160      cpu-migrations:HG   #    1.456 K/sec          ( +-  3.28% )\n     118,243      page-faults:HG      #  761.136 /sec           ( +-  0.15% )\n\n      21.586 +- 0.186 seconds time elapsed  ( +-  0.86% )\n\nThe results of the RPC benchmark scenario run before and after\nthis patch shown no performance degradation:\n\n  rpc-bench --gtest_filter\u003d\u0027*BenchmarkCalls\u0027\n\n[1] https://gperftools.github.io/gperftools/tcmalloc.html\n\nChange-Id: Idf7ab105a851ef4d583efc2d1b33d57607810df0\nReviewed-on: http://gerrit.cloudera.org:8080/24176\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\n"
    },
    {
      "commit": "0ba7f54e15c9f673bf3e350f30b8d5f1a4037b79",
      "tree": "1bb3dc2a683d5bb65bb737a5fe2326d62890233c",
      "parents": [
        "aa7cc0aa9c559b87f264235eaadd03ec492277e4"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Sun Apr 26 14:46:56 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri May 01 19:33:01 2026 +0000"
      },
      "message": "KUDU-3769 Upgrade Ranger from 2.1 to 2.6\n\nThis patch upgrades the Apache Ranger and Ranger KMS dependencies from\n2.1.0 to 2.6.0. To support this upgrade, several adaptations were\nrequired in the Kudu MiniRanger test framework:\n\nRanger Admin \u0026 KMS Classpath:\n- Updated the Ranger KMS classpath to include \u0027ews/lib/*\u0027 and\n  \u0027ews/webapp/WEB-INF/lib/*\u0027. This is required to find the\n  EmbeddedServer class and JAXB dependencies (required for Java 11+)\n  which were moved in the Ranger 2.6.0 directory restructuring.\n\nUser Management:\n- Ranger 2.6.0 now enforces that users must exist in the Ranger\n  database before a policy can be created for them. Updated\n  MiniRanger::AddPolicy to automatically create unique users\n  prior to policy submission.\n\nTest Assertions:\n- Ranger 2.6.0 automatically generates a default \"EXPIRES_ON\" tag\n  policy upon service creation. Updated policy count assertions to\n  use the \u0027?serviceName\u003dkudu\u0027 filter to ensure tests only count\n  explicitly created Kudu policies.\n\nConfigurations:\n- Added \u0027ranger.spnego.kerberos.name.rules\u0027 to support proper\n  principal mapping during Kerberos authentication needed for fetching\n  the policies.\n- Added the mandatory configurations - JPA/JDBC connection properties\n  (timeouts, validation query, and PostgreSQL dialect) to\n  ranger-admin-default-site.xml.\n\nLogging Migration (Log4j to Logback):\n- Ranger 2.6 migrated its internal logging engine from Log4j 1.x to Logback.\n  Consequently, the legacy \u0027log4j.properties\u0027 template was ignored, causing\n  the Ranger Admin server to fall back to default DEBUG logging on stdout,\n  which spammed the test console.\n- Replaced GetRangerLog4jProperties() with GetRangerLogbackXml() to\n  generate a valid Logback configuration.\n\nChange-Id: I0923669abef6512ba9a53b985a3570af9fcc1f19\nReviewed-on: http://gerrit.cloudera.org:8080/24242\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "aa7cc0aa9c559b87f264235eaadd03ec492277e4",
      "tree": "a51b4fe81de1e01d96a598f2cd525f6a94dfb6ad",
      "parents": [
        "8537ed5bb5e0e6ac1e481ff961e6b9d08cce7671"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Apr 23 18:03:26 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Apr 30 21:19:30 2026 +0000"
      },
      "message": "[rpc] use min priority queue for service queue container\n\nA lot of contention in libtcmalloc might result in longer times spent\nby reactor and RPC worker threads waiting on the lock in RPC service\nqueue when invoking LifoServiceQueue::{Put,BlockingGet}().  Per analysis\nof captured stack traces, the culprit seemed to be a thread that would\nacquire LifoServiceQueue::lock_ while executing LifoServiceQueue::Put()\nto add an element into the queue.  The latter lead to memory\n(de)allocations via tcmalloc that went through the central free list\nperhaps due to exhaustion of the thread cache\u0027s free list.  Meanwhile,\nthe central free list\u0027s lock had already been acquired by some other\nthread performing memory (de)allocation.\n\nIt\u0027s prudent to switch to a container which doesn\u0027t do any dynamic\nmemory allocations while adding and removing elements to/from the\nservice queue.  Using a pre-allocated std::vector instance to maintain\na min priority queue turns to be a good option.  Instead of using direct\nAPI of the std::priority_queue container adaptor, std::push_stack() and\nstd::pop_stack() are used on top of the underlying array/vector to\nhandle an edge case to evict an element while replacing it with the\nnewly arrived one.\n\nVarious scenarios of the dedicated perf benchmark run on a 8 CPU-core\nmachine reported improvement even without artificially induced\ncontention in libtcmalloc.  The service queue length was set to 200.\nWith larger service queue the performance boost was even higher for\nscenarios where the queue often stays full.\n\n  KUDU_ALLOW_SLOW_TESTS\u003d1 ./bin/service_queue-test --num_producers\u003dP --num_consumers\u003dC --max_queue_size\u003d200\n\nBalanced P\u003d4/C\u003d4 scenario reported ~1.56x improvement:\n  before:\n    Reqs/sec:         1288901\n    User CPU per req: 2.89116us\n    Sys CPU per req:  2.71363us\n    Avg rpc queue length: 102.518\n    Avg idle workers:     0\n  after:\n    Reqs/sec:         2022126\n    User CPU per req: 1.9856us\n    Sys CPU per req:  1.78929us\n    Avg rpc queue length: 50.964\n    Avg idle workers:     0.03\n\nBalanced P\u003d3/C\u003d3 scenario reported ~1.30x improvement:\n  before:\n    Reqs/sec:         1470446\n    User CPU per req: 2.3612us\n    Sys CPU per req:  1.37508us\n    Avg rpc queue length: 76.184\n    Avg idle workers:     0\n  after:\n    Reqs/sec:         1917650\n    User CPU per req: 1.97289us\n    Sys CPU per req:  1.0409us\n    Avg rpc queue length: 145.424\n    Avg idle workers:     0\n\nSkewed P\u003d4/C\u003d2 scenario reported ~1.76x improvement:\n  before:\n    Reqs/sec:         1053219\n    User CPU per req: 3.59901us\n    Sys CPU per req:  1.5802us\n    Avg rpc queue length: 194.678\n    Avg idle workers:     0\n  after:\n    Reqs/sec:         1862593\n    User CPU per req: 2.32343us\n    Sys CPU per req:  0.823388us\n    Avg rpc queue length: 194.37\n    Avg idle workers:     0\n\nSkewed P\u003d4/C\u003d3 scenario reported ~1.55x improvement:\n  before:\n    Reqs/sec:         1185783\n    User CPU per req: 3.08805us\n    Sys CPU per req:  2.16397us\n    Avg rpc queue length: 191.486\n    Avg idle workers:     0\n  after:\n    Reqs/sec:         1834414\n    User CPU per req: 2.35371us\n    Sys CPU per req:  1.32012us\n    Avg rpc queue length: 192.042\n    Avg idle workers:     0\n\nSkewed P\u003d3/C\u003d5 scenario reported ~1.29x improvement:\n  before:\n    Reqs/sec:         1622451\n    User CPU per req: 2.081us\n    Sys CPU per req:  1.86138us\n    Avg rpc queue length: 5.072\n    Avg idle workers:     0.104\n  after:\n    Reqs/sec:         2095612\n    User CPU per req: 1.65551us\n    Sys CPU per req:  1.39116us\n    Avg rpc queue length: 6.296\n    Avg idle workers:     0.176\n\nSkewed P\u003d2/C\u003d5 scenario reported ~1.23x improvement:\n  before:\n    Reqs/sec:         1168078\n    User CPU per req: 1.83038us\n    Sys CPU per req:  1.94243us\n    Avg rpc queue length: 0.85\n    Avg idle workers:     0.858\n  after:\n    Reqs/sec:         1436187\n    User CPU per req: 1.57106us\n    Sys CPU per req:  1.56673us\n    Avg rpc queue length: 1.078\n    Avg idle workers:     0.878\n\nChange-Id: I0d95828177ae6458b427ce43dd292877d03065cf\nReviewed-on: http://gerrit.cloudera.org:8080/24230\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "8537ed5bb5e0e6ac1e481ff961e6b9d08cce7671",
      "tree": "4f100f5fbe3b2a060106e9d560dc9e3d73f56fde",
      "parents": [
        "80f39681e127423fa66f8c177be6c05697ac70dd"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Apr 28 22:23:47 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Apr 29 18:25:17 2026 +0000"
      },
      "message": "[security] update DCHECK in TlsHandshake::Continue()\n\nAt the client side there should be no pending data at rbio upon\nsuccessfully completing TLS handshake.  But in case of TLSv1.3 at\nthe server side there may already be application data encrypted with\nthe session key pending at rbio received along with the client\u0027s\n\"finished\" message.\n\nThis changelist updates DCHECK() in TlsHandshake::Continue() to\naccount for this optimization in TLSv1.3.  With newer versions of\nthe OpenSSL library deployed, various tests started hitting the prior\nversion of DCHECK() with errors like below:\n\n  I20260427 07:23:33.098873 29508 tls_socket-test.cc:108] client: negotiation complete\n  F20260427 07:23:33.101608 29513 tls_handshake.cc:166] Check failed: 0 \u003d\u003d BIO_ctrl_pending(rbio) (0 vs. 960)\n\nChange-Id: I1a54514dcac581e25b701db55faca35ded3e3a50\nReviewed-on: http://gerrit.cloudera.org:8080/24245\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "80f39681e127423fa66f8c177be6c05697ac70dd",
      "tree": "f915526423fc039c366c5185554797a8f99a23eb",
      "parents": [
        "a2b53295daf0f4b0bffbba27e7c4051f17d391f5"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Sun Apr 26 14:10:44 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Apr 28 17:20:32 2026 +0000"
      },
      "message": "KUDU-3768 Fix service file overwriting in kudu-subprocess JAR\n\nThis patch addresses a build issue in the kudu-subprocess module where\nService Provider Interface (SPI) registration files in META-INF/services\nwere being overwritten during the creation of the Shadow (fat) JAR.\n\nTesting:\n- Verified the kudu-subprocess.jar contains StringProvider in its\n  MessageBodyReader service file.\n- Confirmed the kudu-subprocess no longer throw the below error log:\n\nMar 31, 2026 8:05:51 PM com.sun.jersey.api.client.ClientResponse getEntity\nSEVERE: A message body reader for Java class java.lang.String, and Java type class java.lang.String, and MIME media type application/octet-stream was not found\nMar 31, 2026 8:05:51 PM com.sun.jersey.api.client.ClientResponse getEntity\nSEVERE: The registered message body readers compatible with the MIME media type are:\n*/* -\u003e\n  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General\n  com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General\n  com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General\n  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General\n  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General\n\nThe generated jar diffrences:\njava %  jar tvf /tmp/kudu-subprocess-new/kudu-subprocess-1.19.0-SNAPSHOT.jar|  wc -l\n   54917\njava %  jar tvf /tmp/kudu-subprocess-old/kudu-subprocess-1.19.0-SNAPSHOT.jar|  wc -l\n   54920\njava % stat /tmp/kudu-subprocess-new/kudu-subprocess-1.19.0-SNAPSHOT.jar\n16777234 10323361 -rw-r--r-- 1 abhishekchennaka wheel 0 92210113 \"Apr 26 13:42:14 2026\" \"Apr 26 13:42:14 2026\" \"Apr 26 13:42:14 2026\" \"Apr 26 13:42:14 2026\" 4096 180104 0 /tmp/kudu-subprocess-new/kudu-subprocess-1.19.0-SNAPSHOT.jar\njava % stat /tmp/kudu-subprocess-old/kudu-subprocess-1.19.0-SNAPSHOT.jar\n16777234 10328175 -rw-r--r-- 1 abhishekchennaka wheel 0 92208129 \"Apr 26 13:47:05 2026\" \"Apr 26 13:47:05 2026\" \"Apr 26 13:47:05 2026\" \"Apr 26 13:47:05 2026\" 4096 180096 0 /tmp/kudu-subprocess-old/kudu-subprocess-1.19.0-SNAPSHOT.jar\n\nThe three missing files in the new jar are below (empty placeholder files):\n0 Sun Apr 26 13:42:46 PDT 2026 META-INF/services/\n0 Wed May 24 15:46:46 PDT 2017 META-INF/services/com.sun.jersey.server.impl.model.method.dispatch.ResourceMethodDispatchProvider\n0 Wed May 24 15:46:46 PDT 2017 META-INF/services/com.sun.jersey.spi.container.ContainerResponseFilter\n\nThe MessageBodyReader now contains the combined list (jersey-core, jersey-json, jersey-client, and others), hence the size difference:\njava %  jar tvf /tmp/kudu-subprocess-new/kudu-subprocess-1.19.0-SNAPSHOT.jar|  grep \"META-INF/services/javax.ws.rs.ext.MessageBodyReader\"\n  5584 Thu Apr 23 23:25:32 PDT 2026 META-INF/services/javax.ws.rs.ext.MessageBodyReader\njava %  jar tvf /tmp/kudu-subprocess-old/kudu-subprocess-1.19.0-SNAPSHOT.jar|  grep \"META-INF/services/javax.ws.rs.ext.MessageBodyReader\"\n   821 Sat Feb 24 20:49:36 PST 2024 META-INF/services/javax.ws.rs.ext.MessageBodyReader\n\nChange-Id: I2677acee77a42b63cb697329fd2e1a424415d52c\nReviewed-on: http://gerrit.cloudera.org:8080/24241\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "a2b53295daf0f4b0bffbba27e7c4051f17d391f5",
      "tree": "e265f974d5952a519abcffa6cb883ccb76dce750",
      "parents": [
        "d4ec3717eede2449aa7fc23a3b508068ea6fbf3c"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Thu Apr 23 12:16:52 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Apr 28 02:12:08 2026 +0000"
      },
      "message": "[server] aggregate sub-step progress for \"Reading filesystem\"\n\nThe /startup page\u0027s \"Reading filesystem\" parent step is driven by a\nsingle Timer that is started before InitAndOpenBlockManager() and\nstopped after it returns. Its rendered percentage therefore flips\nstraight from 0% to 100%, even though the underlying work (especially\nLogBlockManager::Open()\u0027s per-container LoadContainer() pass) can take\nmany minutes on tablet servers with hundreds of thousands of log block\ncontainers. During that window the UI is misleading: a sibling sub-step\n\"Opening container files\" already shows 100% (see Change-Id: Ia372ad5),\nbut the parent stays at 0%, suggesting nothing is happening.\n\nThis change derives an intermediate percentage for the parent step\nfrom its sub-steps:\n\n  * \"Reading instance metadata files\" (small, fixed weight: 5%)\n  * \"Reading data directories\"        (dominant weight: 95%, driven\n    by the existing containers_processed / containers_total counters\n    when the log block manager is in use)\n\nThe aggregate is clamped to [0, 99] while the parent Timer is still\nrunning so that the parent only transitions to 100% when its own\nTimer is stopped (matching the existing semantics for downstream\nmetrics like startup_progress_steps_remaining).\n\nChange-Id: Id658c9da1399c8a05f28a8a0e7d28a2c81a205c1\nReviewed-on: http://gerrit.cloudera.org:8080/24227\nTested-by: Kudu Jenkins\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d4ec3717eede2449aa7fc23a3b508068ea6fbf3c",
      "tree": "bd011dd571d638c0a3330b084eec22ec02d77702",
      "parents": [
        "80873c98b5cc5110e611dd6180cfac12549e84f6"
      ],
      "author": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Tue Apr 21 23:29:37 2026 +0200"
      },
      "committer": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Mon Apr 27 09:53:08 2026 +0000"
      },
      "message": "KUDU-3765 Add `diagnose tls_debug` CLI tool\n\nAs OpenSSL s_client doesn\u0027t support Kudu RPC protocol, it\u0027s difficult to\nverify that a server is secured properly.\n\nThis patch introduces a new CLI tool to assist with this - it simply\nprints the negotiated TLS protocol version and the cipher used, along\nwith whether the extended master secret extension was used in cases of\nTLSv1.2 and lower. It also adds this information to the /rpcz endpoint.\nIt supports disabling TLS using a -disable_tls flag, in which case it\nattempts to connect to a server without using TLS.\n\nIt also adds support for specifying -tls_min_version, -tls_ciphers\n(TLSv1.0 to TLSv1.2), and -tls_ciphersuites (TLSv1.3) for all CLI tools\nconnecting to a Kudu server.\n\nChange-Id: Ibf90a81d03d1da064a7bc737cf608e2ff97d6ad0\nReviewed-on: http://gerrit.cloudera.org:8080/24222\nTested-by: Kudu Jenkins\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "80873c98b5cc5110e611dd6180cfac12549e84f6",
      "tree": "50bbdcd8ad2c09e06111da2d2309df9d29acb211",
      "parents": [
        "47a905e8c20baa81eda8484b04fb5b6abbd207fa"
      ],
      "author": {
        "name": "Ashwani",
        "email": "araina.git@gmail.com",
        "time": "Thu Mar 12 16:38:08 2026 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Apr 24 07:26:27 2026 +0000"
      },
      "message": "[fs] add metrics for untracked orphaned blocks\n\nDuring flush, if orphaned blocks are there and for some reason those\nblocks\u0027 records are not deleted (maybe due to some underlying transient\nI/O error, etc), those blocks are never re-tried for deletion and erased\nfrom the list of orphaned_blocks_. This can cause un-reclaimed space on\nthe persistent storage that can get accumulated over time to a big size.\nThis un-reclaimed space can only be reclaimed with user intervention by\nrunning \u0027kudu fs check --repair\u0027.\n\nInitially, this patch addressed the issue by not removing those orphaned\nblocks from the orphaned_blocks_ list, for which delete failed due to\nsome transient error. This ensures that when next flush is scheduled,\nthe metadata still contains those orphaned blocks in the list and delete\ncan be retried on those blocks to reclaim the space.\n\nHowever, with that change, TestEIODuringDelete started failing because\nDeleteTabletData expects an empty orphaned_blocks_ set after calling\nFlush() couple of times. A second flush is required to clear the\norphaned blocks from superblock even if delete failed for those earlier.\nSince we keep adding the orphaned blocks (for which delete failed)\nback to the set, it never got an empty set, that caused the failure.\n\nIf orphaned_blocks_ set is cleared after the second flush, to maintain\noriginal behavior and expectation, it may fix the TestEIODuringDelete\nfailure but it opens the possibility of hitting KUDU-1060 where a number\ntombstoned tablets keep the record of all orphaned blocks on persistent\nsuperblock i.e., roll-forward of the block deletions until next restart.\nThis can severely impact the startup time for a tablet server that has\na lot of tombstoned tablets.\n\nIn a nutshell, having to keep these orphaned blocks in the set may not\nbe of much use if the disk error is persistent and not to mention the\nadditional handling required in various cases like mentioned above. It\nmakes sense to just rely on \u0027kudu fs check --repair\u0027 like workflow to\nremove these stale orphaned blocks as a maintenance operation.\n\nWith all this information, re-purposing this patch to only focus on\nadding additional logs, metrics and stats that can help identify the\nscenarios with stale orphaned block id lists and log the appropriate\naction for user i.e. \u0027kudu fs check --repair\u0027. Original behavior holds\nfor orphaned blocks set i.e. erase all blocks from the set irrespective\nof the CommitDeletedBlocks() outcome.\n\nFollow-up:\nKUDU-829 - Create a separate patch for adding a maintenance op that can\nrun in the background to reclaim all the space left from those orphaned\nblocks using the same logic as \u0027kudu fs check --repair\u0027.\n\nHighlights of the change:\n- Add warning logs at CommitDeletedBlocks callers when the commit fails.\n- Add per-block level error logs for blocks for which deletion record\n  could not be committed.\n- Add these metrics that can hold the orphan block deletion outcome:\n  * orphaned_blocks_cleaned\n  * orphaned_block_cleanup_failures\n- Add unit tests to test these scenarios with metrics verification:\n  * Usual path where orphaned blocks are deleted with no error.\n  * No metrics are updated when orphan block deletion is disabled.\n  * Induced I/O error causes orphaned blocks lying around that are not\n    deleted and eventually removed from the set with a action to user.\n  * Two stages: First induce I/O error, verify metrics shows cleanup\n    failure count increased. Second remove induced error, verify metrics\n    remains unchanged.\n\nChange-Id: Id386d9fc8d0900839e229e66772f35299b3ef2e9\nReviewed-on: http://gerrit.cloudera.org:8080/24092\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "47a905e8c20baa81eda8484b04fb5b6abbd207fa",
      "tree": "9c6286408b3f63cc7f0e2331a8b3e986fd13b9dc",
      "parents": [
        "f25fef48df6410798d23165b241872430815b5d1"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Wed Apr 01 14:27:53 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Apr 24 07:19:32 2026 +0000"
      },
      "message": "[tablet] optimize MemRowSet scan to single-pass changelist application\n\nPreviously, ApplyMutationsToProjectedRow applied mutations by iterating\nthrough the RowChangeList once per projected column, creating a new\nRowChangeListDecoder for each column and calling ApplyToOneColumn. This\nresulted in O(P * C) complexity where P is the number of projected\ncolumns and C is the number of column updates in the changelist.\n\nThis patch replaces the multi-pass approach with a single-pass\ntraversal: decode each column update once and use the projection\nschema\u0027s find_column_by_id() (via DecodedUpdate::Validate()) as the\nreverse mapping to locate the destination column. Updates for columns\nnot in the projection are simply skipped. This reduces the complexity\nto O(C).\n\nThe improvement is most significant for wide-table scans with many\nprojected columns and long mutation chains, where the old code would\nre-decode the same changelist bytes P times.\n\nChange-Id: I7ccdfcf207680261907d025b64a9b046bb108f13\nReviewed-on: http://gerrit.cloudera.org:8080/24158\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": "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"
    }
  ],
  "next": "0e12730071affdb5f2b165b5b4b2d54c6a2520f5"
}
