Repository: kafka Updated Branches: refs/heads/0.10.1 ee212d1de -> 5ed8fc00d
KAFKA-4300: NamedCache throws an NPE when evict is called and the cache is empty If evict is called on a NamedCache and the cache is empty an NPE is thrown. This was reported on the user list from a developer running 0.10.1. Author: Damian Guy <damian....@gmail.com> Reviewers: Eno Thereska, Matthias J. Sax, Guozhang Wang Closes #2024 from dguy/cache-bug (cherry picked from commit 65f6a7964f5e59e789eae3cdd4d301bb6a649064) Signed-off-by: Guozhang Wang <wangg...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/kafka/repo Commit: http://git-wip-us.apache.org/repos/asf/kafka/commit/5ed8fc00 Tree: http://git-wip-us.apache.org/repos/asf/kafka/tree/5ed8fc00 Diff: http://git-wip-us.apache.org/repos/asf/kafka/diff/5ed8fc00 Branch: refs/heads/0.10.1 Commit: 5ed8fc00d00f9ccb9a5c926cc0d0be8cb0a3214d Parents: ee212d1 Author: Damian Guy <damian....@gmail.com> Authored: Thu Oct 13 13:15:26 2016 -0700 Committer: Guozhang Wang <wangg...@gmail.com> Committed: Thu Oct 13 13:15:37 2016 -0700 ---------------------------------------------------------------------- .../org/apache/kafka/streams/state/internals/NamedCache.java | 3 +++ .../apache/kafka/streams/state/internals/NamedCacheTest.java | 5 +++++ 2 files changed, 8 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kafka/blob/5ed8fc00/streams/src/main/java/org/apache/kafka/streams/state/internals/NamedCache.java ---------------------------------------------------------------------- diff --git a/streams/src/main/java/org/apache/kafka/streams/state/internals/NamedCache.java b/streams/src/main/java/org/apache/kafka/streams/state/internals/NamedCache.java index a3a0078..65a836e 100644 --- a/streams/src/main/java/org/apache/kafka/streams/state/internals/NamedCache.java +++ b/streams/src/main/java/org/apache/kafka/streams/state/internals/NamedCache.java @@ -190,6 +190,9 @@ class NamedCache { } synchronized void evict() { + if (tail == null) { + return; + } final LRUNode eldest = tail; currentSizeBytes -= eldest.size(); if (eldest.entry.isDirty()) { http://git-wip-us.apache.org/repos/asf/kafka/blob/5ed8fc00/streams/src/test/java/org/apache/kafka/streams/state/internals/NamedCacheTest.java ---------------------------------------------------------------------- diff --git a/streams/src/test/java/org/apache/kafka/streams/state/internals/NamedCacheTest.java b/streams/src/test/java/org/apache/kafka/streams/state/internals/NamedCacheTest.java index fe11c05..3067256 100644 --- a/streams/src/test/java/org/apache/kafka/streams/state/internals/NamedCacheTest.java +++ b/streams/src/test/java/org/apache/kafka/streams/state/internals/NamedCacheTest.java @@ -186,4 +186,9 @@ public class NamedCacheTest { assertEquals(Bytes.wrap(new byte[]{2}), iterator.next()); assertFalse(iterator.hasNext()); } + + @Test + public void shouldNotThrowNullPointerWhenCacheIsEmptyAndEvictionCalled() throws Exception { + cache.evict(); + } } \ No newline at end of file