Fix serialization bug which triggers side effects on dynamic attributes #1302
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Thanks for this great open source library! 🙏 I'm deeply appreciative of your work for the community.
In using lithops, I discovered a bug in the serialization routines which triggers side effects on dynamic attributes (e.g.
@property
methods). For me this, is a dealbreaker for using lithops with Arraylake, since our objects have such properties which trigger expensive API calls. For example, in a map job over 1000 objects, this method gets called 1000 times before the function is even submitted.I chased this down to the use of
inspect.getmembers
inlithops.job.serialize
.lithops/lithops/job/serialize.py
Line 135 in cdf5584
Python 3.11 implements
inspect.getmembers_static
, which is designed to address this exact situation. (See also discussion in python/cpython#20911.)To demonstrate this, this PR includes a test for this situation and implements a fix using
getmembers_static
. This passes in a local environment with python 3.11. However, it will fail in CI, which uses python 3.10.I would recommend vendoring a version of this function until you drop python 3.10 support.
Developer's Certificate of Origin 1.1