From 6321d547cfba34586c8a6a4ca24d5169cdf7939f Mon Sep 17 00:00:00 2001 From: Fedor Korotkov Date: Mon, 12 Sep 2022 13:55:25 -0400 Subject: [PATCH] Improve available capacity checking (#240) * Improve available capacity checking * Fixed expression --- Sources/tart/VMStorageOCI.swift | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/tart/VMStorageOCI.swift b/Sources/tart/VMStorageOCI.swift index d0b5bf5..34d99e1 100644 --- a/Sources/tart/VMStorageOCI.swift +++ b/Sources/tart/VMStorageOCI.swift @@ -158,10 +158,12 @@ class VMStorageOCI: PrunableStorage { if let uncompressedDiskSize = manifest.uncompressedDiskSize() { let requiredCapacityBytes = UInt64(uncompressedDiskSize + 128 * 1024 * 1024) - let attrs = try Config().tartCacheDir.resourceValues(forKeys: [.volumeAvailableCapacityForImportantUsageKey]) - let availableCapacityBytes = UInt64(attrs.volumeAvailableCapacityForImportantUsage!) + let attrs = try Config().tartCacheDir.resourceValues(forKeys: [.volumeAvailableCapacityForImportantUsageKey, .volumeAvailableCapacityKey]) + let availableCapacityBytes = max(UInt64(attrs.volumeAvailableCapacityForImportantUsage!), UInt64(attrs.volumeAvailableCapacity!)) - if availableCapacityBytes < requiredCapacityBytes { + // There is a suspicious that occasionally capacity is returned as zero which can't be true. + // Let's validate to avoid unnecessary pruning. + if 0 < availableCapacityBytes && availableCapacityBytes < requiredCapacityBytes { try Prune.pruneReclaim(reclaimBytes: requiredCapacityBytes - availableCapacityBytes) } }