)]}'
{
  "log": [
    {
      "commit": "c35bf7c2a378b46e458b88e43422fb546fa0a3c4",
      "tree": "b3794de3db3ce34df513e50c1bc53af2eb4052a1",
      "parents": [
        "658c8350002bc8691f46b55bf42303176330739f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 09 19:44:31 2026 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Nov 10 11:34:01 2026 +0000"
      },
      "message": "KUDU-3826 fix flakiness in LogRollingITest.TestLogCleanupOnStartup\n\nThis changelist updates configuration for the TestLogCleanupOnStartup\nscenario of the LogRollingITest suite to make it more robust.\n\nBefore this changelist, the test scenario would fail at about 20 out\nof 100 runs.  After this update, I ran 2000 iterations of the scenario\nwithout a single failure.\n\nChange-Id: If24423f246504e05e0aa0e9a4a1b2dbb869d5438\nReviewed-on: https://gerrit.cloudera.org/25400\nTested-by: Kudu Jenkins\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "658c8350002bc8691f46b55bf42303176330739f",
      "tree": "5e93168788c574a91ce1e5d7b4f9976fc5bcc651",
      "parents": [
        "9fcda007651a78d9de855839c3b8789cce9b7d78"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Fri Nov 06 15:21:34 2026 +0100"
      },
      "committer": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@cloudera.com",
        "time": "Mon Nov 09 21:03:35 2026 +0000"
      },
      "message": "[rpc] fix build on macOS\n\nThis addresses linker error on macOS:\n\nUndefined symbols for architecture arm64:\n  \"void google::MakeCheckOpValueString\u003cstd::nullptr_t\u003e(...)\",\n  referenced from: ... in negotiation.cc.o\n\nThis is a follow-up to 8cb97df913c7d1b22aed844b1bfb10739fefd11c.\n\nChange-Id: I96aa590013525944a63c1d713af41fbded1c09ea\nReviewed-on: https://gerrit.cloudera.org/25368\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "9fcda007651a78d9de855839c3b8789cce9b7d78",
      "tree": "5d895712ecddfbe758c46283f2a1bf159ded7993",
      "parents": [
        "b839b0e18232e098f56ca83fa54ee2fac35248b5"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sun Nov 01 18:34:02 2026 -0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 09 15:18:05 2026 +0000"
      },
      "message": "KUDU-3824: add Referrer-Policy HTTP header\n\nAdd configurable security-related Referrer-Policy HTTP header [1]\nto the embedded webserver\u0027s responses.\n\nThere was also a motion to add Permissions-Policy header, but it\u0027s of\n\u0027Limited Availability\u0027 according to MDN [2], so it\u0027s not added.  As for\nthe X-XSS-Protection header, it\u0027s non-standard and deprecated, and its\nusage is highly controversial even with older/legacy web browsers [3],\nso it wasn\u0027t added either.\n\nI also did cosmetic updates on the description of run-time flags that\ncontrol other security-related HTTP headers to make the descriptions\nmore uniform.\n\nThis is a follow-up to [4].\n\n[1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy\n[2] https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Permissions-Policy\n[3] https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-XSS-Protection\n[4] https://github.com/apache/kudu/commit/26ad5ad96\n\nChange-Id: Ia82d1c2aaede605913e765048c1b8e84d1e4c655\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nReviewed-on: https://gerrit.cloudera.org/25260\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": "b839b0e18232e098f56ca83fa54ee2fac35248b5",
      "tree": "ec9ff9793995d9f67ddbd343db5b4c2e1e1553a4",
      "parents": [
        "eb53cb1228095c928ad4d5aa7a48f5a230bc61fb"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Wed Nov 04 17:19:51 2026 -0800"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Sun Nov 08 19:59:46 2026 +0000"
      },
      "message": "[www] upgrade Bootstrap to 5.3.8 for CVE-2024-6485, CVE-2025-1647\n\nBootstrap 3.4.1 is affected by CVE-2024-6485 (Button plugin) and\nCVE-2025-1647 (Tooltip/Popover). Bootstrap 3 is EOL and has no upstream\nfix, so upgrade to Bootstrap 5.3.8. The bundle build is used since it\nincludes Popper, which Bootstrap 5 dropdowns require.\n\nAlso upgrade bootstrap-table from 1.12.1 to 1.27.3 for Bootstrap 5\nsupport; this also addresses CVE-2022-1726 and CVE-2021-23472.\n\nMarkup changes for Bootstrap 5:\n- navbar: drop navbar-default/navbar-header, use navbar-expand-md and\n  let the links wrap\n- config page: panels become cards, the glyphicon lock becomes an\n  inline SVG since glyphicons are gone\n- collapse toggles use data-bs-toggle instead of data-toggle\n- kudu.css: drop dead Bootstrap 3 rules, restore the boxed \u003cpre\u003e\n  styling, and color the startup page header cells since Bootstrap 5\n  paints table cells rather than rows\n\nThe unused bootstrap-theme CSS and glyphicons font are removed.\n\nwebserver-crawl-itest parses crawled scripts as HTML and now finds\nbootstrap-table\u0027s href\u003d\"javascript:void(0)\" pagination templates;\nskip javascript: pseudo-URLs like it already skips #anchors.\n\nLICENSE.txt listed www/bootstrap as Apache 2.0, but Bootstrap has been\nMIT since 3.1; list Bootstrap, Popper and bootstrap-table under MIT.\n\nChange-Id: I60fabbf4c4ef4e013f36ec4c4a98039d0ae9f897\nCo-Authored-By: Claude Code \u003cnoreply@anthropic.com\u003e\nReviewed-on: https://gerrit.cloudera.org/25350\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "eb53cb1228095c928ad4d5aa7a48f5a230bc61fb",
      "tree": "b252038366242311b16da210ecce9f23471405a1",
      "parents": [
        "cc0533d6afa479948371768c33687aa9fbfb957a"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Fri Oct 30 12:09:22 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Thu Nov 05 04:16:23 2026 +0000"
      },
      "message": "[www] upgrade Swagger UI to 5.34.1 for GHSA-mrv2-3pqr-j5jr\n\nSwagger UI 5.21.0 bundled DOMPurify 3.2.4, which is flagged by\nGHSA-mrv2-3pqr-j5jr. Upgrade to 5.34.1, which bundles DOMPurify 3.4.17.\n\nThe old bundle was hand-patched to disable \"Try it out\" and we now do\nthat via supportedSubmitMethods in kudu-swagger-init.js instead.\n\nChange-Id: I4cc152a4ab86f0cee5ecf2a7f6516cb6ddc800f8\nReviewed-on: https://gerrit.cloudera.org/25251\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "cc0533d6afa479948371768c33687aa9fbfb957a",
      "tree": "10cc750c447441c17add1a196733d3571fe553bb",
      "parents": [
        "0bf267597529dd3ea783f12bc36adcf4c50b5372"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 18 14:32:07 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Nov 04 13:08:43 2026 +0000"
      },
      "message": "KUDU-3806: classify CLI actions for the MCP server\n\nThe MCP server (added in a later change) exposes CLI actions as\ncallable tools. Whether an action may be surfaced at all -- and\nwhether it needs gating -- is a safety property of the action, so it\nbelongs next to the action definition rather than in a lookup table\nthe server maintains separately.\n\nIntroduce a Disposition vocabulary (SURFACE / GATED / REJECT /\nEXCLUDE) plus advisory node-local / unsafe / user-data tags, and hang\nthem off ActionBuilder via McpDisposition() / McpNodeLocal() /\nMcpUnsafe() / McpUserData(). Disposition is forward-declared in\ntool_action.h with a fixed underlying type so the CLI framework\ncarries the classification without depending on the MCP feature. The\nuser-data tag marks actions that return row-level data (table scan,\nWAL and rowset dumps, ...) so that the server can gate them\nseparately from metadata reads.\n\nmcp_disposition.{h,cc} own the enum, the command-path helper, a\nVisitActions() walker over the action tree, and\nValidateDispositionCoverage[OrDie](), which fails loudly if any\naction is unclassified. There is no exemption: the actions of the\ntest-only \u0027test\u0027 mode are explicitly classified EXCLUDE. A companion\ntest asserts coverage against the current tree, so a new action that\nis never classified fails the test rather than silently becoming\nnon-surfaceable at runtime.\n\nClassify every existing action across the fourteen mode families and\nthe test-only \u0027test\u0027 mode. Node-local mutations and long multi-step\njobs (e.g. \u0027fs check\u0027 because of --repair, \u0027master add\u0027) are EXCLUDE,\nand long-running load generation (\u0027perf loadgen\u0027) is REJECT. This\nwires no server yet; it only tags actions and enforces that the tags\nare complete.\n\nChange-Id: I29aaf7910198c33589438638140fbb8e8cc5a695\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nReviewed-on: https://gerrit.cloudera.org/24907\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": "0bf267597529dd3ea783f12bc36adcf4c50b5372",
      "tree": "d085ceb848b0c7df90460906ca9d1d9c763eb296",
      "parents": [
        "61258cad5b967bd761b48d07c595bf403e2c702d"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 18 14:28:44 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Nov 04 13:08:32 2026 +0000"
      },
      "message": "KUDU-3806: split CLI actions into a library\n\nMove the top-level mode list out of tool_main.cc\u0027s RootMode() into a\nnew BuildRootMode() (tool_action_root.cc), and build the CLI action\nfactories into a kudu_cli_actions library, with the \u0027kudu\u0027 executable\nreduced to a thin main() linked against it.\n\nThis lets unit tests reconstruct the full action tree in-process by\nlinking the library, instead of recompiling every tool_action_*.cc\nsource into each test. It is also the single source of truth for the\ntop-level mode list, so a newly added mode is wired in one place\nrather than mirrored across main() and its consumers.\n\nPure refactor: the \u0027kudu\u0027 binary is unchanged. tool_action_root.cc\nlives in its own translation unit (part of the CLI sources) rather\nthan in the low-level kudu_tools_util library, so referencing every\nBuild*Mode() factory does not inject undefined symbols into\nkudu_tools_util consumers such as ksck.\n\nChange-Id: I3c47cf1844042fc09493edf18652493742187f03\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nReviewed-on: https://gerrit.cloudera.org/24906\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": "61258cad5b967bd761b48d07c595bf403e2c702d",
      "tree": "9ceb06148488c310f9666e16b3c77871682f7d1f",
      "parents": [
        "be0084db6888a37c5bdbb8723e82c4f5610a5bdc"
      ],
      "author": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Wed Nov 04 10:31:04 2026 +0100"
      },
      "committer": {
        "name": "Attila Bukor",
        "email": "abukor@apache.org",
        "time": "Wed Nov 04 11:17:37 2026 +0000"
      },
      "message": "[java] Bump Netty version to 4.1.140.Final\n\nThe new release contains several security fixes.\n\nChange-Id: I79e545ea2a0422f9a5b1e8f696613a62ab520376\nReviewed-on: https://gerrit.cloudera.org/25285\nReviewed-by: Zoltan Chovan \u003czchovan@cloudera.com\u003e\nTested-by: Attila Bukor \u003cabukor@apache.org\u003e\n"
    },
    {
      "commit": "be0084db6888a37c5bdbb8723e82c4f5610a5bdc",
      "tree": "8c87259a96395c0a8f8bc7c644e9b0c9e67bbd6a",
      "parents": [
        "4cf3c16045e33a8f4bd16db0dad0f57ae440247f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Nov 02 14:36:41 2026 -0800"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Nov 03 14:00:47 2026 +0000"
      },
      "message": "KUDU-3533 restore some webserver tests on macOS\n\nKUDU-3533 reported several scenarios of webserver-test failing when\nusing the Heimdal Kerberos implementation.  However, Kudu on macOS is\nsupposed to use the MIT Kerberos implementation: the installation\ninstructions [1] explicitly mention installing \u0027krb5\u0027 using brew [2]\n(available as \u0027kerberos5\u0027 in MacPorts [3]).\n\nThis changelist re-enables several scearios from webserver-test and\nthe TestNoKinitGetTables scenario from spnego_rest_catalog-test.  The\nlatter was previously attributed to KUDU-3533, but the actual root\ncause was the difference in implementations of the SASL library\non Linux and macOS.\n\nI verified that all the test scenarios of the updated tests compiled\nwith Xcode.26.6 on macOS 26.7.2 pass when with \u0027kerberos5\u0027 installed\nusing MacPorts [3].\n\nThe motivation for this update was seeing the following test failures\non macOS with gmock-1.12.1 due to empty list of parameterized test\nfixtures for AuthnWebserverTest left by the ifndef macro added by [4]:\n\n    src/kudu/server/webserver-test.cc:1108: Failure\n    Parameterized test suite AuthnWebserverTest is instantiated via\n    INSTANTIATE_TEST_SUITE_P, but no tests are defined via TEST_P . No test\n    cases will run.\n\n    Ideally, INSTANTIATE_TEST_SUITE_P should only ever be invoked from code\n    that always depend on code that provides TEST_P.  Failing to do so is\n    often an indication of dead code, e.g. the last TEST_P was removed\n    but the rest got left behind.\n\n    To suppress this error for this test suite, insert the following line\n    (in a non-header) in the namespace it is defined in:\n\n    GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AuthnWebserverTest);\n\n[1] https://kudu.apache.org/docs/installation.html#osx_from_source\n[2] https://formulae.brew.sh/formula/krb5\n[3] https://ports.macports.org/port/kerberos5/\n[4] https://github.com/apache/kudu/commit/1a9862324\n\nChange-Id: Id27359ace3828abb152dc671378e83c219960580\nReviewed-on: https://gerrit.cloudera.org/25272\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "4cf3c16045e33a8f4bd16db0dad0f57ae440247f",
      "tree": "419d41c9eb2f6725f28a6eb107a79849ad0b3b3d",
      "parents": [
        "953a2c5c83cb88d875823730c04e1bba2dc9a65b"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Aug 28 16:52:52 2026 +0200"
      },
      "committer": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@cloudera.com",
        "time": "Mon Nov 02 13:06:02 2026 +0000"
      },
      "message": "Require authentication for REST catalog DDL\n\nThe REST catalog handlers in rest_catalog_path_handlers.cc resolved the\nacting user as\n\noptional\u003cstring\u003e user \u003d req.username.empty() ? \"default\" : req.username;\n\nbefore calling ListTables / CreateTableWithUser / AlterTableWithUser /\nDeleteTableWithUser. When --enable_rest_api is set without SPNEGO, the\nwebserver leaves req.username empty for every unauthenticated caller, so\nanyone able to reach the master webserver port could execute DDL as a\nfabricated principal \"default\". Nothing coupled --enable_rest_api to any\nform of webserver authentication.\n\nChange-Id: Ib0112638a3462c84e6366b881c9229a334ad3c25\nReviewed-on: https://gerrit.cloudera.org/24864\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": "953a2c5c83cb88d875823730c04e1bba2dc9a65b",
      "tree": "d91d49863cdf39c4075f329342377832561f8cc5",
      "parents": [
        "6375051662fb3ccfb73ccb5cacbc24162bdb67eb"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Sep 25 15:56:01 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Oct 31 00:45:46 2026 +0000"
      },
      "message": "KUDU-3733 run auto-leader-rebalancer at startup\n\nRunLoop() slept for --auto_leader_rebalancing_interval_seconds before\nits first pass, leaving the auto-leader-rebalancer idle for up to an\nhour after master startup or failover.\n\nRunning a pass immediately isn\u0027t enough on its own: the thread is\ncreated while the catalog manager is still initializing, so that pass\nno-ops on the leadership check and the loop sleeps out the interval\nanyway. The interval says how often to rebalance, not how long to\nsleep, so separate the two. The loop now polls every 5 seconds and\ndecides whether a pass is due from when the last one ran; only a pass\nthat got past the leadership check advances that timestamp.\n\nWhile here, clamp the interval to a second. The flag has no validator\nand is runtime settable, so 0 is reachable, and at 0 the loop never\nsleeps and spins on RunLeaderRebalancer() (~14k passes in 3 seconds,\nmeasured). That spin predates this patch and isn\u0027t made worse by it,\nbut the clamp is cheap, and reading the interval once for both the\npoll and the due check beats reading the flag in two places.\n\nAdds LeaderRebalancerTest.FirstPassDoesNotWaitOutFullInterval, which\nfails against the old loop, and ZeroIntervalDoesNotSpin, which fails\nwithout the clamp.\n\nChange-Id: I3c1b2a5622578c14a414fc79e4c527f9f7efbbce\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24946\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": "6375051662fb3ccfb73ccb5cacbc24162bdb67eb",
      "tree": "2a39302897114096a292b215f6a2e7fc5310b4e7",
      "parents": [
        "9491672f57089fb4b1c82d1551fbd106120dd08c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 29 17:21:56 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 30 16:27:57 2026 +0000"
      },
      "message": "KUDU-3822 fix flaky test scenario in raft_consensus-itest\n\nThis changelist addresses intermittent failures of the\nRaftConsensusITest.TestReplicaBehaviorViaRPC scenario in\nraft_consensus-itest.\n\nThe root cause of the issue was in the assumption that amending the\ntimeout of a scan RPC by 10ms [1] provided good enough margin to let\nthe RPC worker thread respond before the client-side RPC layer would\ndetect that the call had timed out.\n\nIn fact, in the presence of scheduler anomalies and process pauses,\nthere isn\u0027t any guarantee that pthread_cond_timedwait() or\npthread_cond_timedwait_relative_np() will awake exactly at the\ntimeout mark when no event was registered at the underlying\nsynchronization primitive -- it might take longer, of course.\n\nIncreasing the margin over 10ms [1] doesn\u0027t seem to be a bullet-proof\napproach anyway.  Also, there isn\u0027t a way to set timeout for a scan\noperation separate from RPC timeout itself (e.g., the scenario could\nuse very long RPC timeout and relatively short scan timeout if that\nwere the case).  Instead, let\u0027s update the test scenario to check for\nthe expected error message logged in the tserver\u0027s logs if it\u0027s not\ndelivered by application-level RPC error status.\n\nTo verify, I ran the updated test bits in the environment where\nRaftConsensusITest.TestReplicaBehaviorViaRPC failed at least once\nevery 10 runs.  There hasn\u0027t been a single failure in 100 runs.\n\n[1] \u0027client_deadline\u0027 in TabletServiceImpl::HandleScanAtSnapshot()\n    defined by deducting 10ms from the actual RPC timeout, so there\n    is time to send the response a bit earlier in attempt to reach the\n    client side before the client\u0027s own timeout detector triggers\n\nChange-Id: Ic2e3b479e8f3576865c2a5e430222633de962137\nReviewed-on: http://gerrit.cloudera.org:8080/25248\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "9491672f57089fb4b1c82d1551fbd106120dd08c",
      "tree": "5a3bf123506cb036099a74ef5a7ac2f1f641d0a6",
      "parents": [
        "44937ba038fd1cbc2e512376a8162d7a16d3c94a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 29 22:34:24 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Oct 30 13:09:33 2026 +0000"
      },
      "message": "[consensus] clean-up on ConsensusMetadata::flush_count_for_tests_\n\nSince ConsensusMetadata::flush_count_for_tests() is invoked from\narbitrary test threads, it\u0027s better to have it wrapped into\nstd::atomic for consistent access.\n\nChange-Id: Id4114193c7a17e0abec57015f1d8df5604df0348\nReviewed-on: http://gerrit.cloudera.org:8080/25249\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": "44937ba038fd1cbc2e512376a8162d7a16d3c94a",
      "tree": "9ad1b368d4c7075d7c43dbb536c8053993017c9f",
      "parents": [
        "603d7b03c2dfddd95556919c69c8b3b802d680cf"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 27 19:14:35 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 29 13:54:46 2026 +0000"
      },
      "message": "[consensus] relax mem ordering on withhold_votes_until_\n\nRelax memory ordering for atomic operations on \u0027withhold_votes_until_\u0027\nin the RaftConsensus implementation: it\u0027s enough to have\nmemory_order_release/memory_order_acquire for store/load operations,\nand memory_order_release/memory_order_relaxed on compare_exchange_weak()\nin RaftConsensus::WithholdVotes().  Also, use more lightweight approach\nfor setting the updated value for the \u0027withhold_votes_until_\u0027 field by\navoiding recurrent calls to clock_gettime() [1] upon spurious failures\nof std::atomic::compare_exchange_weak().\n\n[1] https://www.man7.org/linux/man-pages/man3/clock_gettime.3.html\n\nChange-Id: Ib404c9939421d280482f96dc4af64947fa1fbdc7\nReviewed-on: http://gerrit.cloudera.org:8080/25229\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "603d7b03c2dfddd95556919c69c8b3b802d680cf",
      "tree": "4169f6a60d9e854878056886d55417ac1e36b728",
      "parents": [
        "df444bbbf4b97f305cb4642b9399b8e8a6b8f3cd"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Thu Oct 15 13:19:12 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Oct 29 11:37:19 2026 +0000"
      },
      "message": "[tserver] Remove deprecated range predicate.\n\nThe old range predicate was removed from clients before 1.0. We do not\nconsider the proto to be part of the public API. 10 years passed since the\n1.0 release, so it\u0027s ok to break compatibility with \u003c0.8 clients.\n\nSince proto is not a public API, it can be done in a minor release.\n\nChange-Id: Ibfbb3b81187d47b52d34496e0c99e0425f6ff4b3\nReviewed-on: http://gerrit.cloudera.org:8080/25133\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "df444bbbf4b97f305cb4642b9399b8e8a6b8f3cd",
      "tree": "fb9b2aca9fc5c3d4a3a778f7aada91bb300492ba",
      "parents": [
        "8f458d51eee184168d20bdfdf3585e928046189c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 27 21:15:10 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 28 16:42:57 2026 +0000"
      },
      "message": "[consensus] relax mem ordering on server_ctx_.quiescing\n\nChange-Id: Ib2ab7de5b124ab6f000ad440a49c8cc5963faba7\nReviewed-on: http://gerrit.cloudera.org:8080/25231\nTested-by: Kudu Jenkins\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "8f458d51eee184168d20bdfdf3585e928046189c",
      "tree": "2b386e8242b73532789772917af91bc21379fee7",
      "parents": [
        "16e4e3e0784b93791c8722bdb15eccacb477dde4"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 27 20:59:08 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 28 16:42:49 2026 +0000"
      },
      "message": "[consensus] relax mem ordering on last_leader_communication_time_micros_\n\nSince RaftConsensus::last_leader_communication_time_micros_ is used\nonly for metrics/stats reporting, memory_order_relaxed is the best\nchoice for memory ordering here.\n\nChange-Id: Ia5151da2688e94a3ceb4dd52abd8db079c889157\nReviewed-on: http://gerrit.cloudera.org:8080/25230\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "16e4e3e0784b93791c8722bdb15eccacb477dde4",
      "tree": "79e91f61e6b13194720898ec8da42684b1a3307c",
      "parents": [
        "5af4c1ed28e6fda395d3b59c5a33d1a687a6662f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 27 15:50:26 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 28 15:34:40 2026 +0000"
      },
      "message": "[consensus] relax mem ordering on leader_transfer_in_progress_\n\nChange-Id: Id298e5b3a510a2e22c5eebd6d221623d1052e0c9\nReviewed-on: http://gerrit.cloudera.org:8080/25228\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "5af4c1ed28e6fda395d3b59c5a33d1a687a6662f",
      "tree": "b14bca66fa777a3362633f8fcff8ecb0f6f27984",
      "parents": [
        "d77843a98e9119ffdae1ad5f6b5a483b5a3bc8e6"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 26 20:06:34 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 28 15:34:30 2026 +0000"
      },
      "message": "[consensus] relax mem ordering on role_and_term_cache_, leader_is_ready_\n\nThe staleness of ConsensusMetadata::role_and_term_cache_ at existing\ncallsites is tolerated by design.  ConsensusMetadata::GetRoleAndTerm()\u0027s\ncallsite in RaftConsensus::CheckLeadershipAndBindTerm() contains a\ncomment with an explanation of why the staleness is tolerated relative\nto the order of retrieving RaftConsensus::leader_is_ready_ along with\nConsensusMetadata::role_and_term_cache_.\n\nWith that, it\u0027s possible to relax the memory ordering for store/load\nof these two fields from memory_order_seq_cst to\nmemory_order_release/memory_order_acquire, correspondingly.  I didn\u0027t\nadd any new tests since the existing test scaffolding is supposed\nto provide enough coverage for this update.\n\nChange-Id: Ifea19bd15dbd32b5cbb591608fafc5fffe9f104b\nReviewed-on: http://gerrit.cloudera.org:8080/25215\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": "d77843a98e9119ffdae1ad5f6b5a483b5a3bc8e6",
      "tree": "5f7c9ca91a0caac38ba29a0a58f814854c8435de",
      "parents": [
        "041f594c55c848b45c7d25f8582b3537ca77cf8f"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Thu Oct 01 17:21:17 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Wed Oct 28 05:13:17 2026 +0000"
      },
      "message": "KUDU-3811 [tools] add \u0027kudu cluster location check\u0027\n\nBefore taking a location (rack, availability zone) offline, an operator\nneeds to know whether every tablet would keep a quorum. Neither ksck nor\nthe rebalancer answers that. This adds:\n\n  kudu cluster location check \u003cmaster_addresses\u003e [--location\u003dL]\n\nA location is safe to take offline if, for every tablet, the healthy\nvoters outside it form a majority of max(replication factor, voters in\nconfig). Taking the larger covers a tablet being re-replicated, which\ncarries an extra voter, as well as an under-replicated one. Non-voters\nand voters on unhealthy tablet servers don\u0027t count. Unlike\nDetectPlacementPolicyViolations(), tablets are checked regardless of\ntheir health.\n\nWithout --location, every location is checked. The action exits non-zero\nif any location is unsafe or if --location names an unknown location. It\nrefuses to run unless every tablet server has a location. Having fewer\nthan 3 locations only produces a warning.\n\nThe result is a snapshot. Tablets with a Raft config change in progress\nare listed in a notice, since their placement is about to change. To\ndetect replacements, ksck\u0027s consensus state now records each peer\u0027s\nREPLACE attribute. Masters are not considered: Kudu does not assign them\nlocations, so check separately that the location doesn\u0027t hold a majority\nof them.\n\nlocation_maintenance-test covers the quorum arithmetic and the detection\nof config changes; kudu-tool-test runs the action against multi-location\nexternal mini clusters.\n\nChange-Id: Ibd4cbaa8dab835d4d27270c06b4b0028aab8285b\nCo-Authored-By: Claude Code \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24978\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "041f594c55c848b45c7d25f8582b3537ca77cf8f",
      "tree": "8fc62d9dda9e24ce3361be4cfa4b9f4189653ab4",
      "parents": [
        "f555ca8362ec16795a088d72b4defa62e61cf081"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 10:36:19 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 27 14:11:14 2026 +0000"
      },
      "message": "[rpc] RequestTracker interface clean-up\n\nSimplify the signature of RequestTracker::NewSeqNo() method, remove\nirrelevant comments, fix const-correctness of the RequestTracker\u0027s\ninterface.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I835fe0497861a04c1be35a3d6f77504b603f7177\nReviewed-on: http://gerrit.cloudera.org:8080/25199\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "f555ca8362ec16795a088d72b4defa62e61cf081",
      "tree": "10e4c76d91ca0335f20a61182e1a5e59c53d8b4c",
      "parents": [
        "1efc51eb17f43888dc6a9edf58dd5d306d4a4974"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 26 18:45:01 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Oct 27 11:18:53 2026 +0000"
      },
      "message": "[consensus] relax memory ordering for ConsensusMetadata::on_disk_size_\n\nThe ConsensusMetadata::on_disk_size_ field is read for reporting\npurposes: TabletReplica::OnDiskSize() uses it to compute total size\non disk consumed by a tablet replica, which is included in various\nmetrics and reported at embedded webserver\u0027s pages.  So, it\u0027s read using\nthe memory_order_relaxed scheme, which does make sense.  However, the\nobvious asymmetry was there before this changelist: the on_disk_size_\nfield was updated using the memory_order_seq_cst scheme, which didn\u0027t\nmake sense.\n\nChange-Id: I1caf244bab2ec750e976467725d3bf06109180d7\nReviewed-on: http://gerrit.cloudera.org:8080/25214\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": "1efc51eb17f43888dc6a9edf58dd5d306d4a4974",
      "tree": "a3b71c6c9dfddab776ca37431148aab8f3ea962e",
      "parents": [
        "48dee8714ca0a1845c22a4f5cd578ff638e500f4"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 13:11:48 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 26 14:10:18 2026 +0000"
      },
      "message": "[rpc] more diagnostics on rpc-test assertions\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: Ia76a221aa0874b89cee2ee9f5afd8f676eea700f\nReviewed-on: http://gerrit.cloudera.org:8080/25207\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "48dee8714ca0a1845c22a4f5cd578ff638e500f4",
      "tree": "230ba4e2b46c1b8506ecac453d7af43dad9563f4",
      "parents": [
        "91c55b1ab35e7fa2ad2eecfb977fedb3f654cb15"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 16 23:06:14 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 26 14:08:30 2026 +0000"
      },
      "message": "[consensus] release lock_ when calling SignalRequest\n\nI commented on similar item in the review [1] for recently submitted\nchangelist [2], but later I found that there was another callsite that\nwasn\u0027t releasing RaftConsensus\u0027s lock_ upon invoking\nPeerManager::SignalRequest.  This changelist extends the current\napproach to all call sites of PeerManager::SignalRequest in the\nRaftConsensus implementation.\n\n[1] http://gerrit.cloudera.org:8080/25101\n[2] https://github.com/apache/kudu/commit/a0409299d\n\nChange-Id: Id7a6acc9920c544959d723409142f5b4b83eb258\nReviewed-on: http://gerrit.cloudera.org:8080/25147\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "91c55b1ab35e7fa2ad2eecfb977fedb3f654cb15",
      "tree": "ea4b74c32c124169bfb8629068e9b77670d2aa2f",
      "parents": [
        "4ac4312741f9032ab4db57bcadddc5ce1859695c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 20:21:00 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 26 14:07:01 2026 +0000"
      },
      "message": "[common] smaller in-list predicates in partition_pruner-test\n\nThe PartitionPrunerTestWithMaxInListLength\u0027s scenarios might take\nvery long time to run when evaluating the legacy evaluation algorithm\n(a.k.a. v1) with many elements in the in-list predicate, especially\nin sanitizer-instrumented builds.  The total run time would be over\n15 minutes on 2GHz CPUs when the randomly chosen number of elements\nfor in-list predicates was over 30+.  So, dist-test would kill the\npartition_pruner-test process and mark the test as failed.\n\nThis changelist reduces the maximum size for the in-list predicate\nfrom 50 to 25, addressing the issue.  In addition, the stats on\nthe algorithm runtime speedup are now output only when running\nwith \u0027-v\u003d1\u0027 or higher glog verbosity level.\n\nChange-Id: I16b4fdf5aef1f05688bcf18ebdf7b17e2a534b7a\nReviewed-on: http://gerrit.cloudera.org:8080/25208\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "4ac4312741f9032ab4db57bcadddc5ce1859695c",
      "tree": "2950c10322f4f11a9039297a75065c8ab5ad3e9e",
      "parents": [
        "c357d074efc78718f2aaa2750808fc938838e6f9"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Thu Oct 15 16:57:47 2026 +0200"
      },
      "committer": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@cloudera.com",
        "time": "Mon Oct 26 13:08:03 2026 +0000"
      },
      "message": "[tserver] Fix OOB write with wrong key columns.\n\nThe newly added WriteWithForgedKeyColumnsDoesNotCrash reliably triggers an ASAN\nwarning without the fix. We should check the keys in the client schema to\nprevent potential OOB write.\n\nChange-Id: Iaaddeae1b1a9541f0046a9d64cf239f82aadb395\nReviewed-on: http://gerrit.cloudera.org:8080/25171\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "c357d074efc78718f2aaa2750808fc938838e6f9",
      "tree": "720ca28a2ced71b8e5e2aaa4364e523ce28fc7e3",
      "parents": [
        "a4c98a84550fd2947ad87207418db8e5bd683b18"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Mon Aug 24 13:32:00 2026 +0000"
      },
      "committer": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@cloudera.com",
        "time": "Mon Oct 26 09:54:19 2026 +0000"
      },
      "message": "KUDU-3812 Test ordered scan memory usage with large cells.\n\nCurrently sorted scans have a burned in 1024 size buffer.\nWith 1 MB of cells this can cause large, untracked memory usage.\n\nThis test does the following:\n+ Start a cluster with 1 tserver and create a tablet.\n+ Disable compaction for worst case result (compaction falls behind).\n+ Write some rows with 1 MB cells into a tablet.\n+ Disable flushing then keep writing until memory limit is hit.\n+ Start 10 parallel ordered full scans. They are started one-by-one with a\n  gap between them, so they probably request other parts of the data at\n  the same time.\n+ Check the peak memory usage.\n\nThe test increases RPC and transaction limits, but the whole scanning still\nhappens when they are set to default. So the memory overconsumption would still\nhappen.\n\nOne run gave me:\nPeak tmalloc memory during test :  18697 MiB\n\nWe will need to dynamically downsize batches when cells are really large,\nso the memory usage won\u0027t skyrocket and rpc/transaction limits can remain\nuntouched.\n\nChange-Id: I75ceaebac1793c2421302f8b205ba85ad32a141a\nReviewed-on: http://gerrit.cloudera.org:8080/24731\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\n"
    },
    {
      "commit": "a4c98a84550fd2947ad87207418db8e5bd683b18",
      "tree": "7826e4512abf3f3565c181aa08dab2d8f7c3c42e",
      "parents": [
        "31adf619616727b401b0ac725d161fedbf623402"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Oct 02 13:19:32 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 22:18:35 2026 +0000"
      },
      "message": "[auto_rebalancer] enforce per-server move cap\n\nThe auto-rebalancer never enforced its per-server move cap. It budgeted\na whole batch at max_moves_per_server * num_tservers and checked\nmoves_per_tserver_, which is empty at selection time, so one batch could\npile many moves onto a single server (the most loaded one, which the cap\nexists to protect).\n\nTrack per-server move counts within the batch and skip a move once\neither endpoint reaches the cap.\n\nAdd MaxMovesPerServerEnforcedWithinOneBatch, which is red before this\nchange: a 6-move batch puts 3 moves on one server with the cap at 1.\n\nChange-Id: I9f6b9b200c24d215435329a37e953d75fe923c02\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/25005\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "31adf619616727b401b0ac725d161fedbf623402",
      "tree": "018911a37cf804cff074f67ecef209d292b39731",
      "parents": [
        "78b04104aa2095d8fc80492800607b27f1945130"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 21 22:18:51 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 18:02:59 2026 +0000"
      },
      "message": "[tests] fix flake in raft_consensus_nonvoter-itest\n\nThe IncompatibleReplicaReplacementSchemesITest.MasterAndTserverMisconfig\nscenario in raft_consensus_nonvoter-itest was failing intermittently\non macOS 26.7.x aarch64 before this fix.  It turned out restarting\ntablet server with incompatible replica management policy sometimes\nfails, so there is no need to invoke WaitForFatal() in that case.\n\nThis changelist addresses the issue.\n\nChange-Id: I33bb1c179b44e71bdb444ceae39b18595a764a00\nReviewed-on: http://gerrit.cloudera.org:8080/25182\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "78b04104aa2095d8fc80492800607b27f1945130",
      "tree": "c75f1115b2d983a36546f918d4409c6b6a0d76a4",
      "parents": [
        "38522df9c2e7a4874c8ce79ff332d24d112ab6a1"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 21 14:17:57 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 23 14:10:26 2026 +0000"
      },
      "message": "[rpc] fix flake in mt-rpc-test\n\nThe MultiThreadedRpcTest.ReactorMaxIOLatencyStatsEnabled failed 37 out\nof 1000 runs when run on a machine with max TCP auto-tuning read buffer\nwas set to 6MiB.  The failure rate was higher with 10MiB size for the\nTCP buffer auto-tuning max setting (86 out of 1000 runs):\n\n  src/kudu/rpc/mt-rpc-test.cc:433: Failure\n  Expected: (max_wr_latency) \u003e (1), actual: 1 vs 1\n\nThis changelist updates the max_rd_latency and max_wr_latency tolerance\nmargins to address the flakiness.\n\nChange-Id: I335bd07db3a080a9168b80fe9d8cb72bbf9ef694\nReviewed-on: http://gerrit.cloudera.org:8080/25175\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "38522df9c2e7a4874c8ce79ff332d24d112ab6a1",
      "tree": "a3d3823ee211f8d395f68c57663c2b76d2e209ef",
      "parents": [
        "a0409299d44318756156ca8760812b1fdfadf291"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Wed Oct 14 15:55:19 2026 +0530"
      },
      "committer": {
        "name": "Ashwani Raina",
        "email": "araina.git@gmail.com",
        "time": "Fri Oct 23 10:22:30 2026 +0000"
      },
      "message": "[client] Enhance client side checks for invalid response\n\nThe patch fixes three unverified accesses that could cause crash on\nclient side:\n- In Batcher::ProcessWriteResponse, the per_row_errors loop uses a\n  server-supplied row_index as a direct index into rpc.ops() and\n  afterwards std::moves write_op out of the referenced in-flight RPCs.\n  No guard exists for the case where write_op is already null - either\n  due to invalid response from a malicious server or any other reason,\n  which could cause undefined behaviour at the op-\u003eToString() call\n  (null dereference). A null check on write_op is inserted immediately\n  after the existing bounds check, before std::move.\n- Response entry\u0027s rpc_addresses are accessed directly, with no check\n  that the optional registration sub-message exists or that it\n  contains any RPC addresses. Sequential guards are added before the\n  access and an appropriate error message (Status::Corruption) is sent\n  back to the caller.\n- Master-supplied ts info index with no bounds check could result in\n  undefined behaviour / crash in a release build if the index is out of\n  range. A bounds check is added before the access that returns\n  Status::Corruption with the bad index and the actual count. This\n  mirrors the identical guard already present in meta_cache.cc for the\n  same field.\n\nChange-Id: I2034b1686d2d8dac1e21b38103303e8c1005e16a\nPartially-Generated-By: Cursor \u003ccursoragent@cursor.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/25148\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "a0409299d44318756156ca8760812b1fdfadf291",
      "tree": "5f4901d6bf3dcb19d5e900440cb15e693566507e",
      "parents": [
        "625553e9c96f7d00779ce12348d8f5905ea7acf3"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Sun Oct 11 12:30:10 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Sat Oct 17 00:43:49 2026 +0000"
      },
      "message": "KUDU-3816 [consensus] Send the new leader\u0027s NO_OP without waiting for a heartbeat\n\nA new leader now signals its peers when it appends its NO_OP. This will\nensure the the clean time is initialized and the tablet\u0027s replicas\nserve the scans independent of --raft_heartbeat_interval_ms.\n\nThe regression test for KUDU-2147 has been updated according to the new behavior.\n\nAdminCliTest.TestRebuildTables now rebuilds TestTable in add mode with\nits actual replication factor of 3. With the default of 1 the master\nevicts the extra replicas after the restart which this change makes\nhappen before the test sees all 3 replicas.\n\nThe repro.cc attached at KUDU_3747 doesn\u0027t show any latency with this patch\nin place.\n\nChange-Id: I1c1c4e448a1bf0142d32ee7e2721d304e444f9d8\nReviewed-on: http://gerrit.cloudera.org:8080/25101\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "625553e9c96f7d00779ce12348d8f5905ea7acf3",
      "tree": "eb37e43836f91297d02766b0df36fcbf29b54549",
      "parents": [
        "10c354f6a2d3375caf1e686547f54cbf3b875c0d"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 14 16:29:22 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 16 18:56:22 2026 +0000"
      },
      "message": "[cmake] add dependent frameworks for libcurl on macOS\n\nThis changelist fixes build failure on macOS in release configuration.\n\nSince libcurl is now built with IPv6 support [1], the result library\non macOS depends on symbols defined in the CoreFoundation and\nSystemConfiguration frameworks due to the code in $CURL_SRC/lib/macos.c.\nCMake tracks the dependency automatically when using curl shared\nlibrary, but it doesn\u0027t do so for static archive library that\u0027s linked\ninto Kudu bits in release mode.\n\nThis patch adds explicit dependency on CoreFoundation and\nSystemConfiguration frameworks for libcurl on macOS, fixing build\nfailure in release build configuration.\n\n[1] https://github.com/apache/kudu/commit/0b2f2d037\n\nChange-Id: I78fac4f9090165cee2cf72e05eeae016d84da8e9\nReviewed-on: http://gerrit.cloudera.org:8080/25130\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "10c354f6a2d3375caf1e686547f54cbf3b875c0d",
      "tree": "f4cbe13cab85a1ed8ca2ad45932299efd31687d9",
      "parents": [
        "f6d76f25173ea83e5014cda6b97a0d6917887a37"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 15 19:17:11 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 16 05:44:56 2026 +0000"
      },
      "message": "[rpc] remove unused/dead methods\n\nThe analysis was performed by running\n\n  ollama run qwen3.8:27b-mxfp8\n\nlocally on MacBookPro M5 with the prompt below followed by\nthe contents of source files under $KUDU_HOME/src/kudu/rpc:\n\n  Analyze the C++ source code below and find unused methods/functions.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I223b6eb745cef65b2dff417e9d839115290115ea\nReviewed-on: http://gerrit.cloudera.org:8080/25138\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "f6d76f25173ea83e5014cda6b97a0d6917887a37",
      "tree": "c4df163000b03f3b9b362f3a44cb6d873b0f1ce9",
      "parents": [
        "8cb97df913c7d1b22aed844b1bfb10739fefd11c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 14 13:16:25 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 15 21:51:14 2026 +0000"
      },
      "message": "[test] fix duplicate library warning on libkudu_test_main.a\n\nBefore this update, mold or contemporary LLVM linker would warn about\na duplicate libkudu_test_main static library while building the project:\n\n  ld: warning: ignoring duplicate libraries: \u0027../../../lib/libkudu_test_main.a\u0027\n\nThe duplication came from the dependency list of tserver_test_util,\nso every test binary that was dependent/linking in the server_test_util\nlibrary would contain duplicate entries for the kudu_test_main library\ndependency, and it resulted in linker command line with the same library\nlisted twice.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: I6e3e24b5a5bfe19d40bafaaa4de5f55aec251b82\nReviewed-on: http://gerrit.cloudera.org:8080/25121\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "8cb97df913c7d1b22aed844b1bfb10739fefd11c",
      "tree": "9ed8bba4b596a755769077f390eb52e0aa56ab95",
      "parents": [
        "15e90e7eabd9125ea31714a064a7e2d7f29dea33"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 09 18:03:52 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 15 00:33:24 2026 +0000"
      },
      "message": "[util] less memory allocation \u0026 copying for tracing output\n\nThis changelist reduces unnecessary memory allocation and data copying\nwhen outputting accumulated tracing data:\n\n  * Add Trace::operator\u003c\u003c(std::ostream\u0026) so callers can write directly\n    to the log stream without allocating and copying data into an\n    intermediate string.\n  * Optimize Trace::Dump(std::ostring\u0026, int) implementation to:\n     ** call Dump() on child traces instead of DumpToString(),\n        writing directly to the output stream\n     ** write JSON metrics via call to MetricToJSON() and then\n        calling rdbuf() rather than calling MetricsAsJSON()\n  * Optimize Trace::MetricsToJSON():\n     ** avoid memory allocation and copying of metric names into\n        a dictionary with std::string keys, using std::vector of\n        StringPiece instead to avoid per-element memory allocations\n        and make sure the result is sorted as expected\n  * Other style guide-related updates\n\nAlso, update stale callsites that provided a boolean \u0027true\u0027 instead\nof bit-wise flags for the Trace::Dump(std::ostream\u0026, int) method:\nnow the INCLUDE_TIME_DELTAS flag is used.\n\nChange-Id: I577fcb0966958646c9c6f459f33f5052c60a7c72\nReviewed-on: http://gerrit.cloudera.org:8080/25094\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "15e90e7eabd9125ea31714a064a7e2d7f29dea33",
      "tree": "925685be8dd91479d3627762762cd935db02b9a7",
      "parents": [
        "47edd31d67a688022fa331eed6a9df9d74e16a8f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 08 12:16:00 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 13 01:54:22 2026 +0000"
      },
      "message": "[trace] constexpr TC_* names for TRACE_COUNTER_INCREMENT\n\nThis changelist replaces string literal arguments at the majority of\nthe TRACE_COUNTER_INCREMENT macro callsites with constexpr constants\ndeclared just once.  This approach is more robust because:\n  * it is resistant to typos and other naming mishaps\n  * it provides more control over the result pointers that are used\n    as keys in the TraceMetrics\u0027 internal dictionary\n\nPartially generated-by: Cursor \u003ccursoragent@cursor.com\u003e\n\nChange-Id: If390ea10f49ddf2c38a2c2c1fccab34559e06753\nReviewed-on: http://gerrit.cloudera.org:8080/25081\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "47edd31d67a688022fa331eed6a9df9d74e16a8f",
      "tree": "ed3e4dd8e3b268e4882f3a045750f2f1dc7dbea7",
      "parents": [
        "1ebed4e6ad34f895fe0aadc2e47b978a10837a83"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sun Oct 11 15:08:17 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 13 01:53:53 2026 +0000"
      },
      "message": "[util] use std::ostream for JsonWriter\u0027s API\n\nAs it turns out, JsonWriter doesn\u0027t need stringbuf-alike interface for\nthe output it writes to, it\u0027s enough to have std::ostream.  From the\nother side, using basic std::ostream instead of std::ostringstream in\nJsonWriter allows for much more flexibility in choosing particular\nstream implementation at call sites.\n\nChange-Id: I815c06090aab07720ee1a9086937c45d8915503c\nReviewed-on: http://gerrit.cloudera.org:8080/25102\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "1ebed4e6ad34f895fe0aadc2e47b978a10837a83",
      "tree": "5fdf7822a241971a11a12db08b3b0ba2d78ead50",
      "parents": [
        "bdfb2b10cf5c5ce9eb67d0f669a5309d16b57ff4"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 08 21:32:11 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 12 22:56:37 2026 +0000"
      },
      "message": "[util] quell warning on deprecated allocator typedefs\n\nWhen compiling Kudu with on macOS with CLANG 21, there were too many\nwarnings on deprecation of std::allocator_traits-related typedefs as\nof the C++17 standard that polluted the output, making it\u0027s hard to\nspot relevant warnings:\n\n  src/kudu/util/mem_tracker.h:212:27: warning: \u0027pointer\u0027 is deprecated [-Wdeprecated-declarations]\n    212 |   typedef typename Alloc::pointer pointer;\n\nThose are deprecated in C++17 and removed in C++20, so it\u0027s better to\nadhere to the recommendations instead of adding corresponding\n-Wno-deprecated-declarations flag since we are planning to eventually\nstart requiring C++20 standard compliance for Kudu\u0027s source code.\n\nThis patch addresses the issue using [2] as an guideline.\n\nThere are no functional modifications in this changelist.\n\n[1] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r3.html\n[2] https://www.mathworks.com/help/bugfinder/ref/misrac2023rule4.1.2.html\n\nChange-Id: Iebb076793f0966ad19ef06215f24d3db6c681616\nReviewed-on: http://gerrit.cloudera.org:8080/25080\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "bdfb2b10cf5c5ce9eb67d0f669a5309d16b57ff4",
      "tree": "118f9ad2cea48eb701554867c846912c208ea74e",
      "parents": [
        "6a51400c44c7d0966fcf01950bde2d5776fbbce6"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 07 19:27:00 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 08 14:22:38 2026 +0000"
      },
      "message": "[util] remove commented-out lines in env-test.cc\n\nThere are no functional modifications in this changelist.\n\nThis is a follow-up to 8c037cfef1ca0a2509f034784ce232c69a8aeaa5.\n\nChange-Id: I26aa3ffd00bf136e5812a3ef8d7921b5f7226097\nReviewed-on: http://gerrit.cloudera.org:8080/25059\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "6a51400c44c7d0966fcf01950bde2d5776fbbce6",
      "tree": "2feac3f239b25064618668111bdaac4345f2e3f0",
      "parents": [
        "14b98e9b11e885edf0826c5fe84549ed1af683a1"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 05 15:14:33 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Oct 07 02:00:57 2026 +0000"
      },
      "message": "KUDU-3813 fix flakiness in txn_commit-itest scenarios\n\nWith very short keepalive interval setting for transactions, test\nscenarios would fail from time to time in TSAN builds.  For example,the\nTestDontBackgroundAbortIfCommitInProgress scenario would intermittently\nfail as described in the JIRA item.  This changelist increases the\nkeepalive interval from 300ms to 500ms, and also increases verification\ntime interval from 100ms to 250ms.  With this, a wider margin is\nprovided to cover for scheduler anomalies and other TSAN-induced pauses\nat overloaded test nodes.\n\nI ran 5K iterations of the TestDontBackgroundAbortIfCommitInProgress\nscenario and about 500 iterations of all the scenarios in TSAN\ninstrumented txn_commit-itest with --stress-cpu-threads\u003d8 after this\nupdate and there were no failures reported.\n\nChange-Id: I58746e38866788c0ec6b9ebac96bc8ec1c23ca72\nReviewed-on: http://gerrit.cloudera.org:8080/25029\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "14b98e9b11e885edf0826c5fe84549ed1af683a1",
      "tree": "816d6cebaa29b5d1abc53f66e73645ef8b480788",
      "parents": [
        "fc1035f7a725a5cc915d7a4c764fee1c03f2cb8e"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Tue Oct 06 23:22:47 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 06 23:08:44 2026 +0000"
      },
      "message": "KUDU-3802 fix master-test build on old GCC\n\nBind the ASSERT_EVENTUALLY() lambda in ClusterLeaderSkewMetric to a\nlocal instead of passing it inline. Older GCC (ubuntu18 toolchain)\nresolves __LINE__ for tokens from a macro argument to the outer macro\u0027s\nclosing paren, so the two NO_FATALS() calls collided on the same gtest\ngoto label (\"duplicate label \u0027gtest_label_testnofatal_917\u0027\"). Hoisting\nthe lambda out of the macro argument gives each NO_FATALS() its own line.\n\nChange-Id: I18bc6154eb3831612ad33177d32f28cc846f4dbf\nReviewed-on: http://gerrit.cloudera.org:8080/25035\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "fc1035f7a725a5cc915d7a4c764fee1c03f2cb8e",
      "tree": "078aafcd6a6b4514d268b19d01c10bac92e83541",
      "parents": [
        "92d89b116407553399dbd3509fa6690679499cdf"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Sun Aug 23 20:04:38 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Tue Oct 06 17:56:48 2026 +0000"
      },
      "message": "[Java] KUDU-3800: Add diff-scan option to return unobservable rows\n\nThe Java client side follow up work mirroring the C++ change. Adds\nAsyncKuduScanner.DiffScanRowVisibility (OBSERVABLE_ONLY,\nINCLUDE_UNOBSERVABLE) and a three argument diffScan() that takes it.\nUnlike the C++ side the prior two argument diffScan() is kept, now\ndelegating with OBSERVABLE_ONLY. It cannot be dropped here: the\nreleased flink-connector-kudu jar that kudu-replication binds to calls\nit from KuduSplitGenerator, and that bytecode is never recompiled\nagainst this tree, so removing the overload breaks continuous\nreplication at runtime with NoSuchMethodError.\n\nWhen INCLUDE_UNOBSERVABLE is set the scanner sends the visibility on\nNewScanRequestPB and advertises the DIFF_SCAN_ROW_VISIBILITY required\nfeature, so a server predating the feature rejects the scan rather\nthan silently dropping rows. Scan tokens record the dependency via\nScanTokenPB.Feature.RowVisibility, though feature flags in scan tokens\naren\u0027t verified as expected: see KUDU-3810, to be addressed in a\nseparate changelist.\n\nKuduScanTokenBuilder.build() serializes straight from the builder\nfields without running the AsyncKuduScanner constructor, so added the\nchecks done in the constructor here as well.\n\nOBSERVABLE_ONLY is the wire default, so an OBSERVABLE_ONLY diff scan\nemits the same requests and tokens as before this change.\n\nAdds tests for the scanner and scan-token paths. UPSERT lifecycles\ninside the diff window, wire-format assertions on the serialized\ntoken, and a required-feature test pinning that OBSERVABLE_ONLY\nadvertises nothing new. The argument validation tests run against both\nnewScannerBuilder() and newScanTokenBuilder().\n\nChange-Id: I9d61b2e942c9b2de1b46007f40311d1fb373104a\nReviewed-on: http://gerrit.cloudera.org:8080/24725\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "92d89b116407553399dbd3509fa6690679499cdf",
      "tree": "5ba82ddc15e81baf203c3335e99b27b7dd4db4b1",
      "parents": [
        "86fcc1918fa480e6e3497a16efc434e995e3b071"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Sep 23 10:19:29 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Oct 06 15:20:13 2026 +0000"
      },
      "message": "KUDU-3802 add cluster_leader_skew gauge\n\nThe counters on the auto-leader-rebalancer report activity: how many\nrounds ran, how many moves were scheduled. They don\u0027t report whether\nleadership is currently spread unevenly across the cluster, so an\noperator can\u0027t tell from them whether rebalancing is needed at all.\n\nThis changelist adds a cluster_leader_skew gauge on the master, next\nto the existing cluster_replica_skew one. It reports the difference in\nRaft leader count between the tablet server hosting the most leaders\nand the one hosting the fewest.\n\nTablet servers already track their own leader count in the\nnum_raft_leaders gauge, so the count only needs to be carried over to\nthe master. TSHeartbeatRequestPB gains an optional num_raft_leaders\nfield, and the master stores the last reported value in the\nTSDescriptor of the corresponding tablet server.\n\nBoth the heartbeat field and the master-side value are optional, so a\ntablet server running a version that predates the field is left out of\nthe calculation rather than counted as hosting no leaders. Counting it\nas zero would make it look like the least loaded server in the\ncluster, and the gauge would read as high as the maximum leader count\nfor as long as a rolling upgrade takes.\n\nThe new master-test scenario forges heartbeats to check the value of\nthe gauge, including the case of a tablet server that reports no\ncount. The new registration-test scenario checks that the count a real\ntablet server reports actually reaches the master.\n\nChange-Id: Iec82f841934f4e310509ee1b7156040b3bba5489\nReviewed-on: http://gerrit.cloudera.org:8080/24945\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": "86fcc1918fa480e6e3497a16efc434e995e3b071",
      "tree": "b2ef51bd6af4945db00468535a56b943157bd2e8",
      "parents": [
        "8c037cfef1ca0a2509f034784ce232c69a8aeaa5"
      ],
      "author": {
        "name": "Aleksandr Efimov",
        "email": "dzazheg@gmail.com",
        "time": "Mon Oct 05 15:03:50 2026 +0300"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Oct 06 13:59:43 2026 +0000"
      },
      "message": "[net] preserve errno from failed recv()\n\nSocket::Recv() calls GetPeerAddress() before saving errno. After a\nconnection reset, peer lookup also fails and can replace the original\nECONNRESET with ENOTCONN.\n\nSave errno before the peer lookup. Keep the fault-injection regression\ntest and add a real TCP reset test for IPv4 and IPv6. Use SetLinger()\nto close the accepted socket with zero linger and verify that Recv()\nreports ECONNRESET with the expected error text. The EOF path still\nreports ESHUTDOWN.\n\nTesting: all 8 socket-test tests pass. The real TCP reset test passes\n100 repetitions. Focused native build, cpplint and diff check pass.\n\nChange-Id: I9196b35ee15d2111379a5a504745e83c831b640b\nReviewed-on: http://gerrit.cloudera.org:8080/25016\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "8c037cfef1ca0a2509f034784ce232c69a8aeaa5",
      "tree": "424f7b7e3bbc6dba4c6b882bfc4285b7c562e1b7",
      "parents": [
        "9468b1674ee7be56a60f16cbaa33e878b31d7b6a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 25 11:56:03 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Oct 05 05:52:02 2026 +0000"
      },
      "message": "[util] an update on --never_fsync flag usage\n\nThis changelist extends --never_fsync flag\u0027s application into the\nPosix{RW,Writable}File::Flush() methods: they invoke sync_file_range()\nsystem call, conceptually doing exactly the same what fsync() does, but\nfor a portion of a file [1].  The motivation for this came from a few\nexperiments running a test workload generated by the `kudu perf loadgen`\nCLI tool against a Kudu cluster that doesn\u0027t synchronize data to the\nunderlying storage at critical data points.\n\nIn addition, introduce trace metric counters for call sites of the\nsync_file_range() syscall and count in yet another fsync() invocation\non a directory in PosixEnv::SyncDir().\n\nAlso, wrap all FLAGS_never_fsync-based criteria into the PREDICT_FALSE()\nmacro since --never_fsync is a hidden/test-only flag which shouldn\u0027t be\never enabled in a real production system.\n\n[1] https://man7.org/linux/man-pages/man2/sync_file_range.2.html\n\nChange-Id: I637e3bd98da98495a38f78176a4a862ab6ae8dd3\nReviewed-on: http://gerrit.cloudera.org:8080/24963\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\n"
    },
    {
      "commit": "9468b1674ee7be56a60f16cbaa33e878b31d7b6a",
      "tree": "81d9baa4790338caff49452f3184bc8609c1b1ef",
      "parents": [
        "63a8252e2805cff4426f854d0e65f9cd7aca146b"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Oct 01 12:44:42 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Oct 02 05:36:59 2026 +0000"
      },
      "message": "[java] update Netty up to 4.1.138.Final version\n\nNetty 4.1.138.Final contains many CVE fixes [1] (without assigned IDs\nat this time), so let\u0027s update the Netty dependency to please security\nscanners.\n\n[1] https://github.com/netty/netty/releases#release-netty-4.1.138.Final\n\nChange-Id: I6fd393e8d6e769f04b1765fcd01884a6c64138ea\nReviewed-on: http://gerrit.cloudera.org:8080/24998\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "63a8252e2805cff4426f854d0e65f9cd7aca146b",
      "tree": "a74b0085dd7c91c52e1438a5f490dd72e11eaa58",
      "parents": [
        "c148ac351691b8f7ca8f901e9ecec85f08a7d420"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 16 13:32:27 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 30 13:38:34 2026 +0000"
      },
      "message": "[kudu-jepsen] remove kudu-jepsen Java sub-project\n\nThe kudu-jepsen Java sub-project hasn\u0027t been maintained for several\nyears already, and there hasn\u0027t been much demand or interest in\nreviving it so far.  All Gradle\u0027s tasks for the sub-project\u0027s were\neffectively no-op with [1] (circa October 2020).\n\nThere was an alternative changelist posted for review at [2] to catch\nkudu-jepsen up to the recent jepsen and clojure versions.  However,\nthe automation piece was still missing, so it required maintaining\nseveral pre-provisioned nodes/VMs to run the testbench.\n\nEventually, after digesting review feedback for [2] and a few rounds\nof offline discussions, the consensus arrived to the decision: drop\nthe jepsen-based sub-project from the Kudu\u0027s upstream repo.\nIf necessary, it\u0027s possible to restore and refresh it from the repo\nwhen there is interest in providing more coverage for data consistency\nguarantees in Kudu.\n\nWith this update, perhaps we\u0027ll need to close KUDU-2036, KUDU-2034,\nand KUDU-2609 with \"Won\u0027t Fix\" resolution.\n\n[1] https://github.com/apache/kudu/commit/41a7c4e4e\n[2] https://gerrit.cloudera.org/#/c/24867/\n\nChange-Id: I3bd19411c8b032c326ba992d6ce83e38426ff66e\nReviewed-on: http://gerrit.cloudera.org:8080/24876\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "c148ac351691b8f7ca8f901e9ecec85f08a7d420",
      "tree": "00297ecc230e26909582aa69af72ac39648fe85f",
      "parents": [
        "2f4ec13d527ebe9c0190d0c6dc42a29c8c7cf028"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 29 15:06:54 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Wed Sep 30 08:17:44 2026 +0000"
      },
      "message": "[tests] fix comment in status-test\n\nThis changelist addresses follow-up feedback comments on [1];\nit doesn\u0027t contain any functional modifications.\n\nThis is a follow-up to 3abfc3e270b48c5a2e69ad8b9aebc64e2a8e2644.\n\n[1] https://gerrit.cloudera.org/#/c/24962/\n\nChange-Id: I918aea4f87eb8641f5d3f1152696eac1addaabc5\nReviewed-on: http://gerrit.cloudera.org:8080/24974\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "2f4ec13d527ebe9c0190d0c6dc42a29c8c7cf028",
      "tree": "3a4b2ceddc7a152617c34dddcdfc9367672e0936",
      "parents": [
        "3abfc3e270b48c5a2e69ad8b9aebc64e2a8e2644"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sun Sep 27 21:30:44 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 29 22:01:59 2026 +0000"
      },
      "message": "[thirdparty] fix Postgres memset_s() build issue on macOS\n\nThis changelist adds an extra patch from PostgreSQL\u0027s upstream git repo\nto address compilation error on macOS after the recent update in Kudu\u0027s\n3rd-party to enable building with GCC 15 [2]:\n\n  thirdparty/src/postgresql-17.2/src/port/explicit_bzero.c:22:9: error:\n        call to undeclared function \u0027memset_s\u0027; ISO C99 and later do not\n        support implicit function declarations\n        [-Wimplicit-function-declaration]\n     22 |         (void) memset_s(buf, len, 0, len);\n\nAlso, it updates the CFLAGS used to build PostgreSQL: keeping the flags\ncompatible with GCC 7, it switches the default C standard mode\nfrom C17 to C11, replacing -std\u003dc17 with -std\u003dc11.\n\n[1] https://github.com/postgres/postgres/commit/12eee85e5\n[2] https://github.com/apache/kudu/commit/2acbccb8c\n\nChange-Id: I88651ddd056c90c02f65148905c61eb0f4e54f94\nReviewed-on: http://gerrit.cloudera.org:8080/24964\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "3abfc3e270b48c5a2e69ad8b9aebc64e2a8e2644",
      "tree": "a56f8d203fc017ae4eb0a3d13bced8da8ee085b6",
      "parents": [
        "c813a7c233c8758be91ac38d31c0124ccb0880f7"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 25 16:28:02 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Sep 28 18:21:59 2026 +0000"
      },
      "message": "[util] optimize Status move assignment operator\n\nThe C++ standard doesn\u0027t require a lot from source objects of\nstd::move().  At least, for STL objects the requirements are like\nbelow [1]:\n\n  Unless otherwise specified, all standard library objects that have been\n  moved from are placed in a \"valid but unspecified state\", meaning the\n  object\u0027s class invariants hold (so functions without preconditions,\n  such as the assignment operator, can be safely used on the object\n  after it was moved from).\n\nApplying this to the Status class, it\u0027s possible to postpone\ndeallocating of the internal buffer to the time when the \"moved from\"\nStatus object goes out of scope, not calling \u0027delete\u0027 in the move\nassignment operator itself.\n\nI also snuck in a fix for KUDU_ATTR_NODISCARD macro\u0027s comment.\n\n[1] https://cppreference.com/cpp/utility/move\n\nChange-Id: Id98a4e4970e3dfc61c22e46ed8fa69393f56aaae\nReviewed-on: http://gerrit.cloudera.org:8080/24962\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "c813a7c233c8758be91ac38d31c0124ccb0880f7",
      "tree": "1e853597fecc9290b4954ac0a470ba1e78897cd6",
      "parents": [
        "6e5cd39fdef425820f9cc48c8b2cd83b6d0cfaa7"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 18 14:23:03 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Sep 28 10:46:14 2026 +0000"
      },
      "message": "KUDU-3806: add deadline-bounded WaitAndCollect()\n\nAdd Subprocess::WaitAndCollect(), which concurrently drains the child\u0027s\npiped stdout and stderr while waiting for it to exit, up to a deadline.\nDraining both pipes together means a large write on one cannot deadlock\nagainst a full buffer on the other; if the deadline passes first the\nchild is killed (SIGKILL), \u0027*timed_out\u0027 is set, and whatever output was\ncollected so far is still returned.\n\nTo support this, ReadFdsFully() gains a deadline: a one-shot libev timer\n(DeadlineHelper) breaks the drain loop when it fires, and each fd watcher\nnow decrements a shared open-count so the loop ends deterministically at\nEOF even with the timer armed. An uninitialized deadline preserves the\nhistorical \"drain to EOF\" behavior, which is what Subprocess::Call()\ncontinues to pass.\n\nThis is groundwork for running each MCP tools/call in a bounded child\n\u0027kudu\u0027 process.\n\nChange-Id: I582ea89b0ada4f723695df8d98d7e5bc0bbc7f7f\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24905\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "6e5cd39fdef425820f9cc48c8b2cd83b6d0cfaa7",
      "tree": "4e28cf2659175c00f74615c3b1be456da19fe0d1",
      "parents": [
        "3b18f0139b1d21a072b7353269301fba16dca54e"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Wed Jul 22 16:05:18 2026 +0530"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Mon Sep 28 10:43:07 2026 +0000"
      },
      "message": "KUDU-3734 Compaction budget refinements and observability\n\nKUDU-3734 added UNDO delta sizes to the knapsack budget used for rowset\ncompaction selection to prevent OOM. While effective, including UNDO\ndeltas at full weight can cause compaction to skip rowsets\nunnecessarily, particularly when UNDO deltas are large relative to\nbase+redo data. Skipped rowsets accumulate, increase average rowset\nheight, and eventually slow down scans because each scan must open\niterators across more overlapping DiskRowSets.\n\nThis change addresses three concerns raised as follow-ups:\n1. Budget refinements to reduce unnecessary skipping\n   a) --rowset_undo_deltas_budget_weight(double, default 1.0, runtime):\n      A fractional multiplier applied to UNDO delta sizes when computing\n      the budget weight of a rowset candidate. At the default of 1.0\n      there is no change in behaviour.\n   b) --rowset_deltas_size_include_undo is now tagged \u0027runtime\u0027:\n      Previously this flag required a server restart to toggle. Making\n      it runtime-changeable enables operators and future auto-disable\n      mechanisms to flip it live without disruption.\n2. Metrics to detect slow scans caused by budget-induced compaction lag\n   a) rowsets_per_scan (tablet-level, histogram, max\u003d1024, kDebug):\n      Tracks the distribution of DiskRowSet iterators opened per scan\n      request, recorded in Tablet::CaptureConsistentIterators(). The MRS\n      and any txn_memrowset iterators are excluded so the histogram\n      measures only the on-disk overlap a scan must resolve. A rising\n      P99 is the most direct observable consequence of insufficient\n      compaction: more overlapping DiskRowSets means more data sources\n      that must be merged to produce a single scan result.\n3. Detection and operator notification when the system is degraded\n   a) compaction_budget_skip_health (tablet-level, gauge, uint32, kInfo):\n      Set to 1 (degraded) when at least one DiskRowSet candidate\n      individually exceeds --tablet_compaction_budget_mb and is therefore\n      permanently unselectable under the current settings. Set to 0\n      (healthy) otherwise.\n   b) tablets_num_compaction_budget_degraded\n      (tablet-server-level, gauge, int32, kWarn):\n      Number of tablet replicas on the tablet server whose\n      compaction_budget_skip_health gauge is 1 (degraded).\n   c) Throttled WARNING log (at most once per 300 s):\n      When oversized rowsets are detected, a WARNING is emitted naming\n      the exact flags to adjust, so users know what to do from the\n      tserver log.\n\nCorresponding unit tests are added to:\ncompaction-test.cc\ncompaction_policy-test.cc\nts_tablet_manager-test.cc\n\nConditions (when met) that require an action from operator:\nCondition 1 alone is sufficient to act; conditions 2 and 3\nindicate urgency and user-visible impact respectively.\n1. Permanent skip state is confirmed: This alone is sufficient evidence\n   to warrant action (not just investigation): one or more rowsets\n   individually exceed the budget and will never be selected for\n   compaction under the current settings.\n   i.e., tablets_num_compaction_budget_degraded \u003e 0\n2. Compaction is not keeping up: Average diskrowset height keeps moving\n   upwards. A sustained upward trend in \u0027average_diskrowset_height\u0027 over\n   a rolling window of your choosing.\n3. Scans are accessing more rowsets: An early warning of user-visible\n   scan impact while the problem is still confined to tail scans\n   (wide/full-table queries). Condition 1 identifies the structural root\n   cause; this identifies the downstream scan impact. A sustained rise\n   in the 99th percentile of \u0027rowsets_per_scan\u0027 over a rolling window of\n   your choosing.\n\nClear condition: the situation is resolved when\n\u0027tablets_num_compaction_budget_degraded\u0027 returns to 0. This happens\nautomatically once oversized rowsets are GC\u0027d or the budget/weight is\nadjusted, as \u0027compaction_budget_skip_health\u0027 resets to 0 on the next\nPickRowSets() run.\n\nActions to take:\n1. Reduce UNDO weight (--rowset_undo_deltas_budget_weight) to 0.5 (or\n   half its current value if already lowered) and stop if\n   \u0027compaction_budget_skip_health\u0027 clears after the next compaction cycle.\n2. If reducing UNDO weight doesn\u0027t help, disable UNDO accounting\n   (--rowset_deltas_size_include_undo) entirely.\n   Note: this removes the OOM guard that UNDO inclusion was originally\n   added for. Monitor tserver memory pressure after making this change.\n3. If neither of the above actions are desirable in a given environment,\n   raise the compaction budget (--tablet_compaction_budget_mb) further.\n\nThese guidelines address the side-effects that can arise from enabling\n--rowset_deltas_size_include_undo. The exact conditions and appropriate\nactions may vary depending on the environment, workload characteristics,\nand cluster configuration.\n\nChange-Id: Id63db0006c77ad1d55eb2119d99ee64499435819\nReviewed-on: http://gerrit.cloudera.org:8080/24618\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "3b18f0139b1d21a072b7353269301fba16dca54e",
      "tree": "9ba54c0e7afa1b9a8cabe3fed0bf91bc169dde86",
      "parents": [
        "102683f65af844d269565345d7d8c6ebc55c92c5"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Thu Sep 24 18:44:43 2026 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 25 16:43:45 2026 +0000"
      },
      "message": "[tablet] make tablet_compaction_budget_mb a runtime flag\n\nFLAGS_tablet_compaction_budget_mb previously required a tablet-server\nrestart to take effect. This change makes it a runtime flag so that\noperators can adjust the compaction budget without restarting.\n\nBudgetedCompactionPolicy now stores the budget in size_budget_mb_, which\nis initialised at construction time and refreshed at the top of every\nPickRowSets() call. This ensures that RunApproximation() and RunExact()\nboth see a consistent, immutable budget for the duration of a single\ncompaction selection, while any runtime change to the flag is picked up\non the next selection.\n\nNewly added test (i.e., TestFlagDrivesPickRowSets) verifies the\nend-to-end behaviour: lowering the budget to 1 MB causes PickRowSets to\nselect no rowsets (no merge benefit for a single rowset), and raising it\nto 4 MB causes all three overlapping rowsets to be selected.\n\nChange-Id: Id0515daff32d952cc9dc45d604cf41bf6018d403\nReviewed-on: http://gerrit.cloudera.org:8080/24932\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "102683f65af844d269565345d7d8c6ebc55c92c5",
      "tree": "fd10532a8711a1c8b7a9fcad5c11fd9d7c73d205",
      "parents": [
        "f54a74dbda21190564f0b7dc57dcf6625452debf"
      ],
      "author": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 04 12:11:19 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 25 10:48:01 2026 +0000"
      },
      "message": "[spark] KuduSink: honor auth and encryption opts\n\nKuduSink captured requireAuthentication and encryptionPolicy in its\nconstructor but never passed them to the KuduContext it created, so the\ncontext always fell back to the defaults (no authentication required,\nOPTIONAL encryption). As a result streaming writes silently ignored the\nkudu.requireAuthentication and kudu.encryptionPolicy options, unlike the\nbatch read path in KuduRelation which forwards them correctly.\n\nForward both options into the KuduContext, matching KuduRelation.\n\nAdd StreamingTest coverage against an insecure cluster: requiring\nauthentication or encryption must now fail the write instead of\nsilently proceeding; both new tests fail without the fix.\n\nCo-Authored-By: Claude Opus 4.8\n\nChange-Id: I661a45fe327d2d8adca5898f211b14233d5d813f\nReviewed-on: http://gerrit.cloudera.org:8080/24791\nTested-by: Kudu Jenkins\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "f54a74dbda21190564f0b7dc57dcf6625452debf",
      "tree": "b77bc97236d4d2ae103ce0e04024cda0bedbdbfe",
      "parents": [
        "45d7eec4e3c43096ed05a5ede267d0cc91d7a32c"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Aug 14 14:21:37 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Fri Sep 25 09:01:33 2026 +0000"
      },
      "message": "KUDU-3791 add metrics for auto-leader-rebalancer\n\nBefore this change, log grepping was the only way to see what the\nauto-leader-rebalancer was doing. Adds six counters on the master:\n\n- auto_leader_rebalancer_moves_scheduled\n- auto_leader_rebalancer_moves_completed\n- auto_leader_rebalancer_moves_failed\n- auto_leader_rebalancer_rounds_completed\n- auto_leader_rebalancer_global_pass_skipped\n- auto_leader_rebalancer_task_errors (MetricLevel::kWarn)\n\nNaming and units mirror the counters AutoRebalancerTask already\nexposes, so the two tasks read as a matched pair on /metrics.\n\nThe three move counters keep the invariant\n\n    moves_scheduled \u003d moves_completed + moves_failed\n\nover transfers we actually tried, i.e. once we\u0027ve committed to\nsending the LeaderStepDown RPC. Planned moves that turn out to be\nstale by the time we get to executing (source tserver deregistered,\ndestination now in maintenance mode) are skipped without touching\nany of the three.\n\ntask_errors is warn-severity and meant as the main alerting signal.\nIt\u0027s bumped in RunLoop() when RunLeaderRebalancer() returns an\nunexpected error. Losing catalog-manager leadership mid-round is\nnow swallowed like the first ScopedLeaderSharedLock check already\ndoes, so a leader flap on its own doesn\u0027t bump the counter.\n\nAdds a LeaderRebalancerTest.RebalancerMetrics test that exercises\nall six counters and asserts the invariant.\n\nChange-Id: I49b86e59043a7f652d4f556b94582bb74c5698ad\nReviewed-on: http://gerrit.cloudera.org:8080/24694\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": "45d7eec4e3c43096ed05a5ede267d0cc91d7a32c",
      "tree": "ea22c60cc72a55feaf3cfab7b602cee67a56baf2",
      "parents": [
        "ae52405967cd2709483ea5c02e613be50ab23f43"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Tue Sep 22 15:34:14 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Thu Sep 24 20:04:41 2026 +0000"
      },
      "message": "[build] add BUILD_JAVA_EXAMPLES flag to skip Java examples tests\n\nIntroduce BUILD_JAVA_EXAMPLES (default 1) in build-and-test.sh so build\nenvironments that don\u0027t need the examples/java/ projects can skip\ntest-java-examples.sh.\n\nChange-Id: I6e4d3636d9845da7a29b3e3da5c98fc5ea49adbb\nReviewed-on: http://gerrit.cloudera.org:8080/24919\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "ae52405967cd2709483ea5c02e613be50ab23f43",
      "tree": "9476b3e935a95842651c4d2b892f03ac87a6bb9b",
      "parents": [
        "ee47a9ca1939200e227f9bf266c97a7c0eed3ccc"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Sep 16 14:45:38 2026 +0200"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Thu Sep 24 12:11:34 2026 +0000"
      },
      "message": "KUDU-3761 drop default for prefer_follower_moves\n\nLocationBalancingAlgo requires callers to pass\n\u0027prefer_follower_moves\u0027 explicitly. TwoDimensionalGreedyAlgo\nstill defaulted it to true, so callers could quietly opt into\nfollower-preferring behavior by leaving the arg off.\n\nDrop that default. The trailing EqualSkewOption default goes\nwith it (defaults must be contiguous at the end); update the\nzero/one-arg call sites in rebalance_algo-test.cc to pass both\nargs.\n\nChange-Id: I2a86f1345b3adad084813e1b61a4a38ef566d035\nReviewed-on: http://gerrit.cloudera.org:8080/24863\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nTested-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "ee47a9ca1939200e227f9bf266c97a7c0eed3ccc",
      "tree": "4785c55f78193922fd73c6c60d37e8f6ca040f49",
      "parents": [
        "faa920b8364ca43fd9d419253dab85c46533dc98"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Thu Sep 10 18:09:18 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 24 01:16:38 2026 +0000"
      },
      "message": "[metrics] add --metrics_prometheus_default_metrics for a server-side allowlist\n\nThe /metrics_prometheus endpoint already honors a per-request \u0027metrics\u0027\nallowlist (a case-insensitive substring match), but there is no server-side\ndefault: only severity has one, via --metrics_default_level. As a result, any\nscrape that omits the \u0027metrics\u0027 parameter -- an ad-hoc curl, a one-off script,\nor a misconfigured collector -- receives the full metric set, and the allowlist\nmust be carried in every scrape URL. That URL channel is bounded by the ~16KB\nrequest buffer and is prone to silent degradation: if the value collapses to no\nusable token, filtering is disabled and the full output is returned.\n\nAdd --metrics_prometheus_default_metrics, mirroring the existing\n--metrics_prometheus_default_merge_rules / --metrics_prometheus_default_quantiles\nfamily: a request\u0027s own \u0027metrics\u0027 parameter takes precedence over the flag\ndefault, which is applied only when the request carries none; an empty value\n(the default) preserves the current behavior. This turns the allowlist from a\nper-request convention into a server-side policy that covers parameter-less\nscrapes as well.\n\nAlso simplify the \u0027export_all\u0027 check in Histogram::WriteAsPrometheus() per\na review suggestion from Change-Id: I01b48aa.\n\nChange-Id: I70ef54eef456108f8503a4edfdfb68fab3173353\nReviewed-on: http://gerrit.cloudera.org:8080/24836\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "faa920b8364ca43fd9d419253dab85c46533dc98",
      "tree": "b9db52a50ce48ce6b3d028f4bfd69dc657542bc7",
      "parents": [
        "e4a7274b7f656c5a3403e13a9113f093660f9061"
      ],
      "author": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@gmail.com",
        "time": "Tue Sep 15 08:31:23 2026 +0200"
      },
      "committer": {
        "name": "Zoltan Martonka",
        "email": "zmartonka@cloudera.com",
        "time": "Tue Sep 22 15:30:55 2026 +0000"
      },
      "message": "[tserver] Validate deprecated range predicate column type.\n\nPassing a different column type might allow some OOB reads.\n\nChange-Id: I82ad53ad2263ca587e81fd37d64cc7982060b0f1\nReviewed-on: http://gerrit.cloudera.org:8080/24845\nTested-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Gabriella Lotz \u003clotzgabriella@gmail.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "e4a7274b7f656c5a3403e13a9113f093660f9061",
      "tree": "797061aa5b9144ca75b70b013b08e7b3d10024da",
      "parents": [
        "82425427e5cfb547318e20e6e8ad23b77674996f"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 16 20:59:52 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Sep 21 21:37:48 2026 +0000"
      },
      "message": "KUDU-3788 an option to keep existing symlinks in /opt/kudu/thirdparty\n\nThis changelist introduces an option to avoid re-creation of symbolic\nlinks from /opt/kudu/thirdparty to the actual location of pre-built\n3rd-party artifacts when building Kudu 3rd-party components.\n\nThe behavior is controlled by the newly introduced env/shell variable\nPREBUILT_THIRDPARTY_RECREATE_SYMLINKS, which is set to 1 by default.\nIn multi-tenant environments with multiple concurrent actors each using\nits own Kudu workspace but exactly same versions of 3rd-party\ncomponents, setting PREBUILT_THIRDPARTY_RECREATE_SYMLINKS\u003d0 helps to\navoid races that often lead to build failures of earlier started builds.\n\nChange-Id: I22f612f343a3f5ea3cca48836ebc76a167af59e7\nReviewed-on: http://gerrit.cloudera.org:8080/24869\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "82425427e5cfb547318e20e6e8ad23b77674996f",
      "tree": "96a6c5831c9bf404b28b58db8122b91872e010bd",
      "parents": [
        "5211f66b8064766ad99371df76e973b99f6bdb96"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 15 19:42:06 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 18 19:55:01 2026 +0000"
      },
      "message": "KUDU-3805 prefer using mold linker when available\n\nThis changelist enables using the mold linker [1] for building Kudu\nand addresses KUDU-3614 as well.\n\nWith the mold linker, it was necessary to switch to using --exclude-libs\nfor gflags and glog libraries to avoid exporting their symbols.\nIt seems the mold linker doesn\u0027t recognize and interpret the *google::*\npattern the same way as a GNU ld-compatible linker does.  With that,\nI removed corresponding sections from src/kudu/client/symbols.map.\nMaybe, we need to eventually switch to using --exclude-libs\u003dALL and\navoid using the --version-script provisions, but it\u0027s a separate story.\n\n[1] https://github.com/rui314/mold\n\nChange-Id: I9cd76b3cfa96b6ebd119a95d24834fe154e56aa0\nReviewed-on: http://gerrit.cloudera.org:8080/24862\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "5211f66b8064766ad99371df76e973b99f6bdb96",
      "tree": "f11f511e5d9c598d481e42da6bde08cf95dd150e",
      "parents": [
        "9c00f29bd7aeb0b8c0c821b732f9c8b1f9d2eb46"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 17 14:00:42 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 18 00:31:05 2026 +0000"
      },
      "message": "[client] remove yaml-cpp symbols from libkudu_client\n\nIt seems YAML-CPP symbols appeared in the kudu_client library on\nUbuntu 18 in ASAN builds after recent update [1].  I didn\u0027t try to find\nthe reason why they weren\u0027t visible in other build configurations on\nUbuntu 18 and other platforms, but this changelist addresses the issue.\n\nBefore this update, the client_symbols-test.sh would fail on Ubuntu 18\nin ASAN build when running ./bin/client_symbol-test.sh with errors\nlike below (all \u0027bad\u0027 symbols were from libyaml-cpp.a):\n\n  ...\n  Found bad symbol \u0027YAML::detail::node_data::size() const\u0027\n  Found bad symbol \u0027YAML::detail::node_data::begin() const\u0027\n  Kudu client library contains 70 bad symbols\n\nThis is a follow-up to [1].\n\n[1] https://github.com/apache/kudu/commit/5c5cca66d\n\nChange-Id: I66065562a2431431d62dfef21a1ee4d9df11c1e3\nReviewed-on: http://gerrit.cloudera.org:8080/24879\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "9c00f29bd7aeb0b8c0c821b732f9c8b1f9d2eb46",
      "tree": "1e7546054cd3bb791b09c77fce77f01061856f61",
      "parents": [
        "d66c9079679a25a53f2f87523297124310299bc0"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 15 17:30:08 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 17 00:45:25 2026 +0000"
      },
      "message": "[experiments] don\u0027t link unused test libraries\n\nIt turns out the kudu_test_main and kudu_test_util libraries aren\u0027t\nused by the binaries built under src/kudu/experiments.  It\u0027s not a\nproblem to have them when linker tolerates that, but with the mold\nlinker an attempt to link them results in errors about duplicate\nmain() symbols.  Let\u0027s drop useless libraries that lead to linkage\nerrors with the mold linker.\n\nChange-Id: I7f32f5d8c4a104c7f429d3a9b4cb1fa056d40c25\nReviewed-on: http://gerrit.cloudera.org:8080/24861\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d66c9079679a25a53f2f87523297124310299bc0",
      "tree": "cb2854d30fa2d7cffc4c1134ea20552b015924ae",
      "parents": [
        "c70ca057cfddee374528657ede2f117c17dddedd"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 15 15:32:15 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 16 17:46:21 2026 +0000"
      },
      "message": "KUDU-3804 fix --exclude-libs for libkudu_client\n\nWith [1] which addressed KUDU-3334 came the --exclude-libs linker\ndirective for libprotobuf.  It seems Kudu used the GNU gold linker\nfor the majority of supported platforms before relatively recent\nupdate [2], and --exclude-libs worked as expected.  BTW, the GNU gold\nlinker has been deprecated for some time already, and the binutils\nof versions 2.44 and newer no longer contain the gold linker [3].\n\nAs mentioned in [4], GNU ld and gold allow --exclude-libs\u003db to hide b.a,\nbut ld.lld requires --exclude\u003dlibs\u003db.a.  Since Kudu switched to\nthirdparty ld.lld instead of GNU gold since [2], it makes sense to keep\nthe --exclude-libs linker\u0027s directive behaving as expected for all the\nlinkers that Kudu is able to use.\n\nI compared the list of protobuf symbols exposed by the exported\nlibkudu_client.so library with and without this patch.  The difference\nis below:\n\n  --- /tmp/no-a-suffix.symbols    2026-09-15 15:24:38.125949226 -0700\n  +++ /tmp/a-suffix.symbols       2026-09-15 15:22:40.369171889 -0700\n  @@ -1,13 +1,5 @@\n  -W descriptor_table_google_2fprotobuf_2fany_2eproto_getter()\n  -W descriptor_table_google_2fprotobuf_2ftype_2eproto_getter()\n  -W descriptor_table_google_2fprotobuf_2fwrappers_2eproto_getter()\n  -W descriptor_table_google_2fprotobuf_2fdescriptor_2eproto_getter()\n  -W descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto_getter()\n   W bool google_breakpad::MinidumpFileWriter::WriteStringCore\u003cchar\u003e(char const*, unsigned int, MDLocationDescriptor*)\n   W bool google_breakpad::MinidumpFileWriter::WriteStringCore\u003cwchar_t\u003e(wchar_t const*, unsigned int, MDLocationDescriptor*)\n  -R TableStruct_google_2fprotobuf_2fany_2eproto::offsets\n  -R TableStruct_google_2fprotobuf_2ftype_2eproto::offsets\n  -R TableStruct_google_2fprotobuf_2fwrappers_2eproto::offsets\n   T kudu::KuduPartialRow::SetVarchar(kudu::Slice const\u0026, kudu::Slice const\u0026)\n   T kudu::KuduPartialRow::SetVarchar(int, kudu::Slice const\u0026)\n   T kudu::KuduPartialRow::SetArrayBool(kudu::Slice const\u0026, std::vector\u003cbool, std::allocator\u003cbool\u003e \u003e const\u0026, std::vector\u003cbool, std::allocator\u003cbool\u003e \u003e const\u0026)\n  @@ -633,8 +625,6 @@\n   T kudu::operator!\u003d(kudu::MonoDelta const\u0026, kudu::MonoDelta const\u0026)\n   T kudu::operator+(kudu::MonoTime const\u0026, kudu::MonoDelta const\u0026)\n   T kudu::operator+(kudu::MonoDelta const\u0026, kudu::MonoDelta const\u0026)\n  -R TableStruct_google_2fprotobuf_2fdescriptor_2eproto::offsets\n  -R TableStruct_google_2fprotobuf_2fsource_5fcontext_2eproto::offsets\n   W boost::exception::~exception()\n   W boost::exception::~exception()\n   W boost::exception::~exception()\n  @@ -1165,9 +1150,4 @@\n   V vtable for std::_Sp_counted_base\u003c(__gnu_cxx::_Lock_policy)2\u003e\n   V vtable for std::bad_optional_access\n   V vtable for std::_Sp_counted_ptr_inplace\u003ckudu::KuduPartialRow, std::allocator\u003cvoid\u003e, (__gnu_cxx::_Lock_policy)2\u003e\n  -D descriptor_table_google_2fprotobuf_2fany_2eproto\n  -D descriptor_table_google_2fprotobuf_2fdescriptor_2eproto\n  -D descriptor_table_google_2fprotobuf_2fsource_5fcontext_2eproto\n  -D descriptor_table_google_2fprotobuf_2ftype_2eproto\n  -D descriptor_table_google_2fprotobuf_2fwrappers_2eproto\n   D z_errmsg\n\n[1] https://github.com/apache/kudu/commit/5d39a74a1\n[2] https://github.com/apache/kudu/commit/1d789a87a\n[3] https://www.phoronix.com/news/GNU-Gold-Linker-Deprecated\n[4] https://maskray.me/blog/lld-and-gnu-linker-incompatibilities\n\nChange-Id: I8950dc0d2c0f4b56782f201f417608acd2420025\nReviewed-on: http://gerrit.cloudera.org:8080/24859\nReviewed-by: Michael Smith \u003cmichael.smith@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "c70ca057cfddee374528657ede2f117c17dddedd",
      "tree": "6ecc338dbe522e2cdef5178572d2fba69053db6e",
      "parents": [
        "d06637b2775c9786e7b955076af7982a1fae426a"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 28 15:06:58 2026 -0700"
      },
      "committer": {
        "name": "Marton Greber",
        "email": "greber.mx@gmail.com",
        "time": "Tue Sep 15 09:07:59 2026 +0000"
      },
      "message": "[docs] update build instruction for RHEL9 and newer\n\nStarting with RHEL9, many core Perl modules were decoupled from the main\ninterpreter package, and perl-FindBin was one of them.  The module is\nnecessary to build PostgreSQL in 3rd-party from source.\n\nThis changelist introduces corresponding updates into the instructions\nfor building/installing Kudu on RHEL9 and newer.\n\nChange-Id: I98bb4372c09424f35e7c4821a2be5b4fd0010848\nReviewed-on: http://gerrit.cloudera.org:8080/24843\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    },
    {
      "commit": "d06637b2775c9786e7b955076af7982a1fae426a",
      "tree": "0bbb36cc41c0115aa58017f2cfb31f6c3f06b365",
      "parents": [
        "12a7f877497ef503242e433ee1893bf3590a2459"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 09 14:24:42 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 10 14:59:28 2026 +0000"
      },
      "message": "[misc] fix compilation warnings with GCC-15 on CWG #2237\n\nSince GCC-15 implemented the resolution on CWG Issue 2237 [1], there\nwas a flood of warnings like below when compiling with GCC-15.  This\nchangelist addresses the issue.\n\n  src/kudu/gutil/macros.h:98:11: warning: template-id not allowed for constructor in C++20 [-Wtemplate-id-cdtor]\n     98 |   TypeName(const TypeName\u0026) \u003d delete;      \\\n        |           ^\n  src/kudu/gutil/ref_counted.h:102:3: note: in expansion of macro ‘DISALLOW_COPY_AND_ASSIGN’\n    102 |   DISALLOW_COPY_AND_ASSIGN(RefCounted\u003cT\u003e);\n        |   ^~~~~~~~~~~~~~~~~~~~~~~~\n  src/kudu/gutil/macros.h:98:11: note: remove the ‘\u003c \u003e’\n\nThis changelist doesn\u0027t contain any functional modifications.\n\n[1] https://cplusplus.github.io/CWG/issues/2237.html\n\nChange-Id: Idb863c8cf547d6da79489944269f0c257de7411b\nReviewed-on: http://gerrit.cloudera.org:8080/24809\nTested-by: Kudu Jenkins\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "12a7f877497ef503242e433ee1893bf3590a2459",
      "tree": "9dd2f829fda4e56fa5f4d8464c10fae99918472c",
      "parents": [
        "5c5cca66d536635ccfb77ca292a8b48a8635676c"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 09 15:44:33 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 10 14:59:18 2026 +0000"
      },
      "message": "[tests] don\u0027t set stddev to 0 for normal distribution\n\nIn libstdc++ that comes with GCC 15.2 on Ubuntu 26.04 LTS, setting\nthe standard deviation argument to 0 for std::normal_distribution()\nleads to runtime assertions like below:\n\n  /usr/include/c++/15/bits/random.h:2138: std::normal_distribution\u003c_RealType\u003e::param_type::param_type(_RealType, _RealType) [with _RealType \u003d double]: Assertion \u0027_M_stddev \u003e _RealType(0)\u0027 failed.\n\nThis changelist addresses the issue.\n\nChange-Id: I237b7fe64c0798a499d54b25f9cfebd22e5f038b\nReviewed-on: http://gerrit.cloudera.org:8080/24810\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "5c5cca66d536635ccfb77ca292a8b48a8635676c",
      "tree": "b16a8ed7595c9e9b19a852e28fb00274fc58c59d",
      "parents": [
        "5e26213a8828e1667041c34f5263581e7fc946e4"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 08 18:10:05 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 09 22:43:40 2026 +0000"
      },
      "message": "[thirdparty] update yaml-cpp up to 0.9.0 version\n\nAlong with several improvements and fixes since 0.8.0, the new version\nallows for building yaml-cpp with GCC-15 (e.g., on Ubuntu 26), so no\nextra patches are necessary on top of the upstream source code.\n\nIn yaml-cpp 0.9.0 a new option YAML_ENABLE_PIC was introduced.  Let\u0027s\nuse it instead of manually adding -fPIC to the CC/CXX flags.  With 0.9.0\nversion, enforcing the C++17 standard is necessary to avoid errors when\ncompiling with CLANG-11 [1].\n\n[1] https://github.com/jbeder/yaml-cpp/issues/1334\n\nChange-Id: Idcce22fef6b1e1ce4e31dfab9224a1957e6a1022\nReviewed-on: http://gerrit.cloudera.org:8080/24783\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "5e26213a8828e1667041c34f5263581e7fc946e4",
      "tree": "ce23041d4ca63518deeda436184ca298f0888c54",
      "parents": [
        "5b481d173bb87fc1a1596fe20a1a6c563d922e75"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 08 19:05:34 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 09 21:54:27 2026 +0000"
      },
      "message": "[thirdparty] build LLVM/CLANG 11 on Ubuntu 26\n\nThis changelist back-ports various fixes from the LLVM/CLANG upstream\nrepo to allow for building 3rd-party LLVM/CLANG 11 with newer glibc\nversions (e.g., glibc 2.43 that comes with Ubuntu 26.04 LTS).\n\nChange-Id: I3f8f5b7cdf862c3157ac7902163c101db0f15aa0\nReviewed-on: http://gerrit.cloudera.org:8080/24806\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "5b481d173bb87fc1a1596fe20a1a6c563d922e75",
      "tree": "c6dcacce7ab11d74e9dc25fb2b9895c02644ef05",
      "parents": [
        "67e6e1ce3bdccba196d19e3ddcb02565bed69bf3"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Fri Sep 04 11:52:26 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 09 14:06:59 2026 +0000"
      },
      "message": "[metrics] Support quantile selection in /metrics_prometheus\n\nNative Kudu histograms are exported in the Prometheus summary format with\na fixed set of seven quantile lines (min \u00270\u0027, 0.75, 0.95, 0.99, 0.999,\n0.9999, and max \u00271\u0027) plus \u0027_sum\u0027 and \u0027_count\u0027. On clusters with many\nhistogram metrics and entities, every unwanted quantile is an extra\nexported time series, adding to scrape payload and TSDB cardinality.\n\nThis lets an operator export only the quantiles they care about. The\nselection is driven either per-request via the \u0027quantiles\u0027 query\nparameter (e.g. ?quantiles\u003d0.99,0.999) or server-wide via the new\n--metrics_prometheus_default_quantiles flag, which is applied whenever a\nrequest does not carry its own \u0027quantiles\u0027. A request parameter takes\nprecedence over the flag. This mirrors the existing \u0027merge_rules\u0027 /\n--metrics_prometheus_default_merge_rules mechanism.\n\nAn empty selection (the default) exports every quantile, so existing\noutput is unchanged. Unknown quantile tags are ignored with a warning;\nif a request or flag resolves to no known tags, all quantiles are\nexported (fail-open). The \u0027_sum\u0027 and \u0027_count\u0027 lines are always exported.\nOnly the Prometheus endpoint is affected; the JSON endpoint is untouched.\n\nChange-Id: I01b48aa30f26f2a7efcd842bf6512a023cbf90ff\nReviewed-on: http://gerrit.cloudera.org:8080/24790\nTested-by: Kudu Jenkins\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "67e6e1ce3bdccba196d19e3ddcb02565bed69bf3",
      "tree": "d2d3f09b7258d2b54358e621308afdd614b50eb0",
      "parents": [
        "4d7e35e58cc081b5ecc336a047709af97ac45ccb"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Fri Sep 04 15:07:01 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 04 14:26:56 2026 +0000"
      },
      "message": "[metrics] Avoid string allocations in metric filter matching\n\nMetric filtering (the ?types\u003d/?ids\u003d/?attributes\u003d/?metrics\u003d query\nparameters on the /metrics and /metrics_prometheus endpoints) is\nimplemented via MatchName(), a case-insensitive substring match. The\nprevious implementation allocated two uppercased std::string copies on\nevery single comparison. Because the metric-name filter runs once per\nmetric per entity per filter term, a scrape of a cluster with many\ntablets could trigger hundreds of thousands of short-lived heap\nallocations per request.\n\nThis patch rewrites MatchName() to perform the case-insensitive\nsubstring search in place with std::search() and ascii_toupper(),\nallocating nothing. The attribute-value filter is also switched from\nMatchNameInList() with a single-element initializer list to a direct\nMatchName() call, removing a per-attribute temporary std::vector.\n\nThe change is behavior-preserving: an empty pattern still matches\neverything (mirroring string::find(\"\")), and matching remains a\ncase-insensitive ASCII substring test. A new TestFilterMatchNameSemantics\ncovers exact/substring/mixed-case/multi-term/empty-pattern metric-name\nmatching and case-insensitive attribute-value matching.\n\nChange-Id: Id283467cd9e1b6ea992f7acbe9b5f9e3ae6693d8\nReviewed-on: http://gerrit.cloudera.org:8080/24789\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": "4d7e35e58cc081b5ecc336a047709af97ac45ccb",
      "tree": "5261850a623254ac9d2359370494a645d64d59de",
      "parents": [
        "2acbccb8cc0315a9fc9f27de90ffe32f482e1817"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Tue Sep 01 11:22:52 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Sep 04 02:02:34 2026 +0000"
      },
      "message": "[metrics] Support merge_rules aggregation in /metrics_prometheus\n\nThe /metrics_prometheus endpoint now supports the same entity merging\nthat the /metrics JSON endpoint has offered for years, so that per-tablet\nmetrics can be aggregated into per-table (or any user-defined) entities\nbefore being exported. On clusters with a large number of tablets this\ndrastically cuts down the number of exported Prometheus time series,\nwhich is the dominant source of cardinality pressure when scraping Kudu\nnatively.\n\nMerging is requested either per-request via the \u0027merge_rules\u0027 query\nparameter (identical syntax to the JSON endpoint, e.g.\n?merge_rules\u003dtablet|table|table_name), or server-wide via the new\n--metrics_prometheus_default_merge_rules flag, which is applied whenever\na request does not carry its own \u0027merge_rules\u0027. A request parameter takes\nprecedence over the flag.\n\nChange-Id: I76a365de3b328f2beefd460626cc0c896537e713\nReviewed-on: http://gerrit.cloudera.org:8080/24779\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "2acbccb8cc0315a9fc9f27de90ffe32f482e1817",
      "tree": "12734bbecb73871da66e2327bfb5d0d581b51e15",
      "parents": [
        "c317e67900300cb2e4f54dbf6227efb0e33b342b"
      ],
      "author": {
        "name": "Joe McDonnell",
        "email": "joemcdonnell@cloudera.com",
        "time": "Sat Nov 01 12:38:37 2025 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Sep 03 23:28:32 2026 +0000"
      },
      "message": "KUDU-3803: Add support for building Kudu with GCC 15\n\nThis makes minor changes to the thirdparty build to\nsupport GCC 15:\n - Specify C17 for the postgresql build\n - Patch LLVM, Yaml, and RocksDB to add the cstdint header\n\nTesting:\n - Built Kudu with GCC 15\n - Built Kudu with an older system compiler\n\nChange-Id: I1e8a32837a1d9d6eb6b9dcc3c0369f42ce229ebc\nReviewed-on: http://gerrit.cloudera.org:8080/24788\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "c317e67900300cb2e4f54dbf6227efb0e33b342b",
      "tree": "f01906934d8e4066b1237b23d17f0d657df27c5b",
      "parents": [
        "12f7a3316bac4c18063bb944f621305e8117d087"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Tue Jul 21 22:44:18 2026 +0530"
      },
      "committer": {
        "name": "Ashwani Raina",
        "email": "araina.git@gmail.com",
        "time": "Thu Sep 03 09:25:33 2026 +0000"
      },
      "message": "[tablet] Skip stable_sort for already sorted batch\n\nTablet::BulkCheckPresence unconditionally runs std::stable_sort over the\nencoded-key/index pairs for every write batch before deduplicating and\nissuing the RowSetTree lookup. When a client submits rows already in\nincreasing key order such as bulk-ingest tools (e.g. \u0027kudu perf loadgen,\nImpala INSERT ... ORDER BY, Spark/Sqoop pipelines that pre-sort by PK)\nand workloads with monotonic primary keys typically do, this sort is\npure overhead: the input is already a valid stable-sorted output.\n\nThis patch tracks an \u0027is_sorted\u0027 flag while building \u0027keys_and_indexes\u0027\nin the loop that already scans every op, flipping it to false on the\nfirst out-of-order pair. When the flag survives to the end of the loop,\nthe stable_sort is skipped entirely, improving performance by a slight\nmargin if not significant.\n\nMeasured with \u0027kudu perf loadgen --use_upsert --num_rows_per_thread\u003d5M\u0027\non a single-tablet cluster (RELEASE build), median of N\u003d5 runs:\n\nWithout this patch and sorted input batch:\nfor i in 1 2 3 4 5; do ./build/latest/bin/kudu perf loadgen \\\n      127.0.0.1:8764 --use_upsert --num_threads\u003d1 \\\n      --num_rows_per_thread\u003d5000000 --table_num_hash_partitions\u003d1 \\\n      --table_num_range_partitions\u003d1 \\\n      --buffer_size_bytes\u003d$((96 * 1024 * 1024)) \\\n      2\u003e\u00261 | grep \"time total\"; done\n    time total: 4419.16 ms\n    time total: 4433.7 ms\n    time total: 4430.2 ms\n    time total: 4395.23 ms\n    time total: 4346.59 ms\nMedian: 4419 ms\nMean: 4405 ms\n\nWith this patch and sorted input batch:\nfor i in 1 2 3 4 5; do ./build/latest/bin/kudu perf loadgen \\\n      127.0.0.1:8764 --use_upsert --num_threads\u003d1 \\\n      --num_rows_per_thread\u003d5000000 --table_num_hash_partitions\u003d1 \\\n      --table_num_range_partitions\u003d1 \\\n      --buffer_size_bytes\u003d$((96 * 1024 * 1024)) \\\n      2\u003e\u00261 | grep \"time total\"; done\n    time total: 4181.83 ms\n    time total: 4103.07 ms\n    time total: 4183.71 ms\n    time total: 4121.75 ms\n    time total: 4133.22 ms\nMedian: 4133 ms\nMean: 4145 ms\n\nMedian speedup: 6.5%\nMean speedup: 5.9%\n\nChange-Id: I28d3f5ebdf7e3f13f04ffe8d35417a98c370fcf7\nReviewed-on: http://gerrit.cloudera.org:8080/24615\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\n"
    },
    {
      "commit": "12f7a3316bac4c18063bb944f621305e8117d087",
      "tree": "48667e48e700438ad52d87d69157a9d55407aefa",
      "parents": [
        "fef53a025e2c3b723392ba019fb4a8b1380defe3"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Wed Aug 12 15:25:28 2026 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Sep 02 20:09:12 2026 +0000"
      },
      "message": "KUDU-3795 Fix ENOSPC on dist-test due to compaction tests\n\nHighDeltaVolumeWithFrequentFlushForRowsetCompaction generates large\namounts of on-disk delta data. When multiple test instances run\nconcurrently on dist-test slaves sharing the same tmpfs, their combined\ndisk usage can exhaust available space and trigger ENOSPC, causing\nmisleading failures.\nThe test is removed from compaction-highmem-test.cc and preserved as a\nstandalone benchmark in src/kudu/benchmarks/compaction_highmem_benchmark.cc.\nThe benchmark is built via add_executable (not ADD_KUDU_TEST) and is\ntherefore never scheduled by the CI runner. It exercises the full\nintended workload — kRowsPerRowset\u003d1000 with 64 KiB wide UNDO-delta\nmutations — and pins FLAGS_memory_limit_hard_bytes to 20 GiB so that\npeak compaction memory naturally crosses the hard limit and emits the\n\"beyond hard memory limit\" warning without any artificial threshold\nmanipulation.\ntablet.h declares CompactionHighMemBenchmark as a friend class so the\nbenchmark can access the same private test-only tablet APIs used by the\noriginal test (FlushAllDMSForTests, GetRowSetsForTests).\n\nChange-Id: I38df827a72626840a4da49e8a7b9d7f699525555\nReviewed-on: http://gerrit.cloudera.org:8080/24679\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "fef53a025e2c3b723392ba019fb4a8b1380defe3",
      "tree": "a1b032b4e6b1a03f505cc9a6e0998e138c1b2658",
      "parents": [
        "e05f1343237a07541e8e0857ee202b5cdb9ccc61"
      ],
      "author": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@apache.org",
        "time": "Sun Jul 12 14:59:42 2026 -0700"
      },
      "committer": {
        "name": "Abhishek Chennaka",
        "email": "achennaka@cloudera.com",
        "time": "Tue Sep 01 16:37:01 2026 +0000"
      },
      "message": "KUDU-3800 Add diff-scan option to return unobservable rows\n\nA diff scan reports rows whose state changed inside the\n(snap_start_timestamp, snap_timestamp] range. Rows live at\nsnap_start_timestamp and deleted before snap_timestamp are surfaced\nvia \u0027include_deleted_rows\u0027; rows inserted or updated inside the range\nthat are still live at snap_timestamp are surfaced by default. But rows\nwhose entire lifecycle (INSERT -\u003e eventual DELETE) is contained inside\nthe range exist at neither endpoint, so no snapshot read would see\nthem, and \u0027include_deleted_rows\u0027 does not apply. It only surfaces\nrows that were live at snap_start_timestamp. The diff scan drops them\neven though a two-tier system that uses diff scans to keep a second\ntier consistent with Kudu would want them: a row previously migrated\nout of Kudu that is re-inserted and re-deleted inside a diff-scan\nwindow is not reported today, so any stale copy downstream is never\nreconciled.\n\nNote: This is NOT change-data-capture. The diff scan collapses all\nmutations for a row within the range into a single output row\nreflecting its state at snap_timestamp; intermediate UPDATE values and\nmutation counts are not preserved. Callers needing per-mutation\nhistory need a different mechanism.\n\nThis patch adds an optional \u0027row_visibility\u0027 knob to the\nNewScanRequestPB and plumbs it through:\n- ScanConfiguration / KuduScanner. A new SetDiffScan overload takes a\n  \u0027DiffScanRowVisibility\u0027 enum (OBSERVABLE_ONLY / INCLUDE_UNOBSERVABLE)\n  so the intent is legible at call sites.\n- ScanTokenPB and KuduScanTokenBuilder, so token-based clients can carry\n  the flag over the wire.\n- RowIteratorOptions -\u003e MemRowSet iterator and DeltaApplier /\n  SelectedDeltas, where the \"drop unobservable\" test now short-circuits\n  when the caller opts in. Such rows are returned marked deleted via the\n  IS_DELETED virtual column.\n\nThe tablet server enforces the invariant uniformly: it returns\nINVALID_SCAN_SPEC if the flag is set without snap_start_timestamp\n(regardless of read mode), and on diff scans whose projection lacks\nan IS_DELETED virtual column. DCHECKs in DeltaApplier and MemRowSet\ncatch in-process callers that build a RowIteratorOptions with the flag\nset outside a valid diff-scan configuration.\n\nThe RPC field is a new \u0027optional enum\u0027 and is wire-compatible with\nolder servers (which ignore it) and older clients (which don\u0027t set it).\n\nCorresponding tests have been added in tablet_server-test.cc, client-test.cc,\nscan_token-test.cc and diff_scan-test.cc.\n\nThe prior two argument SetDiffScan() (which was never part of the client ABI)\nis now replaced with three argument SetDiffScan() and exported for user code\nbut documented private.\n\nFollowup work to include Java client support.\n\nChange-Id: I0d0727fb2b89c727c669ec218e3bb8594336359a\nReviewed-on: http://gerrit.cloudera.org:8080/24578\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "e05f1343237a07541e8e0857ee202b5cdb9ccc61",
      "tree": "0aa5c2d87258f15cf0c0a3964cd8f551c7f751cb",
      "parents": [
        "715d86d880571ba6f3ab028fae2e5b2dabb487f1"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 28 19:04:15 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Sep 01 00:20:52 2026 +0000"
      },
      "message": "[thirdparty] upgrade libunwind to 1.8.3 version\n\nAlong with multiple fixes and updates [1], this update allows for\nbuilding 3rd-party\u0027s libunwind on RHEL10 aarch64.\n\nI also added --disable-tests option since the tests aren\u0027t run as a part\nof building libunwind in 3rd-party.\n\n[1] https://github.com/libunwind/libunwind/compare/v1.7.2...v1.8.3\n\nChange-Id: Ibaff64592ccb21af29292963587510ba8e286e7f\nReviewed-on: http://gerrit.cloudera.org:8080/24765\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "715d86d880571ba6f3ab028fae2e5b2dabb487f1",
      "tree": "85e9652de30aab1c65b747ccad017b636a650a08",
      "parents": [
        "d1d4335085140e477e5ad80c45e24f22332751df"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Aug 12 14:37:03 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Aug 29 04:32:57 2026 +0000"
      },
      "message": "KUDU-3761 prefer follower moves cross-location\n\nLocationBalancingAlgo had no follower awareness: it picked the\nfirst equally most-loaded source in its internal order. Moving a\nleader triggers a leadership transfer that can disrupt clients.\n\nApply the same two-candidate pattern TwoDimensionalGreedyAlgo\nuses: among sources tied on load, prefer one that hosts a\nnon-leader replica of the target table+tag, falling back to any\ntied source when none qualifies.\n\nExtend --prefer_follower_replica_moves and\n--auto_rebalancing_prefer_follower_replica_moves to cover the\ncross-location path too.\n\nChange-Id: I8a162a227071caf37d572ba60c2bc49608d14e65\nReviewed-on: http://gerrit.cloudera.org:8080/24683\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d1d4335085140e477e5ad80c45e24f22332751df",
      "tree": "615fd00bb3aaee00142ec25d733958e190d221e1",
      "parents": [
        "30c8c9873d05d42c3428a58c479c479274e871da"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Aug 27 12:30:40 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 28 22:24:23 2026 +0000"
      },
      "message": "KUDU-3788 add description for \u003ccomp\u003e_SRC_URL variable\n\nThere are no functional modifications in this changelist.\n\nThis is a follow-up to e9f266eab1175912594b7de17f2440ddc12caf26.\n\nChange-Id: I4c3ce634c794d45d5f769c1a6928cabf7bbc3a88\nReviewed-on: http://gerrit.cloudera.org:8080/24760\nTested-by: Kudu Jenkins\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "30c8c9873d05d42c3428a58c479c479274e871da",
      "tree": "f956ac527492636a259946afd5c0d579d426d9fe",
      "parents": [
        "741f8ee044b9985780da4569a093f70682849df6"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 18 17:37:06 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 26 18:42:44 2026 +0000"
      },
      "message": "KUDU-3788 introduce \u0027any\u0027 for OS, OS version, arch, toolchain\n\nSome of the 3rd-party artifacts used by Kudu are architecture and/or\nOS-independent: e.g., Java JARs, JS scripts, Python code, etc.\nIt doesn\u0027t make much sense to store same bits duplicated in pre-built\narchives that differ only by name, especially if those\nOS/arch-independent pre-built artifacts are the heaviest ones\n(e.g., that\u0027s so for JARs).\n\nThis changelist introduces \u0027any\u0027 as a wildcard for matching against OS,\nOS version, architecture, and the build toolchain.  Enabling the \u0027any\u0027\nwildcard is done by setting corresponding \u003ccomp\u003e_ANY_OS,\n\u003ccomp\u003e_OS_VERSION, \u003ccomp\u003e_ANY_ARCH, and \u003ccomp\u003e_ANY_TOOLCHAIN variables\nto non-zero in thirdparty/vars.sh.  This changelist does so for hadoop,\nhive, ranger, ranger_kms, postgres_jdbcspace space hogs and for the\nrest of the components that don\u0027t build any binaries and don\u0027t modify\nthe contents of their source tarballs: trace-viewer, gcovr, sparsepp,\nsparsehash, cpplint, rapidjson.  This is also done for jwt-cpp: it\u0027s\na header-only library with a non-trivial build procedure to find proper\nSSL library implementation to build against.\n\nPrometheus is marked with PROMETHEUS_ANY_OS_VERSION and\nPROMETHEUS_ANY_TOOLCHAIN.  With that, there is still duplication in\npre-built artifacts for different Linux flavors/distros.  A follow-up\nchangelist may take care of this, perhaps introducing variables such as\n\u003ccomp\u003e_ANY_LINUX_DISTRO, \u003ccomp\u003e_ANY_OS_FLAVOR, or similar.\n\nChange-Id: I52428b8f2a558feb4d8247f37351ce2b6df1e4f7\nReviewed-on: http://gerrit.cloudera.org:8080/24710\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "741f8ee044b9985780da4569a093f70682849df6",
      "tree": "61dfff867c9375cba9f21f0c888ae32b408f8144",
      "parents": [
        "09f1e1482d01fd73ee2b0b642c00ac61b5b39dc1"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Aug 24 22:33:53 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 25 19:10:57 2026 +0000"
      },
      "message": "KUDU-3788 download-thirdparty.sh --\u003e download-src.sh\n\nSince it\u0027s now possible to download not only the source archives of Kudu\n3rd-party components but their pre-built artifacts as well, there is a\nbit of ambiguity in the name of the \u0027download-thirdparty.sh\u0027 script.\n\nThis changelist attempts to bring more clarity in this regard, renaming\nthe script into \u0027download-src.sh\u0027.\n\nThis changelist doesn\u0027t have any functional modifications.\n\nChange-Id: I7dc4932452eaada9160b84ffc312bd0a3464446e\nReviewed-on: http://gerrit.cloudera.org:8080/24732\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\n"
    },
    {
      "commit": "09f1e1482d01fd73ee2b0b642c00ac61b5b39dc1",
      "tree": "d66cbe1fee82967088810a11bacb6aab917d0b51",
      "parents": [
        "22028a29fa0b27bb82bdcd8812a5a06d2d23c44b"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Wed Aug 12 18:23:47 2026 +0530"
      },
      "committer": {
        "name": "Ashwani Raina",
        "email": "araina.git@gmail.com",
        "time": "Thu Aug 20 05:52:52 2026 +0000"
      },
      "message": "[dist-test] Fix chrpath ETXTBSY race in dist slaves\n\nchrpath rewrites ELF RPATH/RUNPATH entries in-place using an open() with\nwrite permission. Linux returns ETXTBSY for that open() when the target\ninode is currently being executed by some process.\n\nSince KUDU-3788 all dist-test slaves share a single prebuilt thirdparty\ninstallation. fixup_rpaths() is called at the start of every task\nregardless of build type and walks the entire thirdparty tree. If an\nASAN or TSAN task on the same slave has already spawned llvm-symbolizer,\nany subsequent task calling chrpath on that binary will fail with\nETXTBSY. The failure surfaces in whichever task runs fixup_rpaths()\nconcurrently, which can be a DEBUG/RELEASE task even though the cause is\nalways an ASAN/TSAN task holding llvm-symbolizer open for execution.\nMultiple such errors (\u0027open: Text file busy\u0027) were seen in dist-test\nruns, all pointing to chrpath failing to rewrite llvm-symbolizer.\n\nThe rewritten RPATH is what makes a lock-free fix possible: fix_rpath()\nrewrites each thirdparty component to \u0027$ORIGIN/\u003crelative path to\nthirdparty\u003e\u0027. That value is anchored at $ORIGIN and is a pure function\nof the binary\u0027s position within the extracted tree, so it does not\ndepend on the absolute extraction path, the build type, or the session.\nAny two tasks that share a binary therefore compute the identical target\nRPATH. This yields two properties that together remove the race without\nany coordination:\n\n- Idempotent short-circuit: if the computed RPATH already equals the\n  current one, fix_rpath() returns without opening the inode for\n  writing. The first task to relativize a shared binary makes it a\n  no-op for every later task, so chrpath is never invoked on a binary\n  another task is already executing (e.g. llvm-symbolizer, which ships\n  with \u0027$ORIGIN/../lib\u0027 and is skipped outright). Since all sharers\n  target the same value, even a concurrent rewrite writes identical\n  bytes.\n\n- ETXTBSY fallback: for the first rewrite of a binary that is genuinely\n  busy, attempt the in-place chrpath and, only if it fails, classify\n  the failure by probing the kernel errno directly (chrpath reports\n  ETXTBSY via the locale-dependent strerror text \"Text file busy\", so\n  matching on errno is robust). On ETXTBSY, copy the binary to a\n  sibling temp file, rewrite the RPATH on the copy, and atomically\n  replace the original with os.rename(). os.rename() only updates the\n  directory entry, so any process already executing the original inode\n  continues undisturbed. Any non-ETXTBSY failure is propagated.\n\nThis eliminates the ETXTBSY failure for all build types without\nrequiring any coordination between concurrent tasks.\n\nChange-Id: I80cdc5b903f5ed0865ec5a92f905a46719f7e316\nReviewed-on: http://gerrit.cloudera.org:8080/24681\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\n"
    },
    {
      "commit": "22028a29fa0b27bb82bdcd8812a5a06d2d23c44b",
      "tree": "d76f9388afd24169d74452aa16b600d86bf5d803",
      "parents": [
        "2f7a035ee6577724b1fcfd33079d9224b52731e8"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Aug 17 19:31:50 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 19 14:13:34 2026 +0000"
      },
      "message": "[thirdparty] skip building unused LLVM/CLANG tools\n\nThis changelist removes a few more LLVM/CLANG tools from the list\nof components to build: those aren\u0027t used in Kudu.  Removing unused\ntools helps reduce build times and the size of the pre-built archive.\n\nBelow are the stats on the pre-built archive size reduction for a\ncouple of supported platforms:\n  llvm-11.0.0.p10.rhel-9.x86_64.gcc-11.5.tar.xz         333668880\n  llvm-11.0.0.p11.rhel-9.x86_64.gcc-11.5.tar.xz         283293488\n\n  llvm-11.0.0.p10.macos-26.x86_64.clang-17.0.tar.xz     237209484\n  llvm-11.0.0.p11.macos-26.x86_64.clang-17.0.tar.xz     198899528\n\nChange-Id: Ia8efa4c3cd4edfa788d633c32debdec1b63b48ea\nReviewed-on: http://gerrit.cloudera.org:8080/24705\nReviewed-by: Ashwani Raina \u003caraina.git@gmail.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "2f7a035ee6577724b1fcfd33079d9224b52731e8",
      "tree": "96d151144469040101c115b4eb957a30a3f0a0f3",
      "parents": [
        "e9f266eab1175912594b7de17f2440ddc12caf26"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 18 15:03:21 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 19 14:13:03 2026 +0000"
      },
      "message": "KUDU-3788 remove custom mapping in component_name_to_tag\n\nOnce introducing LIBCXXABI_xxx and LIBCXX_xxx variables into\nthirdparty/vars.sh pointed to their LLVM_xxx counterparts, there\nisn\u0027t a need to perform custom mapping for libcxxabi and libcxx\ncomponents in the component_name_to_tag() function anymore.\n\nThere are no functional modifications in this changelist.\n\nChange-Id: Ib278feaf3a6932b049d33ad0867ed0a1c1954b95\nReviewed-on: http://gerrit.cloudera.org:8080/24708\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "e9f266eab1175912594b7de17f2440ddc12caf26",
      "tree": "6ce21f2d0b28499b5183a00a1303ccf56830e847",
      "parents": [
        "6786802fcb2d06c98e3bfbfcbfadd87d59e1cf20"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 14 16:48:19 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Mon Aug 17 16:22:09 2026 +0000"
      },
      "message": "KUDU-3788 introduce custom source URL\n\nSometimes it\u0027s useful to fetch the source archive for a 3rd-party\ncomponent from an alternative URL.  The most common use case is when\nadding a new component or upgrading an existing one if it\u0027s too early\nto publish the source in the dedicated S3 bucket yet (e.g, if still\nexperimenting with something).  This changelist introduces a new\nvariable \u003ccomponent_name\u003e_SRC_URL to address that.\n\nI also updated the fetch-utils.sh script to unify on error reporting\noutput.\n\nChange-Id: I44252718701dd608f6911c1b2d557b5f824359a5\nReviewed-on: http://gerrit.cloudera.org:8080/24697\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": "6786802fcb2d06c98e3bfbfcbfadd87d59e1cf20",
      "tree": "f06e9496f4f62b69f2cb402e247c2107833c6c6e",
      "parents": [
        "c667e360fcbe6a4a10338cf690e4792b7252d449"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 12:58:47 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 14 22:36:29 2026 +0000"
      },
      "message": "KUDU-3788 download source archives by demand only\n\nPrior changelist [1] introduced fetching source archives by demand\nin pre-built mode (USE_PREBUILT_THIRDPARTY\u003d1).  Meanwhile, in legacy\n(i.e. non-pre-built mode), all of the source archives would still be\nunconditionally downloaded.  This changelist extends on-demand source\narchive fetching to the legacy mode as well.\n\nThe download-thirdparty.sh can still be used to fetch, extract, patch\nand configure the source code for all the 3rd-party components when run\nas a stand-alone script.  However, it\u0027s no longer invoked when running\nbuild-if-necessary.sh.\n\n[1] http://gerrit.cloudera.org:8080/24673 (git hash 1d9153c24)\n\nChange-Id: I51a1822070f6e37726e4efd53ba5e536c9eb8fb9\nReviewed-on: http://gerrit.cloudera.org:8080/24687\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "c667e360fcbe6a4a10338cf690e4792b7252d449",
      "tree": "5fcdf64c3f6013ddd0879dbefd8f095fb0e0605c",
      "parents": [
        "565fa2a0c8b8655dfe08c1dca95e4b4d9408fc9c"
      ],
      "author": {
        "name": "zhangyifan27",
        "email": "chinazhangyifan@163.com",
        "time": "Fri Jul 24 18:59:33 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Aug 13 23:00:02 2026 +0000"
      },
      "message": "[tools/master] make move of a leader replica recoverable\n\nMoving a replica (\u0027kudu tablet change_config move_replica\u0027 or \u0027kudu cluster\nrebalance\u0027) is client-driven: the source is marked \u0027replace\u0027 and, if it is\nthe leader, the client asks it to step down so it can be evicted (Raft can\u0027t\nevict a leader). If the client is interrupted (Ctrl+C, or an aborted/timed-out\nrebalance) after the config change but before the leader steps down, the\ntablet is left over-replicated with a stuck, un-evictable leader.\n\nAdd two recovery paths:\n\n* Master-side self-healing: once a leader marked \u0027replace\u0027 has its replacement\n  promoted to voter, ProcessTabletReport() schedules an\n  AsyncLeaderStepDownForReplacementTask to step it down so it can be evicted\n  (see ShouldStepDownLeaderForReplacement(); guarded by\n  --catalog_manager_step_down_leader_for_replacement, on by default, 3-4-3\n  only). Driven by tablet state, so it recovers an interrupted move_replica or\n  \u0027cluster rebalance\u0027 with no client involved.\n\n* CLI idempotency (move_replica): IsReplicaMoveScheduled() lets MoveReplica()\n  detect an already-scheduled move and wait for it, so re-running resumes\n  instead of failing on the over-replicated tablet.\n\nChange-Id: Ic7b28ca4e41355bd82c76d50e137f06197b402bc\nCo-authored-by: Cursor \u003ccursoragent@cursor.com\u003e\nReviewed-on: http://gerrit.cloudera.org:8080/24630\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "565fa2a0c8b8655dfe08c1dca95e4b4d9408fc9c",
      "tree": "71258ad1814b61e293f1b75c61a04a8fb94f79db",
      "parents": [
        "cabd5fca7afdd414ab0b605bcd0acdc7bedc1832"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Wed Aug 12 14:07:55 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 12 19:42:21 2026 +0000"
      },
      "message": "remove std::move on optional\u003cMonoTime\u003e deadline\n\nMonoTime wraps a single int64_t, so std::move on the deadline\ndoes nothing beyond a plain copy. clang-tidy flags these sites\nin rebalancer_tool.cc as performance-move-const-arg; drop the\nstd::move.\n\nNo behavior change.\n\nChange-Id: I468f3cfd22de98d51c725dcecc15ed35e4cfe8ad\nReviewed-on: http://gerrit.cloudera.org:8080/24680\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "cabd5fca7afdd414ab0b605bcd0acdc7bedc1832",
      "tree": "1dfa06707af4ff8f76498c6ff20afdb8b32e40a5",
      "parents": [
        "70c51312f1186a8ae9f46647160b7730123f7601"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 15:24:24 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 12 14:32:33 2026 +0000"
      },
      "message": "KUDU-3788 fix working with zip source archives\n\n  * use \u003ccomponent\u003e_ARCHIVE variables instead of assuming the source\n    archive is always .tar.gz (so, now building rapidjson from source\n    is fixed after updates introduced with [1])\n  * use a robust incantation to call curl for fetching source archives,\n    so it no longer reports success if server returns non-success HTTP\n    codes (e.g., HTTP 404)\n  * reformat in the section of LLVM-related variables in vars.sh\n  * introduce necessary variables for libcxx and libcxxabi in vars.sh to\n    fix building libcxx and libcxxabi after updates introduced with [1]\n\nThis is a follow-up to [1].\n\n[1] http://gerrit.cloudera.org:8080/24673 (git hash 1d9153c24)\n\nChange-Id: I3cdf089c62e3d9f1b251605f75947fc98abf9812\nReviewed-on: http://gerrit.cloudera.org:8080/24677\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Abhishek Chennaka \u003cachennaka@cloudera.com\u003e\n"
    },
    {
      "commit": "70c51312f1186a8ae9f46647160b7730123f7601",
      "tree": "4ea96d0175846ca91848f37cf8c1c3219a31fe1a",
      "parents": [
        "bea38fae5e1a94f4a83acd90a398a50f4aff46f9"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Fri Jul 17 14:49:50 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 12 02:20:25 2026 +0000"
      },
      "message": "KUDU-3760 expose follower-move flag in rebalancer\n\nThe follower-move preference added for the auto-rebalancer changed the\ndefault of TwoDimensionalGreedyAlgo\u0027s constructor to prefer follower\nmoves. The CLI rebalance tool default-constructs that algorithm, so it\nstarted preferring follower moves silently, with no way to turn it off.\n\nAdd a --prefer_follower_replica_moves flag (default true, to match both\nthe auto-rebalancer\u0027s flag and the new constructor default)\nand plumb it through to the algorithm. This keeps the current behavior\nbut makes it explicit and overridable from the command line.\n\nAdds a parameterized test that runs the tool with the flag set both ways\nand checks the cluster still ends up balanced.\n\nChange-Id: I5f1b03da71b11af82f18ff9e20dcaa676b185645\nReviewed-on: http://gerrit.cloudera.org:8080/24613\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "bea38fae5e1a94f4a83acd90a398a50f4aff46f9",
      "tree": "4deb5f815b2ea032dc627ea6dcdb5d6bb46b5ceb",
      "parents": [
        "1d9153c248733781bf69132f2d094d9d3c92b2bc"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Thu Jul 16 14:26:15 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 12 02:04:57 2026 +0000"
      },
      "message": "KUDU-3789 Deflake auto_leader_rebalancer-test\n\nUnder TSAN this test suite was very flaky (about 488 of 1000 runs\nfailed at one baseline). The causes were all test-side timing\nassumptions on a cluster whose leadership keeps moving, not product\nbugs.\n\nFixed retry loops (run N rounds, then assert balanced) raced the\ncluster\u0027s ongoing leadership moves. Replaced them with a\nRunUntilLeaderBalanced() helper that retries CheckLeaderBalance() over\na TSAN-aware time budget via AssertEventually.\n\nAddTserver and RestartTserver used 59 tablets. That many raft groups\nmove leadership around through natural elections and keep the cluster\nfrom ever reaching an exactly balanced snapshot. Note that stopping\nthe replica rebalancer to remove that movement makes things worse: on\na static cluster the leader rebalancer gets stuck moving the same\nleaders back and forth and never balances, so the replica rebalancer\nis left running.\n\nPlacement-sensitive tests (MultiTableLeaderBalance,\nFilterSoftDeletedTableTest, TestMaintenanceMode) were disrupted by\nextra leader elections when TSAN CPU starvation exceeded the default\nleader failure timeout.\n\nRelaxed the ignored soft-deleted table check in\nFilterSoftDeletedTableTest to \"not fully balanced\" rather than requiring\nevery leader count to differ from 3, which natural elections could trip.\n\nRewrote TestMaintenanceMode to arrange the imbalance directly with\nMakeLeaderDistribution and assert the rebalancer never places a leader\non the maintenance-mode tserver, instead of restarting the tserver and\nracing on election timing.\n\nTest-only. No production behavior change.\n\nChange-Id: I00224fddfead0fb462e793f085d935b597792aaa\nReviewed-on: http://gerrit.cloudera.org:8080/24591\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "1d9153c248733781bf69132f2d094d9d3c92b2bc",
      "tree": "9c4927f0c3fd59a9b7ef1c1897dba2dcd23bedcf",
      "parents": [
        "12dab910780628d7c8d59e0ab03bf2fa661d310d"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Fri Aug 07 22:16:05 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 19:50:35 2026 +0000"
      },
      "message": "KUDU-3788 do not unconditionally fetch all source archives\n\nWith this changelist, 3rd-party build no longer fetches unneeded source\narchives in pre-built mode (USE_PREBUILT_THIRDPARTY\u003d1): now the source\narchive for a component is fetched only when building the component\nfrom scratch.  For legacy non-pre-build mode, the behavior is left\nas before, i.e. all the source archives are fetched, extracted,\nand patched when running build-if-necessary.sh\n\nChange-Id: I1551fdc2e912f528a0111fcc1098bb608d3887fc\nReviewed-on: http://gerrit.cloudera.org:8080/24673\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "12dab910780628d7c8d59e0ab03bf2fa661d310d",
      "tree": "46eea3fbc35086d96ac47e6802a42856c236bbe3",
      "parents": [
        "10c369a98fdf0e66d7aa9ac3ccb50c5c035b7af0"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sun Aug 09 21:22:35 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 17:49:21 2026 +0000"
      },
      "message": "KUDU-3788 add trace-viewer into prebuilt components\n\nThis is a follow-up to 30501ee9e33a2799d3eca6816405b4132d3e0d14.\n\nChange-Id: Icc7291be4b96366a8457ca69dc18bb2b6724cf5a\nReviewed-on: http://gerrit.cloudera.org:8080/24672\nReviewed-by: Zoltan Martonka \u003czmartonka@cloudera.com\u003e\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "10c369a98fdf0e66d7aa9ac3ccb50c5c035b7af0",
      "tree": "5697b9cf6fbe5021d7897ead5bcb47e395734c48",
      "parents": [
        "5cc227930da1dc14079837121754c112a7558d72"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Aug 06 19:25:22 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 17:48:54 2026 +0000"
      },
      "message": "KUDU-3788 unify fetch_and_patch arguments\n\nThe motivation for this update is to refactor the scripts that fetch\nsource archives for all 3rd-party components.  A follow-up patch will\nupdate the logic to fetch source archives only when building the\n3rd-party components if USE_PREBUILT_THIRDPARTY\u003d1.\n\nThis changelist doesn\u0027t contain any functional modifications.\n\nChange-Id: Ia4bafb1a98ffee4839568135f66622f0ac495a95\nReviewed-on: http://gerrit.cloudera.org:8080/24668\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": "5cc227930da1dc14079837121754c112a7558d72",
      "tree": "7cd63c31ef07651dcf9312c48d061d3d3bd34c09",
      "parents": [
        "4bcd631c449d3c6649730ca6e07660c8168f0d44"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Fri Aug 07 17:39:35 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 11 17:38:15 2026 +0000"
      },
      "message": "KUDU-3797: Show table-level on-disk size in human-readable format\n\nThis patch formats the table-level on-disk size with\nHumanReadableNumBytes::ToString() so it is consistent with the per-tablet\nrows. The on-disk-size limit is left as a raw value since it uses -1 to\ndenote \"unlimited\", and the row-count fields are counts rather than byte\nsizes. The client-side KuduTableStatistics::ToString() path (used when\n--show_tablets is not set) is intentionally left unchanged to preserve\nbackward compatibility.\n\nChange-Id: I13c025957afdc637a39a7fa7237ecb6d555ae719\nReviewed-on: http://gerrit.cloudera.org:8080/24669\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "4bcd631c449d3c6649730ca6e07660c8168f0d44",
      "tree": "286d0c55378d1a9207981e728e622b7434e20043",
      "parents": [
        "cb747ff0ca0209e3fa98be4167c67edd474acd67"
      ],
      "author": {
        "name": "Yan-Daojiang",
        "email": "yan_daojiang@163.com",
        "time": "Tue Jun 30 19:49:05 2026 +0800"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Sat Aug 08 16:22:57 2026 +0000"
      },
      "message": "KUDU-3362: expose per-tablet stats via table statistics\n\nAdd per-tablet statistics to the GetTableStatistics response and surface\nthem in kudu table statistics --show_tablets.\n\nDefault table-level output is unchanged when --show_tablets is not set.\n\nChange-Id: If7889669181633a762c614afe96a9ea0827ed7f1\nReviewed-on: http://gerrit.cloudera.org:8080/24650\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": "cb747ff0ca0209e3fa98be4167c67edd474acd67",
      "tree": "33b8025d705f185675fb88db870d722c57e55b19",
      "parents": [
        "d6bc70083ab5366b25adcd3db763c677bf38b6d0"
      ],
      "author": {
        "name": "Gabriella Lotz",
        "email": "lotzgabriella@gmail.com",
        "time": "Thu Jul 16 14:50:56 2026 +0200"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Thu Aug 06 02:05:46 2026 +0000"
      },
      "message": "auto_leader_rebalancer: best-effort leader step-down\n\nWhen rebalancing leaders for a table, RunLeaderRebalanceForTable\nresolved the current leader\u0027s address and sent a LeaderStepDown RPC\nwith RETURN_NOT_OK. A single transient failure (an RPC timeout, the\ntarget briefly unavailable, or an election in flight) aborted the whole\nrebalancing pass and skipped every remaining tablet and table in that\nround.\n\nA leader transfer is best effort. The next round recomputes the plan\nand retries, so a single failed transfer should warn and move on to the\nnext tablet rather than fail the pass. RunLoop already only logs a\nwarning for the overall call, so this just stops one bad RPC from\nstarving the rest of the round.\n\nSeen under heavy load, where one failed LeaderStepDown would otherwise\nend a round early and leave the leaders unbalanced for longer.\n\nChange-Id: I0fb2c7a8bf750520d34d9aba62274dbe7433d80d\nReviewed-on: http://gerrit.cloudera.org:8080/24594\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "d6bc70083ab5366b25adcd3db763c677bf38b6d0",
      "tree": "ecc45e7b5e007e131c834dcc0a43e5e684832d7d",
      "parents": [
        "df601446fbac5d3e75fecc05401311d5e8d83843"
      ],
      "author": {
        "name": "Ashwani",
        "email": "ashwani@apache.org",
        "time": "Wed Aug 05 17:32:36 2026 +0530"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 05 18:25:22 2026 +0000"
      },
      "message": "KUDU-3795 Reduce storage footprint for ASAN build\n\nTestHeavyUpdateCompaction fails due to ENOSPC error for ASAN build.\nTSAN and ASAN instrument every memory access and allocation, making each\ntest iteration slower than a normal build. This means more instances are\nsimultaneously active on dist-test slaves at any given time, sharing the\nsame tmp dir capacity. With the default 500 rows, each instance can peak\nto several hundred MB of storage usage that could exhaust the tmpfs and\ntrigger ENOSPC under high concurrency, which causes a fatal crash in the\nserver\u0027s flush path.\n\nThe patches fixes that by reducing the row count to 20 thats keeps peak\ndisk usage under a safe limit, even with multiple concurrent tests\nrunning and sharing the same tmp folder for storage needs. This aligns\nwith existing handling for TSAN build.\n\nAll 2000 test reps passed with fix.\n48 out of 2000 test reps failed without fix.\n\nChange-Id: Iec34c4713476933a0a2e3ca1c90425d545412493\nReviewed-on: http://gerrit.cloudera.org:8080/24663\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Alexey Serbin \u003calexey@apache.org\u003e\n"
    },
    {
      "commit": "df601446fbac5d3e75fecc05401311d5e8d83843",
      "tree": "30816e88dc6a16956f71cd0b7d75edc07c8b4e8b",
      "parents": [
        "b304fc55802b0367587e351452dc141e227139af"
      ],
      "author": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Tue Aug 04 15:08:46 2026 -0700"
      },
      "committer": {
        "name": "Alexey Serbin",
        "email": "alexey@apache.org",
        "time": "Wed Aug 05 17:20:00 2026 +0000"
      },
      "message": "KUDU-3772 fix flakiness in MiniPrometheusTest.StartStopNoTargets\n\nBefore this fix, one of my RHEL9.6 x86_64 build/test machines would\nregularly report a failure in the MiniPrometheusTest.StartStopNoTargets\nscenario when running mini_prometheus-test.  Reports looked like below:\n\n  src/kudu/util/mini_prometheus-test.cc:206: Failure\n  Failed\n  Bad status: Remote error: HTTP 503\n\nThis changelist address the issue.\n\nI also tried a more generic approach, trying to rely on the documented\n\u0027/-/ready\u0027 URL [1] by running the readiness check right before returning\nfrom the MiniPrometheus::Start() method.  However, it seems getting\nHTTP 200 for GET/HEAD requests at the \u0027/-/ready\u0027 URL doesn\u0027t guarantee\nthat Scrape/Target Manager initialization is complete, so the readiness\ncheck is useless in this context.\n\n[1] https://prometheus.io/docs/prometheus/latest/management_api/\n\nChange-Id: I05e9ca3e3c8782e9b073dd2329846d5eac661dcf\nReviewed-on: http://gerrit.cloudera.org:8080/24658\nTested-by: Alexey Serbin \u003calexey@apache.org\u003e\nReviewed-by: Marton Greber \u003cgreber.mx@gmail.com\u003e\n"
    }
  ],
  "next": "b304fc55802b0367587e351452dc141e227139af"
}
