From 534f5aae0dde877910e8394653c8b81307441428 Mon Sep 17 00:00:00 2001 From: Eli Treuherz <1574403+treuherz@users.noreply.github.com> Date: Mon, 3 Jun 2019 12:16:05 +0100 Subject: [PATCH] Fix initialisation ordering of AppContext Previously, `initialiseInstanceAddress()` was called before `LOG` and `DEFAULT_INSTANCE_ADDRESS` were initialised, but relied on both of them, so threw an NPE instead of correctly assigning the default and starting up. Fixes #654 ref: https://github.com/thelastpickle/cassandra-reaper/pull/692 --- .../java/io/cassandrareaper/AppContext.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/server/src/main/java/io/cassandrareaper/AppContext.java b/src/server/src/main/java/io/cassandrareaper/AppContext.java index 4d4e3fb94..f70c11aaf 100644 --- a/src/server/src/main/java/io/cassandrareaper/AppContext.java +++ b/src/server/src/main/java/io/cassandrareaper/AppContext.java @@ -37,10 +37,7 @@ public final class AppContext { public static final UUID REAPER_INSTANCE_ID = UUID.randomUUID(); - public static final String REAPER_INSTANCE_ADDRESS = initialiseInstanceAddress(); - - private static final String DEFAULT_INSTANCE_ADDRESS = "127.0.0.1"; - private static final Logger LOG = LoggerFactory.getLogger(AppContext.class); + public static final String REAPER_INSTANCE_ADDRESS = Private.initialiseInstanceAddress(); public final AtomicBoolean isRunning = new AtomicBoolean(true); public IStorage storage; @@ -50,14 +47,18 @@ public final class AppContext { public ReaperApplicationConfiguration config; public MetricRegistry metricRegistry = new MetricRegistry(); - private static String initialiseInstanceAddress() { - String reaperInstanceAddress; - try { - reaperInstanceAddress = InetAddress.getLocalHost().getHostAddress(); - } catch (UnknownHostException e) { - LOG.warn("Cannot get instance address", e); - reaperInstanceAddress = DEFAULT_INSTANCE_ADDRESS; + + private static class Private { + private static final Logger LOG = LoggerFactory.getLogger(AppContext.class); + private static final String DEFAULT_INSTANCE_ADDRESS = "127.0.0.1"; + + private static String initialiseInstanceAddress() { + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + LOG.warn("Cannot get instance address", e); + } + return DEFAULT_INSTANCE_ADDRESS; } - return reaperInstanceAddress; } }