Skip to content

Commit 3d379d0

Browse files
committed
Use one FileDownloader in config server
FileDownloader keeps tracks of downloads in progress, this does not work if we have more than one (an file received that is unknown because the other downloader started downloading it will not be handled correctly).
1 parent 5c11f65 commit 3d379d0

File tree

4 files changed

+23
-29
lines changed

4 files changed

+23
-29
lines changed

configserver/src/main/java/com/yahoo/vespa/config/server/ConfigServerBootstrap.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.yahoo.container.handler.VipStatus;
1313
import com.yahoo.container.jdisc.state.StateMonitor;
1414
import com.yahoo.vespa.config.server.filedistribution.FileDirectory;
15+
import com.yahoo.vespa.config.server.filedistribution.FileServer;
1516
import com.yahoo.vespa.config.server.maintenance.ConfigServerMaintenance;
1617
import com.yahoo.vespa.config.server.rpc.RpcServer;
1718
import com.yahoo.vespa.config.server.version.VersionState;
@@ -74,15 +75,15 @@ enum VipStatusMode { VIP_STATUS_FILE, VIP_STATUS_PROGRAMMATICALLY }
7475
@Inject
7576
public ConfigServerBootstrap(ApplicationRepository applicationRepository, RpcServer server,
7677
VersionState versionState, StateMonitor stateMonitor, VipStatus vipStatus,
77-
FileDirectory fileDirectory) {
78+
FileDirectory fileDirectory, FileServer fileServer) {
7879
this(applicationRepository, server, versionState, stateMonitor, vipStatus, EXIT_JVM,
79-
vipStatusMode(applicationRepository), fileDirectory);
80+
vipStatusMode(applicationRepository), fileDirectory, fileServer);
8081
}
8182

