From 068d87acfbdf384f883ca17895c40a7a36a507b0 Mon Sep 17 00:00:00 2001 From: Sam Tunnicliffe Date: Fri, 20 Nov 2020 15:51:20 +0000 Subject: [PATCH] Avoid potential NPE in JVMStabilityInspector Patch by Sam Tunnicliffe; reviewed by David Capwell for CASSANDRA-16294 --- CHANGES.txt | 1 + .../apache/cassandra/utils/JVMStabilityInspector.java | 2 +- .../cassandra/utils/JVMStabilityInspectorTest.java | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 7aecefa837..546fd98abd 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.24: + * Avoid potential NPE in JVMStabilityInspector (CASSANDRA-16294) * Improved check of num_tokens against the length of initial_token (CASSANDRA-14477) * Fix a race condition on ColumnFamilyStore and TableMetrics (CASSANDRA-16228) * Remove the SEPExecutor blocking behavior (CASSANDRA-16186) diff --git a/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java b/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java index b018e04b8a..798949f5a0 100644 --- a/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java +++ b/src/java/org/apache/cassandra/utils/JVMStabilityInspector.java @@ -107,7 +107,7 @@ public final class JVMStabilityInspector // Check for file handle exhaustion if (t instanceof FileNotFoundException || t instanceof SocketException) - if (t.getMessage().contains("Too many open files")) + if (t.getMessage() != null && t.getMessage().contains("Too many open files")) isUnstable = true; if (isUnstable) diff --git a/test/unit/org/apache/cassandra/utils/JVMStabilityInspectorTest.java b/test/unit/org/apache/cassandra/utils/JVMStabilityInspectorTest.java index ecb2955d87..1a2a864667 100644 --- a/test/unit/org/apache/cassandra/utils/JVMStabilityInspectorTest.java +++ b/test/unit/org/apache/cassandra/utils/JVMStabilityInspectorTest.java @@ -117,6 +117,14 @@ public class JVMStabilityInspectorTest JVMStabilityInspector.inspectThrowable(new FileNotFoundException("Also should not fail")); assertFalse(killerForTests.wasKilled()); + killerForTests.reset(); + JVMStabilityInspector.inspectThrowable(new SocketException()); + assertFalse(killerForTests.wasKilled()); + + killerForTests.reset(); + JVMStabilityInspector.inspectThrowable(new FileNotFoundException()); + assertFalse(killerForTests.wasKilled()); + killerForTests.reset(); JVMStabilityInspector.inspectThrowable(new SocketException("Too many open files")); assertTrue(killerForTests.wasKilled()); @@ -124,6 +132,7 @@ public class JVMStabilityInspectorTest killerForTests.reset(); JVMStabilityInspector.inspectCommitLogThrowable(new FileNotFoundException("Too many open files")); assertTrue(killerForTests.wasKilled()); + } finally {