-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
Container properties cache consolidation #35731
Conversation
This adds a client level cache for container properties.
updated tests that were compensating for extra container reads, the extra reads no longer happen with adding the container cache properties in the client.
Fixed some reccomnded changes, and added optimizations for the cache. Only including needed properties info that will be unlikely to change.
Added a method in base.py to set the properties cache so we only have to change one location in case in the future we want to cache additional properties
Changed container cache to be a private attribute. Also added tests to verify the contents of the cache to be correct ones.
Co-authored-by: Kushagra Thapar <[email protected]>
Fixed broken tests that used old properties cache. Added samples to show how new properties cache works and best way to get the container properties
/azp run python - cosmos - tests |
Azure Pipelines successfully started running 1 pipeline(s). |
API change check API changes are not detected in this pull request. |
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.
LGTM, thanks @bambriz
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.
small comment on the test setup but not a blocker since we can update it with the re-create scenario - thanks Bryan!
/azp run python - cosmos - tests |
Azure Pipelines successfully started running 1 pipeline(s). |
Description
This PR makes the cache for Container Properties (namely Partition Key Definition and RID) for a container to be cached in the client instance instead of the container instance.
Because at the moment the Python SDK does not handle caches the same as other SDKs which include refreshing the cache
(See Issue 35294) it is not a regression since it is just consolidating the cache of the properties to a single cache in the client instance and the python sdk has not yet implemented caching the container properties as the other SDKs do.
This PR will avoid a situation where: if you call single instances of a container multiple times from a client, it will perform a container read for every operation that does Create, Replace, Upsert, and ReadOffers. It will now instead use the cached container properties after the first container read has already been performed for that specific container.
The Client keeps a cache of properties of each container that is used in the lifetime of the client instance.
The current properties that are cached are "_self" which is the container link "dbsname/coll/containername" , the RID of the container, and the partition key definition of the container.
All SDK Contribution checklist:
General Guidelines and Best Practices
Testing Guidelines