From e7a51645623ccba1de976529ef784ba76ec14615 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 23 Jan 2023 23:59:40 +0100 Subject: Remove unnecessary class --- .../java/com/yahoo/config/model/test/MockRoot.java | 9 ------ .../java/com/yahoo/vespa/model/VespaModel.java | 25 +++++++++------- .../filedistribution/FileReferencesRepository.java | 31 -------------------- .../FileReferencesRepositoryTestCase.java | 34 ---------------------- 4 files changed, 15 insertions(+), 84 deletions(-) delete mode 100644 config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepository.java delete mode 100644 config-model/src/test/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepositoryTestCase.java diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java index 74a5e92d2ba..5f346f366de 100644 --- a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java +++ b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java @@ -17,9 +17,7 @@ import com.yahoo.vespa.model.HostSystem; import com.yahoo.vespa.model.admin.Admin; import com.yahoo.vespa.model.builder.xml.dom.DomAdminV2Builder; import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer; -import com.yahoo.vespa.model.filedistribution.FileReferencesRepository; import org.w3c.dom.Document; - import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; @@ -35,12 +33,9 @@ import java.util.Set; // TODO: mockRoot instances can probably be replaced by VespaModel.createIncomplete public class MockRoot extends AbstractConfigProducerRoot { - private static final long serialVersionUID = 1L; - private final HostSystem hostSystem; private final DeployState deployState; - private final FileReferencesRepository fileReferencesRepository; private Admin admin; public MockRoot() { @@ -63,7 +58,6 @@ public class MockRoot extends AbstractConfigProducerRoot { super(rootConfigId); hostSystem = new HostSystem(this, "hostsystem", deployState.getProvisioner(), deployState.getDeployLogger(), deployState.isHosted()); this.deployState = deployState; - fileReferencesRepository = new FileReferencesRepository(deployState.getFileRegistry()); } public FileDistributionConfigProducer getFileDistributionConfigProducer() { @@ -89,7 +83,6 @@ public class MockRoot extends AbstractConfigProducerRoot { return builder; } - @SuppressWarnings("unchecked") public T getConfig(Class configClass, String configId) { try { ConfigInstance.Builder builder = getConfig(getBuilder(configClass).getDeclaredConstructor().newInstance(), configId); @@ -116,8 +109,6 @@ public class MockRoot extends AbstractConfigProducerRoot { return deployState; } - public FileReferencesRepository fileReferencesRepository() { return fileReferencesRepository; } - public HostSystem hostSystem() { return hostSystem; } public void addDescendant(String configId, AbstractConfigProducer descendant) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index a13eebf0042..527fb186464 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -11,13 +11,17 @@ import com.yahoo.config.FileReference; import com.yahoo.config.application.api.ApplicationFile; 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.application.api.ValidationId; import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.ConfigModelRegistry; import com.yahoo.config.model.ConfigModelRepo; import com.yahoo.config.model.NullConfigModelRegistry; -import com.yahoo.config.model.api.*; +import com.yahoo.config.model.api.ApplicationClusterInfo; +import com.yahoo.config.model.api.HostInfo; +import com.yahoo.config.model.api.Model; +import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.config.model.producer.AbstractConfigProducerRoot; @@ -47,7 +51,6 @@ import com.yahoo.vespa.model.container.search.QueryProfiles; import com.yahoo.vespa.model.content.Content; import com.yahoo.vespa.model.content.cluster.ContentCluster; import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer; -import com.yahoo.vespa.model.filedistribution.FileReferencesRepository; import com.yahoo.vespa.model.ml.ConvertedModel; import com.yahoo.vespa.model.ml.ModelName; import com.yahoo.vespa.model.ml.OnnxModelInfo; @@ -56,7 +59,6 @@ import com.yahoo.vespa.model.search.DocumentDatabase; import com.yahoo.vespa.model.search.SearchCluster; import com.yahoo.vespa.model.utils.internal.ReflectionUtil; import org.xml.sax.SAXException; - import java.io.IOException; import java.lang.reflect.Constructor; import java.time.Instant; @@ -114,7 +116,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode /** The validation overrides of this. This is never null. */ private final ValidationOverrides validationOverrides; - private final FileReferencesRepository fileReferencesRepository; + private final FileRegistry fileRegistry; private final Provisioned provisioned; @@ -150,12 +152,11 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode this(configModelRegistry, deployState, true); } - private VespaModel(ConfigModelRegistry configModelRegistry, DeployState deployState, boolean complete) - throws IOException, SAXException { + private VespaModel(ConfigModelRegistry configModelRegistry, DeployState deployState, boolean complete) throws IOException { super("vespamodel"); version = deployState.getVespaVersion(); wantedNodeVersion = deployState.getWantedNodeVespaVersion(); - fileReferencesRepository = new FileReferencesRepository(deployState.getFileRegistry()); + fileRegistry = deployState.getFileRegistry(); validationOverrides = deployState.validationOverrides(); applicationPackage = deployState.getApplicationPackage(); provisioned = deployState.provisioned(); @@ -235,7 +236,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode public ApplicationPackage applicationPackage() { return applicationPackage; } /** Creates a mutable model with no services instantiated */ - public static VespaModel createIncomplete(DeployState deployState) throws IOException, SAXException { + public static VespaModel createIncomplete(DeployState deployState) throws IOException { return new VespaModel(new NullConfigModelRegistry(), deployState, false); } @@ -353,7 +354,11 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode .collect(Collectors.toCollection(LinkedHashSet::new)); } - public Set fileReferences() { return fileReferencesRepository.allFileReferences(); } + public Set fileReferences() { + return fileRegistry.export().stream() + .map(e -> e.reference) + .collect(Collectors.toSet()); + } /** Returns this models Vespa instance */ public ApplicationConfigProducerRoot getVespa() { return root; } @@ -477,7 +482,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode * Resolves the given config key into a correctly typed ConfigBuilder * and fills in the config from this model. * - * @return A new config builder with config from this model filled in,. + * @return A new config builder with config from this model filled in */ private ConfigInstance.Builder resolveToBuilder(ConfigKey key) { ConfigInstance.Builder builder = createBuilder(new ConfigDefinitionKey(key)); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepository.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepository.java deleted file mode 100644 index 3962aa3d612..00000000000 --- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepository.java +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.filedistribution; - -import com.yahoo.config.FileReference; -import com.yahoo.config.application.api.FileRegistry; - -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Keeps track of what files to send with file distribution - * - * @author Tony Vaagenes - * @author hmusum - */ -public class FileReferencesRepository { - - private final FileRegistry fileRegistry; - public FileReferencesRepository(FileRegistry fileRegistry) { - this.fileRegistry = fileRegistry; - } - - public Set allFileReferences() { - return fileRegistry.export() - .stream() - .map(e -> e.reference) - .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); - } - -} diff --git a/config-model/src/test/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepositoryTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepositoryTestCase.java deleted file mode 100644 index 628e87e24c5..00000000000 --- a/config-model/src/test/java/com/yahoo/vespa/model/filedistribution/FileReferencesRepositoryTestCase.java +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.model.filedistribution; - -import com.yahoo.config.FileReference; -import com.yahoo.config.application.api.FileRegistry; -import com.yahoo.config.model.application.provider.MockFileRegistry; -import org.junit.jupiter.api.Test; - -import java.util.Set; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -/** - * @author bratseth - */ -public class FileReferencesRepositoryTestCase { - - @Test - void fileDistributor() { - FileRegistry fileRegistry = new MockFileRegistry(); - FileReferencesRepository fileReferencesRepository = new FileReferencesRepository(fileRegistry); - - String file1 = "component/path1"; - String file2 = "component/path2"; - FileReference ref1 = fileRegistry.addFile(file1); - FileReference ref2 = fileRegistry.addFile(file2); - - assertEquals(Set.of(ref1, ref2), fileReferencesRepository.allFileReferences()); - assertNotNull(ref1); - assertNotNull(ref2); - } - -} -- cgit v1.2.3 From 58d182f429338805cfad65528445e43c2f25c2aa Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 24 Jan 2023 08:21:25 +0100 Subject: Add convenience method for getting all file references --- .../main/java/com/yahoo/config/application/api/FileRegistry.java | 7 +++++++ config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java | 6 +----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/FileRegistry.java b/config-model-api/src/main/java/com/yahoo/config/application/api/FileRegistry.java index c2cde72449b..69836ab06c3 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/FileRegistry.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/FileRegistry.java @@ -5,6 +5,8 @@ import com.yahoo.config.FileReference; import java.nio.ByteBuffer; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * @author Tony Vaagenes @@ -16,6 +18,11 @@ public interface FileRegistry { FileReference addBlob(String name, ByteBuffer blob); default FileReference addApplicationPackage() { return addFile(""); } List export(); + default Set asSet() { + return export().stream() + .map(e -> e.reference) + .collect(Collectors.toSet()); + } class Entry { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index 527fb186464..69aacb75fb9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -354,11 +354,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Mode .collect(Collectors.toCollection(LinkedHashSet::new)); } - public Set fileReferences() { - return fileRegistry.export().stream() - .map(e -> e.reference) - .collect(Collectors.toSet()); - } + public Set fileReferences() { return fileRegistry.asSet(); } /** Returns this models Vespa instance */ public ApplicationConfigProducerRoot getVespa() { return root; } -- cgit v1.2.3 From 19a63e3ed5e14a329aa8c7c8e240c68d2263e56c Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 24 Jan 2023 08:24:32 +0100 Subject: Synchronize when adding blob as well --- .../yahoo/vespa/config/server/filedistribution/FileDBRegistry.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 9d915650c73..6ea05d951f7 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 @@ -8,7 +8,6 @@ import com.yahoo.net.HostName; import com.yahoo.path.Path; import com.yahoo.text.Utf8; import net.jpountz.xxhash.XXHashFactory; - import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; @@ -105,7 +104,7 @@ public class FileDBRegistry implements FileRegistry { } @Override - public FileReference addBlob(String blobName, ByteBuffer blob) { + public synchronized FileReference addBlob(String blobName, ByteBuffer blob) { String relativePath = blobToRelativeFile(blobName); synchronized (this) { Optional cachedReference = Optional.ofNullable(fileReferenceCache.get(blobName)); @@ -126,6 +125,7 @@ public class FileDBRegistry implements FileRegistry { return entries; } + // Used for testing only synchronized Map getMap() { return ImmutableMap.copyOf(fileReferenceCache); } -- cgit v1.2.3 From acd96733ff8731a54043665f348198ed1282ecf5 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 25 Jan 2023 12:30:07 +0100 Subject: Don't start ApplicationPackageMaintainer if there is only one server --- .../server/filedistribution/FileDBRegistry.java | 3 +++ .../server/filedistribution/FileDirectory.java | 4 ++++ .../maintenance/ApplicationPackageMaintainer.java | 24 ++++++++-------------- .../maintenance/ConfigServerMaintenance.java | 7 ++++++- .../config/server/ConfigServerBootstrapTest.java | 6 +++++- 5 files changed, 26 insertions(+), 18 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 6ea05d951f7..e3d36d23489 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 @@ -8,6 +8,7 @@ import com.yahoo.net.HostName; import com.yahoo.path.Path; import com.yahoo.text.Utf8; import net.jpountz.xxhash.XXHashFactory; + import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; @@ -21,6 +22,8 @@ import java.util.Optional; import java.util.regex.Pattern; /** + * File registry for one application package + * * @author Tony Vaagenes */ public class FileDBRegistry implements FileRegistry { diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDirectory.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDirectory.java index a999498577c..85b30f4d303 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDirectory.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDirectory.java @@ -30,6 +30,10 @@ import java.util.logging.Logger; import static com.yahoo.yolean.Exceptions.uncheck; +/** + * Global file directory, holding files for file distribution for all deployed applications. + * + */ public class FileDirectory extends AbstractComponent { private static final Logger log = Logger.getLogger(FileDirectory.class.getName()); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java index df92dbac70f..346a462fe3e 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.config.server.maintenance; -import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.FileReference; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.subscription.ConfigSourceSet; @@ -28,13 +27,13 @@ import java.util.logging.Logger; import java.util.stream.Collectors; import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.fileReferenceExistsOnDisk; -import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.getOtherConfigServersInCluster; import static com.yahoo.vespa.filedistribution.FileReferenceData.CompressionType; /** * Verifies that all active sessions has an application package on local disk. * If not, the package is downloaded with file distribution. This can happen e.g. - * if a config server is down when the application is deployed. + * if a config server is down when the application is deployed. This maintainer should only be run + * if there is more than 1 config server * * @author gjoranv */ @@ -44,19 +43,18 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { private final ApplicationRepository applicationRepository; private final File downloadDirectory; - private final ConfigserverConfig configserverConfig; private final Supervisor supervisor = new Supervisor(new Transport("filedistribution-pool")).setDropEmptyBuffers(true); private final FileDownloader fileDownloader; ApplicationPackageMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval, - FlagSource flagSource) { + FlagSource flagSource, + List otherConfigServersInCluster) { super(applicationRepository, curator, flagSource, applicationRepository.clock(), interval, false); this.applicationRepository = applicationRepository; - this.configserverConfig = applicationRepository.configserverConfig(); - this.downloadDirectory = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir())); - this.fileDownloader = createFileDownloader(configserverConfig, + this.downloadDirectory = new File(Defaults.getDefaults().underVespaHome(applicationRepository.configserverConfig().fileReferencesDir())); + this.fileDownloader = createFileDownloader(otherConfigServersInCluster, downloadDirectory, supervisor, Flags.FILE_DISTRIBUTION_ACCEPTED_COMPRESSION_TYPES.bindTo(flagSource).value()); @@ -64,8 +62,6 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { @Override protected double maintain() { - if (getOtherConfigServersInCluster(configserverConfig).isEmpty()) return 1.0; // Nothing to do - int attempts = 0; int failures = 0; @@ -102,16 +98,12 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { return asSuccessFactor(attempts, failures); } - private static FileDownloader createFileDownloader(ConfigserverConfig configserverConfig, + private static FileDownloader createFileDownloader(List otherConfigServersInCluster, File downloadDirectory, Supervisor supervisor, List flagValues) { - List otherConfigServersInCluster = getOtherConfigServersInCluster(configserverConfig); ConfigSourceSet configSourceSet = new ConfigSourceSet(otherConfigServersInCluster); - - ConnectionPool connectionPool = (otherConfigServersInCluster.isEmpty()) - ? FileDownloader.emptyConnectionPool() - : new FileDistributionConnectionPool(configSourceSet, supervisor); + ConnectionPool connectionPool = new FileDistributionConnectionPool(configSourceSet, supervisor); Set acceptedCompressionTypes = flagValues.stream() .map(CompressionType::valueOf) .collect(Collectors.toSet()); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java index 7dda3d4e462..8d5e1fe9dea 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java @@ -12,6 +12,8 @@ import java.time.Duration; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.getOtherConfigServersInCluster; + /** * Maintenance jobs of the config server. * Each maintenance job is a singleton instance of its implementing class, created and owned by this, @@ -39,7 +41,10 @@ public class ConfigServerMaintenance { } public void startBeforeBootstrap() { - maintainers.add(new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofSeconds(30), flagSource)); + List otherConfigServersInCluster = getOtherConfigServersInCluster(applicationRepository.configserverConfig()); + if ( ! otherConfigServersInCluster.isEmpty()) + maintainers.add(new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofSeconds(30), + flagSource, otherConfigServersInCluster)); maintainers.add(new TenantsMaintainer(applicationRepository, curator, flagSource, interval, Clock.systemUTC())); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java index fd2b7fe8a77..2351706659a 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java @@ -214,6 +214,9 @@ public class ConfigServerBootstrapTest { } private static ConfigserverConfig createConfigserverConfig(TemporaryFolder temporaryFolder, boolean hosted) throws IOException { + var servers = List.of(new ConfigserverConfig.Zookeeperserver.Builder().hostname("foo").port(1), + new ConfigserverConfig.Zookeeperserver.Builder().hostname("bar").port(1), + new ConfigserverConfig.Zookeeperserver.Builder().hostname("baz").port(1)); return new ConfigserverConfig(new ConfigserverConfig.Builder() .configServerDBDir(temporaryFolder.newFolder("serverdb").getAbsolutePath()) .configDefinitionsDir(temporaryFolder.newFolder("configdefinitions").getAbsolutePath()) @@ -221,7 +224,8 @@ public class ConfigServerBootstrapTest { .hostedVespa(hosted) .multitenant(hosted) .maxDurationOfBootstrap(0) /* seconds, 0 => it will not retry deployment if bootstrap fails */ - .sleepTimeWhenRedeployingFails(0)); /* seconds */ + .sleepTimeWhenRedeployingFails(0) /* seconds */ + .zookeeperserver(servers)); } private List createHosts(String vespaVersion) { -- cgit v1.2.3 From 022d67d8dcd78f5d31aa5f31928f1eec6893a3d7 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 25 Jan 2023 15:38:12 +0100 Subject: Remove unnecessary synchronization --- .../config/server/filedistribution/FileDBRegistry.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 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 e3d36d23489..48f931db053 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 @@ -109,14 +109,12 @@ public class FileDBRegistry implements FileRegistry { @Override public synchronized FileReference addBlob(String blobName, ByteBuffer blob) { String relativePath = blobToRelativeFile(blobName); - synchronized (this) { - Optional cachedReference = Optional.ofNullable(fileReferenceCache.get(blobName)); - return cachedReference.orElseGet(() -> { - FileReference newRef = manager.addBlob(blob, Path.fromString(relativePath)); - fileReferenceCache.put(blobName, newRef); - return newRef; - }); - } + Optional cachedReference = Optional.ofNullable(fileReferenceCache.get(blobName)); + return cachedReference.orElseGet(() -> { + FileReference newRef = manager.addBlob(blob, Path.fromString(relativePath)); + fileReferenceCache.put(blobName, newRef); + return newRef; + }); } @Override -- cgit v1.2.3