Skip to content

Commit 98bbbd4

Browse files
authored
[Store] Fix cache total metrics accounting on metadata removal (kvcache-ai#2520)
1 parent 8bfa404 commit 98bbbd4

7 files changed

Lines changed: 333 additions & 78 deletions

mooncake-store/include/master_metric_manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class MasterMetricManager {
3737
void inc_file_cache_nums(int64_t val = 1);
3838
void dec_mem_cache_nums(int64_t val = 1);
3939
void dec_file_cache_nums(int64_t val = 1);
40+
void reset_cache_total_nums();
4041

4142
void inc_valid_get_nums(int64_t val = 1);
4243
void inc_total_get_nums(int64_t val = 1);

mooncake-store/include/master_service.h

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,8 @@ class MasterService {
862862
soft_pin_timeout GUARDED_BY(lock); // optional soft pin, only
863863
// set for vip objects
864864
const bool hard_pinned{false}; // immutable, set at creation
865+
bool memory_cache_total_accounted{false};
866+
bool disk_cache_total_accounted{false};
865867

866868
void AddReplicas(std::vector<Replica>&& replicas) {
867869
replicas_.insert(replicas_.end(),
@@ -1173,6 +1175,20 @@ class MasterService {
11731175
};
11741176
std::array<MetadataShard, kNumShards> metadata_shards_;
11751177

1178+
static bool HasCompletedMemoryCacheReplica(const ObjectMetadata& metadata);
1179+
static bool HasCompletedDiskCacheReplica(const ObjectMetadata& metadata);
1180+
static void SyncCacheTotalAccounting(ObjectMetadata& metadata);
1181+
void RebuildCacheTotalAccounting();
1182+
static void AccountCacheTotalRemoval(ObjectMetadata& metadata);
1183+
std::vector<Replica> PopReplicasWithCacheTotalAccounting(
1184+
ObjectMetadata& metadata,
1185+
const std::function<bool(const Replica&)>& pred_fn);
1186+
std::vector<Replica> PopReplicasWithCacheTotalAccounting(
1187+
ObjectMetadata& metadata);
1188+
size_t EraseReplicasWithCacheTotalAccounting(
1189+
ObjectMetadata& metadata,
1190+
const std::function<bool(const Replica&)>& pred_fn);
1191+
11761192
std::unordered_map<std::string, std::string> object_group_ids_
11771193
GUARDED_BY(group_routing_mutex_);
11781194
mutable std::unordered_set<std::string> groups_needing_lease_refresh_
@@ -1431,9 +1447,10 @@ class MasterService {
14311447
// Erase invalid memory replicas (those with unmounted
14321448
// segments). No client_mutex_ needed since we only check memory
14331449
// replicas.
1434-
it_->second.EraseReplicas([](const Replica& replica) {
1435-
return replica.has_invalid_mem_handle();
1436-
});
1450+
service_->EraseReplicasWithCacheTotalAccounting(
1451+
it_->second, [](const Replica& replica) {
1452+
return replica.has_invalid_mem_handle();
1453+
});
14371454
// If no valid replicas remain, delete the whole object.
14381455
if (!it_->second.IsValid()) {
14391456
const bool had_processing =

mooncake-store/src/master_metric_manager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,6 +836,10 @@ void MasterMetricManager::dec_mem_cache_nums(int64_t val) {
836836
void MasterMetricManager::dec_file_cache_nums(int64_t val) {
837837
file_cache_nums_.dec(val);
838838
}
839+
void MasterMetricManager::reset_cache_total_nums() {
840+
mem_cache_nums_.reset();
841+
file_cache_nums_.reset();
842+
}
839843
void MasterMetricManager::inc_valid_get_nums(int64_t val) {
840844
valid_get_nums_.inc(val);
841845
}

0 commit comments

Comments
 (0)