aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/dcae/VesApplication.java
diff options
context:
space:
mode:
authorBogumil Zebek <bogumil.zebek@nokia.com>2020-11-05 15:14:02 +0100
committerBogumil Zebek <bogumil.zebek@nokia.com>2020-11-09 08:00:11 +0000
commitb937b203b9e3276041428c7090c41a58583bc3f6 (patch)
treeae10967a17ef3e2e6910760e9e9203b4d5ad4425 /src/main/java/org/onap/dcae/VesApplication.java
parente19fc5ef16b5daf6cd383b2092411fc355bb0192 (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.java51
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() {