When the Logstash output uses slow start, it sends batches to the logstash output in multiple smaller segments. The logstash client calls the acknowledgment callback (*msgRef).callback after each smaller segment is completed. However, that callback mistakenly calls batch.ACK() in that callback if there's no error, even if there are still more events left to send. This can both misreport acknowledgments for events that are still pending, and attempt to send multiple acknowledgments for the same batch, which can stall the output workers or pipeline (since acknowledgment channels are reused).
When the Logstash output uses slow start, it sends batches to the logstash output in multiple smaller segments. The logstash client calls the acknowledgment callback
(*msgRef).callback
after each smaller segment is completed. However, that callback mistakenly callsbatch.ACK()
in that callback if there's no error, even if there are still more events left to send. This can both misreport acknowledgments for events that are still pending, and attempt to send multiple acknowledgments for the same batch, which can stall the output workers or pipeline (since acknowledgment channels are reused).