From 4dc5452942aac011ac45437dba97873c05c06a6c Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 15 Nov 2021 09:23:35 +0100 Subject: Improve file download logging a bit --- .../maintenance/ApplicationPackageMaintainer.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'configserver') 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 d4d4a7fa7d3..5702a6b78cf 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 @@ -61,25 +61,24 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { try (var fileDownloader = createFileDownloader()) { for (var applicationId : applicationRepository.listApplications()) { - log.fine(() -> "Verifying application package for " + applicationId); + log.finest(() -> "Verifying application package for " + applicationId); Session session = applicationRepository.getActiveSession(applicationId); if (session == null) continue; // App might be deleted after call to listApplications() or not activated yet (bootstrap phase) - FileReference applicationPackage = session.getApplicationPackageReference(); - long sessionId = session.getSessionId(); - log.fine(() -> "Verifying application package file reference " + applicationPackage + " for session " + sessionId); - - if (applicationPackage != null) { + FileReference appFileReference = session.getApplicationPackageReference(); + if (appFileReference != null) { + long sessionId = session.getSessionId(); attempts++; - if (! fileReferenceExistsOnDisk(downloadDirectory, applicationPackage)) { - log.fine(() -> "Downloading missing application package for application " + applicationId + " (session " + sessionId + ")"); + if (! fileReferenceExistsOnDisk(downloadDirectory, appFileReference)) { + log.fine(() -> "Downloading application package for " + applicationId + " (session " + sessionId + ")"); - FileReferenceDownload download = new FileReferenceDownload(applicationPackage, + FileReferenceDownload download = new FileReferenceDownload(appFileReference, false, this.getClass().getSimpleName()); if (fileDownloader.getFile(download).isEmpty()) { failures++; - log.warning("Failed to download application package for application " + applicationId + " (session " + sessionId + ")"); + log.warning("Failed to download application package (" + appFileReference + ")" + + "for " + applicationId + " (session " + sessionId + ")"); continue; } } -- cgit v1.2.3 From d1a26a18f8843fc916e87de6ae19d96e766747ff Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 15 Nov 2021 10:43:11 +0100 Subject: Log number of active threads --- .../com/yahoo/vespa/config/server/filedistribution/FileServer.java | 3 +++ 1 file changed, 3 insertions(+) (limited to 'configserver') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java index f34beae9c46..6f0f128e360 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java @@ -30,6 +30,7 @@ import java.nio.file.Path; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; import java.util.logging.Level; import java.util.logging.Logger; @@ -153,6 +154,8 @@ public class FileServer { } public void serveFile(String fileReference, boolean downloadFromOtherSourceIfNotFound, Request request, Receiver receiver) { + if (executor instanceof ThreadPoolExecutor) + log.log(Level.FINE, () -> "Active threads is now " + ((ThreadPoolExecutor) executor).getActiveCount()); executor.execute(() -> serveFileInternal(fileReference, downloadFromOtherSourceIfNotFound, request, receiver)); } -- cgit v1.2.3 From 4afb0541b117829f2d9f276c202a2c224e5e3b37 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 15 Nov 2021 12:57:42 +0100 Subject: Log session id when preprocessing application package fails --- .../vespa/config/server/maintenance/ApplicationPackageMaintainer.java | 2 +- .../java/com/yahoo/vespa/config/server/session/SessionPreparer.java | 3 ++- .../com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java | 4 ++++ 3 files changed, 7 insertions(+), 2 deletions(-) (limited to 'configserver') 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 5702a6b78cf..1f30781ff03 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 @@ -78,7 +78,7 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { if (fileDownloader.getFile(download).isEmpty()) { failures++; log.warning("Failed to download application package (" + appFileReference + ")" + - "for " + applicationId + " (session " + sessionId + ")"); + " for " + applicationId + " (session " + sessionId + ")"); continue; } } 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 5a0a9b1d796..ce592c3282a 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 @@ -242,7 +242,8 @@ public class SessionPreparer { try { this.preprocessedApplicationPackage = applicationPackage.preprocess(properties.zone(), logger); } catch (IOException | RuntimeException e) { - throw new IllegalArgumentException("Error preprocessing application package for " + applicationId, e); + throw new IllegalArgumentException("Error preprocessing application package for " + applicationId + + ", session " + sessionZooKeeperClient.sessionId(), e); } checkTimeout("preprocess"); } 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 11b2881bc34..0b34bd95f8e 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 @@ -66,6 +66,7 @@ public class SessionZooKeeperClient { private final Curator curator; private final TenantName tenantName; + private final long sessionId; private final Path sessionPath; private final Path sessionStatusPath; private final String serverId; // hostname @@ -75,6 +76,7 @@ public class SessionZooKeeperClient { public SessionZooKeeperClient(Curator curator, TenantName tenantName, long sessionId, String serverId, AddFileInterface fileManager, int maxNodeSize) { this.curator = curator; this.tenantName = tenantName; + this.sessionId = sessionId; this.sessionPath = getSessionPath(tenantName, sessionId); this.serverId = serverId; this.sessionStatusPath = sessionPath.append(ZKApplication.SESSIONSTATE_ZK_SUBPATH); @@ -106,6 +108,8 @@ public class SessionZooKeeperClient { } } + public long sessionId() { return sessionId; } + public CompletionWaiter createActiveWaiter() { return createCompletionWaiter(ACTIVE_BARRIER); } CompletionWaiter createPrepareWaiter() { return createCompletionWaiter(PREPARE_BARRIER); } -- cgit v1.2.3 From 88936757e42187d2afadcf138deaaa73bbdea755 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Mon, 15 Nov 2021 14:51:36 +0100 Subject: Allow reflective access to sun.security.util --- configserver/src/main/sh/start-configserver | 1 + container-disc/src/main/sh/vespa-start-container-daemon.sh | 1 + standalone-container/src/main/sh/standalone-container.sh | 1 + 3 files changed, 3 insertions(+) (limited to 'configserver') diff --git a/configserver/src/main/sh/start-configserver b/configserver/src/main/sh/start-configserver index 317af4b2fea..efee86be29f 100755 --- a/configserver/src/main/sh/start-configserver +++ b/configserver/src/main/sh/start-configserver @@ -177,6 +177,7 @@ vespa-run-as-vespa-user vespa-runserver -s configserver -r 30 -p $pidfile -- \ --add-opens=java.base/java.nio=ALL-UNNAMED \ --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED \ --add-opens=java.base/sun.security.ssl=ALL-UNNAMED \ + --add-opens=java.base/sun.security.util=ALL-UNNAMED \ -Djava.io.tmpdir=${VESPA_HOME}/tmp \ -Djava.library.path=${VESPA_HOME}/lib64 \ -Djava.awt.headless=true \ diff --git a/container-disc/src/main/sh/vespa-start-container-daemon.sh b/container-disc/src/main/sh/vespa-start-container-daemon.sh index ded38e9f7c9..d465edb3c39 100755 --- a/container-disc/src/main/sh/vespa-start-container-daemon.sh +++ b/container-disc/src/main/sh/vespa-start-container-daemon.sh @@ -271,6 +271,7 @@ exec $numactlcmd $envcmd java \ --add-opens=java.base/java.nio=ALL-UNNAMED \ --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED \ --add-opens=java.base/sun.security.ssl=ALL-UNNAMED \ + --add-opens=java.base/sun.security.util=ALL-UNNAMED \ -Djava.io.tmpdir="${VESPA_HOME}/tmp" \ -Djava.library.path="${VESPA_HOME}/lib64" \ -Djava.awt.headless=true \ diff --git a/standalone-container/src/main/sh/standalone-container.sh b/standalone-container/src/main/sh/standalone-container.sh index 9e888bdfea2..9edea41ac8b 100755 --- a/standalone-container/src/main/sh/standalone-container.sh +++ b/standalone-container/src/main/sh/standalone-container.sh @@ -169,6 +169,7 @@ StartCommand() { --add-opens=java.base/java.nio=ALL-UNNAMED \ --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED \ --add-opens=java.base/sun.security.ssl=ALL-UNNAMED \ + --add-opens=java.base/sun.security.util=ALL-UNNAMED \ -Djava.library.path="$VESPA_HOME/lib64" \ -Djava.awt.headless=true \ -Dsun.rmi.dgc.client.gcInterval=3600000 \ -- cgit v1.2.3 From 672ad4413047c277e06adee1a408f10bbc50b5d6 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 15 Nov 2021 14:52:32 +0100 Subject: Remove unused method RPC method filedistribution.setFileReferencesToDownload is only used between config servers, remove config proxy implementation --- .../filedistribution/FileDistributionRpcServer.java | 17 +---------------- .../server/filedistribution/FileDistributionImpl.java | 4 ++-- 2 files changed, 3 insertions(+), 18 deletions(-) (limited to 'configserver') diff --git a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/filedistribution/FileDistributionRpcServer.java b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/filedistribution/FileDistributionRpcServer.java index 8f9e5edc337..8b9d1f34154 100644 --- a/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/filedistribution/FileDistributionRpcServer.java +++ b/config-proxy/src/main/java/com/yahoo/vespa/config/proxy/filedistribution/FileDistributionRpcServer.java @@ -4,23 +4,20 @@ package com.yahoo.vespa.config.proxy.filedistribution; import com.yahoo.concurrent.DaemonThreadFactory; import com.yahoo.config.FileReference; import com.yahoo.jrt.DoubleArray; -import com.yahoo.jrt.Int32Value; import com.yahoo.jrt.Method; import com.yahoo.jrt.Request; import com.yahoo.jrt.StringArray; import com.yahoo.jrt.StringValue; import com.yahoo.jrt.Supervisor; -import java.util.logging.Level; import com.yahoo.vespa.filedistribution.FileDownloader; -import com.yahoo.vespa.filedistribution.FileReferenceDownload; import java.io.File; -import java.util.Arrays; import java.util.Map; import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -67,10 +64,6 @@ class FileDistributionRpcServer { .methodDesc("download status for file references") .returnDesc(0, "file references", "array of file references") .returnDesc(1, "download status", "percentage downloaded of each file reference in above array")); - supervisor.addMethod(new Method("filedistribution.setFileReferencesToDownload", "S", "i", this::setFileReferencesToDownload) - .methodDesc("set which file references to download") - .paramDesc(0, "file references", "file reference to download") - .returnDesc(0, "ret", "0 if success, 1 otherwise")); } @@ -105,14 +98,6 @@ class FileDistributionRpcServer { req.returnValues().add(new DoubleArray(downloadStatusArray)); } - private void setFileReferencesToDownload(Request req) { - log.log(Level.FINE, () -> "Received method call '" + req.methodName() + "' with parameters : " + req.parameters()); - Arrays.stream(req.parameters().get(0).asStringArray()) - .map(FileReference::new) - .forEach(fileReference -> downloader.downloadIfNeeded(new FileReferenceDownload(fileReference))); - req.returnValues().add(new Int32Value(0)); - } - private void downloadFile(Request req) { FileReference fileReference = new FileReference(req.parameters().get(0).asString()); log.log(Level.FINE, () -> "getFile() called for file reference '" + fileReference.value() + "'"); 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 a49e2ec76bb..605f5924e68 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 @@ -41,8 +41,8 @@ public class FileDistributionImpl implements FileDistribution, RequestWaiter { return fileReferencesDir; } - // Notifies config proxy which file references it should start downloading. It's OK if the call does not succeed, - // as downloading will then start synchronously when a service requests a file reference instead + // Notifies client which file references it should start downloading. It's OK if the call does not succeed, + // as this is just a hint to the client to start downloading. Currently the only client is the config server private void startDownloadingFileReferences(String hostName, int port, Set fileReferences) { Target target = supervisor.connect(new Spec(hostName, port)); Request request = new Request("filedistribution.setFileReferencesToDownload"); -- cgit v1.2.3 From 73b6ca079f9eadf9a1e039d04487b0bfa557fca7 Mon Sep 17 00:00:00 2001 From: Morten Tokle Date: Mon, 15 Nov 2021 15:22:51 +0100 Subject: Include clusterId --- .../model/api/ApplicationClusterEndpoint.java | 24 ++++++++++++++++------ .../container/ApplicationContainerCluster.java | 3 +++ configdefinitions/src/vespa/lb-services.def | 1 + .../config/server/model/LbServicesProducer.java | 3 ++- .../server/model/LbServicesProducerTest.java | 20 +++++++++++++++--- 5 files changed, 41 insertions(+), 10 deletions(-) (limited to 'configserver') diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java index 38a122c4fab..1c45e4ba5dd 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java @@ -26,13 +26,15 @@ public class ApplicationClusterEndpoint { private final RoutingMethod routingMethod; private final int weight; private final List hostNames; + private final String clusterId; - private ApplicationClusterEndpoint(DnsName dnsName, Scope scope, RoutingMethod routingMethod, int weight, List hostNames) { - this.dnsName = dnsName; - this.scope = scope; - this.routingMethod = routingMethod; + private ApplicationClusterEndpoint(DnsName dnsName, Scope scope, RoutingMethod routingMethod, int weight, List hostNames, String clusterId) { + this.dnsName = Objects.requireNonNull(dnsName); + this.scope = Objects.requireNonNull(scope); + this.routingMethod = Objects.requireNonNull(routingMethod); this.weight = weight; - this.hostNames = List.copyOf(hostNames); + this.hostNames = List.copyOf(Objects.requireNonNull(hostNames)); + this.clusterId = Objects.requireNonNull(clusterId); } public DnsName dnsName() { @@ -55,6 +57,10 @@ public class ApplicationClusterEndpoint { return hostNames; } + public String clusterId() { + return clusterId; + } + public static Builder builder() { return new Builder(); } @@ -66,6 +72,7 @@ public class ApplicationClusterEndpoint { private RoutingMethod routingMethod; private int weigth = 1; private List hosts; + private String clusterId; public Builder dnsName(DnsName name) { this.dnsName = name; @@ -102,8 +109,13 @@ public class ApplicationClusterEndpoint { return this; } + public Builder clusterId(String clusterId) { + this.clusterId = clusterId; + return this; + } + public ApplicationClusterEndpoint build() { - return new ApplicationClusterEndpoint(dnsName, scope, routingMethod, weigth, hosts); + return new ApplicationClusterEndpoint(dnsName, scope, routingMethod, weigth, hosts, clusterId); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index a5dc26e19e3..f7e8afc2d94 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -218,6 +218,7 @@ public final class ApplicationContainerCluster extends ContainerCluster e.routingMethod() == sharedLayer4) .map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("mydisc.foo.foo.endpoint1.suffix", "mydisc.foo.foo.endpoint2.suffix")); + assertContainsEndpoint(zoneEndpoints, "mydisc.foo.foo.endpoint1.suffix", "mydisc", zone, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); + assertContainsEndpoint(zoneEndpoints, "mydisc.foo.foo.endpoint2.suffix", "mydisc", zone, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); List globalEndpoints = endpointList.stream().filter(e -> e.scope() == global).collect(Collectors.toList()); assertEquals(2, globalEndpoints.size()); assertThat(globalEndpoints.stream().map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("rotation-1", "rotation-2")); + assertContainsEndpoint(globalEndpoints, "rotation-1", "mydisc", global, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); + assertContainsEndpoint(globalEndpoints, "rotation-2", "mydisc", global, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); List applicationEndpoints = endpointList.stream().filter(e -> e.scope() == application).collect(Collectors.toList()); assertEquals(1, applicationEndpoints.size()); assertThat(applicationEndpoints.stream().map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("app-endpoint")); - + assertContainsEndpoint(applicationEndpoints, "app-endpoint", "mydisc", application, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); } @@ -205,6 +208,17 @@ public class LbServicesProducerTest { .applications("baz:prod:default:custom-t")); } + private void assertContainsEndpoint(List endpoints, String dnsName, String clusterId, Endpoints.Scope.Enum scope, Endpoints.RoutingMethod.Enum routingMethod, int weight, List hosts) { + assertThat(endpoints, hasItem(new Endpoints.Builder() + .dnsName(dnsName) + .clusterId(clusterId) + .scope(scope) + .routingMethod(routingMethod) + .weight(weight) + .hosts(hosts) + .build())); + } + private Map> randomizeApplications(Map> testModel, int seed) { Map> randomizedApplications = new LinkedHashMap<>(); List keys = new ArrayList<>(testModel.keySet()); -- cgit v1.2.3 From 7e39d82e3b71d1957fb40edb6958dee4f2751d24 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 15 Nov 2021 20:04:51 +0100 Subject: Minor formatting changes and rename a method, no functional changes --- .../vespa/config/server/filedistribution/FileServer.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'configserver') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java index 6f0f128e360..cfc7a88568c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java @@ -95,10 +95,6 @@ public class FileServer { return hasFile(new FileReference(fileReference)); } - FileDirectory getRootDir() { - return root; - } - private boolean hasFile(FileReference reference) { try { return root.getFile(reference).exists(); @@ -108,6 +104,8 @@ public class FileServer { return false; } + FileDirectory getRootDir() { return root; } + void startFileServing(String fileName, Receiver target) { FileReference reference = new FileReference(fileName); File file = root.getFile(reference); @@ -194,14 +192,12 @@ public class FileServer { FileReferenceDownload newDownload = new FileReferenceDownload(fileReference, false, fileReferenceDownload.client()); return downloader.getFile(newDownload).isPresent(); } else { - log.log(Level.FINE, "File not found, will not download from another source since request came from another config server"); + log.log(Level.FINE, "File not found, will not download from another source, since request came from another config server"); return false; } } - public FileDownloader downloader() { - return downloader; - } + public FileDownloader downloader() { return downloader; } public void close() { downloader.close(); @@ -212,11 +208,11 @@ public class FileServer { Supervisor supervisor = new Supervisor(new Transport("filedistribution-pool")).setDropEmptyBuffers(true); return new FileDownloader(configServers.isEmpty() ? FileDownloader.emptyConnectionPool() - : getConnectionPool(configServers, supervisor), + : createConnectionPool(configServers, supervisor), supervisor); } - private static ConnectionPool getConnectionPool(List configServers, Supervisor supervisor) { + private static ConnectionPool createConnectionPool(List configServers, Supervisor supervisor) { return configServers.size() > 0 ? new JRTConnectionPool(new ConfigSourceSet(configServers), supervisor) : FileDownloader.emptyConnectionPool(); -- cgit v1.2.3 From 13dc6181274198869435668f407dc461f5c915e5 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 16 Nov 2021 08:48:32 +0100 Subject: Use a flag to choose which connection pool to use for file distribution --- .../config/server/filedistribution/FileServer.java | 26 ++++++++++++++-------- .../maintenance/ApplicationPackageMaintainer.java | 12 ++++++++-- .../server/filedistribution/FileServerTest.java | 3 ++- .../src/main/java/com/yahoo/vespa/flags/Flags.java | 7 ++++++ 4 files changed, 36 insertions(+), 12 deletions(-) (limited to 'configserver') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java index cfc7a88568c..f4801c5a7ea 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java @@ -16,11 +16,14 @@ import com.yahoo.vespa.config.JRTConnectionPool; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.filedistribution.CompressedFileReference; import com.yahoo.vespa.filedistribution.EmptyFileReferenceData; +import com.yahoo.vespa.filedistribution.FileDistributionConnectionPool; import com.yahoo.vespa.filedistribution.FileDownloader; import com.yahoo.vespa.filedistribution.FileReferenceData; import com.yahoo.vespa.filedistribution.FileReferenceDownload; import com.yahoo.vespa.filedistribution.LazyFileReferenceData; import com.yahoo.vespa.filedistribution.LazyTemporaryStorageFileReferenceData; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; import com.yahoo.yolean.Exceptions; import java.io.File; @@ -74,14 +77,15 @@ public class FileServer { @SuppressWarnings("WeakerAccess") // Created by dependency injection @Inject - public FileServer(ConfigserverConfig configserverConfig) { + public FileServer(ConfigserverConfig configserverConfig, FlagSource flagSource) { this(new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir())), - createFileDownloader(getOtherConfigServersInCluster(configserverConfig))); + createFileDownloader(getOtherConfigServersInCluster(configserverConfig), + Flags.USE_FILE_DISTRIBUTION_CONNECTION_POOL.bindTo(flagSource).value())); } // For testing only public FileServer(File rootDir) { - this(rootDir, createFileDownloader(List.of())); + this(rootDir, createFileDownloader(List.of(), true)); } public FileServer(File rootDir, FileDownloader fileDownloader) { @@ -204,18 +208,22 @@ public class FileServer { executor.shutdown(); } - private static FileDownloader createFileDownloader(List configServers) { + private static FileDownloader createFileDownloader(List configServers, boolean useFileDistributionConnectionPool) { Supervisor supervisor = new Supervisor(new Transport("filedistribution-pool")).setDropEmptyBuffers(true); return new FileDownloader(configServers.isEmpty() ? FileDownloader.emptyConnectionPool() - : createConnectionPool(configServers, supervisor), + : createConnectionPool(configServers, supervisor, useFileDistributionConnectionPool), supervisor); } - private static ConnectionPool createConnectionPool(List configServers, Supervisor supervisor) { - return configServers.size() > 0 - ? new JRTConnectionPool(new ConfigSourceSet(configServers), supervisor) - : FileDownloader.emptyConnectionPool(); + private static ConnectionPool createConnectionPool(List configServers, Supervisor supervisor, boolean useFileDistributionConnectionPool) { + ConfigSourceSet configSourceSet = new ConfigSourceSet(configServers); + + if (configServers.size() == 0) return FileDownloader.emptyConnectionPool(); + + return useFileDistributionConnectionPool + ? new FileDistributionConnectionPool(configSourceSet, supervisor) + : new JRTConnectionPool(configSourceSet, supervisor); } } 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 1f30781ff03..08c300220df 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 @@ -16,7 +16,9 @@ import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.filedistribution.FileDownloader; import com.yahoo.vespa.filedistribution.FileReferenceDownload; +import com.yahoo.vespa.filedistribution.FileDistributionConnectionPool; import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; import java.io.File; import java.time.Duration; @@ -40,6 +42,8 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { private final File downloadDirectory; private final ConfigserverConfig configserverConfig; private final Supervisor supervisor; + private final boolean useFileDistributionConnectionPool; + ApplicationPackageMaintainer(ApplicationRepository applicationRepository, Curator curator, @@ -49,7 +53,8 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { this.applicationRepository = applicationRepository; this.configserverConfig = applicationRepository.configserverConfig(); this.supervisor = new Supervisor(new Transport("filedistribution-pool")).setDropEmptyBuffers(true); - downloadDirectory = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir())); + this.downloadDirectory = new File(Defaults.getDefaults().underVespaHome(configserverConfig.fileReferencesDir())); + this.useFileDistributionConnectionPool = Flags.USE_FILE_DISTRIBUTION_CONNECTION_POOL.bindTo(flagSource).value(); } @Override @@ -90,7 +95,10 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer { } private FileDownloader createFileDownloader() { - return new FileDownloader(new JRTConnectionPool(new ConfigSourceSet(getOtherConfigServersInCluster(configserverConfig)), supervisor), + ConfigSourceSet configSourceSet = new ConfigSourceSet(getOtherConfigServersInCluster(configserverConfig)); + return new FileDownloader(useFileDistributionConnectionPool + ? new FileDistributionConnectionPool(configSourceSet, supervisor) + : new JRTConnectionPool(configSourceSet, supervisor), supervisor, downloadDirectory); } diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/FileServerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/FileServerTest.java index 29ec11bad26..f85ca37a351 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/FileServerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/filedistribution/FileServerTest.java @@ -10,6 +10,7 @@ import com.yahoo.net.HostName; import com.yahoo.vespa.filedistribution.FileDownloader; import com.yahoo.vespa.filedistribution.FileReferenceData; import com.yahoo.vespa.filedistribution.FileReferenceDownload; +import com.yahoo.vespa.flags.InMemoryFlagSource; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -117,7 +118,7 @@ public class FileServerTest { private FileServer createFileServer(ConfigserverConfig.Builder configBuilder) throws IOException { File fileReferencesDir = temporaryFolder.newFolder(); configBuilder.fileReferencesDir(fileReferencesDir.getAbsolutePath()); - return new FileServer(new ConfigserverConfig(configBuilder)); + return new FileServer(new ConfigserverConfig(configBuilder), new InMemoryFlagSource()); } private static class FileReceiver implements FileServer.Receiver { diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index ed12529f91e..3cbdb9e1c56 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -363,6 +363,13 @@ public class Flags { HOSTNAME, NODE_TYPE); + public static final UnboundBooleanFlag USE_FILE_DISTRIBUTION_CONNECTION_POOL = defineFeatureFlag( + "use-file-distribution-connection-pool", false, + List.of("hmusum"), "2021-11-16", "2021-12-16", + "Whether to use FileDistributionConnectionPool instead of JRTConnectionPool for file downloads", + "Takes effect on config server restart", + ZONE_ID); + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, List owners, String createdAt, String expiresAt, String description, -- cgit v1.2.3 From 6c4cf61b3feef1fbce1ba48b326e91f219e0cde4 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Tue, 16 Nov 2021 11:48:19 +0100 Subject: Revert "Add clusterid" --- .../model/api/ApplicationClusterEndpoint.java | 26 ++++++---------------- .../container/ApplicationContainerCluster.java | 3 --- configdefinitions/src/vespa/lb-services.def | 1 - .../config/server/model/LbServicesProducer.java | 3 +-- .../server/model/LbServicesProducerTest.java | 20 +++-------------- 5 files changed, 11 insertions(+), 42 deletions(-) (limited to 'configserver') diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java index 1c45e4ba5dd..a91f95d71b1 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ApplicationClusterEndpoint.java @@ -26,15 +26,13 @@ public class ApplicationClusterEndpoint { private final RoutingMethod routingMethod; private final int weight; private final List hostNames; - private final String clusterId; - private ApplicationClusterEndpoint(DnsName dnsName, Scope scope, RoutingMethod routingMethod, int weight, List hostNames, String clusterId) { - this.dnsName = Objects.requireNonNull(dnsName); - this.scope = Objects.requireNonNull(scope); - this.routingMethod = Objects.requireNonNull(routingMethod); + public ApplicationClusterEndpoint(DnsName dnsName, Scope scope, RoutingMethod routingMethod, int weight, List hostNames) { + this.dnsName = dnsName; + this.scope = scope; + this.routingMethod = routingMethod; this.weight = weight; - this.hostNames = List.copyOf(Objects.requireNonNull(hostNames)); - this.clusterId = Objects.requireNonNull(clusterId); + this.hostNames = List.copyOf(hostNames); } public DnsName dnsName() { @@ -57,10 +55,6 @@ public class ApplicationClusterEndpoint { return hostNames; } - public String clusterId() { - return clusterId; - } - public static Builder builder() { return new Builder(); } @@ -70,9 +64,8 @@ public class ApplicationClusterEndpoint { private DnsName dnsName; private Scope scope; private RoutingMethod routingMethod; - private int weigth = 1; + private int weigth = 0; private List hosts; - private String clusterId; public Builder dnsName(DnsName name) { this.dnsName = name; @@ -109,13 +102,8 @@ public class ApplicationClusterEndpoint { return this; } - public Builder clusterId(String clusterId) { - this.clusterId = clusterId; - return this; - } - public ApplicationClusterEndpoint build() { - return new ApplicationClusterEndpoint(dnsName, scope, routingMethod, weigth, hosts, clusterId); + return new ApplicationClusterEndpoint(dnsName, scope, routingMethod, weigth, hosts); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java index f7e8afc2d94..a5dc26e19e3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ApplicationContainerCluster.java @@ -218,7 +218,6 @@ public final class ApplicationContainerCluster extends ContainerCluster e.routingMethod() == sharedLayer4) .map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("mydisc.foo.foo.endpoint1.suffix", "mydisc.foo.foo.endpoint2.suffix")); - assertContainsEndpoint(zoneEndpoints, "mydisc.foo.foo.endpoint1.suffix", "mydisc", zone, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); - assertContainsEndpoint(zoneEndpoints, "mydisc.foo.foo.endpoint2.suffix", "mydisc", zone, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); List globalEndpoints = endpointList.stream().filter(e -> e.scope() == global).collect(Collectors.toList()); assertEquals(2, globalEndpoints.size()); assertThat(globalEndpoints.stream().map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("rotation-1", "rotation-2")); - assertContainsEndpoint(globalEndpoints, "rotation-1", "mydisc", global, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); - assertContainsEndpoint(globalEndpoints, "rotation-2", "mydisc", global, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); List applicationEndpoints = endpointList.stream().filter(e -> e.scope() == application).collect(Collectors.toList()); assertEquals(1, applicationEndpoints.size()); assertThat(applicationEndpoints.stream().map(Endpoints::dnsName).collect(Collectors.toList()), containsInAnyOrder("app-endpoint")); - assertContainsEndpoint(applicationEndpoints, "app-endpoint", "mydisc", application, sharedLayer4, 1, List.of("foo.foo.yahoo.com")); + } @@ -208,17 +205,6 @@ public class LbServicesProducerTest { .applications("baz:prod:default:custom-t")); } - private void assertContainsEndpoint(List endpoints, String dnsName, String clusterId, Endpoints.Scope.Enum scope, Endpoints.RoutingMethod.Enum routingMethod, int weight, List hosts) { - assertThat(endpoints, hasItem(new Endpoints.Builder() - .dnsName(dnsName) - .clusterId(clusterId) - .scope(scope) - .routingMethod(routingMethod) - .weight(weight) - .hosts(hosts) - .build())); - } - private Map> randomizeApplications(Map> testModel, int seed) { Map> randomizedApplications = new LinkedHashMap<>(); List keys = new ArrayList<>(testModel.keySet()); -- cgit v1.2.3