Skip to content

Commit

Permalink
Add protection for 0 byte cache entries
Browse files Browse the repository at this point in the history
In androidx we have observed that if Gradle OOMs it sometimes tries
to write 0 byte cache entries which corrupt the remote cache for future
builds. This change makes sure we do not write store/load such entries

Test: None
  • Loading branch information
liutikas committed Oct 12, 2023
1 parent 9ac2daf commit 0b8fa2c
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ internal class GcpBuildCacheService(
}

override fun store(key: BuildCacheKey, writer: BuildCacheEntryWriter) {
if (writer.size == 0L) return // do not store empty entries into the cache
logger.info("Storing ${key.blobKey()}")
val cacheKey = key.blobKey()
val output = ByteArrayOutputStream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ internal class GcpStorageService(
}

override fun store(cacheKey: String, contents: ByteArray): Boolean {

if (!isEnabled) {
logger.info("Not Enabled")
return false
Expand Down Expand Up @@ -123,7 +122,10 @@ internal class GcpStorageService(
if (storage == null) return null
return try {
val blob = storage.service.get(blobId) ?: return null
return if (blob.size > sizeThreshold) {
return if (blob.size == 0L) {
// return empty entries as a cache miss
null
} else if (blob.size > sizeThreshold) {
val path = FileHandleInputStream.create()
blob.downloadTo(path)
path.handleInputStream()
Expand Down

0 comments on commit 0b8fa2c

Please sign in to comment.