summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java3
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java20
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java17
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java3
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java7
11 files changed, 58 insertions, 24 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index 521e72ae580..4bf61ff12d8 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -55,6 +55,7 @@ public interface ModelContext {
default URI loadBalancerAddress() {
return URI.create("http://localhost");
}
+ default boolean disableFileDistributor() { return false; }
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
index 74512e70ebe..7a1fab8dbd0 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
@@ -138,7 +138,8 @@ public class VespaModelFactory implements ModelFactory {
.rotations(modelContext.properties().rotations())
.zone(zone)
.now(clock.instant())
- .wantedNodeVespaVersion(modelContext.wantedNodeVespaVersion());
+ .wantedNodeVespaVersion(modelContext.wantedNodeVespaVersion())
+ .disableFiledistributor(modelContext.properties().disableFileDistributor());
modelContext.previousModel().ifPresent(builder::previousModel);
return builder.build();
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
index 946624a1cdb..d8bf40ac2d8 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/AdminTestCase.java
@@ -307,4 +307,24 @@ public class AdminTestCase {
assertThat(sentinelConfig.service(2).name(), is("logd"));
// No filedistributor service
}
+
+ @Test
+ public void testDisableFileDistributorForAllApps() {
+ DeployState state = new DeployState.Builder()
+ .disableFiledistributor(true)
+ .properties(
+ new DeployProperties.Builder().
+ zone(new Zone(Environment.dev, RegionName.from("baz"))).
+ applicationId(new ApplicationId.Builder().
+ tenant("quux").
+ applicationName("foo").instanceName("bim").build()).build()).build();
+ TestRoot root = new TestDriver().buildModel(state);
+ String localhost = HostName.getLocalhost();
+ SentinelConfig sentinelConfig = root.getConfig(SentinelConfig.class, "hosts/" + localhost);
+ assertThat(sentinelConfig.service().size(), is(3));
+ assertThat(sentinelConfig.service(0).name(), is("logserver"));
+ assertThat(sentinelConfig.service(1).name(), is("slobrok"));
+ assertThat(sentinelConfig.service(2).name(), is("logd"));
+ }
+
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index c0c9c309576..4502cc7e223 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -130,8 +130,8 @@ public class ModelContextImpl implements ModelContext {
public Version wantedNodeVespaVersion() { return wantedNodeVespaVersion; }
/**
- * @author lulf
- */
+ * @author Ulf Lilleengen
+ */
public static class Properties implements ModelContext.Properties {
private final ApplicationId applicationId;
@@ -141,6 +141,7 @@ public class ModelContextImpl implements ModelContext {
private final boolean hostedVespa;
private final Zone zone;
private final Set<Rotation> rotations;
+ private final boolean disableFileDistributor;
public Properties(ApplicationId applicationId,
boolean multitenant,
@@ -148,7 +149,8 @@ public class ModelContextImpl implements ModelContext {
HostName loadBalancerName,
boolean hostedVespa,
Zone zone,
- Set<Rotation> rotations) {
+ Set<Rotation> rotations,
+ boolean disableFileDistributor) {
this.applicationId = applicationId;
this.multitenant = multitenant;
this.configServerSpecs = configServerSpecs;
@@ -156,6 +158,7 @@ public class ModelContextImpl implements ModelContext {
this.hostedVespa = hostedVespa;
this.zone = zone;
this.rotations = rotations;
+ this.disableFileDistributor = disableFileDistributor;
}
@Override
@@ -189,9 +192,10 @@ public class ModelContextImpl implements ModelContext {
}
@Override
- public Set<Rotation> rotations() {
- return rotations;
- }
+ public Set<Rotation> rotations() { return rotations; }
+
+ @Override
+ public boolean disableFileDistributor() { return disableFileDistributor; }
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
index 48732814919..ea8405f6b65 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
@@ -185,7 +185,8 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
HostName.from(configserverConfig.loadBalancerAddress()),
configserverConfig.hostedVespa(),
zone,
- rotations);
+ rotations,
+ configserverConfig.disableFiledistributor());
}
/**
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 531085883c4..70db406bd53 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
@@ -155,7 +155,8 @@ public class SessionPreparer {
HostName.from(configserverConfig.loadBalancerAddress()),
configserverConfig.hostedVespa(),
zone,
- rotationsSet);
+ rotationsSet,
+ configserverConfig.disableFiledistributor());
this.preparedModelsBuilder = new PreparedModelsBuilder(modelFactoryRegistry,
permanentApplicationPackage,
configDefinitionRepo,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
index d2cf17a38d4..5fb62a68e3e 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/tenant/Tenants.java
@@ -96,18 +96,17 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen
}
/**
- * New instance containing the given tenants. This will not create Zookeeper watches. For testing only
+ * New instance containing the given tenants. Creates no system tenants and noZookeeper watches. For testing only.
* @param globalComponentRegistry a {@link com.yahoo.vespa.config.server.GlobalComponentRegistry} instance
* @param tenants a collection of {@link Tenant}s
*/
+ // TODO: Get rid of the second argument and let callers use addTenant() instead
public Tenants(GlobalComponentRegistry globalComponentRegistry, Collection<Tenant> tenants) {
this.globalComponentRegistry = globalComponentRegistry;
this.curator = globalComponentRegistry.getCurator();
metricUpdater = globalComponentRegistry.getMetrics().getOrCreateMetricUpdater(Collections.emptyMap());
this.tenantListeners.add(globalComponentRegistry.getTenantListener());
curator.create(tenantsPath);
- createSystemTenants(globalComponentRegistry.getConfigserverConfig());
- createTenants();
this.directoryCache = curator.createDirectoryCache(tenantsPath.getAbsolute(), false, false, pathChildrenExecutor);
this.tenants.putAll(addTenants(tenants));
}
@@ -120,13 +119,13 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen
// Pre-condition: tenants path needs to exist in zk
private LinkedHashMap<TenantName, Tenant> addTenants(Collection<Tenant> newTenants) {
- LinkedHashMap<TenantName, Tenant> sessionTenants = new LinkedHashMap<>();
+ LinkedHashMap<TenantName, Tenant> tenants = new LinkedHashMap<>();
for (Tenant t : newTenants) {
- sessionTenants.put(t.getName(), t);
+ tenants.put(t.getName(), t);
}
- log.log(LogLevel.DEBUG, "Tenants at startup: " + sessionTenants);
- metricUpdater.setTenants(tenants.size());
- return sessionTenants;
+ log.log(LogLevel.DEBUG, "Tenants at startup: " + tenants);
+ metricUpdater.setTenants(this.tenants.size());
+ return tenants;
}
public synchronized void addTenant(TenantName tenantName) throws Exception {
@@ -191,7 +190,7 @@ public class Tenants implements ConnectionStateListener, PathChildrenCacheListen
try {
Tenant tenant = TenantBuilder.create(globalComponentRegistry, tenantName).build();
notifyNewTenant(tenant);
- tenants.put(tenantName, tenant);
+ tenants.putIfAbsent(tenantName, tenant);
} catch (Exception e) {
log.log(LogLevel.WARNING, "Error loading tenant '" + tenantName + "', skipping.", e);
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
index aed0a6a9750..e4c336a55f1 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
@@ -48,7 +48,8 @@ public class ModelContextImplTest {
null,
false,
Zone.defaultZone(),
- rotations),
+ rotations,
+ false),
Optional.empty(),
new Version(6),
new Version(6));
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index d9a0db7e811..63f0f5f26b7 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -23,6 +23,7 @@ import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ProvisionLogger;
import com.yahoo.config.provision.Provisioner;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Version;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.config.server.ApplicationRepository;
@@ -57,6 +58,8 @@ import java.util.Optional;
*/
public class DeployTester {
+ private static final TenantName tenantName = TenantName.from("deploytester");
+
private final Clock clock;
private final Tenants tenants;
private final File testApp;
@@ -95,6 +98,7 @@ public class DeployTester {
try {
this.testApp = new File(appPath);
this.tenants = new Tenants(componentRegistry, Collections.emptySet());
+ tenants.addTenant(tenantName);
}
catch (Exception e) {
throw new IllegalArgumentException(e);
@@ -103,7 +107,7 @@ public class DeployTester {
}
public Tenant tenant() {
- return tenants.defaultTenant();
+ return tenants.getTenant(tenantName);
}
/** Create a model factory for the version of this source*/
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java
index 76734aadae7..50e8c711330 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/RedeployTest.java
@@ -7,7 +7,6 @@ import com.yahoo.config.model.api.ModelFactory;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.InstanceName;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Version;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.config.server.session.LocalSession;
@@ -60,7 +59,7 @@ public class RedeployTest {
modelFactories.add(DeployTester.createModelFactory(Clock.systemUTC()));
modelFactories.add(DeployTester.createFailingModelFactory(Version.fromIntValues(1, 0, 0)));
DeployTester tester = new DeployTester("ignored/app/path", modelFactories);
- ApplicationId id = ApplicationId.from(TenantName.from("default"),
+ ApplicationId id = ApplicationId.from(tester.tenant().getName(),
ApplicationName.from("default"),
InstanceName.from("default"));
assertFalse(tester.redeployFromLocalActive(id).isPresent());
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
index 3999389d2c7..d8016416e0a 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
@@ -15,6 +15,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
@@ -107,10 +108,12 @@ public class FileReceiver {
File fileReferenceDir = new File(downloadDirectory, fileReference.value());
try {
+ File tempFile = new File(Files.createTempDirectory("downloaded").toFile(), filename);
+ Files.write(tempFile.toPath(), content);
Files.createDirectories(fileReferenceDir.toPath());
File file = new File(fileReferenceDir, filename);
- log.log(LogLevel.INFO, "Writing data to " + file.getAbsolutePath());
- Files.write(file.toPath(), content);
+ Files.move(tempFile.toPath(), file.toPath());
+ log.log(LogLevel.INFO, "Data written to " + file.getAbsolutePath());
downloader.completedDownloading(fileReference, file);
} catch (IOException e) {
log.log(LogLevel.ERROR, "Failed writing file: " + e.getMessage());