mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-10 23:20:25 +00:00
[Data Buckets] Distributed Databucket Caching (#3500)
* [Data Buckets] Zone-Based Data Bucket Caching # Notes - Adds a data bucket cache so we're not needlessly hitting the database every time we need to read a data bucket value. * Cleanup and unify GetData access patterns * Cache work * Push * Add to cache when we fetch and do a db hit * Handle bucket misses in cache * Formatting * Logging * [Data Buckets] Zone-Based Data Bucket Caching - Adds a data bucket cache so we're not needlessly hitting the database every time we need to read a data bucket value. * Cleanup and unify GetData access patterns * Cache work * Push * Add to cache when we fetch and do a db hit * Handle bucket misses in cache * Formatting * Remove redundant fetches from cache since GetData does the same thing * Push progress * Distributed cache work * Logging * Fix issue with scoping where same named keys could return overlapping results * Misses cache tweak, logging, comments * Add bot, client, and NPC bucket methods to Lua. --------- Co-authored-by: Akkadius <akkadius1@gmail.com>
This commit is contained in:
+6
-5
@@ -427,6 +427,7 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to
|
||||
Bot::~Bot() {
|
||||
AI_Stop();
|
||||
LeaveHealRotationMemberPool();
|
||||
DataBucket::DeleteCachedBuckets(DataBucketLoadType::Bot, GetBotID());
|
||||
|
||||
if (HasPet()) {
|
||||
GetPet()->Depop();
|
||||
@@ -8197,18 +8198,18 @@ bool Bot::CheckDataBucket(std::string bucket_name, const std::string& bucket_val
|
||||
DataBucketKey k = GetScopedBucketKeys();
|
||||
k.key = bucket_name;
|
||||
|
||||
auto player_value = DataBucket::CheckBucketKey(this, k);
|
||||
if (player_value.empty() && GetBotOwner()) {
|
||||
auto b = DataBucket::GetData(k);
|
||||
if (b.value.empty() && GetBotOwner()) {
|
||||
// fetch from owner
|
||||
k = GetBotOwner()->GetScopedBucketKeys();
|
||||
|
||||
player_value = DataBucket::CheckBucketKey(GetBotOwner(), k);
|
||||
if (player_value.empty()) {
|
||||
b = DataBucket::GetData(k);
|
||||
if (b.value.empty()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (zone->CompareDataBucket(bucket_comparison, bucket_value, player_value)) {
|
||||
if (zone->CompareDataBucket(bucket_comparison, bucket_value, b.value)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user