)]}'
{
  "log": [
    {
      "commit": "6db892c38502ad3de9083f34b74b40a103e69fb5",
      "tree": "225e34e900b789407fedfa5bec189fa1966ddde3",
      "parents": [
        "fe8aaaf19bb7a9096143d638623e26943e5b7913"
      ],
      "author": {
        "name": "aleks-lazic",
        "email": "aleksandar.lazic.1995@gmail.com",
        "time": "Wed May 06 02:57:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 08:57:53 2026 +0800"
      },
      "message": "[Issue 1473][Consumer] Fix race in grabConn dropping messages before handler registration (#1476)"
    },
    {
      "commit": "fe8aaaf19bb7a9096143d638623e26943e5b7913",
      "tree": "3f77ef77c51cc235f98c30c3cd58285c3a2b5a57",
      "parents": [
        "a333bb9075961037ea889eaa56f63a3e477e10f3"
      ],
      "author": {
        "name": "João Moreira Fernandes",
        "email": "joao.fernandes@ist.utl.pt",
        "time": "Tue Apr 28 02:51:18 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 09:51:18 2026 +0800"
      },
      "message": "[Reader] fix: deliver null-value tombstones instead of discarding them (#1482)\n\n* fix(reader): deliver null-value tombstones instead of discarding them\n\nA message published with MessageMetadata.null_value \u003d true (the Pulsar\ncompaction tombstone convention) was conflated with a deserialization\nfailure in partitionConsumer.MessageReceived and silently discarded.\nBecause lastDequeuedMsg was never advanced past the tombstone,\nhasMoreMessages kept returning true and Reader.Next blocked forever\nwhen a tombstone was the last message on a topic.\n\nConsumer: when the reader yields an empty payload and msgMeta or the\nsingle-message metadata has null_value set, build a normal message with\npayLoad \u003d\u003d nil and take the usual dispatch path so lastDequeuedMsg\nadvances. Real corruption still routes through discardCorruptedMessage.\n\nProducer: set MessageMetadata.null_value / SingleMessageMetadata.null_value\nwhen both Value and Payload are nil, matching the Java client so\nGo-produced tombstones carry the flag consumers need.\n\nMessage gains an IsNullValue() bool accessor so applications can tell\ntombstones apart from empty payloads.\n\n* fix: explicitly reseting err\n\nQuoting Copilot\u0027s feedback:\n\nWhen accepting a tombstone with err \u003d\u003d internal.ErrEOM, the code keeps err\nnon-nil and continues. It works today because err is not used later, but it’s\neasy to misread and could become a latent bug if future logic inspects/returns\nerr after this block. Consider explicitly setting err \u003d nil in the\ntombstone/ErrEOM acceptance path to make the intent unambiguous.\n\n* fix: supress lint error"
    },
    {
      "commit": "a333bb9075961037ea889eaa56f63a3e477e10f3",
      "tree": "7a0de03853e5622cdf0e566911aa8541cc26c6c2",
      "parents": [
        "8ea5300dc3d3cd3c16863c888af982054541bf8a"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Wed Apr 15 18:33:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 18:33:15 2026 +0800"
      },
      "message": "Add release note for 0.19.0 (#1475)"
    },
    {
      "commit": "8ea5300dc3d3cd3c16863c888af982054541bf8a",
      "tree": "bf800ecb56fd9bb125b55cf3da6ac72e74bfc864",
      "parents": [
        "593fccfbd82b80afed335727963b6f5730581491"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Wed Apr 15 18:04:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 18:04:28 2026 +0800"
      },
      "message": "fix(test): add localhost advertised address to standalone startup (#1480)\n\n\n\n### Motivation\n\nhttps://github.com/apache/pulsar/pull/25238 introduced a breaking change for standalone startup.\n\nThis PR ensures every `pulsar standalone` startup path uses `--advertised-address localhost`.\n\n\n### Modifications\n\n- update testcontainers-based standalone startup commands in producer tests\n- update testcontainers-based standalone startup commands in consumer tests\n- keep the test service start script using\n  `--advertised-address localhost` for docker and in-container startup"
    },
    {
      "commit": "593fccfbd82b80afed335727963b6f5730581491",
      "tree": "2059d5eb6553f06ad9a90c583899bb4ad77ff8f9",
      "parents": [
        "e7eb92f148f55fbb437d499611f509eb55d72113"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Wed Mar 25 16:16:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 16:16:30 2026 +0800"
      },
      "message": "[Issue 1446][Consumer] Fix consumer can\u0027t consume resent chunked messages (#1464)\n\nMaster Issue: https://github.com/apache/pulsar-client-go/issues/1446\nrelated issue https://github.com/apache/pulsar/pull/21070 and https://github.com/apache/pulsar/pull/21101\n\n### Motivation\nCurrent, when the producer resend the chunked message like this:\n```\nM1: UUID: 0, ChunkID: 0\nM2: UUID: 0, ChunkID: 0 // Resend the first chunk\nM3: UUID: 0, ChunkID: 1\n```\nWhen the consumer received the M2, it will find that it\u0027s already tracking the UUID:0 chunked messages, and will then discard the message M1 and M2. This will lead to unable to consume the whole chunked message even though it\u0027s already persisted in the Pulsar topic.\n\nHere is the code logic:\n```Go\n\tif ctx \u003d\u003d nil || ctx.chunkedMsgBuffer \u003d\u003d nil || chunkID !\u003d ctx.lastChunkedMsgID+1 {\n\t\tlastChunkedMsgID :\u003d -1\n\t\ttotalChunks :\u003d -1\n\t\tif ctx !\u003d nil {\n\t\t\tlastChunkedMsgID \u003d int(ctx.lastChunkedMsgID)\n\t\t\ttotalChunks \u003d int(ctx.totalChunks)\n\t\t\tctx.chunkedMsgBuffer.Clear()\n\t\t}\n\t\tpc.log.Warnf(fmt.Sprintf(\n\t\t\t\"Received unexpected chunk messageId %s, last-chunk-id %d, chunkId \u003d %d, total-chunks %d\",\n\t\t\tmsgID.String(), lastChunkedMsgID, chunkID, totalChunks))\n\t\tpc.chunkedMsgCtxMap.remove(uuid)\n\t\tpc.availablePermits.inc()\n\t\treturn nil\n\t}\n```\nThe bug can be easily reproduced using the testcase `TestChunkWithReconnection` and `TestResendChunkMessages` introduced by this PR.\n\n### Modifications\nThe current chunk processing strategy is consistent with the behavior of the Java client:\nhttps://github.com/apache/pulsar/blob/52a4d5ee84fad6af2736376a6fcdd1bc41e7c52f/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ConsumerImpl.java#L1579\n\nWhen receiving the new duplicated first chunk of a chunked message, the consumer discard the current chunked message context and create a new context to track the following messages. For the case mentioned in Motivation, the M1 will be released and the consumer will assemble M2 and M3 as the chunked message."
    },
    {
      "commit": "e7eb92f148f55fbb437d499611f509eb55d72113",
      "tree": "395dd5c2a433969523a3806c4662f97217c63ef0",
      "parents": [
        "d0db3403023d3390392db8562741691482af6df4"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Mon Mar 23 22:42:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 22:42:49 2026 +0800"
      },
      "message": "feat(pulsaradmin): add scoped topic policies support (#1471)\n\n* feat(pulsaradmin): add scoped topic policies support\n\n* style(topic_policies): improve code readability with formatting\n\n* refactor(topic-policies): consolidate API by making context parameter mandatory"
    },
    {
      "commit": "d0db3403023d3390392db8562741691482af6df4",
      "tree": "797eeb42a04c5a46b69cc16a3a1a4b5c9227f8cc",
      "parents": [
        "15bd915fcf0af108c533f17dd4fe50f81e1e5a15"
      ],
      "author": {
        "name": "Zixuan Liu",
        "email": "nodeces@gmail.com",
        "time": "Sat Mar 21 12:35:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 21 12:35:00 2026 +0800"
      },
      "message": "improve: service URL parsing compatible with Go 1.26 (#1468)\n\n* improve: service URL parsing compatible with Go 1.26\n\n* ci: add Go 1.26 support\n\n* refactor: remove ResolveHostURI method and update tests for service URL resolution\n\n* improve: enhance service URL parsing and add tests for unsupported schemes\n\n* Update pulsar/internal/service_uri.go\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* improve: simplify service URL parsing by removing unnecessary URI conversion\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: crossoverJie \u003ccrossoverJie@gmail.com\u003e"
    },
    {
      "commit": "15bd915fcf0af108c533f17dd4fe50f81e1e5a15",
      "tree": "773d1c37ad2a0b9aa903b0e0af0b8e245930d432",
      "parents": [
        "d7fafb5a559a1bcd744dff2c3fb2493884621bbd"
      ],
      "author": {
        "name": "unJASON",
        "email": "2693017973@qq.com",
        "time": "Fri Mar 20 16:52:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 16:52:29 2026 +0800"
      },
      "message": "fix(consumer): fix panic when messages size is 0 (#1460)\n\n### Modifications\n\nif messages in `MessageReceived` are all skipped, then don\u0027t add into `queuech`.\n\navoid panic when `dispatcher()` received clear command from `clearQueueCh`\n\n---------\n\nCo-authored-by: crossoverJie \u003ccrossoverJie@gmail.com\u003e"
    },
    {
      "commit": "d7fafb5a559a1bcd744dff2c3fb2493884621bbd",
      "tree": "2886f84a37cc2f4c367aba74e0196c60aa30f3bd",
      "parents": [
        "70d34c965f3961cbd77f517af46d24b706612be6"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Fri Mar 20 16:43:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 16:43:46 2026 +0800"
      },
      "message": "feat: regard ProducerBlockedQuotaExceededException as retryable exception to continue to reconnect (#1457)\n\n\n### Motivation\nCurrently, the Go client handles connections in two ways:\n1. If the current connection is an initialization connection, meaning when the producer is initialized for the first time, the `grabCnx()`method will not trigger retry logic. If an error occurs, it will be directly returned to the caller.\n2. If the current connection is an already active connection, the `runEventsLoop()` method will detect the disconnection and call the `reconnectToBroker()` method to re-establish the connection. During reconnection, the method identifies whether the current exception is a retryable error. If it is a retryable error, the `internal.Retry()` inside the `reconnectToBroker()` method will retry indefinitely based on the backoff strategy. If it is a non-retryable error, such as the current `errMsgProducerBlockedQuotaExceededException`, the partition producer will be closed, causing any following messages sent to that partition to result in a `SendTimeoutError`.\n\nSince the `backlogQuotaExceedException` can be resolved by modifying the TTL or increasing consumption speed, it is likely to recover after some retry attempts. I believe the exception handling for `errMsgProducerBlockedQuotaExceededException` in the `reconnectToBroker()` method should align as closely as possible with the Java implementation. Java’s current retry logic for connections is as follows:\n1. If an error is received after sending a message or a heartbeat times out, the callback function `handleSendError()` is triggered to close the connection.\n2. When the connection is closed, the `connectionClosed` method is called, which in turn invokes the `grabCnx()` method, and subsequently `grabCnx()` calls the `connectionOpened()` method to reconnect:\n```Java\n// Schedule a reconnection task\nstate.client.timer().newTimeout(timeout -\u003e {\n    log.info(\"[{}] [{}] Reconnecting after timeout\", state.topic, state.getHandlerName());\n    grabCnx();  // Re-establish the connection\n}, delayMs, TimeUnit.MILLISECONDS);\n```\n3. If the connection still fails in the `connectionOpened()` method, the client will execute different logic based on the current exception. For the `ProducerBlockedQuotaExceededException` exception, the Java client does not treat it as an `isUnrecoverableError`. Instead, it first cleans up the pending messages and then attempts to reconnect.\n\n### Modifications\n1. To maintain consistency with the Java client, I suggest that when `errMsgProducerBlockedQuotaExceededException` is encountered in `reconnectToBroker()`, only `failPendingMessages()` should be executed, but the connection should not be closed. Specifically, the code should be modified as follows:\n```Go\nif strings.Contains(errMsg, errMsgProducerBlockedQuotaExceededException) {\n    p.log.Warn(\"Producer was blocked by quota exceed exception, failing pending messages, stop reconnecting\")\n    p.failPendingMessages(errors.Join(ErrProducerBlockedQuotaExceeded, err))\n    // Do not close the connection here\n    // return struct{}{}, err\n}\n```\n\n2. Update the golangci-lint version in the Makefile from v1.61.0 to v1.64.2, which already meets the minimum requirement for Golang 1.24."
    },
    {
      "commit": "70d34c965f3961cbd77f517af46d24b706612be6",
      "tree": "03b3a5bb4862db049f1a786e741ac1647321142f",
      "parents": [
        "7832a7da85158d86a2bf56f9a6eaf7eebe5bde50"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Thu Mar 19 08:34:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 08:34:19 2026 +0800"
      },
      "message": "admin: add remove replication clusters topic API (#1470)\n\n* admin: add remove replication clusters topic API\n\n* admin: add topic replication clusters remove test\n\n* admin: strengthen replication clusters remove assertion"
    },
    {
      "commit": "7832a7da85158d86a2bf56f9a6eaf7eebe5bde50",
      "tree": "e97b80ea5e125d5e935703f79d1c8a8d0a8a71dd",
      "parents": [
        "3564674615ac147075a299aafa8101ccbc2846cf"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Wed Mar 11 08:59:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 08:59:04 2026 +0800"
      },
      "message": "feat(topic): add support for retrieving applied schema compatibility strategy (#1469)"
    },
    {
      "commit": "3564674615ac147075a299aafa8101ccbc2846cf",
      "tree": "cc32bcd32418dc8caa9f823c2d69af6b4e326318",
      "parents": [
        "203dcf1cd22dbcf853c2a06c52dee3c4e1eba92b"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Wed Feb 25 13:44:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 13:44:07 2026 +0800"
      },
      "message": "feat(namespace): add removal methods for namespace policies (#1465)\n\n* feat(namespace): add removal methods for namespace configs\n\n* docs(namespace): refine comment for RemoveNamespaceMessageTTLWithContext"
    },
    {
      "commit": "203dcf1cd22dbcf853c2a06c52dee3c4e1eba92b",
      "tree": "e506468dfd2b7810163971713673ed4a952056f8",
      "parents": [
        "cc185904de7b42dc97193188874ce6605ff2d560"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Thu Jan 29 22:00:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 22:00:28 2026 +0800"
      },
      "message": "feat(oauth2): add support for issuer URL override in client credentials flow (#1463)\n\n* feat(oauth2): add support for issuer URL override in client credentials flow\n\n* fix(oauth2): handle nil options in client credentials flow\n\n* test(oauth2): add tests for DefaultGrantProvider behavior"
    },
    {
      "commit": "cc185904de7b42dc97193188874ce6605ff2d560",
      "tree": "b8c58c3c21bb44e15476c864aa390940a3db18b7",
      "parents": [
        "25af763adb2ec1062d634dcc75e870907bcbdefc"
      ],
      "author": {
        "name": "Jordan Fitzgerald",
        "email": "jordanfitz56@gmail.com",
        "time": "Sun Jan 18 04:37:32 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 18 19:37:32 2026 +0800"
      },
      "message": "Implement ReconsumeLater on regex consumer (#1456)\n\n"
    },
    {
      "commit": "25af763adb2ec1062d634dcc75e870907bcbdefc",
      "tree": "b41dee2588ee75033594cfc3e06d75cdbde1e799",
      "parents": [
        "e7f1724641d352d5812433b02c74e58d94db7811"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Mon Jan 05 10:54:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 05 10:54:32 2026 +0800"
      },
      "message": "fix: change producer reconnect error logs to warn logs (#1445)\n\n"
    },
    {
      "commit": "e7f1724641d352d5812433b02c74e58d94db7811",
      "tree": "ebb0396c5390ad0a8dc87b1089122bec4b0553cf",
      "parents": [
        "3bb7d4eff361a35df6641f13d101093c68c1ec27"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Tue Dec 30 17:52:25 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 30 17:52:25 2025 +0800"
      },
      "message": "Update release process to link the release and release notes to pulsar website (#1453)\n\n"
    },
    {
      "commit": "3bb7d4eff361a35df6641f13d101093c68c1ec27",
      "tree": "dc7405399d0f8d188db759f679fa01aafae9ccff",
      "parents": [
        "9d65d0ecf43f357a7a318c361553b258d88c56ea"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Mon Dec 22 11:01:02 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 22 11:01:02 2025 +0800"
      },
      "message": "docs: Update example, using slog as the default logger (#1449)\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "9d65d0ecf43f357a7a318c361553b258d88c56ea",
      "tree": "c0d85af32a9773bc501488a595b5dafe43b16aae",
      "parents": [
        "9f5ea523c4dac25941b7c9bf7c7511b06981d1c0"
      ],
      "author": {
        "name": "Penghui Li",
        "email": "penghui@apache.org",
        "time": "Tue Dec 16 18:15:58 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 16 18:15:58 2025 -0800"
      },
      "message": "feat: Add Creation and Last Publish Timestamps to Topic Stats (PIP-431) (#1451)\n\n"
    },
    {
      "commit": "9f5ea523c4dac25941b7c9bf7c7511b06981d1c0",
      "tree": "8200bd1d4ee7da50213e88dc706694815ca6cc53",
      "parents": [
        "9785c01be189b6756fbc6acafa2ca79cd8be6ec0"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Mon Dec 15 11:34:34 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 15 11:34:34 2025 +0800"
      },
      "message": "feat(namespace): add RemovePersistence methods to namespace admin (#1447)\n\n"
    },
    {
      "commit": "9785c01be189b6756fbc6acafa2ca79cd8be6ec0",
      "tree": "9ee4ece48a659e8ff262e941b622e3b956ed9bd5",
      "parents": [
        "faed695b5abf928831fb5d1b1e91b5676bb17f4f"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Mon Dec 15 11:32:33 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 15 11:32:33 2025 +0800"
      },
      "message": "fix(utils): add JSON tag for UpdateAuthData in UpdateOptions (#1450)\n\n* feat(utils): add JSON tag for UpdateAuthData in UpdateOptions\n\n* add tests\n\n* Update pulsaradmin/pkg/utils/update_options.go\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "faed695b5abf928831fb5d1b1e91b5676bb17f4f",
      "tree": "7344d02a41d84edd8e778ac201f2540975ba019f",
      "parents": [
        "41bc6f4d416d69cfd25ea90a8efa9c56d03cbde3"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Mon Dec 15 10:29:28 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 15 10:29:28 2025 +0800"
      },
      "message": "Add changelog for 0.18.0 (#1442)\n\n### Motivation\n\nAdd 0.18.0 change log\n"
    },
    {
      "commit": "41bc6f4d416d69cfd25ea90a8efa9c56d03cbde3",
      "tree": "9706c5da5a7e541360a5c60c4e0f8cc7a880fc00",
      "parents": [
        "6ab93d5a1d8104b92a419f0abb14a3c0a9f684c4"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Fri Dec 05 15:05:19 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 05 15:05:19 2025 +0800"
      },
      "message": "fix: enhance zero queue consumer reconnection handling and message permit management (#1443)\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\n"
    },
    {
      "commit": "6ab93d5a1d8104b92a419f0abb14a3c0a9f684c4",
      "tree": "e92cd2b691b8125dbd1c6c40d916df5971b03ec3",
      "parents": [
        "dff07bde9d6562a1d9cf952251e2574d23b0952c"
      ],
      "author": {
        "name": "Thomas Bousquet",
        "email": "thomas.bousquet@gmail.com",
        "time": "Tue Dec 02 19:49:45 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 03 11:49:45 2025 +0800"
      },
      "message": "fix: return error when the client transaction coordinator is nil to p… (#1444)\n\n* fix: return error when the client transaction coordinator is nil to prevent panic\n\n* test: add testcase to ensure error is actually returned"
    },
    {
      "commit": "dff07bde9d6562a1d9cf952251e2574d23b0952c",
      "tree": "48956cc1d1b27a1202a760f6ceb0cdf99f836300",
      "parents": [
        "5b0e0545fc9ba4ad3b86c2e1d3615c007b59558f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Dec 01 14:57:27 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 01 14:57:27 2025 +0800"
      },
      "message": "chore(deps): bump golang.org/x/crypto from 0.36.0 to 0.45.0 (#1440)\n\n* chore(deps): bump golang.org/x/crypto from 0.36.0 to 0.45.0\n\nBumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.36.0 to 0.45.0.\n- [Commits](https://github.com/golang/crypto/compare/v0.36.0...v0.45.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/crypto\n  dependency-version: 0.45.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* chore(deps): update Go version from 1.23 to 1.24 in CI configuration\n\n* chore(ci): update golangci-lint to latest\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: crossoverJie \u003ccrossoverJie@gmail.com\u003e"
    },
    {
      "commit": "5b0e0545fc9ba4ad3b86c2e1d3615c007b59558f",
      "tree": "105f9ad42203a50d02cc2d56762bd6fac2d19c04",
      "parents": [
        "fa2b263d9f6dae72128945d277d8f9d25fbd7410"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Thu Nov 27 13:07:56 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 27 13:07:56 2025 +0800"
      },
      "message": "Support reloading OAuth2 key file (#1441)\n\n"
    },
    {
      "commit": "fa2b263d9f6dae72128945d277d8f9d25fbd7410",
      "tree": "c25463981f1d0025f90d2ec80ed7cc9a80cd72b8",
      "parents": [
        "4ba68502c5dc64dcb6e6fe99fd5d9167074a30ae"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Tue Nov 18 13:03:14 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 18 13:03:14 2025 +0800"
      },
      "message": "Fix partition update failure causing existing producers to close (#1437)\n\n"
    },
    {
      "commit": "4ba68502c5dc64dcb6e6fe99fd5d9167074a30ae",
      "tree": "0204b4c4f662aada17ebfa842158467e729a1216",
      "parents": [
        "bdfa6a08d6b22ef367bda73b133424c45d710e8f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Nov 17 12:09:11 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 17 12:09:11 2025 +0800"
      },
      "message": "chore(deps): bump github.com/dvsekhvalnov/jose2go from 1.6.0 to 1.7.0 (#1439)\n\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "bdfa6a08d6b22ef367bda73b133424c45d710e8f",
      "tree": "60fa99e343a1280a28a02a87a2a66cf6eab3d586",
      "parents": [
        "148c10c41f37ee1e15bb66d7ba09d2a8984b87b0"
      ],
      "author": {
        "name": "Cong Zhao",
        "email": "zhaocong@apache.org",
        "time": "Thu Nov 13 21:59:49 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 13 21:59:49 2025 +0800"
      },
      "message": "Fix the issue of unable to parse non-batch messages that with non-empty properties and empty payloads. (#1435)\n\n### Motivation\n\n```\ntime\u003d\"2025-11-03T12:22:21+08:00\" level\u003dinfo msg\u003d\"Created producer\" cnx\u003d\"[::1]:55372 -\u003e [::1]:6650\" producerID\u003d1 producer_name\u003dstandalone-0-14 topic\u003d\"persistent://public/default/my-topic-965686000\"\ntime\u003d\"2025-11-03T12:22:21+08:00\" level\u003derror msg\u003d\"Discarding corrupted message\" consumerID\u003d1 msgID\u003d\"ledgerId:19 entryId:0 partition:-1\" name\u003d subscription\u003dreader-ebjpf topic\u003d\"persistent://public/default/my-topic-965686000\" validationError\u003dBatchDeSerializeError\n```\n\n### Modifications\n\nCorrect parse non-batch messages that with non-empty properties and empty payloads."
    },
    {
      "commit": "148c10c41f37ee1e15bb66d7ba09d2a8984b87b0",
      "tree": "96ae9bd440728b36cc517072d5b4677d1f771143",
      "parents": [
        "7b4b3a6a7b512068b5f6c993f5c2c6f4362d34ea"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Thu Nov 06 23:52:32 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 06 23:52:32 2025 +0800"
      },
      "message": "add timestamp to schema info (#1436)\n\n* add timestamp to schemainfo\n\n* add tests"
    },
    {
      "commit": "7b4b3a6a7b512068b5f6c993f5c2c6f4362d34ea",
      "tree": "fe57354f3db67a6d0c95380dde67c52ba669a300",
      "parents": [
        "50efe422e74f98ddf93b2dbf124cb316ec2d92e2"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Thu Oct 30 22:42:00 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 30 22:42:00 2025 +0800"
      },
      "message": "test: add unit test for unloading topic before consuming zero queue messages (#1434)\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "50efe422e74f98ddf93b2dbf124cb316ec2d92e2",
      "tree": "9104a1e88960fa7077de0cd355e8965534dd32a9",
      "parents": [
        "c0db48286e9e50f47fb0f6e9d5187dfe945fc5e9"
      ],
      "author": {
        "name": "Kai",
        "email": "klevy@toasttab.com",
        "time": "Thu Oct 30 01:06:18 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 30 16:06:18 2025 +0800"
      },
      "message": "Update namespace \u0026 topic admin methods to return nil if unset (#1433)\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: crossoverJie \u003ccrossoverJie@gmail.com\u003e\n"
    },
    {
      "commit": "c0db48286e9e50f47fb0f6e9d5187dfe945fc5e9",
      "tree": "49a68d432a530e0925a62618ee002d8748cad1cb",
      "parents": [
        "d99d2c06cf591a3b47db9d890160d3a5a6689b32"
      ],
      "author": {
        "name": "Kai",
        "email": "klevy@toasttab.com",
        "time": "Thu Oct 23 00:47:57 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 23 15:47:57 2025 +0800"
      },
      "message": "Use -1 as sentinel value for namespace and topic admin commands (#1430)\n\nFixes #1429 \n\n### Motivation\n\nUse -1 as a sentinel value for all the namespace / topic admin get commands that return an empty body to mean \"unset\"\n\n### Modifications\n\n-1 is the default return for the various get commands:\n\n##### Namespace Admin Methods\n\n    - GetNamespaceMessageTTL / GetNamespaceMessageTTLWithContext\n    - GetMaxConsumersPerTopic / GetMaxConsumersPerTopicWithContext\n    - GetMaxProducersPerTopic / GetMaxProducersPerTopicWithContext\n    - GetMaxConsumersPerSubscription / GetMaxConsumersPerSubscriptionWithContext\n    - GetOffloadThreshold / GetOffloadThresholdWithContext\n    - GetOffloadThresholdInSeconds / GetOffloadThresholdInSecondsWithContext\n    - GetOffloadDeleteLag / GetOffloadDeleteLagWithContext\n    - GetCompactionThreshold / GetCompactionThresholdWithContext\n\n##### Topic Admin Methods\n\n    - GetMessageTTL / GetMessageTTLWithContext\n    - GetMaxProducers / GetMaxProducersWithContext\n    - GetMaxConsumers / GetMaxConsumersWithContext\n    - GetMaxUnackMessagesPerConsumer / GetMaxUnackMessagesPerConsumerWithContext\n    - GetMaxUnackMessagesPerSubscription / GetMaxUnackMessagesPerSubscriptionWithContext\n    - GetCompactionThreshold / GetCompactionThresholdWithContext\n    - GetMaxConsumersPerSubscription / GetMaxConsumersPerSubscriptionWithContext\n    - GetMaxMessageSize / GetMaxMessageSizeWithContext\n    - GetMaxSubscriptionsPerTopic / GetMaxSubscriptionsPerTopicWithContext\n    - GetDeduplicationSnapshotInterval / GetDeduplicationSnapshotIntervalWithContext\n"
    },
    {
      "commit": "d99d2c06cf591a3b47db9d890160d3a5a6689b32",
      "tree": "1f6c8001106c0a75ae9c8e300ace2b87f8c821d6",
      "parents": [
        "d85f0965a4b9965fcecd98c5fc00624fd3777d8a"
      ],
      "author": {
        "name": "Guangyang Deng",
        "email": "gydeng.cs@gmail.com",
        "time": "Sat Oct 18 15:32:50 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 18 15:32:50 2025 +0800"
      },
      "message": "[improve] modify the negativeACK structure to reduce memory overhead (#1410)\n\n* improve: modify the structure of NegativeAckTracker to reduce memory overhead\n\n* fix TestNegativeAckPrecisionBitCnt bug\n\n* chore: formatting issues\n\n* fix: fix issues with TestConsumerNack\n\n* chore: revert changes to TestConsumerNack\n\n* fix: add defaultNackPrecisionBitVal\n\n* fix: revert changes to TestZeroQueueConsumer_Nack\n\n* add TestNackPrecisionBitDefaultBehavior\n\n* chore: update TestNegativeAckPrecisionBitCnt test\n\n* fix: make TestNegativeAckPrecisionBitCnt more stable"
    },
    {
      "commit": "d85f0965a4b9965fcecd98c5fc00624fd3777d8a",
      "tree": "7d13369f6e315af5315a4dcfe3ab61bfe9050fe5",
      "parents": [
        "ed7d4980034871e1db28770576151c4c05c7d0ea"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Fri Oct 17 18:38:44 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 17 18:38:44 2025 +0800"
      },
      "message": "Add changelog for 0.17.0 (#1428)\n\n### Motivation\n\nAdd 0.17.0 change log\n\n**Note: This PR shouldn\u0027t be merged until the release vote is passed.**"
    },
    {
      "commit": "ed7d4980034871e1db28770576151c4c05c7d0ea",
      "tree": "5e2d3ac3b943751c4cedb35b5b1f419897de44af",
      "parents": [
        "d19a9f8df57049c105ff6fa3f7a9e0061fdca79d"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Fri Oct 10 14:15:06 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 10 14:15:06 2025 +0800"
      },
      "message": "fix: improve zero queue consumer support for partitioned topics (#1424)\n\n"
    },
    {
      "commit": "d19a9f8df57049c105ff6fa3f7a9e0061fdca79d",
      "tree": "3c00e9bf7cd3fff077f34d69e8e8cdf118bb1c54",
      "parents": [
        "bddaeba6cae63eef56411d7c64f72999273605a8"
      ],
      "author": {
        "name": "Thomas Bousquet",
        "email": "thomas.bousquet@gmail.com",
        "time": "Thu Oct 09 23:10:42 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 10 14:10:42 2025 +0800"
      },
      "message": "feat: add WithContext() admin client methods (#1425)\n\n* feat: add WithContext() admin client methods\n\n* docs: update missed client packages methods comments\n\n* docs: fix typo\n\n* feat: add WithContext() methods to admin client. chore: satisfy linter rules\n\n* chore: fix last linter issues\n\n* Use background instead of todo\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* fix: use context.Background()\n\n* style: capitalized comment\n\n---------\n\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "bddaeba6cae63eef56411d7c64f72999273605a8",
      "tree": "4bd9d406c54694719cc0ace5090ece70f4a9efef",
      "parents": [
        "8fb4613c2fc9ffd5119a6067770e71a7be807bcb"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Mon Sep 15 17:11:41 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 15 17:11:41 2025 +0800"
      },
      "message": "fix: SendAsync doesn\u0027t respect context and can\u0027t timeout during reconnection (#1422)\n\n"
    },
    {
      "commit": "8fb4613c2fc9ffd5119a6067770e71a7be807bcb",
      "tree": "49c6d5303704c61a558c4c38d9d02c4bcf5fbff3",
      "parents": [
        "555e8fc8b5e907a7475e96975e5a70dbcbdd4434"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 08 18:29:53 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 18:29:53 2025 +0800"
      },
      "message": "chore(deps): bump github.com/docker/docker (#1405)\n\nBumps [github.com/docker/docker](https://github.com/docker/docker) from 27.1.1+incompatible to 28.0.0+incompatible.\n- [Release notes](https://github.com/docker/docker/releases)\n- [Commits](https://github.com/docker/docker/compare/v27.1.1...v28.0.0)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/docker/docker\n  dependency-version: 28.0.0+incompatible\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "555e8fc8b5e907a7475e96975e5a70dbcbdd4434",
      "tree": "a4c969a9fd40c80c38e06d8890162ab4f750d87f",
      "parents": [
        "cf832bb6faa6c1aa18b38ab0505fe81682289ec6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 08 18:16:36 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 18:16:36 2025 +0800"
      },
      "message": "chore(deps): bump github.com/go-viper/mapstructure/v2 (#1415)\n\nBumps [github.com/go-viper/mapstructure/v2](https://github.com/go-viper/mapstructure) from 2.2.1 to 2.4.0.\n- [Release notes](https://github.com/go-viper/mapstructure/releases)\n- [Changelog](https://github.com/go-viper/mapstructure/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/go-viper/mapstructure/compare/v2.2.1...v2.4.0)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/go-viper/mapstructure/v2\n  dependency-version: 2.4.0\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "cf832bb6faa6c1aa18b38ab0505fe81682289ec6",
      "tree": "2fc3f6ac9c02727c38b312263ce0b41c1bd48a0d",
      "parents": [
        "6aa1fb6fc6432b7a6e9b7790f6ee6fe5f17857f3"
      ],
      "author": {
        "name": "JamesMurkin",
        "email": "jamesmurkin@hotmail.com",
        "time": "Mon Sep 08 11:15:33 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 18:15:33 2025 +0800"
      },
      "message": "[Issue #1418] Fix: Properties not getting consistently set on pulsaradmin subscription message responses (#1419)\n\n### Motivation\n\nThe properties on messages returned by PeekMessages is not returned consistently as described in #1418 \n\nThis change makes sure we set all properties from headers before continuing on, so the returned message should consistently contain all properties.\n\nCurrently the properties returned is inconsistent on repeated calls, even if the message returned is the same each time.\n\n### Modifications\n\nI\u0027ve made it so all headers are processed / al properties are set on every message, rather than exiting the loop early which can cause inconsistent results.\n"
    },
    {
      "commit": "6aa1fb6fc6432b7a6e9b7790f6ee6fe5f17857f3",
      "tree": "cbb7ff16d6cb791777d01dab15dc806a373a5619",
      "parents": [
        "230d11b82ba8b60c971013516c4922afea4a022d"
      ],
      "author": {
        "name": "Thomas Bousquet",
        "email": "thomas.bousquet@gmail.com",
        "time": "Wed Sep 03 19:25:15 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 04 10:25:15 2025 +0800"
      },
      "message": "fix: add DLQPolicy.DeadLetterTopicProducerName (#1417)\n\n"
    },
    {
      "commit": "230d11b82ba8b60c971013516c4922afea4a022d",
      "tree": "87e3bd929b2b44ac536989e19b3ec00a81fcac1e",
      "parents": [
        "a5fb2fc629e0e2918275b0ca40c8acbbb3918d18"
      ],
      "author": {
        "name": "Collignon-Ducret Rémi",
        "email": "miton18@users.noreply.github.com",
        "time": "Tue Sep 02 04:40:14 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 02 10:40:14 2025 +0800"
      },
      "message": "Add max topics per namespace methods (#1413)\n\n"
    },
    {
      "commit": "a5fb2fc629e0e2918275b0ca40c8acbbb3918d18",
      "tree": "10a703d69a80ddd9f15b6f4885c50cbca5873ca2",
      "parents": [
        "43926211d9629d6887ef972d29c9aff0b30c2ee8"
      ],
      "author": {
        "name": "Zixuan Liu",
        "email": "nodeces@gmail.com",
        "time": "Mon Sep 01 11:52:16 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 01 11:52:16 2025 +0800"
      },
      "message": "chore: upgrade hamba/avro to v2.29.0 (#1414)\n\n"
    },
    {
      "commit": "43926211d9629d6887ef972d29c9aff0b30c2ee8",
      "tree": "28246b085f2e685f92984b2b9e5847f42ea4a38a",
      "parents": [
        "ba6468a5edf36644ccee72a19cdfc8cec6dac40e"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Fri Aug 29 22:10:23 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 29 22:10:23 2025 +0800"
      },
      "message": "Fix missing topic in dlq producer name when using RetryEnable option (#1412)\n\n"
    },
    {
      "commit": "ba6468a5edf36644ccee72a19cdfc8cec6dac40e",
      "tree": "f27ddb27ad0619b59deb83680c57797d7a5e1e4c",
      "parents": [
        "7a9a33c178fb4bac6488469865a2ac07c466b554"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Fri Aug 29 20:52:57 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 29 20:52:57 2025 +0800"
      },
      "message": "fix: handle reconnection logic for zero queue consumer (#1404)\n\n"
    },
    {
      "commit": "7a9a33c178fb4bac6488469865a2ac07c466b554",
      "tree": "f920a706180de38eab40ad42e5bdb15abfb292be",
      "parents": [
        "d471a678ea54f1deaa016f09c377e5e41eb22a51"
      ],
      "author": {
        "name": "Thomas Bousquet",
        "email": "thomas.bousquet@gmail.com",
        "time": "Tue Aug 26 19:01:58 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 27 10:01:58 2025 +0800"
      },
      "message": "[issue #1357][producer] fix: allow multiples callbacks with concurrent producer flushes (async publish) (#1409)\n\n"
    },
    {
      "commit": "d471a678ea54f1deaa016f09c377e5e41eb22a51",
      "tree": "c9c13a96ea74bd7aa350cf822a3f08d791eedde8",
      "parents": [
        "1a0bfc9100147f4a036138a3475c81bd1cc35471"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Thu Aug 21 11:13:17 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 21 11:13:17 2025 +0800"
      },
      "message": "Change the pulsar_client_sending_buffers_count metric to client level (#1408)\n\n#1394 introduces the `pulsar_client_sending_buffers_count` metric to track how many buffers are allocated for send purpose and not put back to the pool. However, unlike other metrics, this metric is not client level, so it cannot be attached with `CustomMetricsLabels` in client options.\n\nWhen a send buffer was not put back to the pool, it means the `Release` method is not called due to some reason. Changing this metric to client level could help locate which client has triggered this bug in an application that has many client instances from different businesses.\n\nHere is an example metric when I configured `CustomMetricsLabels: map[string]string{\"key\": \"value\"}` after this change\n\n```\npulsar_client_sending_buffers_count{client\u003d\"go\",key\u003d\"value\"} 1\n```"
    },
    {
      "commit": "1a0bfc9100147f4a036138a3475c81bd1cc35471",
      "tree": "84aebc1d5e686e381bdb415e7f12fda042ee1663",
      "parents": [
        "b12eccc2c60606ff208ad44087b6b913840d617d"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Tue Aug 19 20:44:16 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 19 20:44:16 2025 +0800"
      },
      "message": "Support snappy compression (#1406)\n\n"
    },
    {
      "commit": "b12eccc2c60606ff208ad44087b6b913840d617d",
      "tree": "04e58dd3eafb212a02dfdc1d7dd747fd2fbf4766",
      "parents": [
        "14221295236a6c09508b45463d93121c057bb563"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Thu Aug 07 17:56:05 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 07 17:56:05 2025 +0800"
      },
      "message": "[Fix] DLQ Messages will lose system properties when sent from reconsumeLater() (#1392)\n\nFixes https://github.com/apache/pulsar-client-go/issues/1388\nMaster Issue: https://github.com/apache/pulsar-client-go/pull/907, https://github.com/apache/pulsar/pull/23182\n\n### Motivation\nSince pulsar sdk does not support `AckTimeout()` method, we can only use `Nack()` or `ReconsumeLater()` to trigger dlq policy and send messages to dlq. We can find system properties(e.g. `REAL_TOPIC` and `ORIGIN_MESSAGE_ID`) in these dlq messages.\n\nRefer to issue https://github.com/apache/pulsar-client-go/issues/1388, before pr https://github.com/apache/pulsar-client-go/pull/907 `dlq_router#run()` will directly copy properties to create a new dlq message when receiving a message from `dlq.Chan()`. But we only define message properties in ReconsumeLater\u0027s `ReconsumeLaterWithCustomProperties()` and not in Nack\u0027s `dispatcher()` before send to this `dlq.Chan()`, which lead to only dlq messages created by `ReconsumeLater()` can have these properties.\n\nThe above pr replaced this behavior with just adding system properties as soon as creating dlq messages in `dlq_router#run()`, which use `message.topic` as `REAL_TOPIC` property value. But messages sent from `ReconsumeLater() ReconsumeLaterWithCustomProperties()` do not contain related `message.topic` fields, in case it will override defined `REAL_TOPIC` to empty string.\n\n### Modifications\n- Add `REAL_TOPIC`, `ORIGIN_MESSAGE_IDY_TIME`, `ORIGIN_MESSAGE_ID` system properties both in ReconsumeLater\u0027s `ReconsumeLaterWithCustomProperties()` and Nack\u0027s `dispatcher()` functions.\n- Add `Key`, `OrderingKey`, `EventTime` message fields both in `ReconsumeLater() ReconsumeLaterWithCustomProperties()` and `dlq_router run()` functions to keep consistent with [Java realization](https://github.com/apache/pulsar/pull/23182), so that dlq messages can preserve source message info.\n- Remove adding system properties strategy in `dlq_router#run()`."
    },
    {
      "commit": "14221295236a6c09508b45463d93121c057bb563",
      "tree": "797ab6385ee6857320038b66ea76b0fc1fc651d9",
      "parents": [
        "06f4dd8bcff0abf6b80e4bee62c04c66c25d95b4"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Tue Aug 05 10:21:41 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 05 10:21:41 2025 +0800"
      },
      "message": "Add changelog for 0.16.0 (#1401)\n\n"
    },
    {
      "commit": "06f4dd8bcff0abf6b80e4bee62c04c66c25d95b4",
      "tree": "21ae378d3d7bb76f4fe108193fa757d65299aa45",
      "parents": [
        "1f9e82805e54f3dc0d8577a161582ad304c25bf3"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Thu Jul 31 10:16:12 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 31 10:16:12 2025 +0800"
      },
      "message": "fix: replace panic with proper error handling in RPC client and lookup service (#1403)\n\n### Motivation\n\nFixes https://github.com/apache/pulsar-client-go/issues/1402\n\nThe current implementation uses `panic()` calls in several critical code paths within the RPC client and lookup service, which can cause the entire application to crash when encountering invalid URLs or configuration errors. This is not a good practice for a client library as it makes the application unstable and difficult to handle gracefully.\n\nThe main issues addressed:\n- `NewRPCClient()` panics when creating lookup service fails\n- `LookupService()` panics when parsing invalid URLs or creating lookup services\n- `NewLookupService()` panics for invalid URL schemes\n\n### Modifications\n\n- **RPC Client Interface**: Modified `LookupService()` method signature to return `(LookupService, error)` instead of just `LookupService`\n- **NewRPCClient**: Changed to return `(RPCClient, error)` and handle lookup service creation errors properly\n- **LookupService Implementation**: Replaced all `panic()` calls with proper error returns and descriptive error "
    },
    {
      "commit": "1f9e82805e54f3dc0d8577a161582ad304c25bf3",
      "tree": "48c25f2dac24a71fb63ac4b61d587c1aa8400f1a",
      "parents": [
        "5a320e8907d53033aec332ca0334b778c3c3d0d9"
      ],
      "author": {
        "name": "Deep Onkar",
        "email": "91416534+YoungCoderboy@users.noreply.github.com",
        "time": "Wed Jul 30 07:00:16 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 30 09:30:16 2025 +0800"
      },
      "message": "[Issue 1399] add eventTime in reconsumeLaterWithCustomProperties func (#1400)\n\nFixes #1399 \n\nMaster Issue: #1399\n\n### Motivation\n\n`ReconsumeLater` doesnot adds the eventTime in new rebuilded consumer Message before pushing to Retry or Dlq topic \n\n### Modifications\n```go\n// line 639 (consumer_impl.go)\n        consumerMsg :\u003d ConsumerMessage{\n\t\tConsumer: c,\n\t\tMessage: \u0026message{\n\t\t\tpayLoad:    msg.Payload(),\n\t\t\tproperties: props,\n\t\t\tmsgID:      msgID,\n\t\t\teventTime:  msg.EventTime(), //\u003c-- eventTime is added\n\t\t},\n\t}\n\tif uint32(reconsumeTimes) \u003e c.dlq.policy.MaxDeliveries {\n\t\tc.dlq.Chan() \u003c- consumerMsg\n\t} else {\n\t\tc.rlq.Chan() \u003c- RetryMessage{\n\t\t\tconsumerMsg: consumerMsg,\n\t\t\tproducerMsg: ProducerMessage{\n\t\t\t\tPayload:      msg.Payload(),\n\t\t\t\tKey:          msg.Key(),\n\t\t\t\tOrderingKey:  msg.OrderingKey(),\n\t\t\t\tProperties:   props,\n\t\t\t\tDeliverAfter: delay,\n\t\t\t\tEventTime:    msg.EventTime(), //\u003c--eventTime is added\n\t\t\t},\n\t\t}\n\t}\n```"
    },
    {
      "commit": "5a320e8907d53033aec332ca0334b778c3c3d0d9",
      "tree": "644950696e0150b850272e6a51b87849a4af682a",
      "parents": [
        "0dee1133982f4a017d791211787dc1c90e4b8c44"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Mon Jul 28 10:22:39 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 28 10:22:39 2025 +0800"
      },
      "message": "feat: align topics level policies admin apis to java restful apis (#1398)\n\n* feat: add topic configuration methods for subscribe rate, dispatch rate, max consumers, message size, subscriptions, schema validation, deduplication, replicator dispatch rate, offload policies, auto subscription creation, and schema compatibility strategy\n\n* fix: lint error\n\n* fix: lint\n\n* add tests\n\n* fix tests\n\n* add unit tests"
    },
    {
      "commit": "0dee1133982f4a017d791211787dc1c90e4b8c44",
      "tree": "0e52bee53bde2c3819887ed3f15a503d358debcd",
      "parents": [
        "7f7fb43d3e610a4c7635d1934dfb2edc1ec076f2"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Thu Jul 24 19:04:04 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 24 19:04:04 2025 +0800"
      },
      "message": "fix: add missing metric tracking of `pulsar_client_consumer_acks` for AckIDList method (#1396)\n\n"
    },
    {
      "commit": "7f7fb43d3e610a4c7635d1934dfb2edc1ec076f2",
      "tree": "8232c175f54922287f04ef461ecace5ffc6af3f2",
      "parents": [
        "67c3d53d83f310bef34bd9810954e0a4fe8881d1"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Wed Jul 23 10:05:18 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 23 10:05:18 2025 +0800"
      },
      "message": "ZeroQueueConsumer is not supported with RetryEnable (#1391)\n\n"
    },
    {
      "commit": "67c3d53d83f310bef34bd9810954e0a4fe8881d1",
      "tree": "ce9eb2e0bb26f7caf377cc6a264016e597504b45",
      "parents": [
        "9440f18f20ca27a3ba1162a98f1126f5b2e2f513"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Mon Jul 21 20:31:23 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 21 20:31:23 2025 +0800"
      },
      "message": "Fix sending buffer race by using proper reference counting (#1394)\n\nFixes https://github.com/apache/pulsar-client-go/issues/1371\n\n### Motivation\n\nThe issue is that the buffer is sent to the connection when the data is flushed at this line: https://github.com/apache/pulsar-client-go/blob/0ab28c229e4dab2adb505a135325b6ede6e0e4f4/pulsar/producer_partition.go#L910\n\nBecause of this, both the data request in the connection and the pending item hold onto this buffer.\n\nHowever, if the pending item fails due to a timeout or the producer closing, the buffer is returned to the buffer pool at this line: https://github.com/apache/pulsar-client-go/blob/0ab28c229e4dab2adb505a135325b6ede6e0e4f4/pulsar/producer_partition.go#L1747\n\nYet, the connection still has this buffer. When the connection tries to handle the data request, it will try to use a buffer that has already been returned. This causes a data race.\n\nThis fix implements proper reference counting to ensure buffers are only returned to the pool when all references are released, preventing the data race.\n\n### Modifications\n\n  - Added `Retain()` and `Release()` methods to the `Buffer` interface\n  - Implemented atomic reference counting using `atomic.Int64`\n  - Buffers are only returned to the pool when reference count reaches zero\n  - Add new metric `pulsar_client_sending_buffers_count` to show the sending buffers count.\n  - This PR also fixes serval minor issues like data/request cleanup when closing the connection "
    },
    {
      "commit": "9440f18f20ca27a3ba1162a98f1126f5b2e2f513",
      "tree": "3660748ed1716ea847c03909fd1c4b4c41d85771",
      "parents": [
        "c587b5cefb047a46e3c01dc3b65f9250ac99ee5d"
      ],
      "author": {
        "name": "Thomas Bousquet",
        "email": "thomas.bousquet@gmail.com",
        "time": "Sun Jul 13 19:24:31 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 14 10:24:31 2025 +0800"
      },
      "message": "feat: add pulsar admin namespace properties methods for PUT/GET/DELETE (#1390)\n\n"
    },
    {
      "commit": "c587b5cefb047a46e3c01dc3b65f9250ac99ee5d",
      "tree": "62fa7cd18bc99e71ec9c95be6dfb8e65e8e10fd0",
      "parents": [
        "12b966df593ad6455ff9fb7023dd4b831c492f53"
      ],
      "author": {
        "name": "Gaylor Bosson",
        "email": "gb@taurushq.com",
        "time": "Thu Jul 10 04:37:31 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 10 10:37:31 2025 +0800"
      },
      "message": "[Issue 1384][consumer] Fix the default nack backoff policy (#1385)\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: crossoverJie \u003ccrossoverJie@gmail.com\u003e\n"
    },
    {
      "commit": "12b966df593ad6455ff9fb7023dd4b831c492f53",
      "tree": "978851e5e8e9df457ab35d424f7a598a6b7a78cd",
      "parents": [
        "aaadde507e48aa66caf525167c8e7a78899d8f83"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Wed Jul 02 18:16:59 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 02 18:16:59 2025 +0800"
      },
      "message": "[improve] Support http lookup getSchema interface (#1368)\n\nMaster Issue: https://github.com/apache/pulsar/wiki/PIP-43%3A-producer-send-message-with-different-schema#changespart-1\n\nRelated pr https://github.com/apache/pulsar-client-go/pull/611\n\n### Motivation\nCurrently pulsar go sdk has supported multi-version schema in above pr, but the pr does not support `getSchema()` method with http lookup service. So that we will encounter error when we call `msg.GetSchemaValue(v interface{}) error` function with http serviceUrl. Demo below:\n```\nfunc createClient() Client {\n\t// create client\n\t//lookupURL :\u003d \"pulsar://localhost:6650\"\n\tlookupURL :\u003d \"http://localhost:8080\"   // change to http protocol serviceUrl\n\tclient, err :\u003d NewClient(ClientOptions{\n\t\tURL: lookupURL,\n\t})\n\tif err !\u003d nil {\n\t\tlog.Fatal(err)\n\t}\n\treturn client\n}\n\nfunc TestBytesSchema(t *testing.T) {\n\tclient :\u003d createClient()\n\tdefer client.Close()\n\n\ttopic :\u003d newTopicName()\n\n\tproperties :\u003d make(map[string]string)\n\tproperties[\"pulsar\"] \u003d \"hello\"\n\tproducerSchemaBytes :\u003d NewBytesSchema(properties)\n\tproducer, err :\u003d client.CreateProducer(ProducerOptions{\n\t\tTopic:  topic,\n\t\tSchema: producerSchemaBytes,\n\t})\n\tassert.NoError(t, err)\n\n\t_, err \u003d producer.Send(context.Background(), \u0026ProducerMessage{\n\t\tValue: []byte(`{\"key\": \"value\"}`),\n\t})\n\trequire.NoError(t, err)\n\tproducer.Close()\n\n\t// Create consumer\n\tconsumerSchemaBytes :\u003d NewBytesSchema(nil)\n\tassert.NotNil(t, consumerSchemaBytes)\n\tconsumer, err :\u003d client.Subscribe(ConsumerOptions{\n\t\tTopic:                       topic,\n\t\tSubscriptionName:            \"sub-1\",\n\t\tSchema:                      consumerSchemaBytes,\n\t\tSubscriptionInitialPosition: SubscriptionPositionEarliest,\n\t})\n\tassert.Nil(t, err)\n\n\tctx, cancel :\u003d context.WithTimeout(context.Background(), time.Second*5)\n\tdefer cancel()\n\n\t// Receive first message\n\tvar out1 []byte\n\tmsg1, err :\u003d consumer.Receive(ctx)\n\tassert.NoError(t, err)\n\terr \u003d msg1.GetSchemaValue(\u0026out1)\n\tassert.NoError(t, err)\n\tassert.Equal(t, []byte(`{\"key\": \"value\"}`), out1)\n\tconsumer.Ack(msg1)\n\trequire.NoError(t, err)\n}\n```\nTest output:\n```\n/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/bin/go tool test2json -t /root/.cache/JetBrains/GoLand2024.1/tmp/GoLand/___TestBytesSchema_in_github_com_apache_pulsar_client_go_pulsar.test -test.v -test.paniconexit0 -test.run ^\\QTestBytesSchema\\E$\n\u003d\u003d\u003d RUN   TestBytesSchema\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Connecting to broker\" remote_addr\u003d\"pulsar://localhost:6650\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"TCP connection established\" local_addr\u003d\"127.0.0.1:36638\" remote_addr\u003d\"pulsar://localhost:6650\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Connection is ready\" local_addr\u003d\"127.0.0.1:36638\" remote_addr\u003d\"pulsar://localhost:6650\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Connected producer\" cnx\u003d\"127.0.0.1:36638 -\u003e 127.0.0.1:6650\" epoch\u003d0 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Created producer\" cnx\u003d\"127.0.0.1:36638 -\u003e 127.0.0.1:6650\" producerID\u003d1 producer_name\u003dstandalone-42-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Closing producer\" producerID\u003d1 producer_name\u003dstandalone-42-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Closed producer\" producerID\u003d1 producer_name\u003dstandalone-42-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Connected consumer\" consumerID\u003d1 name\u003dyzway subscription\u003dsub-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Created consumer\" consumerID\u003d1 name\u003dyzway subscription\u003dsub-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\n    schema_test.go:101: \n        \tError Trace:\t/data/code/dev/pulsar-client-go/pulsar/schema_test.go:101\n        \tError:      \tReceived unexpected error:\n        \t            \tGetSchema is not supported by httpLookupService\n        \tTest:       \tTestBytesSchema\n    schema_test.go:102: \n        \tError Trace:\t/data/code/dev/pulsar-client-go/pulsar/schema_test.go:102\n        \tError:      \tNot equal: \n        \t            \texpected: []byte{0x7b, 0x22, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d}\n        \t            \tactual  : []byte(nil)\n        \t            \t\n        \t            \tDiff:\n        \t            \t--- Expected\n        \t            \t+++ Actual\n        \t            \t@@ -1,4 +1,2 @@\n        \t            \t-([]uint8) (len\u003d16) {\n        \t            \t- 00000000  7b 22 6b 65 79 22 3a 20  22 76 61 6c 75 65 22 7d  |{\"key\": \"value\"}|\n        \t            \t-}\n        \t            \t+([]uint8) \u003cnil\u003e\n        \t            \t \n        \tTest:       \tTestBytesSchema\n    schema_test.go:104: \n        \tError Trace:\t/data/code/dev/pulsar-client-go/pulsar/schema_test.go:104\n        \tError:      \tReceived unexpected error:\n        \t            \tGetSchema is not supported by httpLookupService\n        \tTest:       \tTestBytesSchema\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Closing consumer\u003d1\" consumerID\u003d1 name\u003dyzway subscription\u003dsub-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\ntime\u003d\"2025-05-14T16:32:45+08:00\" level\u003dinfo msg\u003d\"Closed consumer\" consumerID\u003d1 name\u003dyzway subscription\u003dsub-1 topic\u003d\"persistent://public/default/my-topic-147368803\"\n--- FAIL: TestBytesSchema (0.12s)\n\nExpected :[]byte{0x7b, 0x22, 0x6b, 0x65, 0x79, 0x22, 0x3a, 0x20, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d}\nActual   :[]byte(nil)\n```\n\n### Modifications\n- Update LookupService interface return type from `GetSchema(topic string, schemaVersion []byte) (schema *pb.Schema, err error)` to `GetSchema(topic string, schemaVersion []byte) (*LookupSchema, error)` to support http lookup protocol in `lookup_service.go`\n- Support HTTPLookupService `GetSchema(topic string, schemaVersion []byte) (*LookupSchema, error)` function in `lookup_service.go`\n- Add http lookup `GetSchema()` related test cases in schema_test.go\n"
    },
    {
      "commit": "aaadde507e48aa66caf525167c8e7a78899d8f83",
      "tree": "4dd46f3310d59451cee39b988cb75f8ac3fb547c",
      "parents": [
        "58ac256fbcb2b029477e09c4c00306478780e5f5"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Wed Jul 02 16:27:35 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 02 16:27:35 2025 +0800"
      },
      "message": "[Fix] Fix backoff unit tests (#1387)\n\n\n### Motivation\nAbove pr removed backoff init() strategy, which initialized a rand seed when package loaded, so that other functions can import  `DefaultBackoff{}` directly.\nAfter pr changes, there is no rand initilization by default, and we need to manually call `NewDefaultBackoff()` instead of `DefaultBackoff{}` to avoid nil issue, example output below:\n```\n\u003d\u003d\u003d RUN   TestTLSConnectionCAError\ntime\u003d\"2025-07-02T12:08:20+08:00\" level\u003dinfo msg\u003d\"Connecting to broker\" remote_addr\u003d\"pulsar+ssl://localhost:6651\"\ntime\u003d\"2025-07-02T12:08:20+08:00\" level\u003dwarning msg\u003d\"Failed to connect to broker.\" error\u003d\"tls: failed to verify certificate: x509: certificate is not valid for any names, but wanted to match localhost\" remote_addr\u003d\"pulsar+ssl://localhost:6651\"\n--- FAIL: TestTLSConnectionCAError (2054.87s)\npanic: runtime error: invalid memory address or nil pointer dereference [recovered]\n\tpanic: runtime error: invalid memory address or nil pointer dereference\n[signal SIGSEGV: segmentation violation code\u003d0x1 addr\u003d0x0 pc\u003d0x5d5c3c]\n\ngoroutine 20 [running]:\ntesting.tRunner.func1.2({0x1780420, 0x22e2fc0})\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/testing/testing.go:1632 +0x49e\ntesting.tRunner.func1()\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/testing/testing.go:1635 +0x669\npanic({0x1780420?, 0x22e2fc0?})\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/runtime/panic.go:785 +0x136\nmath/rand.(*Rand).Int63(0x0)\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/math/rand/rand.go:96 +0x1c\nmath/rand.(*Rand).Float64(0x0)\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/math/rand/rand.go:207 +0x28\ngithub.com/apache/pulsar-client-go/pulsar/backoff.(*DefaultBackoff).Next(0xc0001299e0)\n\t/data/code/dev/pulsar-client-go/pulsar/backoff/backoff.go:66 +0xed\ngithub.com/apache/pulsar-client-go/pulsar/internal.(*rpcClient).requestToHost.func2({0x1a17d60, 0xc0002b40d0})\n\t/data/code/dev/pulsar-client-go/pulsar/internal/rpc_client.go:140 +0x62\ngithub.com/apache/pulsar-client-go/pulsar/internal.Retry[...]({0x1a245d8, 0xc0000f13b0}, 0xc000059118, 0xc000059180)\n\t/data/code/dev/pulsar-client-go/pulsar/internal/retry.go:49 +0x219\ngithub.com/apache/pulsar-client-go/pulsar/internal.(*rpcClient).requestToHost(0xc000000300, 0xc0000f12e0, 0x1, 0x15, {0x1a18560, 0xc00012cff0})\n\t/data/code/dev/pulsar-client-go/pulsar/internal/rpc_client.go:139 +0x3e5\ngithub.com/apache/pulsar-client-go/pulsar/internal.(*rpcClient).RequestToAnyBroker(0xc000000300, 0x1, 0x15, {0x1a18560, 0xc00012cff0})\n\t/data/code/dev/pulsar-client-go/pulsar/internal/rpc_client.go:150 +0xac\ngithub.com/apache/pulsar-client-go/pulsar/internal.(*lookupService).GetPartitionedTopicMetadata(0xc0000f12d0, {0xc00032e378, 0x11})\n\t/data/code/dev/pulsar-client-go/pulsar/internal/lookup_service.go:236 +0x28d\ngithub.com/apache/pulsar-client-go/pulsar.(*client).TopicPartitions(0xc00033c2d0, {0xc00032e378, 0x11})\n\t/data/code/dev/pulsar-client-go/pulsar/client_impl.go:241 +0x170\ngithub.com/apache/pulsar-client-go/pulsar.(*producer).internalCreatePartitionsProducers(0xc0001446e0)\n\t/data/code/dev/pulsar-client-go/pulsar/producer_impl.go:190 +0x91\ngithub.com/apache/pulsar-client-go/pulsar.newProducer(0xc00033c2d0, 0xc000421000)\n\t/data/code/dev/pulsar-client-go/pulsar/producer_impl.go:152 +0xd39\ngithub.com/apache/pulsar-client-go/pulsar.(*client).CreateProducer(_, {{0xc00032e378, 0x11}, {0x0, 0x0}, 0x0, 0x0, 0x0, 0x0, 0x0, ...})\n\t/data/code/dev/pulsar-client-go/pulsar/client_impl.go:201 +0xba\ngithub.com/apache/pulsar-client-go/pulsar.TestTLSConnectionCAError(0xc000390b60)\n\t/data/code/dev/pulsar-client-go/pulsar/client_impl_test.go:56 +0x1c2\ntesting.tRunner(0xc000390b60, 0x196b2a0)\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/testing/testing.go:1690 +0x1da\ncreated by testing.(*T).Run in goroutine 1\n\t/root/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64/src/testing/testing.go:1743 +0x7d3\n\n```\n\n### Modifications\nFix unit test code, replace `NewDefaultBackoff()` with `DefaultBackoff{}`"
    },
    {
      "commit": "58ac256fbcb2b029477e09c4c00306478780e5f5",
      "tree": "21c318e66d065342d9ce2a7b410679d4b1fcd555",
      "parents": [
        "55c71e62ac16f4193a9060b5fd41e355ad759d49"
      ],
      "author": {
        "name": "Rui Fu",
        "email": "freeznet@users.noreply.github.com",
        "time": "Wed Jul 02 14:09:27 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 02 14:09:27 2025 +0800"
      },
      "message": "Fix: namespace schema compatibility strategy (#1386)\n\n### Motivation\n\nMaking pulsar-client-go support both https://github.com/apache/pulsar/blob/master/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/SchemaAutoUpdateCompatibilityStrategy.java and https://github.com/apache/pulsar/blob/master/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/SchemaCompatibilityStrategy.java"
    },
    {
      "commit": "55c71e62ac16f4193a9060b5fd41e355ad759d49",
      "tree": "fd3d7429cc715c0d542fac4c1245aae6f09763a8",
      "parents": [
        "f9363ebb5fcfbcf36ad6c7a42063058c10fb421a"
      ],
      "author": {
        "name": "Young Xu",
        "email": "xuthus5@gmail.com",
        "time": "Tue Jun 17 19:11:01 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 17 19:11:01 2025 +0800"
      },
      "message": "chore: replace deprecated api rand.Seed (#1363)\n\n### Motivation\nThe Go 1.20 release deprecated the `rand.Seed` function, noting that programs should use the `rand.New(rand.NewSource(seed))` method instead. This change was made because using `rand.Seed` affects the global random number generator, which can lead to unexpected behavior in concurrent programs. By updating to the recommended API, we improve the code\u0027s forward compatibility and follow Go\u0027s best practices for random number generation.\n\n### Modifications\nReplaced all occurrences of `rand.Seed(time.Now().UnixNano())` with `rand.New(rand.NewSource(time.Now().UnixNano()))`\n\nUpdated variable assignments to use the new random generator instance where applicable\n\nMaintained the same seed behavior (using current nanosecond time) but now with proper instance isolation\n\nVerifying this change\nMake sure that the change passes the CI checks.\n\nThis change is a trivial rework / code cleanup without any test coverage. The modification doesn\u0027t change the logical behavior of the code, only updates it to use the non-deprecated API.\n\n\n---------\n\nSigned-off-by: Young Xu \u003cxuthus5@gmail.com\u003e"
    },
    {
      "commit": "f9363ebb5fcfbcf36ad6c7a42063058c10fb421a",
      "tree": "de6d70e405c90b45a28ce75c93fe96cabd2f0b86",
      "parents": [
        "5d49f15ceebcf31cdfb41f16e8a2fc9f2d6fbd17"
      ],
      "author": {
        "name": "Qiang Zhao",
        "email": "mattisonchao@apache.org",
        "time": "Thu Jun 12 11:01:47 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 12 11:01:47 2025 +0800"
      },
      "message": "fix: support json token file format authentication (#1380)\n\n"
    },
    {
      "commit": "5d49f15ceebcf31cdfb41f16e8a2fc9f2d6fbd17",
      "tree": "91c51aa6c68b805184268ed278967f9133325b41",
      "parents": [
        "e2f46c62b6ffe90c3e971cd18a993da1cc3b1324"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Wed Jun 11 20:30:10 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 11 20:30:10 2025 +0800"
      },
      "message": "[improve] Add Testcase to test using keyShared subscription and delayed messages at the same time (#1361)\n\nMaster Issue: https://github.com/apache/pulsar/issues/23968 \nRelated pr: https://github.com/apache/pulsar-client-go/pull/1339\n\n### Motivation\nRefered to pr [comment](https://github.com/apache/pulsar-client-go/pull/1339#issuecomment-2712819343), there is no test cases about using keyShared subscription mode to consume delayed messages, so that maybe we need to add one.\n\n\n### Modifications\nAdd `pulsar/consumer_test/TestConsumerKeySharedWithDelayedMessages` test case."
    },
    {
      "commit": "e2f46c62b6ffe90c3e971cd18a993da1cc3b1324",
      "tree": "d0fa433060de086126965117979779a93b4e11aa",
      "parents": [
        "faffa30a374221f25d7ee8161942c6b98db4d421"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Wed Jun 11 20:20:54 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 11 20:20:54 2025 +0800"
      },
      "message": "[improve] Support ClientVersion in 2.x pulsar broker (#1383)\n\nMaster Issue: https://github.com/apache/pulsar-client-go/issues/1379\n\n### Motivation\nReplace pulsar go client version format `Pulsar Go \u003cversion\u003e` with `Pulsar-Go-\u003cversion\u003e` to support 2.x pulsar broker stats command.\n\n### Modifications\nUpdate client version format in pulsar/internal/version.go."
    },
    {
      "commit": "faffa30a374221f25d7ee8161942c6b98db4d421",
      "tree": "d6e114347c73d9cc9b684c1344aad4c980f5450d",
      "parents": [
        "5cdb227c6fdf5dc4513348241e4249b1812bad3b"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Tue Jun 10 10:04:01 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 10 10:04:01 2025 +0800"
      },
      "message": "Skip very flaky TestMessageSingleRouter for now (#1382)\n\n"
    },
    {
      "commit": "5cdb227c6fdf5dc4513348241e4249b1812bad3b",
      "tree": "729028a88588bc605808e81ac12d9990fb26c8e7",
      "parents": [
        "ad9a7d1f349b7e0eb6eb05eb315dd8a10d93dc98"
      ],
      "author": {
        "name": "Yunze Xu",
        "email": "xyzinfernity@163.com",
        "time": "Mon Jun 09 19:49:34 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 09 19:49:34 2025 +0800"
      },
      "message": "Support update or remove topic properties (#1381)\n\n"
    },
    {
      "commit": "ad9a7d1f349b7e0eb6eb05eb315dd8a10d93dc98",
      "tree": "805be226f730af043470dd04764640eae72afee3",
      "parents": [
        "f673e4d6f4e86fbfafffd1a3063a44f2550e36a1"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Fri Jun 06 21:30:12 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 06 21:30:12 2025 +0800"
      },
      "message": "Update the release process to update the release note on pulsar-site (#1375)\n\n### Motivation\n\nIn the release process, we don\u0027t update go client release note no the pulsar-site: https://pulsar.apache.org/release-notes/client-go/. This makes the pulsar-site go client release note page outdated.\n\n### Modifications\n\n- Update the release process to update the release note on pulsar-site\n- Fix ToC"
    },
    {
      "commit": "f673e4d6f4e86fbfafffd1a3063a44f2550e36a1",
      "tree": "ac7374ac9683dda435a0eae6901925ae4ad367e4",
      "parents": [
        "e8bbcb454cc35eb80b87d937436076ab10b4d1f2"
      ],
      "author": {
        "name": "Gareth Murphy",
        "email": "gmurphy@cogitocorp.com",
        "time": "Thu May 29 08:30:36 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 29 15:30:36 2025 +0800"
      },
      "message": "Improve perf with level guard in slogWrapper calls (#1374)\n\nPreviously, calls to methods such as (*slogWrapper).Debug and\n(*slogWrapper).Debugf always resulted in calls to fmt.Sprint and\nfmt.Sprintf respectively, regardless of whether the log level in\nquestion was even enabled. Calls to fmt.Sprintf in particular can be\ncostly from a performance standpoint.\n\nThis change prevents such calls unless the log level in question is\ncurrently enabled. Benchmarks on an Apple M3 Max result in a ~7x speed\nimprovement in \u0027f\u0027 method variants when the log level in question is\ndisabled."
    },
    {
      "commit": "e8bbcb454cc35eb80b87d937436076ab10b4d1f2",
      "tree": "5155cc526d47e29f6af1dba85c1d9fcde57b2364",
      "parents": [
        "d08cdd56f688851d0abbcde4e5e6a417d5054889"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Mon May 26 10:40:54 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 26 10:40:54 2025 +0800"
      },
      "message": "Add changelog for 0.15.1 (#1370)\n\n"
    },
    {
      "commit": "d08cdd56f688851d0abbcde4e5e6a417d5054889",
      "tree": "c5dfbeb7e20e0e2a984f3698656d885ad6c977e5",
      "parents": [
        "a5c6dee1af2d693a7db40720b436d05d1228ab51"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Thu May 22 17:49:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 22 17:49:38 2025 +0800"
      },
      "message": "Fix the staging release process (#1373)\n\n### Motivation\n\nThe \"Build and inspect an artifact.\" step in the [release process](https://github.com/apache/pulsar-client-go/blob/master/docs/release-process.md) would also include the `.git` folder.\n\nhttps://lists.apache.org/thread/pndqy7lfb8nrsgjh0wfq1bsrs1g7ds3y\n\n\n### Modifications\n\n- Added a new script for staging the release artifact: `stag-release.sh`\n- Updated the release process to exclude the `.git` folder from the release artifact"
    },
    {
      "commit": "a5c6dee1af2d693a7db40720b436d05d1228ab51",
      "tree": "3b57ea4806d572f880a8aaafa64996719ba36461",
      "parents": [
        "2516598b8d8014ad3eaa76191261e02d4c979c47"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Thu May 15 14:46:14 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 15 14:46:14 2025 +0800"
      },
      "message": "Fix CI can\u0027t be failed even the tests are failed (#1367)\n\n### Motivation\n\nThis PR https://github.com/apache/pulsar-client-go/pull/1351 introduced some changes but breaked the CI. Currently, even if there are some failed tests, the CI won\u0027t be failed: https://github.com/apache/pulsar-client-go/actions/runs/14973771263/job/42060743359?pr\u003d1364#step:6:9285\n\nThe root cause is because it captures the exit status of the tee command instead of the go test command. This causes the script to report \"Tests passed\" even when tests actually fail, leading to false positive CI results.\n\n```\n$TEST_CMD 2\u003e\u00261 | tee $TEST_LOG\n```\n\n### Modification\n\n- Use `set -o pipefail` to correctly capture the exit status of the `go test` command in the pipeline\n"
    },
    {
      "commit": "2516598b8d8014ad3eaa76191261e02d4c979c47",
      "tree": "7026cbb54618fbf9a72099de4ec33ebfe6646d4e",
      "parents": [
        "05c1e32c0abe23686c155d06f233272b317bd711"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Wed May 14 11:27:24 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 14 11:27:24 2025 +0800"
      },
      "message": "Fix reader hanging when startMessageId is latest (#1364)\n\n* Fix reader hanging when startMessageId is latest\n\n* Fix lint\n\n* Apply suggestions from code review\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Add comment to seekMessageId\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "05c1e32c0abe23686c155d06f233272b317bd711",
      "tree": "5109ed59880522254a403f2e7a4fda40506b29b2",
      "parents": [
        "0e1c1d62ff3de86927ea43f7849f8cdf54694b52"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Fri May 09 12:26:22 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 09 12:26:22 2025 +0900"
      },
      "message": "Make ZTS proxy configurable in athenz auth plugin (#1360)\n\n"
    },
    {
      "commit": "0e1c1d62ff3de86927ea43f7849f8cdf54694b52",
      "tree": "9f4621509a43d394c9f9089c3b11bc3ed0c33dde",
      "parents": [
        "6080a62db35acf976e1fb08c36b0aae3f1aa6ce0"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Wed Apr 23 18:45:24 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 18:45:24 2025 +0800"
      },
      "message": "Add changelog for 0.15.0 (#1350)\n\n"
    },
    {
      "commit": "6080a62db35acf976e1fb08c36b0aae3f1aa6ce0",
      "tree": "fc9956995e1f88c719b950bdb546c1441ed21b2b",
      "parents": [
        "712e14c75eaafc6f886b86c92f55f0c76cbd77cd"
      ],
      "author": {
        "name": "Masahiro Sakamoto",
        "email": "massakam@lycorp.co.jp",
        "time": "Wed Apr 23 12:58:00 2025 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 23 11:58:00 2025 +0800"
      },
      "message": "Prefetch role tokens in the background in the Athenz auth plugin (#1355)\n\n"
    },
    {
      "commit": "712e14c75eaafc6f886b86c92f55f0c76cbd77cd",
      "tree": "0d4758307ab0a5150735f7e2e920d8c4d15b430c",
      "parents": [
        "ae3412f4df7d863a68940b0db8b69d15d21a6916"
      ],
      "author": {
        "name": "Zixuan Liu",
        "email": "nodeces@gmail.com",
        "time": "Thu Apr 03 14:30:29 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 03 14:30:29 2025 +0800"
      },
      "message": "fix: use sha instead of tag for golangci/golangci-lint-action (#1352)\n\n"
    },
    {
      "commit": "ae3412f4df7d863a68940b0db8b69d15d21a6916",
      "tree": "26d7a45f1e713d3495e9afc387c4f2c6a580af55",
      "parents": [
        "f8687942f6356c7eead32202e1c89975a04a7404"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Mar 28 08:59:49 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 28 08:59:49 2025 -0700"
      },
      "message": "chore(deps): bump github.com/containerd/containerd from 1.7.18 to 1.7.27 (#1348)\n\nBumps [github.com/containerd/containerd](https://github.com/containerd/containerd) from 1.7.18 to 1.7.27.\n- [Release notes](https://github.com/containerd/containerd/releases)\n- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)\n- [Commits](https://github.com/containerd/containerd/compare/v1.7.18...v1.7.27)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/containerd/containerd\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Lari Hotari \u003clhotari@users.noreply.github.com\u003e"
    },
    {
      "commit": "f8687942f6356c7eead32202e1c89975a04a7404",
      "tree": "725a81c7e05c63b3b7aee5cf3abf6431a8b511a1",
      "parents": [
        "02ee51e1f2ee7b4e62829c60e85c0cbff4d986df"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Mar 28 08:59:37 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 28 08:59:37 2025 -0700"
      },
      "message": "chore(deps): bump github.com/golang-jwt/jwt/v5 from 5.2.1 to 5.2.2 (#1349)\n\nBumps [github.com/golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) from 5.2.1 to 5.2.2.\n- [Release notes](https://github.com/golang-jwt/jwt/releases)\n- [Changelog](https://github.com/golang-jwt/jwt/blob/main/VERSION_HISTORY.md)\n- [Commits](https://github.com/golang-jwt/jwt/compare/v5.2.1...v5.2.2)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/golang-jwt/jwt/v5\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Lari Hotari \u003clhotari@users.noreply.github.com\u003e"
    },
    {
      "commit": "02ee51e1f2ee7b4e62829c60e85c0cbff4d986df",
      "tree": "303fd621f31c3a7de9ba7f5f436007cd1ed485bf",
      "parents": [
        "0ab28c229e4dab2adb505a135325b6ede6e0e4f4"
      ],
      "author": {
        "name": "Lari Hotari",
        "email": "lhotari@users.noreply.github.com",
        "time": "Fri Mar 28 16:42:52 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 28 07:42:52 2025 -0700"
      },
      "message": "[fix][sec] Bump golang.org/x/net to address CVE-2025-22870, requires go 1.23 (#1351)\n\n"
    },
    {
      "commit": "0ab28c229e4dab2adb505a135325b6ede6e0e4f4",
      "tree": "dc309d232469e81c4948907a9e30bd127b999254",
      "parents": [
        "db5cb7ab4133dfa00e2bdfa67edbf98a294227d5"
      ],
      "author": {
        "name": "gunli",
        "email": "gunli@tencent.com",
        "time": "Mon Mar 17 18:14:54 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 17 18:14:54 2025 +0800"
      },
      "message": "Fix potential data race in pendingItem.done() (#1347)\n\n* fix potential data race in pendingItem.done()\n\n* update\n\n* use defer"
    },
    {
      "commit": "db5cb7ab4133dfa00e2bdfa67edbf98a294227d5",
      "tree": "0761c7b37b00ef0e86eedb1b9a21d99d8ed6f9bb",
      "parents": [
        "6c83f56926be0718ebe657bcfc9690823db32a93"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Sun Mar 16 00:24:28 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 16 00:24:28 2025 +0800"
      },
      "message": "[docs][producer] Update deliverAfter and deliverAt api comment (#1339)\n\n"
    },
    {
      "commit": "6c83f56926be0718ebe657bcfc9690823db32a93",
      "tree": "ac7ad297225f4e35cb9194b68a9680eee020a45d",
      "parents": [
        "274a10fe9898df7d0ef3375f7982c23e6bcb9560"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 10 15:41:56 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 10 15:41:56 2025 +0800"
      },
      "message": "chore(deps): bump golang.org/x/net from 0.23.0 to 0.33.0 (#1334)\n\nBumps [golang.org/x/net](https://github.com/golang/net) from 0.23.0 to 0.33.0.\n- [Commits](https://github.com/golang/net/compare/v0.23.0...v0.33.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/net\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "274a10fe9898df7d0ef3375f7982c23e6bcb9560",
      "tree": "a69a83a8165c37212c06b1f8465dd2f309963377",
      "parents": [
        "ba83732a596a78ddda42a02cadd74a0bb77123de"
      ],
      "author": {
        "name": "gunli",
        "email": "gunli@tencent.com",
        "time": "Mon Mar 10 14:46:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 10 14:46:38 2025 +0800"
      },
      "message": "Fix: Potential data race (#1338)\n\n* fix: potential data race\n\n* stop writing if ctx is done\n\n* pass a not nil context\n\n* check nil ctx\n\n* revert\n\n* delete ctx nil check\n\n* revert pendingItem.done() to its old position"
    },
    {
      "commit": "ba83732a596a78ddda42a02cadd74a0bb77123de",
      "tree": "e407076bf41b802d31f29c6c442b55c0e8a4c71c",
      "parents": [
        "3181aaa03504c48b388949b0c9e4e5fd1d9943dd"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Mon Mar 10 14:46:21 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 10 14:46:21 2025 +0800"
      },
      "message": "Fix wrong result of reader.hasNext/Next after seeking by id or time (#1340)\n\n* Fix wrong result of hasNext after seeking by id or time\n\n* fix unit test\n\n* Address code reviews.\n\n* Address code review\n\n* Add annotation to StartMessageIDInclusive"
    },
    {
      "commit": "3181aaa03504c48b388949b0c9e4e5fd1d9943dd",
      "tree": "cefa740d48f35b2e61a7c9ee8d8fadfcb50322d9",
      "parents": [
        "042bfcd0975cee04009928252961a01da2a2704c"
      ],
      "author": {
        "name": "Eugene R.",
        "email": "reugpro@gmail.com",
        "time": "Fri Mar 07 14:43:51 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 07 20:43:51 2025 +0800"
      },
      "message": "deps: update dependency versions (#1327)\n\n* deps: update dependency versions\n\n* go mod tidy"
    },
    {
      "commit": "042bfcd0975cee04009928252961a01da2a2704c",
      "tree": "4d8015c21fb2e0a5d14ce737e2cd2e09c89be5d7",
      "parents": [
        "802aa691e77dfa24776ff0270ee3560450a8308e"
      ],
      "author": {
        "name": "gunli",
        "email": "gunli@tencent.com",
        "time": "Fri Mar 07 14:50:44 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 07 14:50:44 2025 +0800"
      },
      "message": "Fix: Potential data/write conflicts (#1336)\n\n* rebase to master to merge #1343\n\n* make consumer is not nil\n\n* revert test case\n\n* revert test case"
    },
    {
      "commit": "802aa691e77dfa24776ff0270ee3560450a8308e",
      "tree": "72de5a6bf809d39379559eb81b42c2d4cfeef064",
      "parents": [
        "6cb286740dd3b65a8a431b46ddf4785fe3c50615"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Fri Mar 07 11:46:42 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 07 11:46:42 2025 +0800"
      },
      "message": "Improve message decompress error (#1342)\n\n* Improve message decompress error\n\n* Fix lint"
    },
    {
      "commit": "6cb286740dd3b65a8a431b46ddf4785fe3c50615",
      "tree": "f921848a6dabd84f8b10704635044ce024fb14bb",
      "parents": [
        "84f3677224ef05845ddc039d9a6daa5fe638fb94"
      ],
      "author": {
        "name": "gunli",
        "email": "gunli@tencent.com",
        "time": "Fri Mar 07 11:46:15 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 07 11:46:15 2025 +0800"
      },
      "message": "opt: delete redundant channel connection.incomingCmdCh (#1343)\n\n* opt: delete redundant channel\n\n* fix lint error\n\n* merge internalReceivedCommand and receivedCommand"
    },
    {
      "commit": "84f3677224ef05845ddc039d9a6daa5fe638fb94",
      "tree": "3dba8da7746e1b112d6c4d28c156230c83e82d0a",
      "parents": [
        "020b55c1dce4475fe8781f4fb6f858de903844b8"
      ],
      "author": {
        "name": "Zike Yang",
        "email": "zike@apache.org",
        "time": "Fri Mar 07 09:54:38 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 07 09:54:38 2025 +0800"
      },
      "message": "Upgrade lz4 to v4 (#1341)\n\n"
    },
    {
      "commit": "020b55c1dce4475fe8781f4fb6f858de903844b8",
      "tree": "7e11e843a6ce954689885fad40df40b5086c2591",
      "parents": [
        "4e71a47a4f6174f883905e740ba35f2498494ed1"
      ],
      "author": {
        "name": "Collignon-Ducret Rémi",
        "email": "miton18@users.noreply.github.com",
        "time": "Thu Feb 20 13:58:48 2025 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 20 20:58:48 2025 +0800"
      },
      "message": "Chore: deprecated usages (#1329)\n\n* chore: move from CAS to CompareAndSwap\n\nbecause deprecated\n\n* chore: since go1.20 initialize a random seed is deprecated"
    },
    {
      "commit": "4e71a47a4f6174f883905e740ba35f2498494ed1",
      "tree": "f27977597864495992511685a6d7844abc45d129",
      "parents": [
        "ffba2a8fd2781f536bc03ec1408f82f6e4ea4d3a"
      ],
      "author": {
        "name": "Baodi Shi",
        "email": "baodi@apache.org",
        "time": "Fri Jan 03 09:55:49 2025 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 03 09:55:49 2025 +0800"
      },
      "message": "[fix] [client] fix same producer/consumer use more than one connection per broker (#1323)\n\n* [fix] [client] fix same producer/consumer use more than one connection per broker\r\n\r\n* Fix lint\r\n\r\n* Apply suggestions from code review\r\n\r\nCo-authored-by: Zike Yang \u003czike@apache.org\u003e\r\n\r\n* Address comment\r\n\r\n* Addressd comment\r\n\r\n* make lint\r\n\r\n---------\r\n\r\nCo-authored-by: Zike Yang \u003czike@apache.org\u003e"
    },
    {
      "commit": "ffba2a8fd2781f536bc03ec1408f82f6e4ea4d3a",
      "tree": "0a8ed02d8b76d309cd7374c1febf017bf1ff9d89",
      "parents": [
        "024e230d32fc6a0d5586b8c8bc6b34a208b9e9d0"
      ],
      "author": {
        "name": "Eugene R.",
        "email": "reugpro@gmail.com",
        "time": "Tue Dec 24 09:35:19 2024 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 24 15:35:19 2024 +0800"
      },
      "message": "refactor: use errors.Join to wrap multiple errors (#1322)\n\n"
    },
    {
      "commit": "024e230d32fc6a0d5586b8c8bc6b34a208b9e9d0",
      "tree": "40b454492ca6f4a6ebaabe99d9d19c32a11b2f9a",
      "parents": [
        "31ba01107f2696732022db4b3cbd4de0143db9d9"
      ],
      "author": {
        "name": "Eugene R.",
        "email": "reugpro@gmail.com",
        "time": "Thu Dec 19 04:25:08 2024 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 19 10:25:08 2024 +0800"
      },
      "message": "fix: wrap errors using %w to preserve context (#1321)\n\n* fix: wrap errors using %w to preserve context\r\n\r\n* move the consumer state check"
    },
    {
      "commit": "31ba01107f2696732022db4b3cbd4de0143db9d9",
      "tree": "afa25933d1e4b5a75bf8f5edb4c107e0fdcac596",
      "parents": [
        "c9245bc7cbf0006f007abd32d97ec068122024db"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Dec 17 19:23:36 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 17 19:23:36 2024 +0800"
      },
      "message": "chore(deps): bump golang.org/x/crypto from 0.22.0 to 0.31.0 (#1318)\n\nBumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.22.0 to 0.31.0.\r\n- [Commits](https://github.com/golang/crypto/compare/v0.22.0...v0.31.0)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: golang.org/x/crypto\r\n  dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\r\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c9245bc7cbf0006f007abd32d97ec068122024db",
      "tree": "76a780560f6bf0b1eff4c783f0aa22c35022be7f",
      "parents": [
        "06129386a9c3bdcb5af0fbf6f09e804c4d325974"
      ],
      "author": {
        "name": "Eugene R.",
        "email": "reugpro@gmail.com",
        "time": "Tue Dec 17 13:00:14 2024 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Dec 17 19:00:14 2024 +0800"
      },
      "message": "fix: enhance transaction functionality (#1281)\n\n### Motivation\r\nVarious fixes and refactoring for transaction.\r\n\r\n### Modifications\r\n\r\n* Employ context in the `Commit` and `Abort` methods\r\n* Use client operation timeout\r\n* Use `atomic.Int32` for the state\r\n* Make all state reads atomic\r\n* Clean up and improve error messages"
    },
    {
      "commit": "06129386a9c3bdcb5af0fbf6f09e804c4d325974",
      "tree": "a9cdcb6bd993afd75f523612d0db9790f81c16d3",
      "parents": [
        "edea3eb0198bfe772fb90690137bfb8da8121cc8"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Fri Dec 13 19:44:39 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 13 19:44:39 2024 +0800"
      },
      "message": "PIP-254: Support configuring client version (#1316)\n\n* pip-254\r\n\r\n* lint\r\n\r\n* lint\r\n\r\n* admin token\r\n\r\n* admin token\r\n\r\n* admin token\r\n\r\n* Update pulsar/client_impl_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* Update pulsar/client_impl_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* Update pulsar/consumer_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* Update pulsar/consumer_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* Update pulsar/client_impl_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* fix lint\r\n\r\n---------\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e"
    },
    {
      "commit": "edea3eb0198bfe772fb90690137bfb8da8121cc8",
      "tree": "2c0b7c046f334cc09d57fabe7525d4936773ed0d",
      "parents": [
        "279e1d74c216465bccdde492f392c9b5d52e4546"
      ],
      "author": {
        "name": "crossoverJie",
        "email": "crossoverJie@gmail.com",
        "time": "Fri Dec 13 15:51:01 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 13 15:51:01 2024 +0800"
      },
      "message": "[Issue 1276] Fix multiple consumers using zeroQueueConsumer (#1278)\n\n* fix #1276\r\n\r\n* Update pulsar/consumer_zero_queue_test.go\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e\r\n\r\n* fix docker clean\r\n\r\n---------\r\n\r\nCo-authored-by: Zixuan Liu \u003cnodeces@gmail.com\u003e"
    },
    {
      "commit": "279e1d74c216465bccdde492f392c9b5d52e4546",
      "tree": "794d2ff12b9a6606a63fb3a7db6dad9eec035edc",
      "parents": [
        "7bbb5b268232118d5520c8c5156da1fa6baf9d96"
      ],
      "author": {
        "name": "zhou zhuohan",
        "email": "843520313@qq.com",
        "time": "Mon Dec 09 16:04:06 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 09 16:04:06 2024 +0800"
      },
      "message": "[Issue 1297][consumer] Fix DLQ producer name conflicts when there are same name consumers (#1314)\n\n"
    },
    {
      "commit": "7bbb5b268232118d5520c8c5156da1fa6baf9d96",
      "tree": "61640fb4e1747077f813dd077b68ff3e2811ad9f",
      "parents": [
        "95232dec673797b15346bb10f4cbe6492ca2872e"
      ],
      "author": {
        "name": "Zixuan Liu",
        "email": "nodeces@gmail.com",
        "time": "Mon Dec 09 16:03:44 2024 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 09 16:03:44 2024 +0800"
      },
      "message": "Fix close blocked (#1308)\n\n"
    }
  ],
  "next": "95232dec673797b15346bb10f4cbe6492ca2872e"
}
