From 509be44fe86f6f686d6aeb6645b1bae303ceabef Mon Sep 17 00:00:00 2001 From: eguven Date: Wed, 22 Aug 2018 07:07:40 -0700 Subject: [PATCH] Ignore cache span rename error This happens rarely and SimpleCache can continue fine. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=209759996 --- .../exoplayer2/upstream/cache/CachedContent.java | 7 ++----- .../exoplayer2/upstream/cache/SimpleCache.java | 14 ++++++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContent.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContent.java index 89835f31de..97a7828a22 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContent.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/CachedContent.java @@ -185,16 +185,13 @@ import java.util.TreeSet; * @throws CacheException If renaming of the underlying span file failed. */ public SimpleCacheSpan touch(SimpleCacheSpan cacheSpan) throws CacheException { - // Remove the old span from the in-memory representation. - Assertions.checkState(cachedSpans.remove(cacheSpan)); - // Obtain a new span with updated last access timestamp. SimpleCacheSpan newCacheSpan = cacheSpan.copyWithUpdatedLastAccessTime(id); - // Rename the cache file if (!cacheSpan.file.renameTo(newCacheSpan.file)) { throw new CacheException("Renaming of " + cacheSpan.file + " to " + newCacheSpan.file + " failed."); } - // Add the updated span back into the in-memory representation. + // Replace the in-memory representation of the span. + Assertions.checkState(cachedSpans.remove(cacheSpan)); cachedSpans.add(newCacheSpan); return newCacheSpan; } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/SimpleCache.java b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/SimpleCache.java index 55f61705aa..adaf523e7c 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/SimpleCache.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/upstream/cache/SimpleCache.java @@ -232,10 +232,16 @@ public final class SimpleCache implements Cache { // Read case. if (cacheSpan.isCached) { - // Obtain a new span with updated last access timestamp. - SimpleCacheSpan newCacheSpan = index.get(key).touch(cacheSpan); - notifySpanTouched(cacheSpan, newCacheSpan); - return newCacheSpan; + try { + // Obtain a new span with updated last access timestamp. + SimpleCacheSpan newCacheSpan = index.get(key).touch(cacheSpan); + notifySpanTouched(cacheSpan, newCacheSpan); + return newCacheSpan; + } catch (CacheException e) { + // Ignore. In worst case the cache span is evicted early. + // This happens very rarely [Internal: b/38351639] + return cacheSpan; + } } CachedContent cachedContent = index.getOrAdd(key);