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

Bind out cross-process lock with unit tests. #519

Merged
merged 12 commits into from
Nov 7, 2023

Conversation

JonathanHenson
Copy link
Contributor

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

@JonathanHenson JonathanHenson requested a review from a team November 6, 2023 22:46
Copy link
Contributor

@nateprewitt nateprewitt left a 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.

awscrt/s3.py Outdated Show resolved Hide resolved
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:
Copy link
Contributor

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.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@graebm any thoughts here?

Copy link
Contributor

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 🤷‍♀️

Copy link
Contributor

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 :|

JonathanHenson and others added 2 commits November 6, 2023 15:41
add better documentation.

Co-authored-by: Nate Prewitt <[email protected]>
awscrt/s3.py Outdated Show resolved Hide resolved
test/test_s3.py Outdated Show resolved Hide resolved
test/test_s3.py Outdated Show resolved Hide resolved
test/test_s3.py Outdated Show resolved Hide resolved
test/test_s3.py Outdated Show resolved Hide resolved
source/s3_client.c Outdated Show resolved Hide resolved
source/s3_client.c Outdated Show resolved Hide resolved
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:
Copy link
Contributor

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 🤷‍♀️

awscrt/s3.py Outdated Show resolved Hide resolved
@JonathanHenson JonathanHenson merged commit 16e6492 into main Nov 7, 2023
62 of 63 checks passed
@JonathanHenson JonathanHenson deleted the bindout_xprocess_lock branch November 7, 2023 21:01
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.

3 participants