aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-08-31 07:16:02 +0200
committerGitHub <noreply@github.com>2021-08-31 07:16:02 +0200
commit555280e7bbd524e1e73f28b48378de4cfb9bba51 (patch)
tree2a2023846d689285c5dea081089fbc042fb3b1c6 /configserver
parent87cf9b97a1d9d8637d797364636e00ea1ee19b3c (diff)
parent4e322d3731d4a133f53b28da5548217057b25660 (diff)
Merge pull request #18907 from vespa-engine/hmusum/cleanup-24
File distribution cleanup [run-systemtest]
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionFactory.java19
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionImpl.java11
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionProvider.java60
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileManager.java34
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java18
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java17
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/TenantRepository.java4
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java22
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java1
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionFactory.java10
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionProvider.java16
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileRegistry.java1
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java19
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java1
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java8
19 files changed, 119 insertions, 156 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
index 459d8e51853..6ce74b355a2 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBRegistry.java
@@ -1,4 +1,4 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.filedistribution;
import com.google.common.collect.ImmutableMap;
@@ -35,6 +35,7 @@ public class FileDBRegistry implements FileRegistry {
silenceNonExistingFiles = false;
this.manager = manager;
}
+
public static FileDBRegistry create(AddFileInterface manager, Reader persistedState) {
try (BufferedReader reader = new BufferedReader(persistedState)) {
String ignoredFileSourceHost = reader.readLine();
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionFactory.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionFactory.java
index fd71afedec1..30681add11e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionFactory.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionFactory.java
@@ -3,8 +3,11 @@ package com.yahoo.vespa.config.server.filedistribution;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.application.api.FileRegistry;
+import com.yahoo.config.model.api.FileDistribution;
import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Transport;
+import com.yahoo.vespa.defaults.Defaults;
import java.io.File;
@@ -24,8 +27,20 @@ public class FileDistributionFactory {
this.configserverConfig = configserverConfig;
}
- public FileDistributionProvider createProvider(File applicationPackage) {
- return new FileDistributionProvider(applicationPackage, new FileDistributionImpl(configserverConfig, supervisor));
+ public FileRegistry createFileRegistry(File applicationPackage) {
+ return new FileDBRegistry(createFileManager(applicationPackage));
+ }
+
+ public FileDistribution createFileDistribution() {
+ return new FileDistributionImpl(getFileReferencesDir(), supervisor);
+ }
+
+ public AddFileInterface createFileManager(File applicationDir) {
+ return new ApplicationFileManager(applicationDir, new FileDirectory(getFileReferencesDir()));
+ }
+
+ protected File getFileReferencesDir() {
+ return new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir()));
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionImpl.java
index 2eebbfa4acf..f0afab20177 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionImpl.java
@@ -1,7 +1,6 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.filedistribution;
-import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.FileReference;
import com.yahoo.config.model.api.FileDistribution;
import com.yahoo.jrt.Request;
@@ -10,25 +9,25 @@ import com.yahoo.jrt.Spec;
import com.yahoo.jrt.StringArray;
import com.yahoo.jrt.Supervisor;
import com.yahoo.jrt.Target;
-import java.util.logging.Level;
-import com.yahoo.vespa.defaults.Defaults;
import java.io.File;
import java.util.Set;
+import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author baldersheim
*/
public class FileDistributionImpl implements FileDistribution, RequestWaiter {
+
private final static Logger log = Logger.getLogger(FileDistributionImpl.class.getName());
private final static double rpcTimeout = 1.0;
private final Supervisor supervisor;
private final File fileReferencesDir;
- public FileDistributionImpl(ConfigserverConfig configserverConfig, Supervisor supervisor) {
- this.fileReferencesDir = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir()));
+ public FileDistributionImpl(File fileReferencesDir, Supervisor supervisor) {
+ this.fileReferencesDir = fileReferencesDir;
this.supervisor = supervisor;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionProvider.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionProvider.java
deleted file mode 100644
index 914d4f48571..00000000000
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDistributionProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// 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.filedistribution;
-
-import com.yahoo.config.model.api.FileDistribution;
-import com.yahoo.config.application.api.FileRegistry;
-
-import java.io.File;
-import java.io.Reader;
-
-/**
- * Provides file distribution registry and invoker.
- *
- * @author Ulf Lilleengen
- */
-public class FileDistributionProvider {
-
- private final FileRegistry fileRegistry;
- private final FileDistribution fileDistribution;
- private final AddFileInterface fileManager;
-
- public FileDistributionProvider(File applicationDir, FileDistribution fileDistribution) {
- this(new ApplicationFileManager(applicationDir, new FileDirectory(fileDistribution.getFileReferencesDir())), fileDistribution);
- ensureDirExists(fileDistribution.getFileReferencesDir());
- }
-
- FileDistributionProvider(FileRegistry fileRegistry, FileDistribution fileDistribution) {
- this(null, fileRegistry, fileDistribution);
- }
-
- private FileDistributionProvider(AddFileInterface fileManager, FileDistribution fileDistribution) {
- this(fileManager, new FileDBRegistry(fileManager), fileDistribution);
- }
-
- private FileDistributionProvider(AddFileInterface fileManager, FileRegistry fileRegistry, FileDistribution fileDistribution) {
- this.fileManager = fileManager;
- this.fileRegistry = fileRegistry;
- this.fileDistribution = fileDistribution;
- }
-
- public FileRegistry getFileRegistry() {
- return fileRegistry;
- }
-
- public FileDistribution getFileDistribution() {
- return fileDistribution;
- }
-
- public FileRegistry createPregeneratedFileRegistry(Reader persistedState) {
- return FileDBRegistry.create(fileManager, persistedState);
- }
-
- private static void ensureDirExists(File dir) {
- if (!dir.exists()) {
- boolean success = dir.mkdirs();
- if (!success)
- throw new RuntimeException("Could not create directory " + dir.getPath());
- }
- }
-
-}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileManager.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileManager.java
new file mode 100644
index 00000000000..da436505105
--- /dev/null
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileManager.java
@@ -0,0 +1,34 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.config.server.filedistribution;
+
+import com.yahoo.config.FileReference;
+
+import java.io.File;
+import java.nio.ByteBuffer;
+
+/**
+ * @author hmusum
+ */
+public class MockFileManager implements AddFileInterface {
+
+ @Override
+ public FileReference addUri(String uri, String relativePath) {
+ return null;
+ }
+
+ @Override
+ public FileReference addFile(String relativePath) {
+ return null;
+ }
+
+ @Override
+ public FileReference addFile(File file) {
+ return null;
+ }
+
+ @Override
+ public FileReference addBlob(ByteBuffer blob, String relativePath) {
+ return null;
+ }
+
+}
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 86eee9e1623..e5ef6dd38c7 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
@@ -5,6 +5,7 @@ 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.application.api.FileRegistry;
import com.yahoo.config.model.api.ConfigChangeAction;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.api.HostInfo;
@@ -26,7 +27,6 @@ import com.yahoo.vespa.config.server.application.ApplicationCuratorDatabase;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.application.PermanentApplicationPackage;
import com.yahoo.vespa.config.server.deploy.ModelContextImpl;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
import com.yahoo.vespa.config.server.host.HostValidator;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
import com.yahoo.vespa.config.server.session.PrepareParams;
@@ -53,7 +53,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
private final ConfigDefinitionRepo configDefinitionRepo;
private final HostValidator<ApplicationId> hostValidator;
private final PrepareParams params;
- private final FileDistributionProvider fileDistributionProvider;
+ private final FileRegistry fileRegistry;
private final Optional<ApplicationSet> currentActiveApplicationSet;
private final ModelContext.Properties properties;
private final Curator curator;
@@ -61,7 +61,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
public PreparedModelsBuilder(ModelFactoryRegistry modelFactoryRegistry,
PermanentApplicationPackage permanentApplicationPackage,
ConfigDefinitionRepo configDefinitionRepo,
- FileDistributionProvider fileDistributionProvider,
+ FileRegistry fileRegistry,
HostProvisionerProvider hostProvisionerProvider,
Curator curator,
HostValidator<ApplicationId> hostValidator,
@@ -73,7 +73,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
super(modelFactoryRegistry, configserverConfig, properties.zone(), hostProvisionerProvider, deployLogger);
this.permanentApplicationPackage = permanentApplicationPackage;
this.configDefinitionRepo = configDefinitionRepo;
- this.fileDistributionProvider = fileDistributionProvider;
+ this.fileRegistry = fileRegistry;
this.hostValidator = hostValidator;
this.curator = curator;
this.params = params;
@@ -99,7 +99,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
permanentApplicationPackage.applicationPackage(),
deployLogger(),
configDefinitionRepo,
- fileDistributionProvider.getFileRegistry(),
+ fileRegistry,
new ApplicationCuratorDatabase(applicationId.tenant(), curator).readReindexingStatus(applicationId),
createHostProvisioner(applicationPackage, provisioned),
provisioned,
@@ -110,7 +110,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
wantedNodeVespaVersion);
ModelCreateResult result = createAndValidateModel(modelFactory, applicationId, modelVersion, modelContext);
- return new PreparedModelResult(modelVersion, result.getModel(), fileDistributionProvider, result.getConfigChangeActions());
+ return new PreparedModelResult(modelVersion, result.getModel(), fileRegistry, result.getConfigChangeActions());
}
private ModelCreateResult createAndValidateModel(ModelFactory modelFactory, ApplicationId applicationId, Version modelVersion, ModelContext modelContext) {
@@ -185,16 +185,16 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
public final Version version;
public final Model model;
- public final FileDistributionProvider fileDistributionProvider;
+ public final FileRegistry fileRegistry;
public final List<ConfigChangeAction> actions;
public PreparedModelResult(Version version,
Model model,
- FileDistributionProvider fileDistributionProvider,
+ FileRegistry fileRegistry,
List<ConfigChangeAction> actions) {
this.version = version;
this.model = model;
- this.fileDistributionProvider = fileDistributionProvider;
+ this.fileRegistry = fileRegistry;
this.actions = actions;
}
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 14dddf458cd..4c148e6e580 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
@@ -34,10 +34,8 @@ import com.yahoo.vespa.config.server.configchange.ConfigChangeActions;
import com.yahoo.vespa.config.server.deploy.ModelContextImpl;
import com.yahoo.vespa.config.server.deploy.ZooKeeperDeployer;
import com.yahoo.vespa.config.server.filedistribution.FileDistributionFactory;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
import com.yahoo.vespa.config.server.host.HostValidator;
import com.yahoo.vespa.config.server.http.InvalidApplicationException;
-import com.yahoo.vespa.config.server.http.UnknownVespaVersionException;
import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry;
import com.yahoo.vespa.config.server.modelfactory.PreparedModelsBuilder;
import com.yahoo.vespa.config.server.provision.HostProvisionerProvider;
@@ -104,10 +102,6 @@ public class SessionPreparer {
this.flagSource = flagSource;
}
- public FileDistributionFactory getFileDistributionFactory() {
- return fileDistributionFactory;
- }
-
/**
* Prepares a session (validates, builds model, writes to zookeeper and distributes files)
*
@@ -168,7 +162,7 @@ public class SessionPreparer {
private PrepareResult prepareResult;
private final PreparedModelsBuilder preparedModelsBuilder;
- private final FileDistributionProvider fileDistributionProvider;
+ private final FileRegistry fileRegistry;
Preparation(HostValidator<ApplicationId> hostValidator, DeployLogger logger, PrepareParams params,
Optional<ApplicationSet> currentActiveApplicationSet, Path tenantPath,
@@ -203,11 +197,11 @@ public class SessionPreparer {
params.tenantSecretStores(),
secretStore,
params.operatorCertificates());
- this.fileDistributionProvider = fileDistributionFactory.createProvider(serverDbSessionDir);
+ this.fileRegistry = fileDistributionFactory.createFileRegistry(serverDbSessionDir);
this.preparedModelsBuilder = new PreparedModelsBuilder(modelFactoryRegistry,
permanentApplicationPackage,
configDefinitionRepo,
- fileDistributionProvider,
+ fileRegistry,
hostProvisionerProvider,
curator,
hostValidator,
@@ -228,9 +222,8 @@ public class SessionPreparer {
}
Optional<FileReference> distributedApplicationPackage() {
- FileRegistry fileRegistry = fileDistributionProvider.getFileRegistry();
FileReference fileReference = fileRegistry.addApplicationPackage();
- FileDistribution fileDistribution = fileDistributionProvider.getFileDistribution();
+ FileDistribution fileDistribution = fileDistributionFactory.createFileDistribution();
log.log(Level.FINE, () -> "Distribute application package for " + applicationId + " (" + fileReference + ") to other config servers");
properties.configServerSpecs().stream()
.filter(spec -> ! spec.getHostName().equals(HostName.getLocalhost()))
@@ -355,7 +348,7 @@ public class SessionPreparer {
public Map<Version, FileRegistry> getFileRegistries() {
return results.stream()
.collect(Collectors.toMap((prepareResult -> prepareResult.version),
- (prepareResult -> prepareResult.fileDistributionProvider.getFileRegistry())));
+ (prepareResult -> prepareResult.fileRegistry)));
}
/**
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 398695a5d6e..ff9820ffb0c 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
@@ -784,9 +784,12 @@ public class SessionRepository {
}
private SessionZooKeeperClient createSessionZooKeeperClient(long sessionId) {
- String serverId = configserverConfig.serverId();
- return new SessionZooKeeperClient(curator, tenantName, sessionId, serverId,
- fileDistributionFactory.createProvider(getSessionAppDir(sessionId)), maxNodeSize);
+ return new SessionZooKeeperClient(curator,
+ tenantName,
+ sessionId,
+ configserverConfig.serverId(),
+ fileDistributionFactory.createFileManager(getSessionAppDir(sessionId)),
+ maxNodeSize);
}
private File getAndValidateExistingSessionAppDir(long sessionId) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
index 2d2712b3002..7cbc07bb5c2 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
@@ -21,7 +21,8 @@ import com.yahoo.transaction.Transaction;
import com.yahoo.vespa.config.server.UserConfigDefinitionRepo;
import com.yahoo.vespa.config.server.deploy.ZooKeeperClient;
import com.yahoo.vespa.config.server.deploy.ZooKeeperDeployer;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
+import com.yahoo.vespa.config.server.filedistribution.AddFileInterface;
+import com.yahoo.vespa.config.server.filedistribution.MockFileManager;
import com.yahoo.vespa.config.server.tenant.OperatorCertificateSerializer;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.server.tenant.TenantSecretStoreSerializer;
@@ -69,20 +70,21 @@ public class SessionZooKeeperClient {
private final Path sessionStatusPath;
private final String serverId; // hostname
private final int maxNodeSize;
- private final FileDistributionProvider fileDistributionProvider;
+ private final AddFileInterface fileManager;
- public SessionZooKeeperClient(Curator curator, TenantName tenantName, long sessionId, String serverId, FileDistributionProvider fileDistributionProvider, int maxNodeSize) {
+ public SessionZooKeeperClient(Curator curator, TenantName tenantName, long sessionId, String serverId, AddFileInterface fileManager, int maxNodeSize) {
this.curator = curator;
this.tenantName = tenantName;
this.sessionPath = getSessionPath(tenantName, sessionId);
this.serverId = serverId;
this.sessionStatusPath = sessionPath.append(ZKApplication.SESSIONSTATE_ZK_SUBPATH);
this.maxNodeSize = maxNodeSize;
- this.fileDistributionProvider = fileDistributionProvider;
+ this.fileManager = fileManager;
}
- public SessionZooKeeperClient(Curator curator, TenantName tenantName, long sessionId, FileDistributionProvider fileDistributionProvider, String serverId) {
- this(curator, tenantName, sessionId, serverId, fileDistributionProvider, 10 * 1024 * 1024);
+ // For testing only
+ public SessionZooKeeperClient(Curator curator, TenantName tenantName, long sessionId, String serverId) {
+ this(curator, tenantName, sessionId, serverId, new MockFileManager(), 10 * 1024 * 1024);
}
public void writeStatus(Session.Status sessionStatus) {
@@ -141,7 +143,7 @@ public class SessionZooKeeperClient {
}
public ApplicationPackage loadApplicationPackage() {
- return new ZKApplicationPackage(fileDistributionProvider, curator, sessionPath, maxNodeSize);
+ return new ZKApplicationPackage(fileManager, curator, sessionPath, maxNodeSize);
}
public ConfigDefinitionRepo getUserConfigDefinitions() {
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 3b16e9aa6c1..d62e13e9ea9 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
@@ -565,10 +565,6 @@ public class TenantRepository {
return ImmutableSet.copyOf(tenants.values());
}
- public FileDistributionFactory getFileDistributionFactory() {
- return fileDistributionFactory;
- }
-
/**
* Gets zookeeper path for tenant data
*
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java
index 38bed8ee05d..25c4f024476 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackage.java
@@ -19,7 +19,8 @@ import com.yahoo.path.Path;
import com.yahoo.vespa.config.ConfigDefinition;
import com.yahoo.vespa.config.ConfigDefinitionBuilder;
import com.yahoo.vespa.config.ConfigDefinitionKey;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
+import com.yahoo.vespa.config.server.filedistribution.AddFileInterface;
+import com.yahoo.vespa.config.server.filedistribution.FileDBRegistry;
import com.yahoo.vespa.config.util.ConfigUtils;
import com.yahoo.vespa.curator.Curator;
@@ -54,17 +55,17 @@ public class ZKApplicationPackage implements ApplicationPackage {
public static final String allocatedHostsNode = "allocatedHosts";
private final ApplicationMetaData metaData;
- public ZKApplicationPackage(FileDistributionProvider fileDistributionProvider, Curator curator, Path sessionPath, int maxNodeSize) {
+ public ZKApplicationPackage(AddFileInterface fileManager, Curator curator, Path sessionPath, int maxNodeSize) {
verifyAppPath(curator, sessionPath);
zkApplication = new ZKApplication(curator, sessionPath, maxNodeSize);
metaData = readMetaDataFromLiveApp(zkApplication);
- importFileRegistries(fileDistributionProvider);
+ importFileRegistries(fileManager);
allocatedHosts = importAllocatedHosts();
}
// For testing
- ZKApplicationPackage(FileDistributionProvider fileDistributionProvider, Curator curator, Path sessionPath) {
- this(fileDistributionProvider, curator, sessionPath, 10 * 1024 * 1024);
+ ZKApplicationPackage(AddFileInterface fileManager, Curator curator, Path sessionPath) {
+ this(fileManager, curator, sessionPath, 10 * 1024 * 1024);
}
private Optional<AllocatedHosts> importAllocatedHosts() {
@@ -85,17 +86,16 @@ public class ZKApplicationPackage implements ApplicationPackage {
}
}
- private void importFileRegistries(FileDistributionProvider fileDistributionProvider) {
+ private void importFileRegistries(AddFileInterface fileManager) {
List<String> perVersionFileRegistryNodes = zkApplication.getChildren(Path.fromString(fileRegistryNode));
perVersionFileRegistryNodes
- .forEach(version ->
- fileRegistryMap.put(Version.fromString(version),
- importFileRegistry(fileDistributionProvider, Joiner.on("/").join(fileRegistryNode, version))));
+ .forEach(version -> fileRegistryMap.put(Version.fromString(version),
+ importFileRegistry(fileManager, Joiner.on("/").join(fileRegistryNode, version))));
}
- private FileRegistry importFileRegistry(FileDistributionProvider fileDistributionProvider, String fileRegistryNode) {
+ private FileRegistry importFileRegistry(AddFileInterface fileManager, String fileRegistryNode) {
try {
- return fileDistributionProvider.createPregeneratedFileRegistry(zkApplication.getDataReader(Path.fromString(fileRegistryNode)));
+ return FileDBRegistry.create(fileManager, zkApplication.getDataReader(Path.fromString(fileRegistryNode)));
} catch (Exception e) {
throw new RuntimeException("Could not determine which files to distribute", e);
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
index 07a514f60b5..d81bf6fada3 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ApplicationRepositoryTest.java
@@ -472,7 +472,6 @@ public class ApplicationRepositoryTest {
new SessionZooKeeperClient(curator,
tenantName,
sessionId,
- tenantRepository.getFileDistributionFactory().createProvider(testApp),
ConfigUtils.getCanonicalHostName()));
sessionRepository.addLocalSession(localSession2);
assertEquals(2, sessionRepository.getLocalSessions().size());
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionFactory.java b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionFactory.java
index af55dc6a90e..8dea796c485 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionFactory.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionFactory.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.config.server.filedistribution;
import com.yahoo.cloud.config.ConfigserverConfig;
+import com.yahoo.config.application.api.FileRegistry;
import java.io.File;
@@ -15,8 +16,13 @@ public class MockFileDistributionFactory extends FileDistributionFactory {
}
@Override
- public com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider createProvider(File applicationFile) {
- return new MockFileDistributionProvider(applicationFile, new File(configserverConfig.fileReferencesDir()));
+ public FileRegistry createFileRegistry(File applicationPackage) {
+ return new MockFileRegistry(applicationPackage, getFileReferencesDir().toPath());
+ }
+
+ @Override
+ public AddFileInterface createFileManager(File applicationDir) {
+ return new MockFileManager();
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionProvider.java b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionProvider.java
deleted file mode 100644
index 70b03fcdd36..00000000000
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileDistributionProvider.java
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.config.server.filedistribution;
-
-import java.io.File;
-
-/**
- * @author hmusum
- */
-public class MockFileDistributionProvider extends FileDistributionProvider {
-
- public MockFileDistributionProvider(File applicationDir, File fileReferencesDir) {
- super(new MockFileRegistry(applicationDir, fileReferencesDir.toPath()),
- new MockFileDistribution(fileReferencesDir));
- }
-
-}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileRegistry.java b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileRegistry.java
index 939838cba10..1c4ba0293f6 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileRegistry.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/MockFileRegistry.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.config.server.filedistribution;
import com.yahoo.config.FileReference;
import com.yahoo.config.application.api.FileRegistry;
-import net.jpountz.xxhash.XXHashFactory;
import java.io.File;
import java.io.IOException;
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 cb3f94100d1..3fedddc93a7 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
@@ -188,7 +188,7 @@ public class SessionPreparerTest {
HostRegistry hostValidator = new HostRegistry();
hostValidator.update(applicationId("foo"), Collections.singletonList("mytesthost"));
preparer.prepare(hostValidator, new BaseDeployLogger(), new PrepareParams.Builder().applicationId(applicationId("default")).build(),
- Optional.empty(), Instant.now(), app.getAppDir(), app, createSessionZooKeeperClient(app.getAppDir()));
+ Optional.empty(), Instant.now(), app.getAppDir(), app, createSessionZooKeeperClient());
}
@Test
@@ -203,7 +203,7 @@ public class SessionPreparerTest {
hostValidator.update(applicationId, Collections.singletonList("mytesthost"));
preparer.prepare(hostValidator, logger, new PrepareParams.Builder().applicationId(applicationId).build(),
Optional.empty(), Instant.now(), app.getAppDir(), app,
- createSessionZooKeeperClient(app.getAppDir()));
+ createSessionZooKeeperClient());
assertEquals(logged.toString(), "");
}
@@ -212,7 +212,7 @@ public class SessionPreparerTest {
PrepareParams params = new PrepareParams.Builder().applicationId(applicationId()).build();
int sessionId = 1;
prepare(testApp, params);
- assertThat(createSessionZooKeeperClient(testApp, sessionId).readApplicationId().get(), is(applicationId()));
+ assertThat(createSessionZooKeeperClient(sessionId).readApplicationId().get(), is(applicationId()));
}
@Test
@@ -345,7 +345,7 @@ public class SessionPreparerTest {
FilesApplicationPackage applicationPackage = getApplicationPackage(app);
return preparer.prepare(new HostRegistry(), getLogger(), params,
Optional.empty(), Instant.now(), applicationPackage.getAppDir(),
- applicationPackage, createSessionZooKeeperClient(applicationPackage.getAppDir(), sessionId));
+ applicationPackage, createSessionZooKeeperClient(sessionId));
}
private FilesApplicationPackage getApplicationPackage(File testFile) throws IOException {
@@ -369,12 +369,15 @@ public class SessionPreparerTest {
ApplicationName.from(applicationName), InstanceName.defaultName());
}
- private SessionZooKeeperClient createSessionZooKeeperClient(File appDir) {
- return createSessionZooKeeperClient(appDir, 1);
+ private SessionZooKeeperClient createSessionZooKeeperClient() {
+ return createSessionZooKeeperClient(1);
}
- private SessionZooKeeperClient createSessionZooKeeperClient(File appDir, long sessionId) {
- return new SessionZooKeeperClient(curator, applicationId().tenant(), sessionId, preparer.getFileDistributionFactory().createProvider(appDir), ConfigUtils.getCanonicalHostName());
+ private SessionZooKeeperClient createSessionZooKeeperClient(long sessionId) {
+ return new SessionZooKeeperClient(curator,
+ applicationId().tenant(),
+ sessionId,
+ ConfigUtils.getCanonicalHostName());
}
private Path sessionPath(long sessionId) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
index 850c24fd3e6..c6105898794 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionRepositoryTest.java
@@ -286,7 +286,6 @@ public class SessionRepositoryTest {
SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator,
tenantName,
sessionId,
- tenantRepository.getFileDistributionFactory().createProvider(new File("dummy")),
ConfigUtils.getCanonicalHostName());
zkc.createNewSession(Instant.now());
if (wait) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
index b8b7abf2d72..57ef55cc890 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
@@ -8,8 +8,6 @@ import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
-import com.yahoo.vespa.config.server.filedistribution.FileDistributionProvider;
-import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionProvider;
import com.yahoo.vespa.config.server.tenant.TenantRepository;
import com.yahoo.vespa.config.util.ConfigUtils;
import com.yahoo.vespa.curator.Curator;
@@ -19,7 +17,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import java.io.File;
import java.time.Instant;
import java.util.List;
import java.util.Optional;
@@ -38,7 +35,6 @@ public class SessionZooKeeperClientTest {
private static final TenantName tenantName = TenantName.defaultName();
private Curator curator;
- private FileDistributionProvider fileDistributionProvider;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@@ -47,7 +43,6 @@ public class SessionZooKeeperClientTest {
public void setup() {
curator = new MockCurator();
curator.create(sessionsPath());
- fileDistributionProvider = new MockFileDistributionProvider(new File("appdir"), new File("refdir"));
}
@Test
@@ -176,7 +171,6 @@ public class SessionZooKeeperClientTest {
SessionZooKeeperClient zkc = new SessionZooKeeperClient(curator,
tenantName,
sessionId,
- fileDistributionProvider,
ConfigUtils.getCanonicalHostName());
zkc.createNewSession(Instant.now());
return zkc;
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
index fc365016450..b5c28fc4fe6 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
@@ -14,8 +14,7 @@ import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.io.IOUtils;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
-import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionFactory;
-import com.yahoo.vespa.config.server.filedistribution.MockFileDistributionProvider;
+import com.yahoo.vespa.config.server.filedistribution.MockFileManager;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
import org.junit.Before;
@@ -36,10 +35,8 @@ import java.util.regex.Pattern;
import static com.yahoo.config.provision.serialization.AllocatedHostsSerializer.toJson;
import static com.yahoo.vespa.config.server.zookeeper.ZKApplication.META_ZK_PATH;
import static com.yahoo.vespa.config.server.zookeeper.ZKApplication.USERAPP_ZK_SUBPATH;
-import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class ZKApplicationPackageTest {
@@ -77,8 +74,7 @@ public class ZKApplicationPackageTest {
@Test
public void testBasicZKFeed() throws IOException {
feed(curator, new File(APP));
- MockFileDistributionProvider fileDistributionProvider = new MockFileDistributionProvider(new File(APP), new File("references"));
- ZKApplicationPackage zkApp = new ZKApplicationPackage(fileDistributionProvider, curator, Path.fromString("/0"));
+ ZKApplicationPackage zkApp = new ZKApplicationPackage(new MockFileManager(), curator, Path.fromString("/0"));
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getServices())).matches());
assertTrue(Pattern.compile(".*<alias>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getHosts())).matches());
assertTrue(Pattern.compile(".*<slobroks>.*",Pattern.MULTILINE+Pattern.DOTALL).matcher(IOUtils.readAll(zkApp.getFile(Path.fromString("services.xml")).createReader())).matches());