diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-08-31 07:16:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-31 07:16:02 +0200 |
commit | 555280e7bbd524e1e73f28b48378de4cfb9bba51 (patch) | |
tree | 2a2023846d689285c5dea081089fbc042fb3b1c6 /configserver | |
parent | 87cf9b97a1d9d8637d797364636e00ea1ee19b3c (diff) | |
parent | 4e322d3731d4a133f53b28da5548217057b25660 (diff) |
Merge pull request #18907 from vespa-engine/hmusum/cleanup-24
File distribution cleanup [run-systemtest]
Diffstat (limited to 'configserver')
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()); |