racecar icon indicating copy to clipboard operation
racecar copied to clipboard

Fix standalone producer shutdown

Open maeve opened this issue 6 months ago • 0 comments

The Racecar::Producer.shutdown! method was not actually closing the underlying rdkafka producer, because it was looking for a class instance variable named @internal_producer which did not exist. I suspect this stemmed from confusion over the use of both the class variable @@init_internal_producer as well as the instance variable (not class instance variable) @internal_producer.

I've fixed the bug in Racecar::Producer.shutdown! and tried to simplify things somewhat. Now the class variable @@internal_producer holds the reference to the shared rdkafka producer. Instead of maintaining a duplicate instance variable referencing the same object, the private Racecar::Producer#internal_producer instance method simply returns the class variable. I also modified the test logic so that it no longer directly manipulates private implementation details.

I also added a new Racecar::Producer.reset! method, which closes the rdkafka producer and then nils out any references to it, to allow the producer to be recreated again later. This logic is specifically to support contexts where we need to produce messages within a forked process. The new reset! method implements best practices around forking in rdkafka-ruby.

maeve avatar Aug 09 '24 15:08 maeve