-
Notifications
You must be signed in to change notification settings - Fork 42
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
Bind out cross-process lock with unit tests. #519
Conversation
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.
Two minor notes, but otherwise looks good. I'll pull the branch down and try it out.
try: | ||
new_lock = crt_instance_lock_acquire(nonce_str) | ||
self.fail("Acquiring a lock by the same nonce should fail when it's already held") | ||
except RuntimeError as e: |
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.
Does the CRT have any formalized error hierarchy in Python? I haven't dug too deeply yet. My only concern here is RuntimeError is very generic so it will be difficult to do control flow handling with this without message introspection.
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.
@graebm any thoughts here?
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.
It's not great. It's the same problem we have in every language binding. We didn't code-gen error classes, so catching specific CRT errors means users must catch a RuntimeError and introspect it.
In this specific case, we could dance around the issue and just return None or False if the C function returns NULL, since we do often expect it to fail 🤷♀️
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'm not happy about this. I really want to do a mildly-breaking-change to all our bindings and address this issue. But it's non-trivial :|
add better documentation. Co-authored-by: Nate Prewitt <[email protected]>
try: | ||
new_lock = crt_instance_lock_acquire(nonce_str) | ||
self.fail("Acquiring a lock by the same nonce should fail when it's already held") | ||
except RuntimeError as e: |
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.
It's not great. It's the same problem we have in every language binding. We didn't code-gen error classes, so catching specific CRT errors means users must catch a RuntimeError and introspect it.
In this specific case, we could dance around the issue and just return None or False if the C function returns NULL, since we do often expect it to fail 🤷♀️
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.