Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix standalone producer shutdown #382

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

maeve
Copy link

@maeve maeve commented Aug 9, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant