Skip to content

Commit

Permalink
Supply default values for Bootstrap options via System properties
Browse files Browse the repository at this point in the history
This allows specify default values for several options in Bootstrap
for all Bootstrap object within a binary.
  • Loading branch information
caithagoras0 committed Nov 19, 2020
1 parent cb19486 commit 66d85da
Show file tree
Hide file tree
Showing 14 changed files with 84 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@

import static com.facebook.airlift.configuration.ConfigurationLoader.getSystemProperties;
import static com.facebook.airlift.configuration.ConfigurationLoader.loadPropertiesFrom;
import static java.lang.Boolean.parseBoolean;

/**
* Entry point for an application built using the platform codebase.
Expand All @@ -69,9 +70,9 @@ public class Bootstrap
private Map<String, String> requiredConfigurationProperties;
private Map<String, String> optionalConfigurationProperties;
private boolean initializeLogging = true;
private boolean quiet;
private boolean strictConfig;
private boolean requireExplicitBindings = true;
private boolean quiet = getDefaultFromProperties("bootstrap.quiet", false);
private boolean strictConfig = getDefaultFromProperties("bootstrap.strict-config", true);
private boolean requireExplicitBindings = getDefaultFromProperties("bootstrap.require-explicit-bindings", true);

private boolean initialized;

Expand Down Expand Up @@ -138,9 +139,14 @@ public Bootstrap quiet()
return this;
}

public Bootstrap strictConfig()
/**
* Disable the requirement that required configuration property must be used
* in some Config classes. This could be useful for testing purpose when
* deploying an old Presto version with the latest set of config properties.
*/
public Bootstrap noStrictConfig()
{
this.strictConfig = true;
this.strictConfig = false;
return this;
}

Expand Down Expand Up @@ -291,4 +297,13 @@ private static ColumnPrinter makePrinterForConfiguration(ConfigurationFactory co
}
return columnPrinter;
}

private boolean getDefaultFromProperties(String propertyName, boolean defaultValue)
{
String propertyValue = System.getProperty(propertyName);
if (propertyValue != null) {
return parseBoolean(propertyValue);
}
return defaultValue;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,22 @@
*/
package com.facebook.airlift.bootstrap;

import com.facebook.airlift.configuration.Config;
import com.google.common.collect.ImmutableMap;
import com.google.inject.Binder;
import com.google.inject.ConfigurationException;
import com.google.inject.CreationException;
import com.google.inject.Module;
import com.google.inject.ProvisionException;
import org.testng.annotations.Test;

import javax.inject.Inject;

import static com.facebook.airlift.configuration.ConfigBinder.configBinder;
import static com.facebook.airlift.testing.Assertions.assertContains;
import static org.testng.Assert.fail;

@Test(singleThreaded = true)
public class TestBootstrap
{
@Test
Expand Down Expand Up @@ -58,6 +65,34 @@ public void testDoesNotAllowCircularDependencies()
}
}

@Test(expectedExceptions = CreationException.class, expectedExceptionsMessageRegExp = ".*Configuration property 'not-supported' was not used.*")
public void testStrictConfigDefault()
{
new Bootstrap(new ConfigModule())
.setRequiredConfigurationProperties(ImmutableMap.of("not-supported", "1"))
.initialize();
}

@Test(expectedExceptions = CreationException.class, expectedExceptionsMessageRegExp = ".*Configuration property 'not-supported' was not used.*")
public void testStrictConfig()
{
System.setProperty("bootstrap.strict-config", "true");
new Bootstrap(new ConfigModule())
.setRequiredConfigurationProperties(ImmutableMap.of("not-supported", "1"))
.initialize();
}

@Test
public void testNoStrictConfig()
{
System.setProperty("bootstrap.strict-config", "false");
new Bootstrap(new ConfigModule())
.setRequiredConfigurationProperties(ImmutableMap.of("not-supported", "1"))
.initialize()
.getInstance(LifeCycleManager.class)
.stop();
}

public static class Instance {}

public static class InstanceA
Expand All @@ -71,4 +106,31 @@ public static class InstanceB
@Inject
public InstanceB(InstanceA a) {}
}

public static class TestingConfig
{
private String value;

public String getValue()
{
return value;
}

@Config("value")
public TestingConfig setValue(String value)
{
this.value = value;
return this;
}
}

private static class ConfigModule
implements Module
{
@Override
public void configure(Binder binder)
{
configBinder(binder).bindConfig(TestingConfig.class);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ public void testExecutorShutdown()
new DiscoveryModule());

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ public void testConfigDefaults()
.withConfigDefaults(config -> config.setRequestTimeout(new Duration(33, MINUTES))),
new TraceTokenModule())
.quiet()
.strictConfig()
.initialize();

JettyHttpClient httpClient = (JettyHttpClient) injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand Down Expand Up @@ -82,7 +81,6 @@ public void testGlobalFilterBinding()
},
new TraceTokenModule())
.quiet()
.strictConfig()
.initialize();

JettyHttpClient fooClient = (JettyHttpClient) injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand Down Expand Up @@ -115,7 +113,6 @@ public void testBindingMultipleFiltersAndClients()
},
new TraceTokenModule())
.quiet()
.strictConfig()
.initialize();

assertFilterCount(injector.getInstance(Key.get(HttpClient.class, FooClient.class)), 3);
Expand All @@ -133,7 +130,6 @@ public void testBindClientWithFilter()
.withTracing(),
new TraceTokenModule())
.quiet()
.strictConfig()
.initialize();

HttpClient httpClient = injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand All @@ -147,7 +143,6 @@ public void testWithoutFilters()
Injector injector = new Bootstrap(
binder -> httpClientBinder(binder).bindHttpClient("foo", FooClient.class))
.quiet()
.strictConfig()
.initialize();

assertNotNull(injector.getInstance(Key.get(HttpClient.class, FooClient.class)));
Expand All @@ -162,7 +157,6 @@ public void testAliases()
.withAlias(FooAlias1.class)
.withAliases(ImmutableList.of(FooAlias2.class, FooAlias3.class)))
.quiet()
.strictConfig()
.initialize();

HttpClient client = injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand All @@ -180,7 +174,6 @@ public void testBindClientWithAliases()
.withAlias(FooAlias1.class)
.withAlias(FooAlias2.class))
.quiet()
.strictConfig()
.initialize();

HttpClient client = injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand All @@ -198,7 +191,6 @@ public void testMultipleClients()
httpClientBinder(binder).bindHttpClient("bar", BarClient.class);
})
.quiet()
.strictConfig()
.initialize();

HttpClient fooClient = injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand All @@ -216,7 +208,6 @@ public void testClientShutdown()
httpClientBinder(binder).bindHttpClient("bar", BarClient.class);
})
.quiet()
.strictConfig()
.initialize();

HttpClient fooClient = injector.getInstance(Key.get(HttpClient.class, FooClient.class));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,6 @@ public Map<String, String> createTheServletParams()
.build();

return new Bootstrap(modules)
.strictConfig()
.doNotInitializeLogging()
.setOptionalConfigurationProperties(serverProperties)
.quiet()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ public void testGuiceInjectionWithoutFilters()
});

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down Expand Up @@ -192,7 +191,6 @@ public void testGuiceInjectionWithFilters()
});

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down Expand Up @@ -231,7 +229,6 @@ public void testGuiceInjectionWithResources()
});

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,6 @@ private static TestingHttpServer createServer(Map<String, String> serverProperti
.build();

return new Bootstrap(modules)
.strictConfig()
.doNotInitializeLogging()
.setOptionalConfigurationProperties(serverProperties)
.quiet()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,6 @@ private static TestingHttpServer createServer(final TestResource resource)
.build();

return new Bootstrap(modules)
.strictConfig()
.doNotInitializeLogging()
.quiet()
.initialize()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ public void setup()
});

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public void setup()

Injector injector = app
.quiet()
.strictConfig()
.initialize();

lifeCycleManager = injector.getInstance(LifeCycleManager.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static void main(String[] args)
new MainModule());

try {
Injector injector = app.strictConfig().initialize();
Injector injector = app.initialize();
injector.getInstance(Announcer.class).start();
}
catch (Throwable e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ public void setup()
new MainModule());

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public static void main(String[] args)
new MainModule());

try {
Injector injector = app.strictConfig().initialize();
Injector injector = app.initialize();
injector.getInstance(Announcer.class).start();
}
catch (Throwable e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ public void setup()
new MainModule());

Injector injector = app
.strictConfig()
.doNotInitializeLogging()
.initialize();

Expand Down

0 comments on commit 66d85da

Please sign in to comment.