bool BlockCache::isValidRecoveryData()

in cachelib/navy/block_cache/BlockCache.cpp [698:734]


bool BlockCache::isValidRecoveryData(
    const serialization::BlockCacheConfig& recoveredConfig) const {
  if (!(*config_.cacheBaseOffset_ref() ==
            *recoveredConfig.cacheBaseOffset_ref() &&
        static_cast<int32_t>(allocAlignSize_) ==
            *recoveredConfig.allocAlignSize_ref() &&
        *config_.checksum_ref() == *recoveredConfig.checksum_ref())) {
    return false;
  }
  // TOOD: this is to handle alignment change on cache size from v11 to v12 and
  // beyond. Clean this up after BlockCache everywhere is on v12, and restore
  // the above block in the comments.
  // Forward warm-roll for v11 going forward to v12+
  if (*config_.version_ref() > *recoveredConfig.version_ref() &&
      *config_.version_ref() >= 12 && *recoveredConfig.version_ref() == 11) {
    XLOGF(INFO,
          "Handling warm roll upgrade from Navy v11 to v12+. Old cache size: "
          "{}, New cache size: {}",
          *recoveredConfig.cacheSize_ref(),
          *config_.cacheSize_ref());
    return *config_.cacheSize_ref() / regionSize_ ==
           *recoveredConfig.cacheSize_ref() / regionSize_;
  }
  // Backward warm-roll. This is for v12+ rolling back to v11
  if (*config_.version_ref() < *recoveredConfig.version_ref() &&
      *config_.version_ref() == 11 && *recoveredConfig.version_ref() >= 12) {
    XLOGF(INFO,
          "Handling warm roll downgrade from Navy v12+ to v11. Old cache size: "
          "{}, New cache size: {}",
          *recoveredConfig.cacheSize_ref(),
          *config_.cacheSize_ref());
    return *config_.cacheSize_ref() / regionSize_ ==
           *recoveredConfig.cacheSize_ref() / regionSize_;
  }
  return *config_.cacheSize_ref() == *recoveredConfig.cacheSize_ref() &&
         *config_.version_ref() == *recoveredConfig.version_ref();
}