-
Notifications
You must be signed in to change notification settings - Fork 5
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
feat!: Switch to a single Producer, wrapped in an API singleton #32
Conversation
71f66d0
to
efad224
Compare
Purpose: - Revisit #16 since I finally figured out a clean way to have a single producer. - Reduce the burden on future code that will need to adjust how polling is done (#31) and maybe handle shutdown (#11) - Prepare for configurable implementation loading, which will need a singleton and getter: openedx/openedx-events#87 - Get rid of the `sync` argument (which didn't fit the abstraction) and move it to a dedicated method. Relying code should now call `get_producer().send(...)` rather than `send_to_event_bus(...)`. The return value is an object that wraps a `Producer` instance (not a `SerializingProducer`) and that handles the serialization itself. Serialization logic is moved to a cached `get_serializers(...)` that expands upon the previous `get_serializer` function; it now returns a pair of key and value serializers. This also acts as a patch point for mocking. I'd like to test the serializers themselves, but they want to talk to a server. `send_to_event_bus` gets a shorter name (now it's just a `send` method) and loses the `sync` keyword argument; there is instead now a `pre_shutdown` method.
efad224
to
a4b9e52
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @timmc-edx. I appreciated being able to review the separate commits, even if you squash in the end.
- Fix comment re: client caching - Use `cache` instead of `lru_cache` (should only ever have one value anyhow)
functools.cache is new in Python 3.9. :-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I know you didn't ask for re-review, so mostly just responding to comments.
Also update CHANGELOG date prediction.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice. Thanks.
Purpose:
sync
argument (which didn't fit the abstraction) and move it to a dedicated method.Relying code should now call
get_producer().send(...)
rather thansend_to_event_bus(...)
. The return value is an object that wraps aProducer
instance (not aSerializingProducer
) and that handles the serialization itself.Serialization logic is moved to a cached
get_serializers(...)
that expands upon the previousget_serializer
function; it now returns a pair of key and value serializers. This also acts as a patch point for mocking.send_to_event_bus
gets a shorter name (now it's just asend
method) and loses thesync
keyword argument; there is instead now apre_shutdown
method.A few refactoring changes are broken out into foundational commits to make review easier, but I might squash-merge them:
create_schema_registry_client
and rename toget_...
Merge checklist:
Check off if complete or not applicable: