diff options
author | Bogumil Zebek <bogumil.zebek@nokia.com> | 2020-11-05 15:14:02 +0100 |
---|---|---|
committer | Bogumil Zebek <bogumil.zebek@nokia.com> | 2020-11-09 08:00:11 +0000 |
commit | b937b203b9e3276041428c7090c41a58583bc3f6 (patch) | |
tree | ae10967a17ef3e2e6910760e9e9203b4d5ad4425 /src/main/java/org/onap/dcae/VesApplication.java | |
parent | e19fc5ef16b5daf6cd383b2092411fc355bb0192 (diff) |
CBS configuration fetching7.0.0-ONAP1.7.9guilin
- Fix deadlock problem which occurs during starting application
Change-Id: I9103f0efd7caa105727f4814532934881335190f
Issue-ID: DCAEGEN2-2495
Signed-off-by: Zebek Bogumil <bogumil.zebek@nokia.com>
(cherry picked from commit 266777f52144bc1e6110c18d34de612538b78b26)
Diffstat (limited to 'src/main/java/org/onap/dcae/VesApplication.java')
-rw-r--r-- | src/main/java/org/onap/dcae/VesApplication.java | 51 |
1 files changed, 35 insertions, 16 deletions
diff --git a/src/main/java/org/onap/dcae/VesApplication.java b/src/main/java/org/onap/dcae/VesApplication.java index ec04157f..f8cd74ad 100644 --- a/src/main/java/org/onap/dcae/VesApplication.java +++ b/src/main/java/org/onap/dcae/VesApplication.java @@ -46,6 +46,7 @@ import org.springframework.context.annotation.Lazy; import java.nio.file.Paths; import java.time.Duration; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.locks.ReentrantLock; @SpringBootApplication(exclude = {GsonAutoConfiguration.class, SecurityAutoConfiguration.class}) public class VesApplication { @@ -59,45 +60,63 @@ public class VesApplication { private static ConfigUpdater configUpdater; private static DMaaPEventPublisher eventPublisher; private static ApplicationConfigurationListener applicationConfigurationListener; + private static ReentrantLock applicationLock = new ReentrantLock(); public static void main(String[] args) { + applicationLock.lock(); + try { + startApplication(args); + startListeningForApplicationConfigurationStoredInConsul(); + } finally { + applicationLock.unlock(); + } + } + + private static void startApplication(String[] args) { SpringApplication app = new SpringApplication(VesApplication.class); applicationSettings = new ApplicationSettings(args, CLIUtils::processCmdLine); - init(); - - applicationConfigurationListener = startListeningForApplicationConfigurationStoredInConsul(); - + configUpdater = ConfigUpdaterFactory.create( + applicationSettings.configurationFileLocation(), + Paths.get(applicationSettings.dMaaPConfigurationFileLocation())); + eventPublisher = new DMaaPEventPublisher(getDmaapConfig()); app.setAddCommandLineProperties(true); context = app.run(); } public static void restartApplication() { Thread thread = new Thread(() -> { - context.close(); - applicationSettings.reloadProperties(); - applicationConfigurationListener.reload(Duration.ofMinutes(applicationSettings.configurationUpdateFrequency())); - init(); - context = SpringApplication.run(VesApplication.class); + try { + applicationLock.lock(); + reloadApplicationResources(); + reloadSpringContext(); + } finally { + applicationLock.unlock(); + } }); thread.setDaemon(false); thread.start(); } - private static void init() { - configUpdater = ConfigUpdaterFactory.create( - applicationSettings.configurationFileLocation(), + private static void reloadApplicationResources() { + applicationSettings.reload(); + eventPublisher.reload(getDmaapConfig()); + configUpdater.setPaths(applicationSettings.configurationFileLocation(), Paths.get(applicationSettings.dMaaPConfigurationFileLocation())); - eventPublisher = new DMaaPEventPublisher(getDmaapConfig()); + applicationConfigurationListener.reload(Duration.ofMinutes(applicationSettings.configurationUpdateFrequency())); } - private static ApplicationConfigurationListener startListeningForApplicationConfigurationStoredInConsul() { + private static void reloadSpringContext() { + context.close(); + context = SpringApplication.run(VesApplication.class); + } + + private static void startListeningForApplicationConfigurationStoredInConsul() { ConfigurationHandler cbsHandler = new ConfigurationHandler(new CbsClientConfigurationProvider(), configUpdater); ApplicationConfigurationListener applicationConfigProvider = new ApplicationConfigurationListener(Duration.ofMinutes(DEFAULT_CONFIGURATION_FETCH_PERIOD), cbsHandler); ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1); scheduledThreadPoolExecutor.execute(applicationConfigProvider); - - return applicationConfigProvider; + applicationConfigurationListener = applicationConfigProvider; } private static Map<String, PublisherConfig> getDmaapConfig() { |