@@ -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 =
0 commit comments