Skip to content

Conversation

glehmann
Copy link
Member

in order to decrease the load on koji. With what's currently in the pipe, we decrease the number of koji calls from 65 to 37 with the cache.

in order to decrease the load on koji. With what's currently in the pipe, we
decrease the number of koji calls from 65 to 37 with the cache.

Signed-off-by: Gaëtan Lehmann <[email protected]>
@glehmann
Copy link
Member Author

It would be great if it could be validated quickly—this might have an impact on koji, but only once merged 🙂

def get_koji_build(session, build_id) -> dict:
cache_key = f'koji-build-{build_id}'
if not args.re_cache and cache_key in CACHE:
return cast(dict, CACHE[cache_key])
Copy link
Contributor

Choose a reason for hiding this comment

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

the cast looks necessary just because CACHE itself cannot be properly type-hinted?

Copy link
Member Author

Choose a reason for hiding this comment

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

yes 👍

Copy link
Contributor

Choose a reason for hiding this comment

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

thinking twice about it, CACHE could be typed using a TypeDict?

Copy link
Member Author

Choose a reason for hiding this comment

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

I don't think it would fit well.

I could assert isinstance(…) instead of casting if you prefer

else:
build = session.getBuild(build_id)
CACHE.set(cache_key, build, expire=RETENTION_TIME)
return build
Copy link
Contributor

Choose a reason for hiding this comment

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

instead of managing such a cache manually, wouldn't get_koji_build = functools.cache(session.getBuild) do the job? I guess other uses of CACHE could also go that same way.

Copy link
Member Author

Choose a reason for hiding this comment

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

that's a persistent cache, using diskcache. I don't think functool has anything similar.

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, right. Looks like this is a common pattern, though, and there are some libs for this, like:

Copy link
Member Author

Choose a reason for hiding this comment

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

there is a memoize() decorator in diskcache, but it doesn't fit well with the command line option to refresh the cache

Copy link
Member Author

Choose a reason for hiding this comment

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

or maybe I can set the expire property after creating the CACHE object. I'll check

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