dferstay opened a new pull request #534:
URL: https://github.com/apache/pulsar-client-go/pull/534


   Previously, the Producer ignored the context passed to Send() and
   SendAsync().
   
   Now, the Producer respects the context in the case where the
   ProducerOptions.MaxPendingMessages limit is breached.  In this case, the
   producer will block until a permit for sending the message is available or
   until the context expires, whichever comes first.
   
   Failures to send messages due to context expiration are communicated to
   callers via the existing TimeoutError error code.
   
   Signed-off-by: Daniel Ferstay <[email protected]>
   
   ### Motivation
   
   When the Producer is applying backpressure to the caller it will block 
attempting to acquire a send permit.
   
   Before this change change, the producer would block indefinitely as a send 
permit must be acquired before the send timeout can be checked by the internal 
`runEventsLoop` go-routine.
   
   With this change, callers can control the duration they are willing to wait 
for a send permit by using the context passed to the Send() and SendAsync() 
methods.
   
   ### Modifications
   
   - Modify `Semaphore.Acquire()` to accept a context and block until 
acquisition is complete or the passed context is expired, whichever comes first
   - Modify `partitionProducer.internalSendAsync()` to propagate the calling 
context when attempting to acquire the publish semaphore, and fail the request 
if the acquire is unsuccessful.
   
   ### Verifying this change
   
   - additional unit tests for the Sempahore
   - additional producer_test that verifies publish on context expiration while 
applying backpressure
   
   


-- 
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.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to