PavelZeger opened a new issue, #1508: URL: https://github.com/apache/pulsar-client-go/issues/1508
Depends on #1504 (adds `Pause()` / `Resume()` / `Paused()`). Related: #429. With `Pause()` from #1504, there's a small gap that can't be avoided: between `Subscribe()` returning and the new `Pause()` call, the consumer has already asked the broker for messages and may have pulled some. So there's no way to start a consumer that is paused from the very first moment. `StartPaused` closes that gap: the consumer comes up paused and doesn't ask the broker for anything until a user calls `Resume()`. Java has this on the builder: ```java ConsumerBuilder<T> startPaused(boolean startPaused); ``` The consumer starts paused, and the setting is passed down to every internal consumer (including topics discovered later), so it's race-free. ### Proposed Go API One new option, no interface change: ```go // ConsumerOptions // StartPaused, if true, creates the consumer in the paused state: it sends no flow // permits until Resume() is called. Default false. StartPaused bool ``` After `Subscribe()`, `Paused()` returns true until a user calls `Resume()`. - Pass the option down to the partition consumer and set its paused flag before it starts, so the very first connect sends no permits. #1504 already handles "paused at connect" (it holds the initial grant and flushes it on the first Resume()), so no new mechanism is needed. - Set the paused flag on the top-level consumer at creation, so `Paused()` is correct and new children inherit it. - With this in place, regex and partitioned consumers can create new children already paused instead of pausing them right after creation (#1504's current approach, which has a tiny race window). This closes that race and matches Java. ### Edge cases to test - `StartPaused`: true, produce messages, `Receive` with a timeout → nothing arrives; after `Resume()` → all messages arrive. - `Paused()` is true right after `Subscribe`. - Partitioned, multi-topic, and regex consumers all come up paused, including topics discovered later. ### Are you willing to submit a PR? - [x] I'm willing to submit a PR! -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
