aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorvalerijf <valerijf@yahoo-inc.com>2016-07-18 15:05:37 +0200
committervalerijf <valerijf@yahoo-inc.com>2016-07-18 15:05:37 +0200
commitcc58b19d26d48c6e8f812a24a5bec9be26b2024e (patch)
tree0322f74452a213eb50960e50cb9d972b22790646 /node-admin
parent3847b871b8ccc9c33e521b64b9e6679ece0848ab (diff)
Made MaintenanceSchedulerImpl constructor private to prevent having multiple instances
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java11
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java3
2 files changed, 12 insertions, 2 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java
index 5e9b89c9ca9..4345b591a0b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/maintenance/MaintenanceSchedulerImpl.java
@@ -32,7 +32,16 @@ public class MaintenanceSchedulerImpl extends AbstractComponent implements Runna
private final ScheduledExecutorService service = new ScheduledThreadPoolExecutor(1);
private Queue<String> jobQueue = new LinkedBlockingQueue<>();
- public MaintenanceSchedulerImpl() {
+ private static MaintenanceScheduler maintenanceScheduler = null;
+
+ // Because of the regular job queue, we must have only one instance of this class
+ public static MaintenanceScheduler getInstance() {
+ if (maintenanceScheduler == null) maintenanceScheduler = new MaintenanceSchedulerImpl();
+
+ return maintenanceScheduler;
+ }
+
+ private MaintenanceSchedulerImpl() {
service.scheduleAtFixedRate(this, rate.toMillis(), rate.toMillis(), TimeUnit.MILLISECONDS);
addRegularJob(Maintainer.JOB_DELETE_OLD_APP_DATA,
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
index 2adee07b5b0..b7f8710e85e 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/provider/ComponentsProviderImpl.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.node.admin.provider;
import com.yahoo.vespa.applicationmodel.HostName;
+import com.yahoo.vespa.hosted.node.admin.maintenance.MaintenanceScheduler;
import com.yahoo.vespa.hosted.node.admin.maintenance.MaintenanceSchedulerImpl;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdmin;
import com.yahoo.vespa.hosted.node.admin.nodeadmin.NodeAdminImpl;
@@ -48,7 +49,7 @@ public class ComponentsProviderImpl implements ComponentsProvider {
NodeRepository nodeRepository = new NodeRepositoryImpl(configServerHosts, HARDCODED_NODEREPOSITORY_PORT, baseHostName);
Orchestrator orchestrator = OrchestratorImpl.createOrchestratorFromSettings();
- MaintenanceSchedulerImpl maintenanceScheduler = new MaintenanceSchedulerImpl();
+ MaintenanceScheduler maintenanceScheduler = MaintenanceSchedulerImpl.getInstance();
final Function<HostName, NodeAgent> nodeAgentFactory = (hostName) ->
new NodeAgentImpl(hostName, nodeRepository, orchestrator, new DockerOperations(docker), maintenanceScheduler);