)]}'
{
  "log": [
    {
      "commit": "ab39c37d00015d0a6c51b8e2ba08e15d7cab8cb1",
      "tree": "4b6dd84d1d231d980eff716bb7e704c4232ad0f4",
      "parents": [
        "0a9e01771b197f777c393093159c2911ec3629b0"
      ],
      "author": {
        "name": "David Warburton",
        "email": "david.warburton@gmail.com",
        "time": "Tue May 05 21:50:11 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 09:50:11 2026 +0800"
      },
      "message": "[fix][client-cpp] Restore pulsar/Version.h for the dev package (#572)"
    },
    {
      "commit": "0a9e01771b197f777c393093159c2911ec3629b0",
      "tree": "2d0e886b0ce607c51c0f4df89e7b14de46858b8e",
      "parents": [
        "f9995da210cd7b10141213f997cd76c3a9a5dfa7"
      ],
      "author": {
        "name": "dwang-qm",
        "email": "156144641+dwang-qm@users.noreply.github.com",
        "time": "Tue Apr 21 20:19:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 11:19:15 2026 +0800"
      },
      "message": "[fix][client-cpp] Fail producers immediately when topic is terminated (#567)"
    },
    {
      "commit": "f9995da210cd7b10141213f997cd76c3a9a5dfa7",
      "tree": "08dc50fd9eebb084403600231f87f13c98dad8f2",
      "parents": [
        "69afa1a800ec53659d68c1c7729d22f424d6813f"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Wed Apr 15 17:35:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 17:35:02 2026 +0800"
      },
      "message": "[fix][cpp-client] Pass seek error to callback when SEEK command fails (#549)"
    },
    {
      "commit": "69afa1a800ec53659d68c1c7729d22f424d6813f",
      "tree": "0cc960514ece922c6119ff9a097c4e334059a441",
      "parents": [
        "ff074bf87e7f2e44fc6c34ff04ea790523523997"
      ],
      "author": {
        "name": "Bhargav Kumar Konidena",
        "email": "Bhargavkonidena@users.noreply.github.com",
        "time": "Fri Apr 03 18:09:58 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 20:39:58 2026 +0800"
      },
      "message": "[feat][client] Support null value messages (#563)"
    },
    {
      "commit": "ff074bf87e7f2e44fc6c34ff04ea790523523997",
      "tree": "3bec6bcf630d1b8d411d066ee651632076210654",
      "parents": [
        "e5afb63dc24d5ebccaf0ff5108106adc8d83bdcb"
      ],
      "author": {
        "name": "Daeho Ro",
        "email": "40587651+daeho-ro@users.noreply.github.com",
        "time": "Thu Apr 02 20:31:54 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 19:31:54 2026 +0800"
      },
      "message": "Fix modern boost cancel method without args (#561)"
    },
    {
      "commit": "e5afb63dc24d5ebccaf0ff5108106adc8d83bdcb",
      "tree": "059ef240469db0d9f6ab08ade2fb046c843db905",
      "parents": [
        "00c4daabc640cb56336776fed6e1f5c74c5f147d"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Apr 02 17:41:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 17:41:50 2026 +0800"
      },
      "message": "Fix broken CI due to token string not trimmed (#565)"
    },
    {
      "commit": "00c4daabc640cb56336776fed6e1f5c74c5f147d",
      "tree": "87b52a2d55ee51f83779da9039d8d1a8ca23a74a",
      "parents": [
        "03fe428bb520ecc5e7fe21979cccca1fde60642c"
      ],
      "author": {
        "name": "Daeho Ro",
        "email": "40587651+daeho-ro@users.noreply.github.com",
        "time": "Wed Apr 01 12:28:17 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 11:28:17 2026 +0800"
      },
      "message": "Fix apple build (#562)"
    },
    {
      "commit": "03fe428bb520ecc5e7fe21979cccca1fde60642c",
      "tree": "48ae79b8f8328e8f3ebb25bc0f978302ab48aaa5",
      "parents": [
        "fcde4857cec3045e72624a168029d6d84eb4c532"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Mar 23 23:30:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 08:30:33 2026 -0700"
      },
      "message": "Fix aarch64 build on Alpine (#558)\n\n* Fix aarch64 build on Alpine\n\n* fix workflow not run"
    },
    {
      "commit": "fcde4857cec3045e72624a168029d6d84eb4c532",
      "tree": "e6ff809fee6d400ff7502ec3904fabcfaff2ab1b",
      "parents": [
        "64fbda03c8de318d20a782e7016bd02779110671"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Mar 20 12:40:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 12:40:17 2026 +0800"
      },
      "message": "Fix hasMessageAvailable will return true after seeking to a timestamp newer than the last message (#556)"
    },
    {
      "commit": "64fbda03c8de318d20a782e7016bd02779110671",
      "tree": "27e9ba70ef70376c1d87f85c6dccfd7782ab576a",
      "parents": [
        "1a39e5323a2ec07a10cb8dc8b9d4b1c1aea8d324"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Mar 19 16:01:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 16:01:21 2026 +0800"
      },
      "message": "Fix connection leak by request timers not cancelled in time (#555)\n\n* Fix connection leak by request timers not cancelled in time\n\n* fix\n\n* fix include style\n\n* revert consumer stats changes and speed up tests\n\n* abstract a common method to insert a request and add tests\n\n* remove duplicated emplace\n\n* remove unexpected error log"
    },
    {
      "commit": "1a39e5323a2ec07a10cb8dc8b9d4b1c1aea8d324",
      "tree": "6077491d8e5bfabe9d0a9a14d964b912c6f98d83",
      "parents": [
        "967529b79f8fae55902b679b7e2248ff8e8f98c3"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Tue Mar 17 19:58:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 19:58:04 2026 +0800"
      },
      "message": "[fix][client-cpp] Implement missing pulsar_message_set_schema_version in C API (#552)"
    },
    {
      "commit": "967529b79f8fae55902b679b7e2248ff8e8f98c3",
      "tree": "0df451bca2717f4e7f42e13f847ee658c446fdbe",
      "parents": [
        "40259cc7afb788ea4d27291f2df134a752c1a714"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Tue Mar 17 19:57:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 19:57:26 2026 +0800"
      },
      "message": "[fix][client-cpp] Fix Reader segfault when messageListenerThreads\u003d0 (#553)"
    },
    {
      "commit": "40259cc7afb788ea4d27291f2df134a752c1a714",
      "tree": "6793fc6002df8a8c491cc818886d179342a2d8d6",
      "parents": [
        "b3d2b58c0394160688dad15873e67cfa8eac349b"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Mar 17 19:18:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 19:18:04 2026 +0800"
      },
      "message": "PIP-121: Implement AutoClusterFailover (#547)"
    },
    {
      "commit": "b3d2b58c0394160688dad15873e67cfa8eac349b",
      "tree": "1680d5a2050532738db0e784aeb5c8e1e216f76b",
      "parents": [
        "b47e63dcb21949a0ac7da18d2336a8b92d569cc6"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Mon Mar 16 10:21:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 16 10:21:19 2026 +0800"
      },
      "message": "[Test] Fix log after client close (#548)"
    },
    {
      "commit": "b47e63dcb21949a0ac7da18d2336a8b92d569cc6",
      "tree": "04729f438ab277e5735caaf1deb5cb7b7a071122",
      "parents": [
        "e80f65ef6db05eacda6ff02ca8fcba9963a38a93"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Mar 13 14:49:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 13 14:49:04 2026 +0800"
      },
      "message": "PIP-121: Introduce ServiceInfoProvider to update service info dynamically (#541)"
    },
    {
      "commit": "e80f65ef6db05eacda6ff02ca8fcba9963a38a93",
      "tree": "b42e66a490b2c0fbb0dda00fb02e9ac442040bd8",
      "parents": [
        "23b60d1fe264fd48775fae7c7ebabae355d3c2a9"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Mar 12 17:58:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 17:58:29 2026 +0800"
      },
      "message": "Fix crash due to asio object lifetime and thread safety issue (#551)"
    },
    {
      "commit": "23b60d1fe264fd48775fae7c7ebabae355d3c2a9",
      "tree": "d06ad7e3e0d0bb28eec11540b56c9c9dcaf619b9",
      "parents": [
        "0c6a7c0a688409e6f2c4b066b48bdca24e5ec33b"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Thu Mar 05 22:29:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 22:29:13 2026 +0800"
      },
      "message": "Fix incorrect last sequence id when sending messages in batch (#546)\n\n"
    },
    {
      "commit": "0c6a7c0a688409e6f2c4b066b48bdca24e5ec33b",
      "tree": "a4521b44a05b5bcc873d5c6397d4e79c08b0c53a",
      "parents": [
        "e290658827ca7b835e5fe7570722605727cc67c5"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Thu Mar 05 00:31:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 08:31:02 2026 -0800"
      },
      "message": "[Test][C++] Fix flaky ReaderTest.testAsyncRead (#545)\n\n* fix\n\n* format\n\n* revert test\n\n---------\n\nCo-authored-by: zhangzhibiao \u003czhangzhibiao@bigo.sg\u003e"
    },
    {
      "commit": "e290658827ca7b835e5fe7570722605727cc67c5",
      "tree": "46a1675ef202b10edf8c722ad6e185251e304edf",
      "parents": [
        "bda51d6ecf8eaeb79aecac9ae2ce3802866cea32"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Mar 04 21:48:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 21:48:13 2026 +0800"
      },
      "message": "Fix clang tidy errors not detected as well as the errors (#544)\n\n"
    },
    {
      "commit": "bda51d6ecf8eaeb79aecac9ae2ce3802866cea32",
      "tree": "ad4a622217edc36870de529c1643acba1f42b4a3",
      "parents": [
        "11e32c6f2ff1f22d7a22ef68c3ddc6216df70512"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Wed Mar 04 15:40:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 15:40:09 2026 +0800"
      },
      "message": "[feat][client-cpp] Add operation timeout configuration in milliseconds (#543)\n\n"
    },
    {
      "commit": "11e32c6f2ff1f22d7a22ef68c3ddc6216df70512",
      "tree": "6f8c2e8e913035e869fed10319d11c175e2314e1",
      "parents": [
        "070132b13e38d025673b053127537b53f1c4ff35"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Mar 04 10:51:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 04 10:51:24 2026 +0800"
      },
      "message": "Bump dependencies to latest versions for CVEs (#540)\n\n"
    },
    {
      "commit": "070132b13e38d025673b053127537b53f1c4ff35",
      "tree": "a10cee5afe601a56e040832e490bc46e35fa6f79",
      "parents": [
        "2606df96d9e2dbcc90ec8374ea1d4d45c147d128"
      ],
      "author": {
        "name": "zhanglistar",
        "email": "zhanglinuxstar@gmail.com",
        "time": "Tue Mar 03 15:05:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 15:05:13 2026 +0800"
      },
      "message": " [improve][client] Enhance connection and timeout logging (#539)\n\n"
    },
    {
      "commit": "2606df96d9e2dbcc90ec8374ea1d4d45c147d128",
      "tree": "9ac253a0c7ddb8acceb3e1ac6f93d14de5c93eec",
      "parents": [
        "b3edc60c5ca46c1df7e0090f7e418a684fd21553"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Feb 06 19:33:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 06 19:33:16 2026 +0800"
      },
      "message": "Fix multi-topics consumer will crash if one internal consumer fails getBrokerConsumerStatsAsync (#538)\n\n"
    },
    {
      "commit": "b3edc60c5ca46c1df7e0090f7e418a684fd21553",
      "tree": "a790c4dd7add8cbb8a9b88c2e709e58f2e8a8585",
      "parents": [
        "0b893a1622aa7dd702d48afee33af321bb2c06dd"
      ],
      "author": {
        "name": "Andrew Rhoads",
        "email": "andrew.c.rhoads@gmail.com",
        "time": "Tue Feb 03 20:54:34 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 04 12:54:34 2026 +0800"
      },
      "message": "Fix use of deprecated Boost Asio API (#535)\n\nexpires_from_now is deprecated and it is now recommended to use expires_after"
    },
    {
      "commit": "0b893a1622aa7dd702d48afee33af321bb2c06dd",
      "tree": "47163beb736e3970ec8c132bd9f3e979d30aaceb",
      "parents": [
        "d040039e3a351056d0b3be31adbad4a0b72fee09"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Jan 16 14:14:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 16 14:14:50 2026 +0800"
      },
      "message": "Fix the seek method could be blocked forever when subscribe RPC is slower than seek RPC (#533)\n\n"
    },
    {
      "commit": "d040039e3a351056d0b3be31adbad4a0b72fee09",
      "tree": "bac22fffed52c40724992756f90f1fcb915e292c",
      "parents": [
        "889a04bc71eb207ec064a8cec37709dd3b7bccdb"
      ],
      "author": {
        "name": "Ceyhun Can Ulker",
        "email": "ceyhuncanu@gmail.com",
        "time": "Wed Dec 17 05:08:57 2025 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 17 10:08:57 2025 +0800"
      },
      "message": "[improve][client] Add TLSv1.3 support (#529)\n\n"
    },
    {
      "commit": "889a04bc71eb207ec064a8cec37709dd3b7bccdb",
      "tree": "126df5764dca180ad044a1fa6cc55789b465f997",
      "parents": [
        "adf3c7c0f76702246a9306fc60924984c2d9042e"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Dec 09 10:07:41 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 09 10:07:41 2025 +0800"
      },
      "message": "Support getting encryption context on a message (#526)\n\n"
    },
    {
      "commit": "adf3c7c0f76702246a9306fc60924984c2d9042e",
      "tree": "774b298a98edf3d0d888cd7b4fe582bb354590c4",
      "parents": [
        "c64e0e9635333cf74ebdcd12d77afcf2ecc9a01a"
      ],
      "author": {
        "name": "dann frazier",
        "email": "dann.frazier@chainguard.dev",
        "time": "Sun Dec 07 23:21:28 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 08 14:21:28 2025 +0800"
      },
      "message": "ProtobufNativeSchema: convert abseil string_view to std::string (#527)\n\nThis resolves the following build failure using abseil-cpp 20250814.1"
    },
    {
      "commit": "c64e0e9635333cf74ebdcd12d77afcf2ecc9a01a",
      "tree": "776c8e0595e23fc8e39c1066c66ddfe97d545d4b",
      "parents": [
        "93f10ef76f4e2301472a0ec39ddad8287c1205ee"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Dec 03 20:07:35 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 03 20:07:35 2025 +0800"
      },
      "message": "Bump the C++ standard to 17 (#525)\n\n- Replace `boost::optional` with `std::optional`\n- Replace `boost::any` with `std::any`\n- Use `std::weak_from_this` to create a `weak_ptr` from a `shared_ptr`\n- Leverage initializers for if to simplify code"
    },
    {
      "commit": "93f10ef76f4e2301472a0ec39ddad8287c1205ee",
      "tree": "7ce659f57758a58062e195fc9d016acc8f34976e",
      "parents": [
        "a03eb9278bf96cbda42eb9e7dc1c73ee0b65ea3e"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Nov 19 17:04:59 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 19 17:04:59 2025 +0800"
      },
      "message": "Support get the producer name of a message (#524)\n\n"
    },
    {
      "commit": "a03eb9278bf96cbda42eb9e7dc1c73ee0b65ea3e",
      "tree": "c6bb71fa8d0982bb972dc8fc8bfff7f5c2b0c366",
      "parents": [
        "268aa4e2fdc621137a1a1fff9587ddd200bb0eda"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Nov 06 11:49:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 06 11:49:38 2025 +0800"
      },
      "message": "Fix topic lookup segmentation fault after client is closed (#521)\n\n"
    },
    {
      "commit": "268aa4e2fdc621137a1a1fff9587ddd200bb0eda",
      "tree": "268aab12233043776ba45daccffbda6d1d559b6d",
      "parents": [
        "648b48be58f65a15f45d952986f3d9d5936f75a8"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Nov 05 18:58:52 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 05 18:58:52 2025 +0800"
      },
      "message": "Fix possible zombie consumer when closing after reconnection (#518)\n\n"
    },
    {
      "commit": "648b48be58f65a15f45d952986f3d9d5936f75a8",
      "tree": "d22ff7b4734bc966a9f4037e755778288dc67658",
      "parents": [
        "12471ec55099a51d0bcb9f551f83bb17a8358069"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Oct 27 15:20:28 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 27 15:20:28 2025 +0800"
      },
      "message": "Fix a null ACK grouping tracker can be accessed after consumer is closed (#517)\n\nFixes https://github.com/apache/pulsar-client-cpp/issues/516"
    },
    {
      "commit": "12471ec55099a51d0bcb9f551f83bb17a8358069",
      "tree": "f20c4e1ae92db517d6c730fcf91d9c0925679fe4",
      "parents": [
        "3be5267ef781b9a1928c009da1ac53dc60a12a35"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Oct 27 15:00:19 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 27 15:00:19 2025 +0800"
      },
      "message": "Fix APK package installation workflow (#515)\n\n* Fix wrong install directory for APK packages\n\n* Fix DESTDIR\n\n* Build libpulsarwithdeps.a"
    },
    {
      "commit": "3be5267ef781b9a1928c009da1ac53dc60a12a35",
      "tree": "4b0040e32e63f7383beec65fd0356de8f44919e1",
      "parents": [
        "2b84925b097d649091ca0160009cd5e3c1c50062"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Oct 17 02:05:02 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 16 11:05:02 2025 -0700"
      },
      "message": "Replace Roaring64Map with unordered_set to unblock fat static library build issue (#514)\n\n"
    },
    {
      "commit": "2b84925b097d649091ca0160009cd5e3c1c50062",
      "tree": "2ff3defe27c04d3dc39884cce609a8ff7530b66b",
      "parents": [
        "386dedc47bde8c46fae1705afdf66e4b972c7447"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Oct 16 23:19:24 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 16 08:19:24 2025 -0700"
      },
      "message": "Fix flaky testHasMessageAvailableWhenCreated (#511)\n\n"
    },
    {
      "commit": "386dedc47bde8c46fae1705afdf66e4b972c7447",
      "tree": "e15c26e7ab37c4df6399b1ae8c5a9d3211e53d18",
      "parents": [
        "4366ffe7c96380da0357d5e7e148e4886d6700e0"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Thu Oct 16 21:44:04 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 16 21:44:04 2025 +0800"
      },
      "message": "Fix nullptr after listener consumer closed (#510)\n\n"
    },
    {
      "commit": "4366ffe7c96380da0357d5e7e148e4886d6700e0",
      "tree": "cc3b0160b108ef6628088851d2817e7362564675",
      "parents": [
        "5632b4b9107eed0911981d46054f445cbf80ebf3"
      ],
      "author": {
        "name": "Liu Zixian",
        "email": "hdu_sdlzx@163.com",
        "time": "Tue Oct 14 16:13:46 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 14 16:13:46 2025 +0800"
      },
      "message": "Update OpenSSL API (#509)\n\n"
    },
    {
      "commit": "5632b4b9107eed0911981d46054f445cbf80ebf3",
      "tree": "2b3b7d20654f5765f4384fe9bc637a73447ef0f1",
      "parents": [
        "e04b2a983057332f656b9a356c217f0c8db42039"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Oct 13 11:08:20 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 13 11:08:20 2025 +0800"
      },
      "message": "[improve] change RoutingMode default from UseSinglePartition to RoundRobinDistribution (#507)\n\n"
    },
    {
      "commit": "e04b2a983057332f656b9a356c217f0c8db42039",
      "tree": "e5c574b964d3e34c83c003cdfa2344ee52c6013c",
      "parents": [
        "f2f9f65683123cfcdcefff0dde669969a476b347"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Oct 10 09:43:31 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 10 09:43:31 2025 +0800"
      },
      "message": "Use vcpkg to build debian packages (#506)\n\n"
    },
    {
      "commit": "f2f9f65683123cfcdcefff0dde669969a476b347",
      "tree": "0e4368222374aedd08601a02f140f06ba8fd0cbe",
      "parents": [
        "9f0b6fb40700131de080897ee69bbdfbcacc527a"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sat Oct 04 13:01:26 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 04 13:01:26 2025 +0800"
      },
      "message": "Adapt to latest Asio APIs (Asio 1.32 or Boost.Asio 1.88) (#477)\n\n"
    },
    {
      "commit": "9f0b6fb40700131de080897ee69bbdfbcacc527a",
      "tree": "d7bdacc6312ea086437f3537db59f619f171db65",
      "parents": [
        "69b86aa12334fd6af5e5ad8d1e1a9a5eab7d3f76"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Sep 29 22:41:24 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 29 22:41:24 2025 +0800"
      },
      "message": "Use vcpkg to build alpine packages (#505)\n\n"
    },
    {
      "commit": "69b86aa12334fd6af5e5ad8d1e1a9a5eab7d3f76",
      "tree": "7f7afddbeb98b39f222ce861b08544b736a9fc15",
      "parents": [
        "fa413e1f67f0177acacb970adb33ffe2cb2aee95"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sun Sep 28 09:48:55 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 28 09:48:55 2025 +0800"
      },
      "message": "Fix crash caused by Message::getTopicName when the message is a producer message (#503)\n\n"
    },
    {
      "commit": "fa413e1f67f0177acacb970adb33ffe2cb2aee95",
      "tree": "cc4dfadc7186ab81a99cffdcbf187f87e0bd9e30",
      "parents": [
        "54517973f8107c6d17b993e7b9da77c1162d8e26"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Sep 18 07:17:31 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 17 16:17:31 2025 -0700"
      },
      "message": "Fix duplicated subscribed topics not deduplicated (#501)\n\n"
    },
    {
      "commit": "54517973f8107c6d17b993e7b9da77c1162d8e26",
      "tree": "acdc2f50938cc68d7653caf796de43fbfffeba18",
      "parents": [
        "17fcf2af1ec81c1ab372c23a0716c92872d2c0d8"
      ],
      "author": {
        "name": "Guangyang Deng",
        "email": "gydeng.cs@gmail.com",
        "time": "Tue Aug 26 10:06:13 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 26 10:06:13 2025 +0800"
      },
      "message": "fix: remove unnecessary copies (#499)\n\n"
    },
    {
      "commit": "17fcf2af1ec81c1ab372c23a0716c92872d2c0d8",
      "tree": "438d0c0b927e9daf9e6a27381b64bb3f66522fae",
      "parents": [
        "9b86f9e2b037015cc437abc2f5f8b9475846bf95"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Aug 21 19:30:18 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 21 19:30:18 2025 +0800"
      },
      "message": "Fix hasMessageAvailable incorrectly returns true when read to latest after seeking by timestamp (#498)\n\n"
    },
    {
      "commit": "9b86f9e2b037015cc437abc2f5f8b9475846bf95",
      "tree": "9183fe5b894244a93745708164853e058c8b5713",
      "parents": [
        "639786f5ba579f7755f4220459bd613d89561617"
      ],
      "author": {
        "name": "Guangyang Deng",
        "email": "gydeng.cs@gmail.com",
        "time": "Mon Aug 04 14:07:54 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 04 14:07:54 2025 +0800"
      },
      "message": "[improve] modify the negativeACK structure to reduce memory overhead (#497)\n\n"
    },
    {
      "commit": "639786f5ba579f7755f4220459bd613d89561617",
      "tree": "886b55940f13452b9919a6c6b72d36ec1a68a047",
      "parents": [
        "9e119cee53199da5694cd59491d097399ba67a1f"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Jun 23 17:45:20 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 23 17:45:20 2025 +0800"
      },
      "message": "Remove static link to libstdc++ to avoid conflicts (#493)\n\n"
    },
    {
      "commit": "9e119cee53199da5694cd59491d097399ba67a1f",
      "tree": "46678c1da3d98a883fbceb3ece442e4023ccb632",
      "parents": [
        "15e0b00d1115c05832f84491bd0a0f92560ee918"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Jun 11 05:49:18 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 10 14:49:18 2025 -0700"
      },
      "message": "Fix acknowledgeCumulative never returns when accepting an invalid message id for a multi-topics consumer (#492)\n\n"
    },
    {
      "commit": "15e0b00d1115c05832f84491bd0a0f92560ee918",
      "tree": "3ac2fd09bcb6972b3066333623a190f9faa3a056",
      "parents": [
        "b0c44122b389ddf8e2ff9f3bd3d8a4e5d00dcc37"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Jun 11 05:48:50 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 10 14:48:50 2025 -0700"
      },
      "message": "Avoid getLastMessageId RPC when calling hasMessageAvailable after seek by timestamp (#491)\n\n"
    },
    {
      "commit": "b0c44122b389ddf8e2ff9f3bd3d8a4e5d00dcc37",
      "tree": "0e1200e795ffd57be80c13c65191de09e5555308",
      "parents": [
        "0d205096227323e37db173aa2e99a3eb76852d1b"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed May 28 19:45:17 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 28 19:45:17 2025 +0800"
      },
      "message": "[CI] Add clang-tidy check with clang-analyzer and performance checks (#490)\n\n"
    },
    {
      "commit": "0d205096227323e37db173aa2e99a3eb76852d1b",
      "tree": "79efb0184495c3d1bbb3f081bafdf2d3b54182e5",
      "parents": [
        "d9dd029c1e0627aed416a354f2806c2acc4b95d8"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue May 06 09:17:08 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 06 09:17:08 2025 +0800"
      },
      "message": "Fix stage-release.sh does not delete the Windows temporary directories (#488)\n\n"
    },
    {
      "commit": "d9dd029c1e0627aed416a354f2806c2acc4b95d8",
      "tree": "63cf1efd1da927629b7ebb3443fc255f354986cc",
      "parents": [
        "0e1ed3b2af24f5373036b839e4131257e8e75bf2"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sun May 04 16:47:45 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 04 16:47:45 2025 +0800"
      },
      "message": "Fix TableView\u0027s existing key-value will never be updated (#487)\n\n"
    },
    {
      "commit": "0e1ed3b2af24f5373036b839e4131257e8e75bf2",
      "tree": "ccdaca9335a6317187ed2b44be89f8391d312306",
      "parents": [
        "6aeb3816e121859d0691c6f20014c9a1d9bdc51d"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Apr 29 20:33:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 29 20:33:38 2025 +0800"
      },
      "message": "Fix the scripts for downloading GitHub Action artifacts (#485)\n\n"
    },
    {
      "commit": "6aeb3816e121859d0691c6f20014c9a1d9bdc51d",
      "tree": "ba3869f9ab100775d31777874ff1b425141c36fc",
      "parents": [
        "eede80b62fbf6c2b26607cec1ce1e0b4e9d857fa"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Apr 28 13:29:00 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 28 13:29:00 2025 +0800"
      },
      "message": "[ci] Fix upload-artifact v3 is not supported (#484)\n\n"
    },
    {
      "commit": "eede80b62fbf6c2b26607cec1ce1e0b4e9d857fa",
      "tree": "c7eeea0898bbba6e68c2e1c765f4104a04093ef6",
      "parents": [
        "f37bf928e61296a8416693aa2a6afbc0ca2c8a82"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Apr 25 17:37:57 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 25 17:37:57 2025 +0800"
      },
      "message": "Bump curl, openssl, zlib to address CVEs (#482)\n\n- openssl 3.1.4 -\u003e 3.5.0\n- zlib 1.3 -\u003e 1.3.1\n- curl 8.4.0 -\u003e 8.13.0\n\nKeep the `protobuf` to an old version (3.21.12) because it\u0027s the last release that supports C++11, see https://protobuf.dev/news/2022-08-03/\n\nKeep the `asio` version not changed (1.28.2) because there are some APIs removed."
    },
    {
      "commit": "f37bf928e61296a8416693aa2a6afbc0ca2c8a82",
      "tree": "63c15190755fb3ee0f181fab7c2e61b910300491",
      "parents": [
        "0a9b7d9e7b5c8e2ddb111c30d242793217c68c65"
      ],
      "author": {
        "name": "erobot",
        "email": "erobot@users.noreply.github.com",
        "time": "Wed Apr 23 10:12:45 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 10:12:45 2025 +0800"
      },
      "message": "fix: ignore ping command in connection keepalive logic (#480)\n\nFixes #479 \n\n### Motivation\n\nThe current keepalive logic is too lenient – merely receiving ping commands can keep the connection alive.\n\n### Modifications\n\nIgnore ping command in connection keepalive logic."
    },
    {
      "commit": "0a9b7d9e7b5c8e2ddb111c30d242793217c68c65",
      "tree": "a0100b778fcf515c8f5c6ac03638bcf1c3b7e66d",
      "parents": [
        "fca38274ea2587f0980c40af83d8886ea73538e9"
      ],
      "author": {
        "name": "Brett",
        "email": "3829853+oversearch@users.noreply.github.com",
        "time": "Tue Apr 22 01:45:54 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 22 14:45:54 2025 +0800"
      },
      "message": "Fix multi-topics-consumer new topic listeners stuck in paused state (#481)\n\nThis was introduced in v3.7.0 via #447, which contained a change that attempted to fix an issue where a pre-mature ack of a message before a multi-topic subscriber was ready could have caused a crash.  To fix the original bug, all multi-topic subscriptions are started with their message listener paused. They later get un-paused once all topics are successfully subscribed and connected.  However, on a regex subscription when new topics are discovered, they also start in a paused state, and there\u0027s no mechanism to resume them.  Hence, they get stuck, and no messages for new topics will be processed.\n\nThis change adds a call to resume any new listeners after new topics are added."
    },
    {
      "commit": "fca38274ea2587f0980c40af83d8886ea73538e9",
      "tree": "20a43a03cbbc03658dd2f575594691476d005af9",
      "parents": [
        "d3fd6b2afa2c8ca0df77d60c8e5b9169a0e081ce"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sat Feb 08 22:49:17 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 08 22:49:17 2025 +0800"
      },
      "message": "Bumped version to 3.8.0-pre (#470)\n\n"
    },
    {
      "commit": "d3fd6b2afa2c8ca0df77d60c8e5b9169a0e081ce",
      "tree": "76856de0505778cccd0ad96919af400d19ef1c25",
      "parents": [
        "afeac788d1e951951516b7aabee4c70af579dda2"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sat Feb 08 17:41:46 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 08 17:41:46 2025 +0800"
      },
      "message": "Make it optional to link statically to libgcc and libstdc++ (#474)\n\n"
    },
    {
      "commit": "afeac788d1e951951516b7aabee4c70af579dda2",
      "tree": "5d183c828d75b0f1f0da11eedb0d60f986ef0196",
      "parents": [
        "1e8e4d2ab6cf99d2660703b711849d026ee81036"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Sat Feb 08 14:46:42 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 08 13:46:42 2025 +0800"
      },
      "message": "Fix an issue where zero queue consumers are unable to receive messages after topic unloading (#473)\n\n"
    },
    {
      "commit": "1e8e4d2ab6cf99d2660703b711849d026ee81036",
      "tree": "c7f4bf9f8275d45384f7619678ee9c183fb4358a",
      "parents": [
        "bdf685492f90b0d079e8885ce33b4402839d0495"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Dec 30 21:35:56 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 30 21:35:56 2024 +0800"
      },
      "message": "Use vcpkg to build macOS packages (#465)\n\n"
    },
    {
      "commit": "bdf685492f90b0d079e8885ce33b4402839d0495",
      "tree": "569ecff1cba35166030325a71c4e34aab4f9e09c",
      "parents": [
        "4ba83e83fbb4319c0b4cda82372caf042e9ccaa6"
      ],
      "author": {
        "name": "erobot",
        "email": "erobot@users.noreply.github.com",
        "time": "Thu Dec 26 13:14:50 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 26 13:14:50 2024 +0800"
      },
      "message": "Fix some compiler warnings in public headers (#468)\n\n### Motivation\r\n\r\nFix some compiler warnings in public headers when using with -Wextra. These warnings prevent projects using -Wextra -Werror to use pulsar client without modifications.\r\n\r\n### Modifications\r\n\r\n1. Modified public headers to fix compiler warnings\r\n2. Add compile options \"-Wextra -Wno-unused-parameter\" to compile examples to help find similar issues"
    },
    {
      "commit": "4ba83e83fbb4319c0b4cda82372caf042e9ccaa6",
      "tree": "5a6b7151ccb05dd6bfcffc7608ce533ef7bd5cfe",
      "parents": [
        "aeff955f2a5e3d87532b606bab02f4067b795bd5"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Thu Dec 19 15:42:23 2024 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 19 14:42:23 2024 +0800"
      },
      "message": "Fix issue where cert chain is not taken into account in mTLS authentication (#467)\n\n"
    },
    {
      "commit": "aeff955f2a5e3d87532b606bab02f4067b795bd5",
      "tree": "afd8fe6041281e1417cf74ea1a45ffe3b937e011",
      "parents": [
        "6f7c37aa4b68a5fcf12058d3f3352faba5f37c3c"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Dec 12 18:30:31 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 12 18:30:31 2024 +0800"
      },
      "message": "Fix startMessageInclusive does not work if the 1st message is a chunked message (#462)\n\n"
    },
    {
      "commit": "6f7c37aa4b68a5fcf12058d3f3352faba5f37c3c",
      "tree": "87de3d74574bd7242cc24c5c92a60bb419809aca",
      "parents": [
        "2abbf830f9b2a01ebef9d5511d4f4a9a7b4683d6"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Dec 11 21:56:44 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 11 21:56:44 2024 +0800"
      },
      "message": "Bump macos runner image to 14 (#463)\n\n"
    },
    {
      "commit": "2abbf830f9b2a01ebef9d5511d4f4a9a7b4683d6",
      "tree": "158e3258fae78436cf2cc8bd774c16e8cabdb18d",
      "parents": [
        "e264cf7242c8f85e7f8d66335218ff38c658c8ad"
      ],
      "author": {
        "name": "Okada Haruki",
        "email": "ocadaruma@gmail.com",
        "time": "Mon Dec 09 15:51:17 2024 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 09 14:51:17 2024 +0800"
      },
      "message": "Update README to build wireshark plugin correctly (#460)\n\n"
    },
    {
      "commit": "e264cf7242c8f85e7f8d66335218ff38c658c8ad",
      "tree": "5a477966f7f2daba19e696423c82d990968964cd",
      "parents": [
        "ce6c4bcaca8ff8e088b663690f5835438f926050"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Nov 27 22:51:48 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 27 22:51:48 2024 +0800"
      },
      "message": "Handle the exception from the token supplier (#458)\n\n### Motivation\r\n\r\nWhen a token supplier is passed to the `AuthToken`, if exceptions are\r\nthrown from it, the application will crash immediately. A typical case\r\nis the Python wrapper might raise an exception when trying to get token.\r\n\r\n### Modifications\r\n\r\nCatch the exception in `Commands::newConnect` because the token supplier\r\nis called in it. Then convert it to `ResultAuthenticationError`. Add\r\n`testTokenSupplierException` to verify it."
    },
    {
      "commit": "ce6c4bcaca8ff8e088b663690f5835438f926050",
      "tree": "1c2221e26e6b4639dff3f56292c70e1a189431c2",
      "parents": [
        "3efa80a2667aae599118f27b8741c8236b2386c8"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Tue Nov 26 11:19:47 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 26 11:19:47 2024 +0800"
      },
      "message": "Expose keep alive interval for c and c++ client (#457)\n\n* Expose keep alive interval for c and c++ client\r\n\r\n* Optimize"
    },
    {
      "commit": "3efa80a2667aae599118f27b8741c8236b2386c8",
      "tree": "cc0c70f297406b7a3d32009e712f726897ad9246",
      "parents": [
        "2491a5a5f1f8d8640788c9f065411aa59f3cde2b"
      ],
      "author": {
        "name": "Andrew Rhoads",
        "email": "andrew.c.rhoads@gmail.com",
        "time": "Thu Oct 31 03:26:27 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 31 18:26:27 2024 +0800"
      },
      "message": "Fix default operation timeout (#450)\n\n"
    },
    {
      "commit": "2491a5a5f1f8d8640788c9f065411aa59f3cde2b",
      "tree": "90cad27e31ff5ccab19f123557e58e11ba5e721e",
      "parents": [
        "54e529aaf82bddac063c847d4c11d3fba3acf0f3"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Oct 30 09:58:42 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 30 09:58:42 2024 +0800"
      },
      "message": "Fix the YAML format error in latest image (#452)\n\n"
    },
    {
      "commit": "54e529aaf82bddac063c847d4c11d3fba3acf0f3",
      "tree": "f53efb47d28df46e10e07c1153033972244cfdf7",
      "parents": [
        "8b2753a56579ea6cf11e26a0c5a160797518df63"
      ],
      "author": {
        "name": "nkurihar",
        "email": "nkurihar@apache.org",
        "time": "Fri Oct 11 15:44:23 2024 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 11 14:44:23 2024 +0800"
      },
      "message": "Fix ack failure on message listener in multi topics consumer (#447)\n\n"
    },
    {
      "commit": "8b2753a56579ea6cf11e26a0c5a160797518df63",
      "tree": "d5b59b86f4f5af6172c9d8f9827b1ab40fb3dcc0",
      "parents": [
        "1a6c7ce56c170b6992199094bcb2af24a796b3f3"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Tue Sep 17 16:55:43 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 17 16:55:43 2024 +0800"
      },
      "message": "Bumped version to 3.7.0-pre (#445)\n\n"
    },
    {
      "commit": "1a6c7ce56c170b6992199094bcb2af24a796b3f3",
      "tree": "8b5ea104e6c7f9f5d25321566353596aea0011ca",
      "parents": [
        "8f269e837cbc20350e9a19505faca8e420a97d24"
      ],
      "author": {
        "name": "erobot",
        "email": "erobot@users.noreply.github.com",
        "time": "Thu Sep 05 14:57:59 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 05 14:57:59 2024 +0800"
      },
      "message": "fix: Keep compatible with old boost versions (#444)\n\n"
    },
    {
      "commit": "8f269e837cbc20350e9a19505faca8e420a97d24",
      "tree": "d1480725d78ba1bbc61a9ca662b439cc9d7afc8e",
      "parents": [
        "2ec734b3d6e3bf77bbfa892d808499a2bfa57c06"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Aug 29 22:10:22 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 29 22:10:22 2024 +0800"
      },
      "message": "Fix buffer overflow for non-batched send when the message metadata size exceeds 64KB (#443)\n\nSee https://github.com/apache/pulsar-client-python/issues/223\r\n\r\n### Motivation\r\n\r\nCurrently a shared buffer is used to store serialized message metadata\r\nfor each send request. However, its capacity is only 64KB, when the metadata\r\nsize exceeds 64KB, buffer overflow could happen.\r\n\r\n### Modifications\r\n\r\nWhen the metadata size is too large, allocate a new buffer instead of\r\nusing the shared buffer. Add `testLargeProperties` to cover it."
    },
    {
      "commit": "2ec734b3d6e3bf77bbfa892d808499a2bfa57c06",
      "tree": "1ca98a2269143f8089d9f7951a757af4cb8fa711",
      "parents": [
        "5940cb518bdf3a13ae7f859fab10d6940eec51b7"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Aug 21 20:44:46 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 21 20:44:46 2024 +0800"
      },
      "message": "Fix invalid memory access on the first pending batch receive callback (#441)\n\n"
    },
    {
      "commit": "5940cb518bdf3a13ae7f859fab10d6940eec51b7",
      "tree": "d87cdb277c667bb8295be1ea390bb2bd12f56047",
      "parents": [
        "2a6916819b2a80a532f827dc96026b8fdc0b15ed"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Aug 13 22:30:48 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 13 22:30:48 2024 +0800"
      },
      "message": "Fix consumer might not subscribe after a reconnection (#438)\n\nFixes https://github.com/apache/pulsar-client-cpp/issues/436\r\n\r\n### Motivation\r\n\r\nWhen a consumer starts grabbing the connection, it registers a timer after the operation timeout. When that\r\ntimer is expired, it will fail the connection and cancel the connection timer. However, it results a race\r\ncondition that:\r\n  1. The consumer\u0027s connection is closed (e.g. the keep alive timer failed)\r\n  2. The connection timer is registered on the executor and will trigger the reconnection after 100ms\r\n  3. The connection timer is cancelled, then the reconnection won\u0027t start.\r\n\r\n### Modifications\r\n\r\nCancel the `creationTimer_` once `HandlerBase#start` succeeded first\r\ntime. Add `testReconnectWhenFirstConnectTimedOut` to cover this case."
    },
    {
      "commit": "2a6916819b2a80a532f827dc96026b8fdc0b15ed",
      "tree": "9a52654f75aa4632a26f0000522734ca080512d1",
      "parents": [
        "35bf161ba25c9ea073b730e3dcdaa50c30703bcb"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Mon Jul 22 19:01:39 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 22 19:01:39 2024 +0800"
      },
      "message": "feat: expose partitions update interval configuration to C client (#437)\n\n* feat: expose partitions update interval configuration to C client\r\n\r\n* code format"
    },
    {
      "commit": "35bf161ba25c9ea073b730e3dcdaa50c30703bcb",
      "tree": "0c933787e1d27575c268f8e08eb539f14501cad4",
      "parents": [
        "d736a1b68fac6d1d5bd9f785aabf8f952580a597"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Jul 04 15:28:03 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 04 09:28:03 2024 +0200"
      },
      "message": "[CI] Use macos-12 to build macOS libraries (#433)\n\n"
    },
    {
      "commit": "d736a1b68fac6d1d5bd9f785aabf8f952580a597",
      "tree": "ce99a0ee25ba30fee6f7bb0c4d13378e32bad0b8",
      "parents": [
        "8aab89607759922e48a09d6e2df3713af0543368"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Jul 04 09:52:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 04 09:52:36 2024 +0800"
      },
      "message": "Add -Bsymbolic link option to avoid symbol interposition (#432)\n\n### Motivation\r\n\r\nThere is a case that `libpulsar.so` could unexpectedly call functions from other dependencies.\r\n\r\nFor example, assuming the application depends on two libraries:\r\n- `libpulsar.so`, which includes the symbols from `libcurl.a` 8.4.0\r\n- `libfoo.so`, which includes the symbols from `libcurl.a` 7.82.0\r\n\r\nIf the link order is `libfoo.so` first, then the libcurl definitions from 7.82.0 will also be used by `libpulsar.so` and then the application might crash due to the incompatibility. This is an issue specifically with Linux ELF format.\r\n\r\n### Modifications\r\n\r\nAdd the `-Wl,-Bsymbolic` link option for GCC."
    },
    {
      "commit": "8aab89607759922e48a09d6e2df3713af0543368",
      "tree": "74c1d0f927eba3da151641042f88f35a03a32489",
      "parents": [
        "739f0f0c808376f73f2b695726a7357e32625a3e"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Jun 24 22:15:45 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 24 22:15:45 2024 +0800"
      },
      "message": "Use Rocky Linux 8 and vcpkg to build RPM packages (#428)\n\n### Motivation\r\n\r\nSee https://lists.apache.org/thread/7o8hpv1gtoffvzx053wm0ss2s9xt0795, we will discard the support for CentOS 7 and old `std::string` ABI.\r\n\r\n### Modifications\r\n\r\n- Switch from `centos:7` image and GCC 4.8 to `rockylinux:8` image and GCC 8 to build RPM packages.\r\n- Use vcpkg to install dependencies according to `vcpkg.json` (`dependencies.json` will be deprecated in future)\r\n- Add a new script to build `libpulsarwithdeps.a` for dependencies installed by vcpkg\r\n- Link to `libstdc++` and `libgcc_s` libraries statically\r\n\r\nAdditional, with vcpkg, OpenSSL will search `/etc/ssl/certs.pem` for the default CA certificate rather than `/usr/local/ssl/ssl/certs.pem`."
    },
    {
      "commit": "739f0f0c808376f73f2b695726a7357e32625a3e",
      "tree": "5c5facdd01ff29ee317c0ad13485128f1312aa24",
      "parents": [
        "37bdf5b3856190eefc7a703753361da0e3a6e2c0"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Jun 17 16:00:55 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 17 16:00:55 2024 +0800"
      },
      "message": "Log the default location of trusted CA certificates when tlsTrustCertsFilePath is not specified (#429)\n\n### Motivation\r\n\r\nCurrently when `tlsTrustCertsFilePath` is not specified, default\r\nlocations of CA certificates will be used. However, these paths are\r\ndetermined by the compile option when building OpenSSL and they are\r\ninvisible to users. If the OS uses a different path, the TLS connection\r\nwill fail with no helpful error message."
    },
    {
      "commit": "37bdf5b3856190eefc7a703753361da0e3a6e2c0",
      "tree": "7bbae905fca62f0a356be9299cc949584334ac3e",
      "parents": [
        "3f0b33bfad746fd2da63fe062ea745d9a9caed55"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Jun 04 09:51:55 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 04 09:51:55 2024 +0800"
      },
      "message": "Support seek operation on a multi-topics consumer (#426)\n\n### Motivation\r\n\r\nSee https://github.com/apache/pulsar-client-python/issues/213\r\n\r\n### Modifications\r\n\r\nAdd a new `forEachValue` overload that allows users to count the number\r\nof rest running tasks through `SharedFuture` to `SynchronizedHashMap`.\r\nLeverage this overload in seek operations when the argument is a\r\ntimestamp, or a MessageId that represents earliest or latest. When the\r\nargument is a MessageId whose `getTopicName()` method returns a correct\r\ntopic name, seek on the internal consumer of that topic.\r\n\r\nAdd `testMultiTopicsSeekAll` and `testMultiTopicsSeekSingle` to\r\n`ConsumerSeekTest` to cover these cases."
    },
    {
      "commit": "3f0b33bfad746fd2da63fe062ea745d9a9caed55",
      "tree": "c5242a242c8e83e9573ba1e04c22785d077c7b42",
      "parents": [
        "27d8cc01d5b7cfce94a7d71259dca5cea83ae01e"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Sat Apr 06 18:23:09 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 06 18:23:09 2024 +0800"
      },
      "message": "fix: Incorrect acknowledgment behavior in the listener of the multi-topic consumer. (#423)\n\n### Motivation\r\nhttps://github.com/apache/pulsar-client-node/issues/371\r\n\r\n### Modifications\r\n- Add the message to the unacknowledged tracker before call the listener.\r\n\r\n### Verifying this change\r\n- Add `testMultiConsumerListenerAndAck` to cover it."
    },
    {
      "commit": "27d8cc01d5b7cfce94a7d71259dca5cea83ae01e",
      "tree": "3283ed6cc135d2841d91d3b4b6d5b30becd1d149",
      "parents": [
        "763b85c6c4b9bb648b9f7cf62f9ed09f04f3decb"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Mar 28 10:36:12 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 28 10:36:12 2024 +0800"
      },
      "message": "Fix wrong results of hasMessageAvailable and readNext after seeking by timestamp (#422)\n\nFixes https://github.com/apache/pulsar-client-cpp/issues/420\r\n\r\nIt\u0027s a catch-up for https://github.com/apache/pulsar/pull/22363"
    },
    {
      "commit": "763b85c6c4b9bb648b9f7cf62f9ed09f04f3decb",
      "tree": "c509dc0c7e25323886ac73a8ebff3a1d331ffbd5",
      "parents": [
        "788227ee930d39459d6d763eda94b992f3e1c1f6"
      ],
      "author": {
        "name": "Matteo Merli",
        "email": "mmerli@apache.org",
        "time": "Wed Mar 27 02:47:42 2024 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 27 17:47:42 2024 +0800"
      },
      "message": "Fix minor issues reported by CodeQL (#421)\n\n"
    },
    {
      "commit": "788227ee930d39459d6d763eda94b992f3e1c1f6",
      "tree": "66ed3d15e7174fdc5bc7b72e7986dbab1369ead3",
      "parents": [
        "c513f29fadce86bacaf4f878d8d25064f7560083"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Mar 18 10:04:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 18 10:04:21 2024 +0800"
      },
      "message": "Bumped version to 3.6.0-pre (#418)\n\n"
    },
    {
      "commit": "c513f29fadce86bacaf4f878d8d25064f7560083",
      "tree": "14668ab67240d2f40dfc6d45e1424ae0085b4bd8",
      "parents": [
        "821871777e247e1ccbfa323ea0d5136cf0e18711"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Sun Mar 17 23:10:15 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 17 23:10:15 2024 +0800"
      },
      "message": "Fix broken wireshark build workflow on macOS (#414)\n\n### Motivation\r\n\r\nSee https://github.com/apache/pulsar-client-cpp/actions/runs/8276076995/job/22644077705\r\n\r\n```\r\nError: The `brew link` step did not complete successfully\r\nThe formula built, but is not symlinked into /usr/local\r\nCould not symlink bin/2to3\r\n```\r\n\r\n`brew install` failed because the wireshark dependency depends on\r\npython@3.12 and it failed at `brew link`.\r\n\r\n### Modifications\r\n\r\nRemove the existing binaries that might conflict."
    },
    {
      "commit": "821871777e247e1ccbfa323ea0d5136cf0e18711",
      "tree": "598e106886ab1e2ce2fc8d09bc32f06e1bdcc1d8",
      "parents": [
        "234a55d924ad263144a4e2661a3c6f1985fe7322"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Mar 14 20:11:26 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 14 20:11:26 2024 +0800"
      },
      "message": "Support customize vcpkg directory when INTEGRATE_VCPKG is ON (#417)\n\n### Motivation\r\n\r\nCurrently when INTEGRATE_VCPKG is ON, the CMAKE_TOOLCHAIN_FILE variable\r\nis always a subdirectory of `${CMAKE_SOURCE_DIR}/vcpkg`. We can only\r\ncustomize the vcpkg directory when INTEGRATE_VCPKG is OFF, while the\r\nlegacy CMake logic is incompatible with this way.\r\n\r\n### Modifications\r\n\r\nWhen INTEGRATE_VCPKG is ON, only set CMAKE_TOOLCHAIN_FILE if it\u0027s not\r\ndefined. The workflow and README are updated for it."
    },
    {
      "commit": "234a55d924ad263144a4e2661a3c6f1985fe7322",
      "tree": "d89fddce10c871c4f2e6700252738a591ba10b6f",
      "parents": [
        "ee1d7b9c5b1eed6fe0a279203648a06c30a3feb0"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Thu Mar 14 19:32:14 2024 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 14 18:32:14 2024 +0800"
      },
      "message": "[feat] Add startPaused setting to consumer (#416)\n\n### Motivation\r\n\r\nThe Java client consumer has a setting called `startPaused`. If this is set to true, the created consumer will not fetch messages from the broker until resume is called. Currently, this setting does not seem to exist in the C++ client consumer, so I will add it."
    },
    {
      "commit": "ee1d7b9c5b1eed6fe0a279203648a06c30a3feb0",
      "tree": "9d5d0d1bab0c8f622bdbfac666bddec6aa20b2eb",
      "parents": [
        "436050092930b3eca73883cc7623f8cebf08f636"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Mar 11 19:09:18 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 11 19:09:18 2024 +0800"
      },
      "message": "Fix hasMessageAvailable might return true after seeking to latest (#409)\n\n* ### Motivation\r\n\r\nAfter a seek operation is done, the `startMessageId` will be updated\r\nuntil the reconnection due to the seek is done in `connectionOpened`.\r\nSo before it\u0027s updated, `hasMessageAvailable` could compare with an\r\noutdated `startMessageId` and return a wrong value.\r\n\r\n### Modifications\r\n\r\nReplace `duringSeek` with a `SeekStatus` field:\r\n- `NOT_STARTED`: initial, or a seek operation is done. `seek` could only succeed in this status.\r\n- `IN_PROGRESS`: A seek operation has started but the client does not receive the response from broker.\r\n- `COMPLETED`: The client has received the seek response but the seek future is not done.\r\n\r\nAfter the status becomes `COMPLETED`, if the connection is not ready,\r\nnext time the connection is established, the status will change from\r\n`COMPLETED` to `NOT_STARTED` and then seek future will be completed\r\nin the internal executor.\r\n\r\nAdd `testHasMessageAvailableAfterSeekToEnd` and `testSeekInProgress`."
    },
    {
      "commit": "436050092930b3eca73883cc7623f8cebf08f636",
      "tree": "6a9fbdd04a1c34215999e27729640bca9da747ff",
      "parents": [
        "747c1863018cb345b4e2bbbaaf7a6549c9c6b429"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Mon Mar 11 15:46:13 2024 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 11 14:46:13 2024 +0800"
      },
      "message": "Change return code of MultiTopicsConsumerImpl::closeAsync after unsubscribe or close (#413)\n\nFixes #88\r\n\r\n### Motivation\r\n\r\nhttps://github.com/apache/pulsar-client-cpp/pull/338 fixed `ConsumerImpl::closeAsync` so that closing after it was already closed or unsubscribed returns `ResultOk` instead of `ResultAlreadyClosed`. However, `MultiTopicsConsumerImpl::closeAsync` still returns `ResultAlreadyClosed`. This seems to be a change omission."
    },
    {
      "commit": "747c1863018cb345b4e2bbbaaf7a6549c9c6b429",
      "tree": "5ffa00f3802e8f4571f300c3174ca2afb4605a44",
      "parents": [
        "d0a322704cea8dba5925d5e3760061bdc0d84282"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Mar 05 12:35:52 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 05 12:35:52 2024 +0800"
      },
      "message": "[CI] Pin the clang-format version to 11 (#412)\n\n### Motivation\r\n\r\nThe `clang-format` tool on `ubuntu:22.04` runner was upgraded to 14\r\nrecently, whose rule is slightly different from 11.\r\n\r\n### Modifications\r\n\r\nUse clang-format-action for code format check and specify the\r\nversion to 11."
    },
    {
      "commit": "d0a322704cea8dba5925d5e3760061bdc0d84282",
      "tree": "d3ac563c108bf4e2cdd94e0112b97e70d528e288",
      "parents": [
        "e2cacb7dfb57b6d059b49fead2e1611548ff89b0"
      ],
      "author": {
        "name": "Heesung Sohn",
        "email": "103456639+heesung-sn@users.noreply.github.com",
        "time": "Mon Mar 04 18:28:08 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 05 10:28:08 2024 +0800"
      },
      "message": "[improve] add physicalAddress as part of connection pool key (#411)\n\n### Motivation\r\n\r\nContext: https://github.com/apache/pulsar/pull/22085/files#r1497008116\r\n\r\nCurrently, the connection pool key does not include physicalAddress (currently logicalAddress + keySuffix). This can be a problem when the same logicalAddresses are in the migrated(green) cluster. (the connection pool will return the connection to the old(blue) cluster)\r\n\r\n### Modifications\r\n\r\nAdd physicalAddress as part of the connection pool key"
    },
    {
      "commit": "e2cacb7dfb57b6d059b49fead2e1611548ff89b0",
      "tree": "0ce6511a833ce01a36c9b54b89ab43aee5a47915",
      "parents": [
        "6e1ad1742ac98149c56faa32dc39d421dfe8ebd8"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Mar 04 01:24:09 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 04 01:24:09 2024 +0800"
      },
      "message": "Fix the incompatibility with Clang and C++20 (#408)\n\n### Motivation\r\n\r\nWhen I built with Clang and C++20, there were the following errors:\r\n\r\n\u003e ISO C++20 considers use of overloaded operator \u0027\u003d\u003d\u0027 (with operand types \u0027pulsar::NamespaceName\u0027 and \u0027pulsar::NamespaceName\u0027) to be ambiguous despite there being a unique best viable function [-Werror,-Wambiguous-reversed-operator]\r\n\r\nSee the detailed answer here: https://stackoverflow.com/questions/60386792/c20-comparison-warning-about-ambiguous-reversed-operator\r\n\r\n### Modifications\r\n\r\nMake the member functions of `operator\u003d` const in `TopicName` and `NamespaceName` and add a workflow to cover this case."
    },
    {
      "commit": "6e1ad1742ac98149c56faa32dc39d421dfe8ebd8",
      "tree": "7df1d4d61ed06a38524f3719228c6595bacb47f9",
      "parents": [
        "9f96eb98ff52cebc8b4360de5e6d44b42b89c6e9"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Fri Mar 01 01:34:21 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 29 09:34:21 2024 -0800"
      },
      "message": "Update dependencies to latest versions (#404)\n\n* Update dependencies to latest versions\r\n\r\nRestore protobuf version\r\n\r\n* Fix build script\r\n\r\n* Fix Linux build Dockerfiles\r\n\r\n* Downgrade Boost to 1.83"
    },
    {
      "commit": "9f96eb98ff52cebc8b4360de5e6d44b42b89c6e9",
      "tree": "1ac79c971e25cc7fdc1710720016b809a7e5ba29",
      "parents": [
        "543e51c7ecd842056f93859defd23b851bfe842e"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Feb 29 10:56:20 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 29 10:56:20 2024 +0800"
      },
      "message": "Fix blue-green migration might be stuck due to an existing reconnection (#406)\n\nFixes https://github.com/apache/pulsar-client-cpp/issues/405\r\n\r\n### Motivation\r\n\r\nAfter triggering a blue-green migration, the socket will be disconnected\r\nand then schedule a reconnection to the blue cluster. However, the blue\r\ncluster could never respond with a response for Producer or Subscribe\r\ncommands. Take producer as example, it means `connectionOpened` will not\r\ncomplete and `reconnectionPending_` will not become false.\r\n\r\nThen, after receiving a `CommandProducerClose` command from the blue\r\ncluster, a new reconnection will be scheduled to the green cluster but\r\nit will be skipped because `reconnectionPending_` is true, which means\r\nthe previous `connectionOpened` future is not completed until the 30s\r\ntimeout is reached.\r\n\r\n```\r\n2024-02-26 06:09:30.251 INFO  [139737465607744] HandlerBase:101 | [persistent://public/unload-test/topic-1708927732, sub, 0] Ignoring reconnection attempt since there\u0027s already a pending reconnection\r\n2024-02-26 06:10:00.035 WARN  [139737859880512] ProducerImpl:291 | [persistent://public/unload-test/topic-1708927732, cluster-a-0-0] Failed to reconnect producer: TimeOut\r\n```\r\n\r\n### Modifications\r\n\r\nWhen receiving the `TOPIC_MIGRATED` command, cancel the pending\r\n`Producer` and `Subscribe` commands so that `connectionOpened` will fail\r\nwith a retryable error. In the next time of reconnection, the green\r\ncluster will be connected.\r\n\r\nFix the `ExtensibleLoadManagerTest` with a more strict timeout check.\r\nAfter this change, it will pass in about 3 seconds locally, while in CI\r\neven if it passed, it takes about 70 seconds before.\r\n\r\nBesides, fix the possible crash on macOS when closing the client, see\r\nhttps://github.com/apache/pulsar-client-cpp/issues/405#issuecomment-1963969215"
    },
    {
      "commit": "543e51c7ecd842056f93859defd23b851bfe842e",
      "tree": "9a651e0ab1e2b3423250268535f2bd0f95379a52",
      "parents": [
        "7891ac569eeca8e8cfeedf4ee005a26f98a0ca71"
      ],
      "author": {
        "name": "Heesung Sohn",
        "email": "103456639+heesung-sn@users.noreply.github.com",
        "time": "Tue Feb 20 19:02:31 2024 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 21 11:02:31 2024 +0800"
      },
      "message": "[feat] PIP-188 Support blue-green migration (#402)\n\n### Motivation\r\n\r\nSupport blue-green migration pip-188 for cpp client\r\n\r\n### Modifications\r\n\r\n- added blue-green client logic \r\n- register the producer instance in the producers map before sending produce creation command. This is required since broker could send topic migration command in the middle of creating the producer."
    },
    {
      "commit": "7891ac569eeca8e8cfeedf4ee005a26f98a0ca71",
      "tree": "0653ffe541c56a1cbba4be0d6e2637823b3f1dee",
      "parents": [
        "68b4244f321345928e0943387c1dca7b5f448d2c"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Mon Feb 19 10:18:11 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 19 10:18:11 2024 +0800"
      },
      "message": "Disable batch send for dlq producer. (#403)\n\n"
    },
    {
      "commit": "68b4244f321345928e0943387c1dca7b5f448d2c",
      "tree": "5f5fbe70e9e8fa832483b984127385e0316b496e",
      "parents": [
        "398350075341527399305dc92a0847ed3eb4c726"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Wed Feb 07 10:26:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 07 10:26:36 2024 +0800"
      },
      "message": "Fix creating producer or consumer is not retried for connection failure (#396)\n\nFixes https://github.com/apache/pulsar-client-cpp/issues/391\r\n\r\n### Motivation\r\n\r\nWhen `connectionFailed` is called, no matter if the result is retryable\r\nthe creation of producer or consumer will fail without retry.\r\n\r\n### Modifications\r\n\r\nCheck if the result is retryable in `connectionFailed` for\r\n`ProducerImpl` and `ConsumerImpl` and only fail for non-retryable errors\r\nor the timeout error. Register another timer in `HandlerBase` to\r\npropagate the timeout error to `connectionFailed`.\r\n\r\nAdd `testRetryUntilSucceed`, `testRetryTimeout`, `testNoRetry` to verify\r\nclient could retry according to the result returned by\r\n`ClientImpl::getConnection`."
    }
  ],
  "next": "398350075341527399305dc92a0847ed3eb4c726"
}
