racecar
racecar copied to clipboard
Fix standalone producer shutdown
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.