{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":185278617,"defaultBranch":"master","name":"pulsar-client-go","ownerLogin":"apache","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2019-05-06T22:08:46.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/47359?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1724150811.0","currentOid":""},"activityList":{"items":[{"before":"98dc8d42abb638a4371969214c93d96c5dc51cc5","after":"188dba9b64d3072fa662e28f6bf869735e6fbc50","ref":"refs/heads/master","pushedAt":"2024-09-18T09:16:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"shoothzj","name":"ZhangJian He","path":"/shoothzj","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/12933197?s=80&v=4"},"commit":{"message":"[fix] [Issue 485]Fixed crash caused by memory not aligned in arm32 architecture (#1286)\n\nSigned-off-by: lookupman ","shortMessageHtmlLink":"[fix] [Issue 485]Fixed crash caused by memory not aligned in arm32 ar…"}},{"before":"7ae0059fe7464431cf11f916e44216bdf536068f","after":"98dc8d42abb638a4371969214c93d96c5dc51cc5","ref":"refs/heads/master","pushedAt":"2024-09-11T09:54:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[Issue 1272][connection] Attempt to avoid deadlock during reconnection (#1273)\n\nFixes #1272 \r\n\r\n### Motivation\r\n\r\nProducers and consumers register themselves to the connection to be notified when it gets closed. Even though the callback push the events in a channel, it can get stuck and the connection pool is locked which prevents any other caller to get a connection.\r\n\r\n### Modifications\r\n\r\nThis PR makes sure that the callback never blocks.","shortMessageHtmlLink":"[Issue 1272][connection] Attempt to avoid deadlock during reconnection ("}},{"before":"be553141c52d5088981452ea5444aa62135b52d3","after":"7ae0059fe7464431cf11f916e44216bdf536068f","ref":"refs/heads/master","pushedAt":"2024-09-11T03:16:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"Refactor connection concurrency model (#1275)","shortMessageHtmlLink":"Refactor connection concurrency model (#1275)"}},{"before":"953d9eab07948d94234c6a2e6b04f1ffeb8ff833","after":"be553141c52d5088981452ea5444aa62135b52d3","ref":"refs/heads/master","pushedAt":"2024-09-04T08:48:39.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"[improve] stop timer when close timedAckGroupingTracker (#1279)","shortMessageHtmlLink":"[improve] stop timer when close timedAckGroupingTracker (#1279)"}},{"before":"01e32e7458dd1b96f8718adfdcff33a70b3e073d","after":"953d9eab07948d94234c6a2e6b04f1ffeb8ff833","ref":"refs/heads/master","pushedAt":"2024-08-27T06:32:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"crossoverJie","name":"crossoverJie","path":"/crossoverJie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15684156?s=80&v=4"},"commit":{"message":"feat: support the namespace offloadThresholdInSeconds API in pulsaradmin pkg (#1271)\n\n* feat: support offloadThresholdInSeconds API in pulsaradmin pkg\r\n\r\nSigned-off-by: ericsyh \r\n\r\n* Update pulsaradmin/pkg/admin/namespace.go\r\n\r\nCo-authored-by: Zike Yang \r\n\r\n* Update pulsaradmin/pkg/admin/namespace.go\r\n\r\nCo-authored-by: Zike Yang \r\n\r\n* add test\r\n\r\nSigned-off-by: ericsyh \r\n\r\n* fix test\r\n\r\nSigned-off-by: ericsyh \r\n\r\n---------\r\n\r\nSigned-off-by: ericsyh \r\nCo-authored-by: Zike Yang ","shortMessageHtmlLink":"feat: support the namespace offloadThresholdInSeconds API in pulsarad…"}},{"before":"470372338400ddedec051cfa27cd8fe6a99f568b","after":null,"ref":"refs/heads/dependabot/go_modules/github.com/docker/docker-27.1.1incompatible","pushedAt":"2024-08-20T10:46:51.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"}},{"before":"ab042ae714d14ff8a07ba0d55ba4d887879e1e00","after":"01e32e7458dd1b96f8718adfdcff33a70b3e073d","ref":"refs/heads/master","pushedAt":"2024-08-20T10:46:47.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"chore(deps): bump github.com/docker/docker (#1269)\n\nBumps [github.com/docker/docker](https://github.com/docker/docker) from 27.0.3+incompatible to 27.1.1+incompatible.\r\n- [Release notes](https://github.com/docker/docker/releases)\r\n- [Commits](https://github.com/docker/docker/compare/v27.0.3...v27.1.1)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: github.com/docker/docker\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>","shortMessageHtmlLink":"chore(deps): bump github.com/docker/docker (#1269)"}},{"before":"6a2e461754bec9d463c678685645b4d8c82839b6","after":"ab042ae714d14ff8a07ba0d55ba4d887879e1e00","ref":"refs/heads/master","pushedAt":"2024-08-13T10:58:49.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[fix] peek message will return -1 for partitionIndex (#1267)\n\n### Motivation\r\nIf peek a partitioned topic, will see a message id: `7316:0:-1:-1`, the parititonIndex should not be -1.\r\n\r\n```\r\npulsarctl subscription peek --count 10 persistent://public/default/my-topic-partition-0 test-sub\r\nMessage ID : 7316:0:-1:-1\r\nProperties :\r\n{\r\n \"publish-time\": \"2024-08-08T17:50:39.476+08:00\"\r\n}\r\nMessage :\r\n00000000 68 65 6c 6c 6f 2d 31 |hello-1|\r\n```\r\n\r\n### Modifications\r\n- Set partition index on peek message.","shortMessageHtmlLink":"[fix] peek message will return -1 for partitionIndex (#1267)"}},{"before":"c6508bf5009a335a8513d9c25c41b45b144ed427","after":null,"ref":"refs/heads/dependabot/go_modules/github.com/docker/docker-27.1.0incompatible","pushedAt":"2024-08-09T19:09:01.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"}},{"before":null,"after":"470372338400ddedec051cfa27cd8fe6a99f568b","ref":"refs/heads/dependabot/go_modules/github.com/docker/docker-27.1.1incompatible","pushedAt":"2024-08-09T19:08:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"chore(deps): bump github.com/docker/docker\n\nBumps [github.com/docker/docker](https://github.com/docker/docker) from 27.0.3+incompatible to 27.1.1+incompatible.\n- [Release notes](https://github.com/docker/docker/releases)\n- [Commits](https://github.com/docker/docker/compare/v27.0.3...v27.1.1)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/docker/docker\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"chore(deps): bump github.com/docker/docker"}},{"before":"dad98f16886e319291b93089a47e70835f08de0f","after":"6a2e461754bec9d463c678685645b4d8c82839b6","ref":"refs/heads/master","pushedAt":"2024-08-09T10:09:38.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"Add changelog for 0.13.1 (#1266)","shortMessageHtmlLink":"Add changelog for 0.13.1 (#1266)"}},{"before":"8dd4ed19b98ecf9287cbcfc20e2de9a12b197e3f","after":"dad98f16886e319291b93089a47e70835f08de0f","ref":"refs/heads/master","pushedAt":"2024-08-01T04:04:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[Improve] Add InitialSubscriptionName for DLQPolicy (#1264)\n\nFixes #1239 \r\n\r\n### Modifications\r\nAdd `InitialSubscriptionName` for DLQPolicy.","shortMessageHtmlLink":"[Improve] Add InitialSubscriptionName for DLQPolicy (#1264)"}},{"before":"3cbb3537598bba9b777b4488916c156de372e354","after":"e44bd0481cc8b3b407c257a3411a97d48bb29844","ref":"refs/heads/branch-0.13.0","pushedAt":"2024-07-31T08:28:15.000Z","pushType":"push","commitsCount":6,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[fix] Avoid a data race when flushing with load (#1261)\n\nFixes #1258\n\n### Motivation\n\nWhile flushing, the data channel is switched if a new allocated one which can cause the loss of messages because the length can be zero which would stop the procedure and at the same time a new message can be sent to the channel.\n\n### Modifications\n\nInstead of allocating a new channel, it empties the existing one up to the length of the buffer of the channel before proceeding with the flush.\n\n(cherry picked from commit 8dd4ed19b98ecf9287cbcfc20e2de9a12b197e3f)","shortMessageHtmlLink":"[fix] Avoid a data race when flushing with load (#1261)"}},{"before":"fb805c0aea3506ba9df87bb066221469e35005a0","after":"8dd4ed19b98ecf9287cbcfc20e2de9a12b197e3f","ref":"refs/heads/master","pushedAt":"2024-07-30T12:25:42.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[fix] Avoid a data race when flushing with load (#1261)\n\nFixes #1258 \r\n\r\n### Motivation\r\n\r\nWhile flushing, the data channel is switched if a new allocated one which can cause the loss of messages because the length can be zero which would stop the procedure and at the same time a new message can be sent to the channel.\r\n\r\n### Modifications\r\n\r\nInstead of allocating a new channel, it empties the existing one up to the length of the buffer of the channel before proceeding with the flush.","shortMessageHtmlLink":"[fix] Avoid a data race when flushing with load (#1261)"}},{"before":null,"after":"c6508bf5009a335a8513d9c25c41b45b144ed427","ref":"refs/heads/dependabot/go_modules/github.com/docker/docker-27.1.0incompatible","pushedAt":"2024-07-30T10:21:19.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"chore(deps): bump github.com/docker/docker\n\nBumps [github.com/docker/docker](https://github.com/docker/docker) from 27.0.3+incompatible to 27.1.0+incompatible.\n- [Release notes](https://github.com/docker/docker/releases)\n- [Commits](https://github.com/docker/docker/compare/v27.0.3...v27.1.0)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/docker/docker\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"chore(deps): bump github.com/docker/docker"}},{"before":"c74460ddc43a0bd48beea527926f7c74f7ddf28a","after":"fb805c0aea3506ba9df87bb066221469e35005a0","ref":"refs/heads/master","pushedAt":"2024-07-29T06:09:01.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"crossoverJie","name":"crossoverJie","path":"/crossoverJie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/15684156?s=80&v=4"},"commit":{"message":"[Issue 1259][producer] Prevent panic when calling Flush on closed producer (#1260)","shortMessageHtmlLink":"[Issue 1259][producer] Prevent panic when calling Flush on closed pro…"}},{"before":"c3b0633a2f5fcc5b560b504d04fdef0e82f6b72a","after":"c74460ddc43a0bd48beea527926f7c74f7ddf28a","ref":"refs/heads/master","pushedAt":"2024-07-27T03:52:06.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[feat] Add support for subscription expiration time namespace settings (#1254)\n\nFixes #1253 \r\n\r\n### Motivation\r\n\r\nAdds support for the get / set / delete `subscriptionExpirationTime` namespace settings.\r\n\r\n### Modifications\r\n\r\nCreated new functions in `namespace.go` that implement support for `subscriptionExpirationTime` settings","shortMessageHtmlLink":"[feat] Add support for subscription expiration time namespace settings ("}},{"before":"73fd3743428e8455a8ad4ec2ba4db7a2a1f03822","after":"3cbb3537598bba9b777b4488916c156de372e354","ref":"refs/heads/branch-0.13.0","pushedAt":"2024-07-24T11:04:14.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[Fix] Oauth2 Client credentials flow use scopes from the keyfile as well (#1244)\n\n### Motivation\n\nAs the issue shows when using Pulsarctl which works with a context as configuration style, Oauth2 is used under the hood.\n\nHowever the library does not expose any way to inject the context configuration `scope` value, and then relies on reading that from the `keyFile` for `client_credentials flow`.\n\nHowever that is not being utilized in the current code as the scope value is not read from from the file.\n\n*Explain here the context, and why you're making that change. What is the problem you're trying to solve.*\nTo allow the usage of oauth2 with a keyfile in Pulsarctl 3+ which it doesn't right now\n\n### Modifications\nAlters so reading the keyFile for client credentials also returns the `scope` value.\n\nThe value is then split on spaces, and added to a temporary slice.\nAfter that the value of any additionalScopes that was already in the options is then added to the temp slice as well.\nIn the end the additionalScopes property on the options is set to the temp slice containing values from previous additionalScopes and the ones from the keyFile.\n\n(cherry picked from commit c3b0633a2f5fcc5b560b504d04fdef0e82f6b72a)","shortMessageHtmlLink":"[Fix] Oauth2 Client credentials flow use scopes from the keyfile as w…"}},{"before":"28293a6b3a6322d0619837dbb6ab78dd351972f6","after":"c3b0633a2f5fcc5b560b504d04fdef0e82f6b72a","ref":"refs/heads/master","pushedAt":"2024-07-24T10:51:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[Fix] Oauth2 Client credentials flow use scopes from the keyfile as well (#1244)\n\n### Motivation\r\n\r\nAs the issue shows when using Pulsarctl which works with a context as configuration style, Oauth2 is used under the hood.\r\n\r\nHowever the library does not expose any way to inject the context configuration `scope` value, and then relies on reading that from the `keyFile` for `client_credentials flow`.\r\n\r\nHowever that is not being utilized in the current code as the scope value is not read from from the file.\r\n\r\n*Explain here the context, and why you're making that change. What is the problem you're trying to solve.*\r\nTo allow the usage of oauth2 with a keyfile in Pulsarctl 3+ which it doesn't right now\r\n\r\n### Modifications\r\nAlters so reading the keyFile for client credentials also returns the `scope` value.\r\n\r\nThe value is then split on spaces, and added to a temporary slice. \r\nAfter that the value of any additionalScopes that was already in the options is then added to the temp slice as well.\r\nIn the end the additionalScopes property on the options is set to the temp slice containing values from previous additionalScopes and the ones from the keyFile.","shortMessageHtmlLink":"[Fix] Oauth2 Client credentials flow use scopes from the keyfile as w…"}},{"before":"df6a15c8548271f521d9615871899bd8d8678ed1","after":"28293a6b3a6322d0619837dbb6ab78dd351972f6","ref":"refs/heads/master","pushedAt":"2024-07-24T09:43:33.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"fix: producer close was blocked (#1249)\n\n* fix: producer close was blocked\r\n\r\n* Fix lint\r\n\r\n* Use ctx to control logic\r\n\r\n* Reduce timeout\r\n\r\n* Improve style","shortMessageHtmlLink":"fix: producer close was blocked (#1249)"}},{"before":"81eca356ec1486199e95ea8f4def005cc6b6e83d","after":"73fd3743428e8455a8ad4ec2ba4db7a2a1f03822","ref":"refs/heads/branch-0.13.0","pushedAt":"2024-07-24T02:58:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"[Fix] Fix the key-based batch can't guarantee the ordering when flushing (#1252)\n\n### Motivation\n\nWhen using key-based producing, the key-based batcher cannot guarantee the sequence ID order when flushing messages. This leads to frequent disconnections between the client and the broker, resulting in poor performance.\n\nHere is the related log:\n```\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Received send error from server: [PersistenceError] : [Cannot determine whether the message is a duplicate at this time]\"\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Connection was closed\" cnx=\"xxx\" producerID=1 producer_name=xxx topic=\"xxx\"\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Failed to write on connection\" error=\"use of closed network connection\" local_addr=\"xxx\" remote_addr=\"xxx\"\n```\n\nThe broker receives unordered messages and returns a SendError to the client. This causes the client to reconnect to the broker.\n\n### Modifications\n\n- Refactor the BatchBuilder interface.\n- Sort batches before flushing in the key-based batcher builder.\n\n(cherry picked from commit e2fd4c9737794851bb741f717264961b28da3812)","shortMessageHtmlLink":"[Fix] Fix the key-based batch can't guarantee the ordering when flush…"}},{"before":"a42cc24f8ff4c00f4d2f901bf9c823b5b2c653e6","after":"df6a15c8548271f521d9615871899bd8d8678ed1","ref":"refs/heads/master","pushedAt":"2024-07-22T10:37:00.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"fix pulsar admin revoke subscription permission endpoint (#1251)\n\n* fix pulsar admin revoke subscription permission endpoint\r\n\r\n* feat: support get subscription permissions and add test case\r\n\r\n* feat: remove fmt package\r\n\r\n---------\r\n\r\nCo-authored-by: haotao chen ","shortMessageHtmlLink":"fix pulsar admin revoke subscription permission endpoint (#1251)"}},{"before":"0ac542cb90ab5e4c4319c760c1a25a3d39182f54","after":"a42cc24f8ff4c00f4d2f901bf9c823b5b2c653e6","ref":"refs/heads/master","pushedAt":"2024-07-22T10:32:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"fix: failTimeoutMessages cannot delete outdated messages (#1247)\n\n* fix: failTimeoutMessages cannot delete outdated messages\r\n\r\n* Fix slice pass","shortMessageHtmlLink":"fix: failTimeoutMessages cannot delete outdated messages (#1247)"}},{"before":"e2fd4c9737794851bb741f717264961b28da3812","after":"0ac542cb90ab5e4c4319c760c1a25a3d39182f54","ref":"refs/heads/master","pushedAt":"2024-07-22T03:41:19.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"Add changelog for 0.13.0 (#1245)\n\n### Motivation\r\n\r\nAdd 0.13.0 change log","shortMessageHtmlLink":"Add changelog for 0.13.0 (#1245)"}},{"before":"627999c2c93a6e7ce8493e7e459d0611466b8f5f","after":"e2fd4c9737794851bb741f717264961b28da3812","ref":"refs/heads/master","pushedAt":"2024-07-19T13:00:44.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] Fix the key-based batch can't guarantee the ordering when flushing (#1252)\n\n### Motivation\r\n\r\nWhen using key-based producing, the key-based batcher cannot guarantee the sequence ID order when flushing messages. This leads to frequent disconnections between the client and the broker, resulting in poor performance.\r\n\r\nHere is the related log:\r\n```\r\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Received send error from server: [PersistenceError] : [Cannot determine whether the message is a duplicate at this time]\"\r\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Connection was closed\" cnx=\"xxx\" producerID=1 producer_name=xxx topic=\"xxx\"\r\ntime=\"2024-07-19T03:38:07Z\" level=warning msg=\"Failed to write on connection\" error=\"use of closed network connection\" local_addr=\"xxx\" remote_addr=\"xxx\"\r\n```\r\n\r\nThe broker receives unordered messages and returns a SendError to the client. This causes the client to reconnect to the broker.\r\n\r\n### Modifications\r\n\r\n- Refactor the BatchBuilder interface.\r\n- Sort batches before flushing in the key-based batcher builder.","shortMessageHtmlLink":"[Fix] Fix the key-based batch can't guarantee the ordering when flush…"}},{"before":"50dce7ea7c2d7aff64c65ccbc2ef696a25cc9afc","after":"81eca356ec1486199e95ea8f4def005cc6b6e83d","ref":"refs/heads/branch-0.13.0","pushedAt":"2024-07-15T08:02:50.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"fix: fix producer connection (#1243)\n\n* fix: fix producer connection\n\n* Fix test\n\n* Fix nil pointer\n\n* Fix GetConnection err\n\n* Fix cnx\n\n(cherry picked from commit 29f2779123c6979c95b6235f16e6fbde33ca681f)","shortMessageHtmlLink":"fix: fix producer connection (#1243)"}},{"before":"2ff2c2cdafe71d72a5d3b69680f3086301510f4b","after":"627999c2c93a6e7ce8493e7e459d0611466b8f5f","ref":"refs/heads/master","pushedAt":"2024-07-15T07:33:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"RobertIndie","name":"Zike Yang","path":"/RobertIndie","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16974619?s=80&v=4"},"commit":{"message":"ci: add merge limitation (#1248)\n\n### Motivation\r\n\r\nImprove PR merge.\r\n\r\n### Modifications\r\n\r\nAdd `required_pull_request_reviews` and `required_conversation_resolution` to the `.asf.yaml`.","shortMessageHtmlLink":"ci: add merge limitation (#1248)"}},{"before":"29f2779123c6979c95b6235f16e6fbde33ca681f","after":"2ff2c2cdafe71d72a5d3b69680f3086301510f4b","ref":"refs/heads/master","pushedAt":"2024-07-14T04:03:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tisonkun","name":"tison","path":"/tisonkun","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/18818196?s=80&v=4"},"commit":{"message":"ci: validate multiple version builds and use golangci-lint-action (#1250)\n\n* ci: validate multiple version builds and use golangci-lint-actio\r\n\r\n* Fix lint","shortMessageHtmlLink":"ci: validate multiple version builds and use golangci-lint-action (#1250"}},{"before":"f7e34f33ad112a43ab445a2882e63c31ba05a577","after":"29f2779123c6979c95b6235f16e6fbde33ca681f","ref":"refs/heads/master","pushedAt":"2024-07-12T11:56:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"fix: fix producer connection (#1243)\n\n* fix: fix producer connection\r\n\r\n* Fix test\r\n\r\n* Fix nil pointer\r\n\r\n* Fix GetConnection err\r\n\r\n* Fix cnx","shortMessageHtmlLink":"fix: fix producer connection (#1243)"}},{"before":"50dce7ea7c2d7aff64c65ccbc2ef696a25cc9afc","after":"f7e34f33ad112a43ab445a2882e63c31ba05a577","ref":"refs/heads/master","pushedAt":"2024-07-12T10:53:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"nodece","name":"Zixuan Liu","path":"/nodece","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16235121?s=80&v=4"},"commit":{"message":"improve: install golang by image in the Dockerfile (#1246)","shortMessageHtmlLink":"improve: install golang by image in the Dockerfile (#1246)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQwOToxNjoxOC4wMDAwMDBazwAAAAS5df3U","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wOS0xOFQwOToxNjoxOC4wMDAwMDBazwAAAAS5df3U","endCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNy0xMlQxMDo1MzoyMi4wMDAwMDBazwAAAAR9wZUQ"}},"title":"Activity · apache/pulsar-client-go"}