8283
protected ConfigServerBootstrap(ApplicationRepository applicationRepository, RpcServer server,
8384
VersionState versionState, StateMonitor stateMonitor, VipStatus vipStatus,
8485
RedeployingApplicationsFails exitIfRedeployingApplicationsFails,
85-
VipStatusMode vipStatusMode, FileDirectory fileDirectory) {
86+
VipStatusMode vipStatusMode, FileDirectory fileDirectory, FileServer fileServer) {
8687
this.applicationRepository = applicationRepository;
8788
this.server = server;
8889
this.versionState = versionState;
@@ -94,7 +95,7 @@ protected ConfigServerBootstrap(ApplicationRepository applicationRepository, Rpc
9495
this.exitIfRedeployingApplicationsFails = exitIfRedeployingApplicationsFails;
9596
this.clock = applicationRepository.clock();
9697
rpcServerExecutor = Executors.newSingleThreadExecutor(new DaemonThreadFactory("config server RPC server"));
97-
configServerMaintenance = new ConfigServerMaintenance(applicationRepository, fileDirectory);
98+
configServerMaintenance = new ConfigServerMaintenance(applicationRepository, fileDirectory, fileServer);
9899
configServerMaintenance.startBeforeBootstrap();
99100
log.log(Level.FINE, () -> "VIP status mode: " + vipStatusMode);
100101
initializing(vipStatusMode);

configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,14 @@
33

44
import com.yahoo.config.FileReference;
55
import com.yahoo.config.provision.ApplicationId;
6-
import com.yahoo.config.subscription.ConfigSourceSet;
7-
import com.yahoo.jrt.Supervisor;
8-
import com.yahoo.jrt.Transport;
9-
import com.yahoo.vespa.config.ConnectionPool;
106
import com.yahoo.vespa.config.server.ApplicationRepository;
7+
import com.yahoo.vespa.config.server.filedistribution.FileServer;
118
import com.yahoo.vespa.config.server.session.RemoteSession;
129
import com.yahoo.vespa.config.server.session.Session;
1310
import com.yahoo.vespa.config.server.session.SessionRepository;
1411
import com.yahoo.vespa.config.server.tenant.Tenant;
1512
import com.yahoo.vespa.curator.Curator;
1613
import com.yahoo.vespa.defaults.Defaults;
17-
import com.yahoo.vespa.filedistribution.FileDistributionConnectionPool;
1814
import com.yahoo.vespa.filedistribution.FileDownloader;
1915
import com.yahoo.vespa.filedistribution.FileReferenceDownload;
2016

@@ -28,7 +24,6 @@
2824
import java.util.logging.Logger;
2925

3026
import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.fileReferenceExistsOnDisk;
31-
import static com.yahoo.vespa.config.server.filedistribution.FileDistributionUtil.getOtherConfigServersInCluster;
3227
import static com.yahoo.vespa.config.server.session.Session.Status.ACTIVATE;
3328
import static com.yahoo.vespa.config.server.session.Session.Status.PREPARE;
3429

@@ -43,16 +38,14 @@
4338
public class ApplicationPackageMaintainer extends ConfigServerMaintainer {
4439

4540
private static final Logger log = Logger.getLogger(ApplicationPackageMaintainer.class.getName());
46-
private static final Duration fileDownloaderTimeout = Duration.ofSeconds(30);
4741

4842
private final File downloadDirectory;
49-
private final Supervisor supervisor = new Supervisor(new Transport("filedistribution-pool")).setDropEmptyBuffers(true);
5043
private final FileDownloader fileDownloader;
5144

52-
ApplicationPackageMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval) {
45+
ApplicationPackageMaintainer(ApplicationRepository applicationRepository, Curator curator, Duration interval, FileServer fileServer) {
5346
super(applicationRepository, curator, applicationRepository.flagSource(), applicationRepository.clock(), interval, false);
5447
this.downloadDirectory = new File(Defaults.getDefaults().underVespaHome(applicationRepository.configserverConfig().fileReferencesDir()));
55-
this.fileDownloader = createFileDownloader(applicationRepository, downloadDirectory, supervisor);
48+
this.fileDownloader = fileServer.downloader();
5649
}
5750

5851
@Override
@@ -121,18 +114,8 @@ private Collection<RemoteSession> preparedAndActivatedSessions() {
121114
.toList();
122115
}
123116

124-
private static FileDownloader createFileDownloader(ApplicationRepository applicationRepository,
125-
File downloadDirectory,
126-
Supervisor supervisor) {
127-
List<String> otherConfigServersInCluster = getOtherConfigServersInCluster(applicationRepository.configserverConfig());
128-
ConfigSourceSet configSourceSet = new ConfigSourceSet(otherConfigServersInCluster);
129-
ConnectionPool connectionPool = new FileDistributionConnectionPool(configSourceSet, supervisor);
130-
return new FileDownloader(connectionPool, supervisor, downloadDirectory, fileDownloaderTimeout);
131-
}
132-
133117
@Override
134118
public void awaitShutdown() {
135-
supervisor.transport().shutdown().join();
136119
fileDownloader.close();
137120
super.awaitShutdown();
138121
}

configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ConfigServerMaintenance.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.yahoo.vespa.config.server.ApplicationRepository;
66
import com.yahoo.vespa.config.server.application.ConfigConvergenceChecker;
77
import com.yahoo.vespa.config.server.filedistribution.FileDirectory;
8+
import com.yahoo.vespa.config.server.filedistribution.FileServer;
89
import com.yahoo.vespa.curator.Curator;
910

1011
import java.time.Clock;
@@ -28,19 +29,21 @@ public class ConfigServerMaintenance {
2829
private final Curator curator;
2930
private final ConfigConvergenceChecker convergenceChecker;
3031
private final FileDirectory fileDirectory;
32+
private final FileServer fileServer;
3133
private final Duration interval;
3234

33-
public ConfigServerMaintenance(ApplicationRepository applicationRepository, FileDirectory fileDirectory) {
35+
public ConfigServerMaintenance(ApplicationRepository applicationRepository, FileDirectory fileDirectory, FileServer fileServer) {
3436
this.applicationRepository = applicationRepository;
3537
this.curator = applicationRepository.tenantRepository().getCurator();
3638
this.convergenceChecker = applicationRepository.configConvergenceChecker();
3739
this.fileDirectory = fileDirectory;
40+
this.fileServer = fileServer;
3841
this.interval = Duration.ofMinutes(applicationRepository.configserverConfig().maintainerIntervalMinutes());
3942
}
4043

4144
public void startBeforeBootstrap() {
4245
if (moreThanOneConfigServer())
43-
maintainers.add(new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofSeconds(15)));
46+
maintainers.add(new ApplicationPackageMaintainer(applicationRepository, curator, Duration.ofSeconds(15), fileServer));
4447
maintainers.add(new TenantsMaintainer(applicationRepository, curator, interval, Clock.systemUTC()));
4548
}
4649

configserver/src/test/java/com/yahoo/vespa/config/server/ConfigServerBootstrapTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.yahoo.text.Utf8;
2222
import com.yahoo.vespa.config.server.deploy.DeployTester;
2323
import com.yahoo.vespa.config.server.filedistribution.FileDirectory;
24+
import com.yahoo.vespa.config.server.filedistribution.FileServer;
2425
import com.yahoo.vespa.config.server.rpc.RpcServer;
2526
import com.yahoo.vespa.config.server.version.VersionState;
2627
import com.yahoo.vespa.config.server.version.VespaVersion;
@@ -258,13 +259,17 @@ private Bootstrapper createBootstrapper(DeployTester tester,
258259
VersionState versionState) {
259260
StateMonitor stateMonitor = StateMonitor.createForTesting();
260261
VipStatus vipStatus = createVipStatus(stateMonitor);
262+
ConfigserverConfig configserverConfig = tester.applicationRepository().configserverConfig();
263+
FileDirectory fileDirectory = new FileDirectory(configserverConfig);
264+
FileServer fileServer = new FileServer(configserverConfig, fileDirectory);
261265
return new Bootstrapper(tester.applicationRepository(),
262266
rpcServer,
263267
versionState,
264268
stateMonitor,
265269
vipStatus,
266270
vipStatusMode,
267-
new FileDirectory(tester.applicationRepository().configserverConfig()));
271+
fileDirectory,
272+
fileServer);
268273
}
269274

270275
private void waitUntil(BooleanSupplier booleanSupplier, String messageIfWaitingFails) throws InterruptedException {
@@ -363,8 +368,10 @@ public Bootstrapper(ApplicationRepository applicationRepository,
363368
StateMonitor stateMonitor,
364369
VipStatus vipStatus,
365370
VipStatusMode vipStatusMode,
366-
FileDirectory fileDirectory) {
367-
super(applicationRepository, server, versionState, stateMonitor, vipStatus, CONTINUE, vipStatusMode, fileDirectory);
371+
FileDirectory fileDirectory,
372+
FileServer fileServer) {
373+
super(applicationRepository, server, versionState, stateMonitor, vipStatus, CONTINUE, vipStatusMode,
374+
fileDirectory, fileServer);
368375
}
369376

370377
@Override

0 commit comments

Comments
 (0)