{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":542858846,"defaultBranch":"main","name":"pulsar-client-cpp","ownerLogin":"apache","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-09-29T01:10:49.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/47359?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1711977111.0","currentOid":""},"activityList":{"items":[{"before":"5940cb518bdf3a13ae7f859fab10d6940eec51b7","after":"2ec734b3d6e3bf77bbfa892d808499a2bfa57c06","ref":"refs/heads/main","pushedAt":"2024-08-21T12:44:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Fix invalid memory access on the first pending batch receive callback (#441)","shortMessageHtmlLink":"Fix invalid memory access on the first pending batch receive callback ("}},{"before":"2a6916819b2a80a532f827dc96026b8fdc0b15ed","after":"5940cb518bdf3a13ae7f859fab10d6940eec51b7","ref":"refs/heads/main","pushedAt":"2024-08-13T14:30:48.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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's 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't 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.","shortMessageHtmlLink":"Fix consumer might not subscribe after a reconnection (#438)"}},{"before":"35bf161ba25c9ea073b730e3dcdaa50c30703bcb","after":"2a6916819b2a80a532f827dc96026b8fdc0b15ed","ref":"refs/heads/main","pushedAt":"2024-07-22T11:01:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"shibd","name":"Baodi Shi","path":"/shibd","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/33416836?s=80&v=4"},"commit":{"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","shortMessageHtmlLink":"feat: expose partitions update interval configuration to C client (#437)"}},{"before":"d736a1b68fac6d1d5bd9f785aabf8f952580a597","after":"35bf161ba25c9ea073b730e3dcdaa50c30703bcb","ref":"refs/heads/main","pushedAt":"2024-07-04T07:28:03.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"merlimat","name":"Matteo Merli","path":"/merlimat","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/62500?s=80&v=4"},"commit":{"message":"[CI] Use macos-12 to build macOS libraries (#433)","shortMessageHtmlLink":"[CI] Use macos-12 to build macOS libraries (#433)"}},{"before":"8aab89607759922e48a09d6e2df3713af0543368","after":"d736a1b68fac6d1d5bd9f785aabf8f952580a597","ref":"refs/heads/main","pushedAt":"2024-07-04T01:52:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"Add -Bsymbolic link option to avoid symbol interposition (#432)"}},{"before":"739f0f0c808376f73f2b695726a7357e32625a3e","after":"8aab89607759922e48a09d6e2df3713af0543368","ref":"refs/heads/main","pushedAt":"2024-06-24T14:15:45.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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`.","shortMessageHtmlLink":"Use Rocky Linux 8 and vcpkg to build RPM packages (#428)"}},{"before":"37bdf5b3856190eefc7a703753361da0e3a6e2c0","after":"739f0f0c808376f73f2b695726a7357e32625a3e","ref":"refs/heads/main","pushedAt":"2024-06-17T08:00:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"Log the default location of trusted CA certificates when tlsTrustCert…"}},{"before":"3f0b33bfad746fd2da63fe062ea745d9a9caed55","after":"37bdf5b3856190eefc7a703753361da0e3a6e2c0","ref":"refs/heads/main","pushedAt":"2024-06-04T01:51:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"Support seek operation on a multi-topics consumer (#426)"}},{"before":"27d8cc01d5b7cfce94a7d71259dca5cea83ae01e","after":"3f0b33bfad746fd2da63fe062ea745d9a9caed55","ref":"refs/heads/main","pushedAt":"2024-04-06T10:23:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"fix: Incorrect acknowledgment behavior in the listener of the multi-t…"}},{"before":"916af95dda4d06162f9ea4e4180f9fd726c25a4e","after":"0ba3d7d8e9f7d3fb2f2cc3cdf918bb63c4791afc","ref":"refs/heads/branch-3.5","pushedAt":"2024-03-28T02:45:14.000Z","pushType":"push","commitsCount":5,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Release 3.5.1","shortMessageHtmlLink":"Release 3.5.1"}},{"before":"763b85c6c4b9bb648b9f7cf62f9ed09f04f3decb","after":"27d8cc01d5b7cfce94a7d71259dca5cea83ae01e","ref":"refs/heads/main","pushedAt":"2024-03-28T02:36:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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's a catch-up for https://github.com/apache/pulsar/pull/22363","shortMessageHtmlLink":"Fix wrong results of hasMessageAvailable and readNext after seeking b…"}},{"before":"788227ee930d39459d6d763eda94b992f3e1c1f6","after":"763b85c6c4b9bb648b9f7cf62f9ed09f04f3decb","ref":"refs/heads/main","pushedAt":"2024-03-27T09:47:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Fix minor issues reported by CodeQL (#421)","shortMessageHtmlLink":"Fix minor issues reported by CodeQL (#421)"}},{"before":"c513f29fadce86bacaf4f878d8d25064f7560083","after":"788227ee930d39459d6d763eda94b992f3e1c1f6","ref":"refs/heads/main","pushedAt":"2024-03-18T02:04:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Bumped version to 3.6.0-pre (#418)","shortMessageHtmlLink":"Bumped version to 3.6.0-pre (#418)"}},{"before":"821871777e247e1ccbfa323ea0d5136cf0e18711","after":"c513f29fadce86bacaf4f878d8d25064f7560083","ref":"refs/heads/main","pushedAt":"2024-03-17T15:10:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"Fix broken wireshark build workflow on macOS (#414)"}},{"before":"234a55d924ad263144a4e2661a3c6f1985fe7322","after":"821871777e247e1ccbfa323ea0d5136cf0e18711","ref":"refs/heads/main","pushedAt":"2024-03-14T12:11:26.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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's not\r\ndefined. The workflow and README are updated for it.","shortMessageHtmlLink":"Support customize vcpkg directory when INTEGRATE_VCPKG is ON (#417)"}},{"before":"ee1d7b9c5b1eed6fe0a279203648a06c30a3feb0","after":"234a55d924ad263144a4e2661a3c6f1985fe7322","ref":"refs/heads/main","pushedAt":"2024-03-14T10:32:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"[feat] Add startPaused setting to consumer (#416)"}},{"before":"3b574c739e6a62696e0bf2374ab43e7f0b24b377","after":"916af95dda4d06162f9ea4e4180f9fd726c25a4e","ref":"refs/heads/branch-3.5","pushedAt":"2024-03-11T11:31:27.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Merge branch 'main' into branch-3.5","shortMessageHtmlLink":"Merge branch 'main' into branch-3.5"}},{"before":"436050092930b3eca73883cc7623f8cebf08f636","after":"ee1d7b9c5b1eed6fe0a279203648a06c30a3feb0","ref":"refs/heads/main","pushedAt":"2024-03-11T11:09:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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's 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`.","shortMessageHtmlLink":"Fix hasMessageAvailable might return true after seeking to latest (#409)"}},{"before":"747c1863018cb345b4e2bbbaaf7a6549c9c6b429","after":"436050092930b3eca73883cc7623f8cebf08f636","ref":"refs/heads/main","pushedAt":"2024-03-11T06:46:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"Change return code of MultiTopicsConsumerImpl::closeAsync after unsub…"}},{"before":"d0a322704cea8dba5925d5e3760061bdc0d84282","after":"747c1863018cb345b4e2bbbaaf7a6549c9c6b429","ref":"refs/heads/main","pushedAt":"2024-03-05T04:35:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"[CI] Pin the clang-format version to 11 (#412)"}},{"before":"e2cacb7dfb57b6d059b49fead2e1611548ff89b0","after":"d0a322704cea8dba5925d5e3760061bdc0d84282","ref":"refs/heads/main","pushedAt":"2024-03-05T02:28:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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","shortMessageHtmlLink":"[improve] add physicalAddress as part of connection pool key (#411)"}},{"before":"6e1ad1742ac98149c56faa32dc39d421dfe8ebd8","after":"e2cacb7dfb57b6d059b49fead2e1611548ff89b0","ref":"refs/heads/main","pushedAt":"2024-03-03T17:24:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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> ISO C++20 considers use of overloaded operator '==' (with operand types 'pulsar::NamespaceName' and 'pulsar::NamespaceName') 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=` const in `TopicName` and `NamespaceName` and add a workflow to cover this case.","shortMessageHtmlLink":"Fix the incompatibility with Clang and C++20 (#408)"}},{"before":null,"after":"3b574c739e6a62696e0bf2374ab43e7f0b24b377","ref":"refs/heads/branch-3.5","pushedAt":"2024-03-01T02:39:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Release 3.5.0","shortMessageHtmlLink":"Release 3.5.0"}},{"before":"9f96eb98ff52cebc8b4360de5e6d44b42b89c6e9","after":"6e1ad1742ac98149c56faa32dc39d421dfe8ebd8","ref":"refs/heads/main","pushedAt":"2024-02-29T17:34:21.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"merlimat","name":"Matteo Merli","path":"/merlimat","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/62500?s=80&v=4"},"commit":{"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","shortMessageHtmlLink":"Update dependencies to latest versions (#404)"}},{"before":"543e51c7ecd842056f93859defd23b851bfe842e","after":"9f96eb98ff52cebc8b4360de5e6d44b42b89c6e9","ref":"refs/heads/main","pushedAt":"2024-02-29T02:56:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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's 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","shortMessageHtmlLink":"Fix blue-green migration might be stuck due to an existing reconnecti…"}},{"before":"118d7c94e9b5f774cdd72cf12ef5095f19c47345","after":null,"ref":"refs/heads/merlimat-patch-2","pushedAt":"2024-02-26T03:49:08.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"}},{"before":"7891ac569eeca8e8cfeedf4ee005a26f98a0ca71","after":"543e51c7ecd842056f93859defd23b851bfe842e","ref":"refs/heads/main","pushedAt":"2024-02-21T03:02:31.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"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.","shortMessageHtmlLink":"[feat] PIP-188 Support blue-green migration (#402)"}},{"before":"68b4244f321345928e0943387c1dca7b5f448d2c","after":"7891ac569eeca8e8cfeedf4ee005a26f98a0ca71","ref":"refs/heads/main","pushedAt":"2024-02-19T02:18:11.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"BewareMyPower","name":"Yunze Xu","path":"/BewareMyPower","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18204803?s=80&v=4"},"commit":{"message":"Disable batch send for dlq producer. (#403)","shortMessageHtmlLink":"Disable batch send for dlq producer. (#403)"}},{"before":"377e2c17d272d536d4d41a0ec19cf54eed69f6ee","after":"118d7c94e9b5f774cdd72cf12ef5095f19c47345","ref":"refs/heads/merlimat-patch-2","pushedAt":"2024-02-07T22:49:45.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"merlimat","name":"Matteo Merli","path":"/merlimat","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/62500?s=80&v=4"},"commit":{"message":"Rolled back to previous Protobuf version","shortMessageHtmlLink":"Rolled back to previous Protobuf version"}},{"before":"9e543d4c99207570368d77231e6b1e8dfa5b5523","after":"377e2c17d272d536d4d41a0ec19cf54eed69f6ee","ref":"refs/heads/merlimat-patch-2","pushedAt":"2024-02-07T04:56:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"merlimat","name":"Matteo Merli","path":"/merlimat","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/62500?s=80&v=4"},"commit":{"message":"Fixed new protobuf paths","shortMessageHtmlLink":"Fixed new protobuf paths"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEoC61wQA","startCursor":null,"endCursor":null}},"title":"Activity · apache/pulsar-client-cpp"}