Production instance's caching behaving very differently
So this one is a very odd one for me. I have different parts of my code where caching works fine on my test bot (5 servers) vs my production bot (16k servers).
One example is this command where I'm using
guild.getMemberOrNull
to display a list of users (IDs coming from my DB) into strings with their usernames. The problem is that it takes a long time to resolve the response. I would understand if it took long to resolve once, and then subsequent calls didn't, because they are supposed to be cached (EntitySupplyStrategy.cacheWithCachingRestFallback
), but every time, it takes a long time. We have tried to switching strategies for this particular command, like using cache only, and it would result in a lot of users just not being found.
Now, recently, I added some channel permission checks to some task I have. And I noticed that since then, the task is taking a long time to complete. Upon checking my logs, I see a bunch of requests to https://discord.com/api/v10/guilds/<guildId>/members/<myBotId>
, sometimes even making two calls within the same second (there is another permission check further down the task's execution)
I try to replicate this on my test bot but no luck, not a single get member call is done.
Something probably worth mentioning is that I have disabled requesting members on startup:
Because I implemented my own logic for this, but I have verified that it is cached locally, even running the prod token locally (with some modifications so it doesn't alter anything in prod servers), and even then, it is supposed to cache it after the first fetch.Solution:Jump to solution
GitHub
Fix getMemberOrNull and getGuildMembers caching only user data (#96...
As reported in the Kord Discord server [1], these methods of
StoreEntitySupplier are storing the results only to the UserData cache,
not the MemberData cache, so subsequent calls would not find t...
8 Replies
Also, is this more suitable for kord support? 🤔
I might be onto something: https://canary.discord.com/channels/556525343595298817/1271484633610981493
Solution
GitHub
Fix getMemberOrNull and getGuildMembers caching only user data (#96...
As reported in the Kord Discord server [1], these methods of
StoreEntitySupplier are storing the results only to the UserData cache,
not the MemberData cache, so subsequent calls would not find t...
@gdude I'm just curious, when does the snapshot used by kordex update? On the next build?
I did try to invalidate cache, use
--refresh-dependencies
and all, but it would still grab the version of 0.15.0-SNAPSHOT
without the fix, until I manually added implementation("dev.kord:kord-core:0.15.0-SNAPSHOT")
I'm not entirely sure how Gradle handles it, but if you're using the KordEx gradle plugin this shouldn't be an issue
Since it adds an explicit dependency on Kord
Otherwise yeah I guess it updates on build
But like.. I'm not pinning a specific snapshot other than 0.15.0-SNAPSHOT
Probably resolves to some hash internally on build. Since IIRC, every snapshot, even if they have the same version, is stored as its own artifact
It is, but I'm not sure what actually ends up in the pom/module
But yeah use the gradle plugin, it'll make stuff like this easier
Anyway, yeah I do want to look into the kordex plugin.
Docs are here if needed, https://docs.kordex.dev/kordex-plugin.html
Kord Extensions Help
KordEx Plugin | Kord Extensions