aboutsummaryrefslogtreecommitdiffstats
path: root/configserver/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-09-09 16:17:49 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-09-09 16:17:49 +0200
commitb07ee7625027c5756985a482848b8d3fcf55b9bc (patch)
tree306cbda307d182ec4f65b7bc1362bd6b5af644f0 /configserver/src
parent058ccda824fc228c5b004a603deacf808c20779f (diff)
Wire in the executor up to TenantRepository
Diffstat (limited to 'configserver/src')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java1
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java4
9 files changed, 39 insertions, 16 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 414782a43f4..ea0cba511cd 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -6,7 +6,6 @@ import com.yahoo.component.Version;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
-import com.yahoo.config.model.api.ApplicationRoles;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.api.ConfigServerSpec;
import com.yahoo.config.model.api.ContainerEndpoint;
@@ -23,7 +22,6 @@ import com.yahoo.config.provision.AthenzDomain;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
-import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
@@ -41,6 +39,7 @@ import java.security.cert.X509Certificate;
import java.util.List;
import java.util.Optional;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
import java.util.function.ToIntFunction;
import static com.yahoo.vespa.config.server.ConfigServerSpec.fromConfig;
@@ -59,6 +58,7 @@ public class ModelContextImpl implements ModelContext {
private final DeployLogger deployLogger;
private final ConfigDefinitionRepo configDefinitionRepo;
private final FileRegistry fileRegistry;
+ private final ExecutorService executor;
private final HostProvisioner hostProvisioner;
private final Provisioned provisioned;
private final Optional<? extends Reindexing> reindexing;
@@ -85,6 +85,7 @@ public class ModelContextImpl implements ModelContext {
DeployLogger deployLogger,
ConfigDefinitionRepo configDefinitionRepo,
FileRegistry fileRegistry,
+ ExecutorService executor,
Optional<? extends Reindexing> reindexing,
HostProvisioner hostProvisioner,
Provisioned provisioned,
@@ -99,6 +100,7 @@ public class ModelContextImpl implements ModelContext {
this.deployLogger = deployLogger;
this.configDefinitionRepo = configDefinitionRepo;
this.fileRegistry = fileRegistry;
+ this.executor = executor;
this.reindexing = reindexing;
this.hostProvisioner = hostProvisioner;
this.provisioned = provisioned;
@@ -138,6 +140,11 @@ public class ModelContextImpl implements ModelContext {
public FileRegistry getFileRegistry() { return fileRegistry; }
@Override
+ public ExecutorService getExecutor() {
+ return executor;
+ }
+
+ @Override
public Optional<? extends Reindexing> reindexing() { return reindexing; }
@Override
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
index ffb4550caf0..b9728a4dd43 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
@@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableSet;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
import com.yahoo.config.application.api.ApplicationPackage;
-import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.api.Model;
import com.yahoo.config.model.api.ModelContext;
@@ -29,20 +28,17 @@ import com.yahoo.vespa.config.server.monitoring.Metrics;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
import com.yahoo.vespa.config.server.session.SessionZooKeeperClient;
import com.yahoo.vespa.config.server.session.SilentDeployLogger;
-import com.yahoo.vespa.config.server.tenant.ApplicationRolesStore;
import com.yahoo.vespa.config.server.tenant.ContainerEndpointsCache;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateMetadataStore;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateRetriever;
-import com.yahoo.vespa.config.server.tenant.TenantListener;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.flags.FlagSource;
-import java.security.cert.X509Certificate;
import java.util.Comparator;
-import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.concurrent.ExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -65,11 +61,13 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
private final Curator curator;
private final FlagSource flagSource;
private final SecretStore secretStore;
+ private final ExecutorService executor;
public ActivatedModelsBuilder(TenantName tenant,
long applicationGeneration,
SessionZooKeeperClient zkClient,
Optional<ApplicationSet> currentActiveApplicationSet,
+ ExecutorService executor,
Curator curator,
Metrics metrics,
PermanentApplicationPackage permanentApplicationPackage,
@@ -80,11 +78,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
Zone zone,
ModelFactoryRegistry modelFactoryRegistry,
ConfigDefinitionRepo configDefinitionRepo) {
- super(modelFactoryRegistry,
- configserverConfig,
- zone,
- hostProvisionerProvider,
- new SilentDeployLogger());
+ super(modelFactoryRegistry, configserverConfig, zone, hostProvisionerProvider, new SilentDeployLogger());
this.tenant = tenant;
this.applicationGeneration = applicationGeneration;
this.zkClient = zkClient;
@@ -95,6 +89,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
this.curator = curator;
this.flagSource = flagSource;
this.secretStore = secretStore;
+ this.executor = executor;
}
@Override
@@ -116,6 +111,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
new SilentDeployLogger(),
configDefinitionRepo,
getForVersionOrLatest(applicationPackage.getFileRegistries(), modelFactory.version()).orElse(new MockFileRegistry()),
+ executor,
new ApplicationCuratorDatabase(tenant, curator).readReindexingStatus(applicationId),
createStaticProvisioner(applicationPackage, modelContextProperties.applicationId(), provisioned),
provisioned,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
index e5ef6dd38c7..1a8092d36b3 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
@@ -38,6 +38,7 @@ import java.time.Duration;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
+import java.util.concurrent.ExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -57,11 +58,13 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
private final Optional<ApplicationSet> currentActiveApplicationSet;
private final ModelContext.Properties properties;
private final Curator curator;
+ private final ExecutorService executor;
public PreparedModelsBuilder(ModelFactoryRegistry modelFactoryRegistry,
PermanentApplicationPackage permanentApplicationPackage,
ConfigDefinitionRepo configDefinitionRepo,
FileRegistry fileRegistry,
+ ExecutorService executor,
HostProvisionerProvider hostProvisionerProvider,
Curator curator,
HostValidator<ApplicationId> hostValidator,
@@ -79,6 +82,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
this.params = params;
this.currentActiveApplicationSet = currentActiveApplicationSet;
this.properties = properties;
+ this.executor = executor;
}
@Override
@@ -100,6 +104,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
deployLogger(),
configDefinitionRepo,
fileRegistry,
+ executor,
new ApplicationCuratorDatabase(applicationId.tenant(), curator).readReindexingStatus(applicationId),
createHostProvisioner(applicationPackage, provisioned),
provisioned,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
index 4c148e6e580..e58f5985288 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
@@ -9,7 +9,6 @@ import com.yahoo.config.FileReference;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
-import com.yahoo.config.model.api.ApplicationRoles;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.api.ContainerEndpoint;
import com.yahoo.config.model.api.EndpointCertificateMetadata;
@@ -39,7 +38,6 @@ import com.yahoo.vespa.config.server.http.InvalidApplicationException;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.modelfactory.PreparedModelsBuilder;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
-import com.yahoo.vespa.config.server.tenant.ApplicationRolesStore;
import com.yahoo.vespa.config.server.tenant.ContainerEndpointsCache;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateMetadataStore;
import com.yahoo.vespa.config.server.tenant.EndpointCertificateRetriever;
@@ -56,6 +54,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
@@ -79,9 +78,11 @@ public class SessionPreparer {
private final Zone zone;
private final SecretStore secretStore;
private final FlagSource flagSource;
+ private final ExecutorService executor;
public SessionPreparer(ModelFactoryRegistry modelFactoryRegistry,
FileDistributionFactory fileDistributionFactory,
+ ExecutorService executor,
HostProvisionerProvider hostProvisionerProvider,
PermanentApplicationPackage permanentApplicationPackage,
ConfigserverConfig configserverConfig,
@@ -100,8 +101,11 @@ public class SessionPreparer {
this.zone = zone;
this.secretStore = secretStore;
this.flagSource = flagSource;
+ this.executor = executor;
}
+ ExecutorService getExecutor() { return executor; }
+
/**
* Prepares a session (validates, builds model, writes to zookeeper and distributes files)
*
@@ -202,6 +206,7 @@ public class SessionPreparer {
permanentApplicationPackage,
configDefinitionRepo,
fileRegistry,
+ executor,
hostProvisionerProvider,
curator,
hostValidator,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index ff9820ffb0c..43a684c1fba 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -503,6 +503,7 @@ public class SessionRepository {
session.getSessionId(),
sessionZooKeeperClient,
previousApplicationSet,
+ sessionPreparer.getExecutor(),
curator,
metrics,
permanentApplicationPackage,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
index ef219a21221..451fa032f80 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java
@@ -6,6 +6,7 @@ import com.google.inject.Inject;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
+import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.concurrent.Lock;
import com.yahoo.concurrent.Locks;
import com.yahoo.concurrent.StripedExecutor;
@@ -105,6 +106,7 @@ public class TenantRepository {
private final StripedExecutor<TenantName> zkSessionWatcherExecutor;
private final StripedExecutor<TenantName> zkApplicationWatcherExecutor;
private final FileDistributionFactory fileDistributionFactory;
+ private final ExecutorService modelBuilderExecutor;
private final FlagSource flagSource;
private final SecretStore secretStore;
private final HostProvisionerProvider hostProvisionerProvider;
@@ -198,6 +200,8 @@ public class TenantRepository {
this.reloadListener = reloadListener;
this.tenantListener = tenantListener;
this.zookeeperServerConfig = zookeeperServerConfig;
+ // This we should control with a feature flag.
+ this.modelBuilderExecutor = new InThreadExecutorService();
curator.framework().getConnectionStateListenable().addListener(this::stateChanged);
@@ -335,6 +339,7 @@ public class TenantRepository {
PermanentApplicationPackage permanentApplicationPackage = new PermanentApplicationPackage(configserverConfig);
SessionPreparer sessionPreparer = new SessionPreparer(modelFactoryRegistry,
fileDistributionFactory,
+ modelBuilderExecutor,
hostProvisionerProvider,
permanentApplicationPackage,
configserverConfig,
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
index d97f809da6e..9a8b89e55c0 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
+import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.api.ContainerEndpoint;
import com.yahoo.config.model.api.HostProvisioner;
@@ -58,6 +59,7 @@ public class ModelContextImplTest {
new BaseDeployLogger(),
new StaticConfigDefinitionRepo(),
new MockFileRegistry(),
+ new InThreadExecutorService(),
Optional.empty(),
hostProvisioner,
new Provisioned(),
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
index 3fedddc93a7..4ea6fa21a50 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.config.server.session;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.component.Version;
+import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
import com.yahoo.config.model.api.ContainerEndpoint;
@@ -123,6 +124,7 @@ public class SessionPreparerTest {
return new SessionPreparer(
modelFactoryRegistry,
new MockFileDistributionFactory(configserverConfig),
+ new InThreadExecutorService(),
hostProvisionerProvider,
new PermanentApplicationPackage(configserverConfig),
configserverConfig,
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
index 1e1314311a6..83764686e5a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionTest.java
@@ -1,11 +1,11 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.session;
+import com.yahoo.concurrent.InThreadExecutorService;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.path.Path;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.host.HostValidator;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -24,7 +24,7 @@ public class SessionTest {
public static class MockSessionPreparer extends SessionPreparer {
public MockSessionPreparer() {
- super(null, null, null, null, null, null, new MockCurator(), null, null, null);
+ super(null, null, new InThreadExecutorService(), null, null, null, null, new MockCurator(), null, null, null);
}
@Override