From d5e5e0d90b9f6bcce948e24ac0cc320cf7ef2b12 Mon Sep 17 00:00:00 2001 From: David Liu Date: Wed, 30 Mar 2016 10:25:01 -0700 Subject: [PATCH] clean up --- .../EurekaNotificationServerListUpdater.java | 30 ++++++++----------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/ribbon-eureka/src/main/java/com/netflix/niws/loadbalancer/EurekaNotificationServerListUpdater.java b/ribbon-eureka/src/main/java/com/netflix/niws/loadbalancer/EurekaNotificationServerListUpdater.java index a7a14566..3600c57b 100644 --- a/ribbon-eureka/src/main/java/com/netflix/niws/loadbalancer/EurekaNotificationServerListUpdater.java +++ b/ribbon-eureka/src/main/java/com/netflix/niws/loadbalancer/EurekaNotificationServerListUpdater.java @@ -16,7 +16,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; /** * A server list updater for the {@link com.netflix.loadbalancer.DynamicServerListLoadBalancer} that @@ -64,9 +63,11 @@ public static ExecutorService getDefaultRefreshExecutor() { private final AtomicBoolean isActive = new AtomicBoolean(false); private final AtomicLong lastUpdated = new AtomicLong(System.currentTimeMillis()); private final Provider eurekaClientProvider; - private final AtomicReference updateListenerRef = new AtomicReference(); private final ExecutorService refreshExecutor; + private volatile EurekaEventListener updateListener; + private volatile EurekaClient eurekaClient; + public EurekaNotificationServerListUpdater() { this(new LegacyEurekaClientProvider()); } @@ -76,23 +77,14 @@ public EurekaNotificationServerListUpdater(final Provider eurekaCl } public EurekaNotificationServerListUpdater(final Provider eurekaClientProvider, ExecutorService refreshExecutor) { - this.eurekaClientProvider = new Provider() { - private volatile EurekaClient eurekaClientInstance; - @Override - public synchronized EurekaClient get() { - if (eurekaClientInstance == null) { - eurekaClientInstance = eurekaClientProvider.get(); - } - return eurekaClientInstance; - } - }; + this.eurekaClientProvider = eurekaClientProvider; this.refreshExecutor = refreshExecutor; } @Override public synchronized void start(final UpdateAction updateAction) { if (isActive.compareAndSet(false, true)) { - final EurekaEventListener updateListener = new EurekaEventListener() { + this.updateListener = new EurekaEventListener() { @Override public void onEvent(EurekaEvent event) { if (event instanceof CacheRefreshedEvent) { @@ -110,9 +102,11 @@ public void run() { } } }; - updateListenerRef.set(updateListener); - if (eurekaClientProvider.get() != null) { - eurekaClientProvider.get().registerEventListener(updateListener); + if (eurekaClient == null) { + eurekaClient = eurekaClientProvider.get(); + } + if (eurekaClient != null) { + eurekaClient.registerEventListener(updateListener); } } else { logger.info("Update listener already registered, no-op"); @@ -122,8 +116,8 @@ public void run() { @Override public synchronized void stop() { if (isActive.compareAndSet(true, false)) { - if (eurekaClientProvider.get() != null) { - eurekaClientProvider.get().unregisterEventListener(updateListenerRef.get()); + if (eurekaClient != null) { + eurekaClient.unregisterEventListener(updateListener); } } else { logger.info("Not currently active, no-op");