未验证 提交 48784572 编写于 作者: E elandau 提交者: GitHub

Merge pull request #397 from elandau/feature/archaius_subproject

Decouple core library from archaius1
......@@ -9,8 +9,8 @@ subprojects {
apply plugin: 'nebula.netflixoss'
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
sourceCompatibility = 1.8
targetCompatibility = 1.8
group = "com.netflix.${githubProjectName}" // TEMPLATE: Set to organization of project
......
dependencies {
compile 'org.slf4j:slf4j-api:1.6.4'
compile 'com.google.code.findbugs:annotations:2.0.0'
compile "com.google.guava:guava:${guava_version}"
compile 'commons-configuration:commons-configuration:1.8'
compile 'commons-lang:commons-lang:2.6'
compile "com.netflix.archaius:archaius-core:${archaius_version}"
compile project(':ribbon-core')
testCompile 'junit:junit:4.11'
}
package com.netflix.client.config;
public class ArchaiusClientConfigFactory implements ClientConfigFactory {
@Override
public IClientConfig newConfig() {
return new DefaultClientConfigImpl();
}
}
......@@ -19,11 +19,11 @@ package com.netflix.client.config;
import com.google.common.base.Strings;
import com.netflix.client.VipAddressResolver;
import com.netflix.config.ConfigurationManager;
import com.netflix.config.DynamicProperty;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.config.DynamicStringProperty;
import org.apache.commons.configuration.AbstractConfiguration;
import org.apache.commons.configuration.Configuration;
import org.slf4j.Logger;
......@@ -84,25 +84,25 @@ public class DefaultClientConfigImpl implements IClientConfig {
public static final Boolean DEFAULT_PRIORITIZE_VIP_ADDRESS_BASED_SERVERS = Boolean.TRUE;
public static final String DEFAULT_NFLOADBALANCER_PING_CLASSNAME = "com.netflix.loadbalancer.DummyPing"; // DummyPing.class.getName();
public static final String DEFAULT_NFLOADBALANCER_PING_CLASSNAME = CommonClientConfigKey.NFLoadBalancerPingClassName.getDefaultValue();
public static final String DEFAULT_NFLOADBALANCER_RULE_CLASSNAME = "com.netflix.loadbalancer.AvailabilityFilteringRule";
public static final String DEFAULT_NFLOADBALANCER_RULE_CLASSNAME = CommonClientConfigKey.NFLoadBalancerRuleClassName.getDefaultValue();
public static final String DEFAULT_NFLOADBALANCER_CLASSNAME = "com.netflix.loadbalancer.ZoneAwareLoadBalancer";
public static final String DEFAULT_NFLOADBALANCER_CLASSNAME = CommonClientConfigKey.NFLoadBalancerClassName.getDefaultValue();
public static final boolean DEFAULT_USEIPADDRESS_FOR_SERVER = Boolean.FALSE;
public static final boolean DEFAULT_USEIPADDRESS_FOR_SERVER = CommonClientConfigKey.UseIPAddrForServer.getDefaultValue();
public static final String DEFAULT_CLIENT_CLASSNAME = "com.netflix.niws.client.http.RestClient";
public static final String DEFAULT_CLIENT_CLASSNAME = CommonClientConfigKey.ClientClassName.getDefaultValue();
public static final String DEFAULT_VIPADDRESS_RESOLVER_CLASSNAME = "com.netflix.client.SimpleVipAddressResolver";
public static final String DEFAULT_VIPADDRESS_RESOLVER_CLASSNAME = CommonClientConfigKey.VipAddressResolverClassName.getDefaultValue();
public static final String DEFAULT_PRIME_CONNECTIONS_URI = "/";
public static final String DEFAULT_PRIME_CONNECTIONS_URI = CommonClientConfigKey.PrimeConnectionsURI.getDefaultValue();
public static final int DEFAULT_MAX_TOTAL_TIME_TO_PRIME_CONNECTIONS = 30000;
public static final int DEFAULT_MAX_TOTAL_TIME_TO_PRIME_CONNECTIONS = CommonClientConfigKey.MaxTotalTimeToPrimeConnections.getDefaultValue();
public static final int DEFAULT_MAX_RETRIES_PER_SERVER_PRIME_CONNECTION = 9;
public static final int DEFAULT_MAX_RETRIES_PER_SERVER_PRIME_CONNECTION = CommonClientConfigKey.MaxRetriesPerServerPrimeConnection.getDefaultValue();
public static final Boolean DEFAULT_ENABLE_PRIME_CONNECTIONS = Boolean.FALSE;
public static final Boolean DEFAULT_ENABLE_PRIME_CONNECTIONS = CommonClientConfigKey.EnablePrimeConnections.getDefaultValue();
public static final int DEFAULT_MAX_REQUESTS_ALLOWED_PER_WINDOW = Integer.MAX_VALUE;
......@@ -110,45 +110,45 @@ public class DefaultClientConfigImpl implements IClientConfig {
public static final Boolean DEFAULT_ENABLE_REQUEST_THROTTLING = Boolean.FALSE;
public static final Boolean DEFAULT_ENABLE_GZIP_CONTENT_ENCODING_FILTER = Boolean.FALSE;
public static final Boolean DEFAULT_ENABLE_GZIP_CONTENT_ENCODING_FILTER = CommonClientConfigKey.EnableGZIPContentEncodingFilter.getDefaultValue();
public static final Boolean DEFAULT_CONNECTION_POOL_CLEANER_TASK_ENABLED = Boolean.TRUE;
public static final Boolean DEFAULT_CONNECTION_POOL_CLEANER_TASK_ENABLED = CommonClientConfigKey.ConnectionPoolCleanerTaskEnabled.getDefaultValue();
public static final Boolean DEFAULT_FOLLOW_REDIRECTS = Boolean.FALSE;
public static final Boolean DEFAULT_FOLLOW_REDIRECTS = CommonClientConfigKey.FollowRedirects.getDefaultValue();
public static final float DEFAULT_PERCENTAGE_NIWS_EVENT_LOGGED = 0.0f;
public static final int DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER = 1;
public static final int DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER = CommonClientConfigKey.MaxAutoRetriesNextServer.getDefaultValue();
public static final int DEFAULT_MAX_AUTO_RETRIES = 0;
public static final int DEFAULT_MAX_AUTO_RETRIES = CommonClientConfigKey.MaxAutoRetries.getDefaultValue();
public static final int DEFAULT_BACKOFF_INTERVAL = 0;
public static final int DEFAULT_BACKOFF_INTERVAL = CommonClientConfigKey.BackoffInterval.getDefaultValue();
public static final int DEFAULT_READ_TIMEOUT = 5000;
public static final int DEFAULT_READ_TIMEOUT = CommonClientConfigKey.ReadTimeout.getDefaultValue();
public static final int DEFAULT_CONNECTION_MANAGER_TIMEOUT = 2000;
public static final int DEFAULT_CONNECTION_MANAGER_TIMEOUT = CommonClientConfigKey.ConnectionManagerTimeout.getDefaultValue();
public static final int DEFAULT_CONNECT_TIMEOUT = 2000;
public static final int DEFAULT_CONNECT_TIMEOUT = CommonClientConfigKey.ConnectTimeout.getDefaultValue();
public static final Boolean DEFAULT_ENABLE_CONNECTION_POOL = Boolean.TRUE;
public static final Boolean DEFAULT_ENABLE_CONNECTION_POOL = CommonClientConfigKey.EnableConnectionPool.getDefaultValue();
@Deprecated
public static final int DEFAULT_MAX_HTTP_CONNECTIONS_PER_HOST = 50;
public static final int DEFAULT_MAX_HTTP_CONNECTIONS_PER_HOST = CommonClientConfigKey.MaxHttpConnectionsPerHost.getDefaultValue();
@Deprecated
public static final int DEFAULT_MAX_TOTAL_HTTP_CONNECTIONS = 200;
public static final int DEFAULT_MAX_TOTAL_HTTP_CONNECTIONS = CommonClientConfigKey.MaxTotalHttpConnections.getDefaultValue();
public static final int DEFAULT_MAX_CONNECTIONS_PER_HOST = 50;
public static final int DEFAULT_MAX_CONNECTIONS_PER_HOST = CommonClientConfigKey.MaxConnectionsPerHost.getDefaultValue();
public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 200;
public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = CommonClientConfigKey.MaxTotalConnections.getDefaultValue();
public static final float DEFAULT_MIN_PRIME_CONNECTIONS_RATIO = 1.0f;
public static final float DEFAULT_MIN_PRIME_CONNECTIONS_RATIO = CommonClientConfigKey.MinPrimeConnectionsRatio.getDefaultValue();
public static final String DEFAULT_PRIME_CONNECTIONS_CLASS = "com.netflix.niws.client.http.HttpPrimeConnection";
public static final String DEFAULT_PRIME_CONNECTIONS_CLASS = CommonClientConfigKey.PrimeConnectionsClassName.getDefaultValue();
public static final String DEFAULT_SEVER_LIST_CLASS = "com.netflix.loadbalancer.ConfigurationBasedServerList";
public static final String DEFAULT_SEVER_LIST_CLASS = CommonClientConfigKey.NIWSServerListClassName.getDefaultValue();
public static final String DEFAULT_SERVER_LIST_UPDATER_CLASS = "com.netflix.loadbalancer.PollingServerListUpdater";
public static final String DEFAULT_SERVER_LIST_UPDATER_CLASS = CommonClientConfigKey.ServerListUpdaterClassName.getDefaultValue();
public static final int DEFAULT_CONNECTION_IDLE_TIMERTASK_REPEAT_IN_MSECS = 30000; // every half minute (30 secs)
......@@ -173,16 +173,16 @@ public class DefaultClientConfigImpl implements IClientConfig {
public static final int DEFAULT_POOL_MIN_THREADS = 1;
public static final long DEFAULT_POOL_KEEP_ALIVE_TIME = 15 * 60L;
public static final TimeUnit DEFAULT_POOL_KEEP_ALIVE_TIME_UNITS = TimeUnit.SECONDS;
public static final Boolean DEFAULT_ENABLE_ZONE_AFFINITY = Boolean.FALSE;
public static final Boolean DEFAULT_ENABLE_ZONE_EXCLUSIVITY = Boolean.FALSE;
public static final int DEFAULT_PORT = 7001;
public static final Boolean DEFAULT_ENABLE_LOADBALANCER = Boolean.TRUE;
public static final Boolean DEFAULT_ENABLE_ZONE_AFFINITY = CommonClientConfigKey.EnableZoneAffinity.getDefaultValue();
public static final Boolean DEFAULT_ENABLE_ZONE_EXCLUSIVITY = CommonClientConfigKey.EnableZoneExclusivity.getDefaultValue();
public static final int DEFAULT_PORT = CommonClientConfigKey.Port.getDefaultValue();
public static final Boolean DEFAULT_ENABLE_LOADBALANCER = CommonClientConfigKey.InitializeNFLoadBalancer.getDefaultValue();
public static final String DEFAULT_PROPERTY_NAME_SPACE = "ribbon";
public static final String DEFAULT_PROPERTY_NAME_SPACE = CommonClientConfigKey.DEFAULT_NAME_SPACE;
private String propertyNameSpace = DEFAULT_PROPERTY_NAME_SPACE;
public static final Boolean DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS = Boolean.FALSE;
public static final Boolean DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS = CommonClientConfigKey.OkToRetryOnAllOperations.getDefaultValue();
public static final Boolean DEFAULT_ENABLE_NIWS_EVENT_LOGGING = Boolean.TRUE;
......@@ -632,7 +632,7 @@ public class DefaultClientConfigImpl implements IClientConfig {
if (resolver == null) {
try {
resolver = (VipAddressResolver) Class
.forName((String) getProperty(CommonClientConfigKey.VipAddressResolverClassName))
.forName(getOrDefault(CommonClientConfigKey.VipAddressResolverClassName))
.newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
throw new RuntimeException("Cannot instantiate VipAddressResolver", e);
......@@ -645,7 +645,7 @@ public class DefaultClientConfigImpl implements IClientConfig {
@Override
public String resolveDeploymentContextbasedVipAddresses(){
String deploymentContextBasedVipAddressesMacro = (String) getProperty(CommonClientConfigKey.DeploymentContextBasedVipAddresses);
String deploymentContextBasedVipAddressesMacro = get(CommonClientConfigKey.DeploymentContextBasedVipAddresses);
if (deploymentContextBasedVipAddressesMacro == null) {
return null;
}
......@@ -653,21 +653,11 @@ public class DefaultClientConfigImpl implements IClientConfig {
}
public String getAppName(){
String appName = null;
Object an = getProperty(CommonClientConfigKey.AppName);
if (an!=null){
appName = "" + an;
}
return appName;
return get(CommonClientConfigKey.AppName);
}
public String getVersion(){
String version = null;
Object an = getProperty(CommonClientConfigKey.Version);
if (an!=null){
version = "" + an;
}
return version;
return get(CommonClientConfigKey.Version);
}
/* (non-Javadoc)
......@@ -819,6 +809,11 @@ public class DefaultClientConfigImpl implements IClientConfig {
return propertyNameSpace;
}
@Override
public void setNameSpace(String nameSpace) {
this.propertyNameSpace = nameSpace;
}
public static DefaultClientConfigImpl getEmptyConfig() {
return new DefaultClientConfigImpl();
}
......
......@@ -29,7 +29,9 @@ import com.netflix.config.DynamicIntProperty;
*
* @author awang
*
* @deprecated This class is no longer necessary as part of Ribbon and should not be used by anyone
*/
@Deprecated
public class ScheduledThreadPoolExectuorWithDynamicSize extends ScheduledThreadPoolExecutor {
private final Thread shutdownThread;
......
com.netflix.client.config.ArchaiusClientConfigFactory
\ No newline at end of file
......@@ -2,8 +2,8 @@ dependencies {
compile 'org.slf4j:slf4j-api:1.6.4'
compile 'com.google.code.findbugs:annotations:2.0.0'
compile "com.google.guava:guava:${guava_version}"
compile 'commons-configuration:commons-configuration:1.8'
compile 'commons-lang:commons-lang:2.6'
compile "com.netflix.archaius:archaius-core:${archaius_version}"
testCompile 'junit:junit:4.11'
testCompile 'junit:junit:4.11'
testCompile project(":ribbon-archaius")
}
......@@ -19,7 +19,6 @@ package com.netflix.client;
import com.google.common.collect.Lists;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import java.net.ConnectException;
......@@ -61,9 +60,9 @@ public class DefaultLoadBalancerRetryHandler implements RetryHandler {
}
public DefaultLoadBalancerRetryHandler(IClientConfig clientConfig) {
this.retrySameServer = clientConfig.get(CommonClientConfigKey.MaxAutoRetries, DefaultClientConfigImpl.DEFAULT_MAX_AUTO_RETRIES);
this.retryNextServer = clientConfig.get(CommonClientConfigKey.MaxAutoRetriesNextServer, DefaultClientConfigImpl.DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER);
this.retryEnabled = clientConfig.get(CommonClientConfigKey.OkToRetryOnAllOperations, false);
this.retrySameServer = clientConfig.getOrDefault(CommonClientConfigKey.MaxAutoRetries);
this.retryNextServer = clientConfig.getOrDefault(CommonClientConfigKey.MaxAutoRetriesNextServer);
this.retryEnabled = clientConfig.getOrDefault(CommonClientConfigKey.OkToRetryOnAllOperations);
}
@Override
......
......@@ -16,19 +16,28 @@
package com.netflix.client.config;
import java.util.Comparator;
import java.util.ServiceLoader;
import java.util.stream.StreamSupport;
/**
* Created by awang on 7/18/14.
*/
public interface ClientConfigFactory {
IClientConfig newConfig();
public static class DefaultClientConfigFactory implements ClientConfigFactory {
@Override
public IClientConfig newConfig() {
IClientConfig config = new DefaultClientConfigImpl();
return config;
}
ClientConfigFactory DEFAULT = findDefaultConfigFactory();
default int getPriority() { return 0; }
static ClientConfigFactory findDefaultConfigFactory() {
return StreamSupport.stream(ServiceLoader.load(ClientConfigFactory.class).spliterator(), false)
.sorted(Comparator
.comparingInt(ClientConfigFactory::getPriority)
.thenComparing(Comparator.comparing(f -> f.getClass().getCanonicalName())))
.findFirst()
.orElseGet(() -> {
throw new IllegalStateException("Expecting at least one implementation of ClientConfigFactory discoverable via the ServiceLoader");
});
}
public static final ClientConfigFactory DEFAULT = new DefaultClientConfigFactory();
}
......@@ -30,13 +30,15 @@ import static com.google.common.base.Preconditions.checkArgument;
public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final String DEFAULT_NAME_SPACE = "ribbon";
public static final IClientConfigKey<String> AppName = new CommonClientConfigKey<String>("AppName"){};
public static final IClientConfigKey<String> Version = new CommonClientConfigKey<String>("Version"){};
public static final IClientConfigKey<Integer> Port = new CommonClientConfigKey<Integer>("Port"){};
public static final IClientConfigKey<Integer> Port = new CommonClientConfigKey<Integer>("Port", 7001){};
public static final IClientConfigKey<Integer> SecurePort = new CommonClientConfigKey<Integer>("SecurePort"){};
public static final IClientConfigKey<Integer> SecurePort = new CommonClientConfigKey<Integer>("SecurePort", 7001){};
public static final IClientConfigKey<String> VipAddress = new CommonClientConfigKey<String>("VipAddress"){};
......@@ -44,27 +46,27 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<String> DeploymentContextBasedVipAddresses = new CommonClientConfigKey<String>("DeploymentContextBasedVipAddresses"){};
public static final IClientConfigKey<Integer> MaxAutoRetries = new CommonClientConfigKey<Integer>("MaxAutoRetries"){};
public static final IClientConfigKey<Integer> MaxAutoRetries = new CommonClientConfigKey<Integer>("MaxAutoRetries", 0){};
public static final IClientConfigKey<Integer> MaxAutoRetriesNextServer = new CommonClientConfigKey<Integer>("MaxAutoRetriesNextServer"){};
public static final IClientConfigKey<Integer> MaxAutoRetriesNextServer = new CommonClientConfigKey<Integer>("MaxAutoRetriesNextServer", 1){};
public static final IClientConfigKey<Boolean> OkToRetryOnAllOperations = new CommonClientConfigKey<Boolean>("OkToRetryOnAllOperations"){};
public static final IClientConfigKey<Boolean> OkToRetryOnAllOperations = new CommonClientConfigKey<Boolean>("OkToRetryOnAllOperations", false){};
public static final IClientConfigKey<Boolean> RequestSpecificRetryOn = new CommonClientConfigKey<Boolean>("RequestSpecificRetryOn"){};
public static final IClientConfigKey<Integer> ReceiveBufferSize = new CommonClientConfigKey<Integer>("ReceiveBufferSize"){};
public static final IClientConfigKey<Boolean> EnablePrimeConnections = new CommonClientConfigKey<Boolean>("EnablePrimeConnections"){};
public static final IClientConfigKey<Boolean> EnablePrimeConnections = new CommonClientConfigKey<Boolean>("EnablePrimeConnections", false){};
public static final IClientConfigKey<String> PrimeConnectionsClassName = new CommonClientConfigKey<String>("PrimeConnectionsClassName"){};
public static final IClientConfigKey<String> PrimeConnectionsClassName = new CommonClientConfigKey<String>("PrimeConnectionsClassName", "com.netflix.niws.client.http.HttpPrimeConnection"){};
public static final IClientConfigKey<Integer> MaxRetriesPerServerPrimeConnection = new CommonClientConfigKey<Integer>("MaxRetriesPerServerPrimeConnection"){};
public static final IClientConfigKey<Integer> MaxRetriesPerServerPrimeConnection = new CommonClientConfigKey<Integer>("MaxRetriesPerServerPrimeConnection", 9){};
public static final IClientConfigKey<Integer> MaxTotalTimeToPrimeConnections = new CommonClientConfigKey<Integer>("MaxTotalTimeToPrimeConnections"){};
public static final IClientConfigKey<Integer> MaxTotalTimeToPrimeConnections = new CommonClientConfigKey<Integer>("MaxTotalTimeToPrimeConnections", 30000){};
public static final IClientConfigKey<Float> MinPrimeConnectionsRatio = new CommonClientConfigKey<Float>("MinPrimeConnectionsRatio"){};
public static final IClientConfigKey<Float> MinPrimeConnectionsRatio = new CommonClientConfigKey<Float>("MinPrimeConnectionsRatio", 1.0f){};
public static final IClientConfigKey<String> PrimeConnectionsURI = new CommonClientConfigKey<String>("PrimeConnectionsURI"){};
public static final IClientConfigKey<String> PrimeConnectionsURI = new CommonClientConfigKey<String>("PrimeConnectionsURI", "/"){};
public static final IClientConfigKey<Integer> PoolMaxThreads = new CommonClientConfigKey<Integer>("PoolMaxThreads"){};
......@@ -74,33 +76,33 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<String> PoolKeepAliveTimeUnits = new CommonClientConfigKey<String>("PoolKeepAliveTimeUnits"){};
public static final IClientConfigKey<Boolean> EnableConnectionPool = new CommonClientConfigKey<Boolean>("EnableConnectionPool") {};
public static final IClientConfigKey<Boolean> EnableConnectionPool = new CommonClientConfigKey<Boolean>("EnableConnectionPool", true) {};
/**
* Use {@link #MaxConnectionsPerHost}
*/
@Deprecated
public static final IClientConfigKey<Integer> MaxHttpConnectionsPerHost = new CommonClientConfigKey<Integer>("MaxHttpConnectionsPerHost"){};
public static final IClientConfigKey<Integer> MaxHttpConnectionsPerHost = new CommonClientConfigKey<Integer>("MaxHttpConnectionsPerHost", 50){};
/**
* Use {@link #MaxTotalConnections}
*/
@Deprecated
public static final IClientConfigKey<Integer> MaxTotalHttpConnections = new CommonClientConfigKey<Integer>("MaxTotalHttpConnections"){};
public static final IClientConfigKey<Integer> MaxTotalHttpConnections = new CommonClientConfigKey<Integer>("MaxTotalHttpConnections", 200){};
public static final IClientConfigKey<Integer> MaxConnectionsPerHost = new CommonClientConfigKey<Integer>("MaxConnectionsPerHost"){};
public static final IClientConfigKey<Integer> MaxConnectionsPerHost = new CommonClientConfigKey<Integer>("MaxConnectionsPerHost", 50){};
public static final IClientConfigKey<Integer> MaxTotalConnections = new CommonClientConfigKey<Integer>("MaxTotalConnections"){};
public static final IClientConfigKey<Integer> MaxTotalConnections = new CommonClientConfigKey<Integer>("MaxTotalConnections", 200){};
public static final IClientConfigKey<Boolean> IsSecure = new CommonClientConfigKey<Boolean>("IsSecure"){};
public static final IClientConfigKey<Boolean> GZipPayload = new CommonClientConfigKey<Boolean>("GZipPayload"){};
public static final IClientConfigKey<Integer> ConnectTimeout = new CommonClientConfigKey<Integer>("ConnectTimeout"){};
public static final IClientConfigKey<Integer> ConnectTimeout = new CommonClientConfigKey<Integer>("ConnectTimeout", 2000){};
public static final IClientConfigKey<Integer> BackoffInterval = new CommonClientConfigKey<Integer>("BackoffTimeout"){};
public static final IClientConfigKey<Integer> BackoffInterval = new CommonClientConfigKey<Integer>("BackoffTimeout", 0){};
public static final IClientConfigKey<Integer> ReadTimeout = new CommonClientConfigKey<Integer>("ReadTimeout"){};
public static final IClientConfigKey<Integer> ReadTimeout = new CommonClientConfigKey<Integer>("ReadTimeout", 5000){};
public static final IClientConfigKey<Integer> SendBufferSize = new CommonClientConfigKey<Integer>("SendBufferSize"){};
......@@ -108,17 +110,17 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<Integer> Linger = new CommonClientConfigKey<Integer>("Linger"){};
public static final IClientConfigKey<Integer> ConnectionManagerTimeout = new CommonClientConfigKey<Integer>("ConnectionManagerTimeout"){};
public static final IClientConfigKey<Integer> ConnectionManagerTimeout = new CommonClientConfigKey<Integer>("ConnectionManagerTimeout", 2000){};
public static final IClientConfigKey<Boolean> FollowRedirects = new CommonClientConfigKey<Boolean>("FollowRedirects"){};
public static final IClientConfigKey<Boolean> FollowRedirects = new CommonClientConfigKey<Boolean>("FollowRedirects", false){};
public static final IClientConfigKey<Boolean> ConnectionPoolCleanerTaskEnabled = new CommonClientConfigKey<Boolean>("ConnectionPoolCleanerTaskEnabled"){};
public static final IClientConfigKey<Boolean> ConnectionPoolCleanerTaskEnabled = new CommonClientConfigKey<Boolean>("ConnectionPoolCleanerTaskEnabled", true){};
public static final IClientConfigKey<Integer> ConnIdleEvictTimeMilliSeconds = new CommonClientConfigKey<Integer>("ConnIdleEvictTimeMilliSeconds"){};
public static final IClientConfigKey<Integer> ConnectionCleanerRepeatInterval = new CommonClientConfigKey<Integer>("ConnectionCleanerRepeatInterval"){};
public static final IClientConfigKey<Boolean> EnableGZIPContentEncodingFilter = new CommonClientConfigKey<Boolean>("EnableGZIPContentEncodingFilter"){};
public static final IClientConfigKey<Boolean> EnableGZIPContentEncodingFilter = new CommonClientConfigKey<Boolean>("EnableGZIPContentEncodingFilter", false){};
public static final IClientConfigKey<String> ProxyHost = new CommonClientConfigKey<String>("ProxyHost"){};
......@@ -143,16 +145,16 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<Boolean> IgnoreUserTokenInConnectionPoolForSecureClient = new CommonClientConfigKey<Boolean>("IgnoreUserTokenInConnectionPoolForSecureClient"){};
// Client implementation
public static final IClientConfigKey<String> ClientClassName = new CommonClientConfigKey<String>("ClientClassName"){};
public static final IClientConfigKey<String> ClientClassName = new CommonClientConfigKey<String>("ClientClassName", "com.netflix.niws.client.http.RestClient"){};
//LoadBalancer Related
public static final IClientConfigKey<Boolean> InitializeNFLoadBalancer = new CommonClientConfigKey<Boolean>("InitializeNFLoadBalancer"){};
public static final IClientConfigKey<Boolean> InitializeNFLoadBalancer = new CommonClientConfigKey<Boolean>("InitializeNFLoadBalancer", true){};
public static final IClientConfigKey<String> NFLoadBalancerClassName = new CommonClientConfigKey<String>("NFLoadBalancerClassName"){};
public static final IClientConfigKey<String> NFLoadBalancerClassName = new CommonClientConfigKey<String>("NFLoadBalancerClassName", "com.netflix.loadbalancer.ZoneAwareLoadBalancer"){};
public static final IClientConfigKey<String> NFLoadBalancerRuleClassName = new CommonClientConfigKey<String>("NFLoadBalancerRuleClassName"){};
public static final IClientConfigKey<String> NFLoadBalancerRuleClassName = new CommonClientConfigKey<String>("NFLoadBalancerRuleClassName", "com.netflix.loadbalancer.AvailabilityFilteringRule"){};
public static final IClientConfigKey<String> NFLoadBalancerPingClassName = new CommonClientConfigKey<String>("NFLoadBalancerPingClassName"){};
public static final IClientConfigKey<String> NFLoadBalancerPingClassName = new CommonClientConfigKey<String>("NFLoadBalancerPingClassName", "com.netflix.loadbalancer.DummyPing"){};
public static final IClientConfigKey<Integer> NFLoadBalancerPingInterval = new CommonClientConfigKey<Integer>("NFLoadBalancerPingInterval"){};
......@@ -160,9 +162,9 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<String> NFLoadBalancerStatsClassName = new CommonClientConfigKey<String>("NFLoadBalancerStatsClassName"){};
public static final IClientConfigKey<String> NIWSServerListClassName = new CommonClientConfigKey<String>("NIWSServerListClassName"){};
public static final IClientConfigKey<String> NIWSServerListClassName = new CommonClientConfigKey<String>("NIWSServerListClassName", "com.netflix.loadbalancer.ConfigurationBasedServerList"){};
public static final IClientConfigKey<String> ServerListUpdaterClassName = new CommonClientConfigKey<String>("ServerListUpdaterClassName"){};
public static final IClientConfigKey<String> ServerListUpdaterClassName = new CommonClientConfigKey<String>("ServerListUpdaterClassName", "com.netflix.loadbalancer.PollingServerListUpdater"){};
public static final IClientConfigKey<String> NIWSServerListFilterClassName = new CommonClientConfigKey<String>("NIWSServerListFilterClassName"){};
......@@ -174,13 +176,13 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<Integer> ServerDownStatWindowInMillis = new CommonClientConfigKey<Integer>("ServerDownStatWindowInMillis"){};
public static final IClientConfigKey<Boolean> EnableZoneAffinity = new CommonClientConfigKey<Boolean>("EnableZoneAffinity"){};
public static final IClientConfigKey<Boolean> EnableZoneAffinity = new CommonClientConfigKey<Boolean>("EnableZoneAffinity", false){};
public static final IClientConfigKey<Boolean> EnableZoneExclusivity = new CommonClientConfigKey<Boolean>("EnableZoneExclusivity"){};
public static final IClientConfigKey<Boolean> EnableZoneExclusivity = new CommonClientConfigKey<Boolean>("EnableZoneExclusivity", false){};
public static final IClientConfigKey<Boolean> PrioritizeVipAddressBasedServers = new CommonClientConfigKey<Boolean>("PrioritizeVipAddressBasedServers"){};
public static final IClientConfigKey<String> VipAddressResolverClassName = new CommonClientConfigKey<String>("VipAddressResolverClassName"){};
public static final IClientConfigKey<String> VipAddressResolverClassName = new CommonClientConfigKey<String>("VipAddressResolverClassName", "com.netflix.client.SimpleVipAddressResolver"){};
public static final IClientConfigKey<String> TargetRegion = new CommonClientConfigKey<String>("TargetRegion"){};
......@@ -188,7 +190,7 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public static final IClientConfigKey<String> RequestIdHeaderName = new CommonClientConfigKey<String>("RequestIdHeaderName") {};
public static final IClientConfigKey<Boolean> UseIPAddrForServer = new CommonClientConfigKey<Boolean>("UseIPAddrForServer") {};
public static final IClientConfigKey<Boolean> UseIPAddrForServer = new CommonClientConfigKey<Boolean>("UseIPAddrForServer", false) {};
public static final IClientConfigKey<String> ListOfServers = new CommonClientConfigKey<String>("listOfServers") {};
......@@ -244,17 +246,23 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
private final String configKey;
private final Class<T> type;
private T defaultValue;
@SuppressWarnings("unchecked")
protected CommonClientConfigKey(String configKey) {
this(configKey, null);
}
protected CommonClientConfigKey(String configKey, T defaultValue) {
this.configKey = configKey;
Type superclass = getClass().getGenericSuperclass();
checkArgument(superclass instanceof ParameterizedType,
"%s isn't parameterized", superclass);
"%s isn't parameterized", superclass);
Type runtimeType = ((ParameterizedType) superclass).getActualTypeArguments()[0];
type = (Class<T>) TypeToken.of(runtimeType).getRawType();
this.defaultValue = defaultValue;
}
@Override
public Class<T> type() {
return type;
......@@ -272,4 +280,8 @@ public abstract class CommonClientConfigKey<T> implements IClientConfigKey<T> {
public String toString() {
return configKey;
}
@Override
public T getDefaultValue() { return defaultValue; }
}
......@@ -21,67 +21,66 @@ import java.util.Map;
/**
* Defines the client configuration used by various APIs to initialize clients or load balancers
* and for method execution. The default implementation is {@link DefaultClientConfigImpl}.
* and for method execution.
*
* @author awang
*
*/
public interface IClientConfig {
public String getClientName();
String getClientName();
public String getNameSpace();
String getNameSpace();
void setNameSpace(String nameSpace);
/**
* Load the properties for a given client and/or load balancer.
* @param clientName
*/
public void loadProperties(String clientName);
void loadProperties(String clientName);
/**
* load default values for this configuration
*/
public void loadDefaultValues();
void loadDefaultValues();
public Map<String, Object> getProperties();
Map<String, Object> getProperties();
/**
* @deprecated use {@link #set(IClientConfigKey, Object)}
*/
@Deprecated
public void setProperty(IClientConfigKey key, Object value);
void setProperty(IClientConfigKey key, Object value);
/**
* @deprecated use {@link #get(IClientConfigKey)}
*/
@Deprecated
public Object getProperty(IClientConfigKey key);
Object getProperty(IClientConfigKey key);
/**
* @deprecated use {@link #get(IClientConfigKey, Object)}
*/
@Deprecated
public Object getProperty(IClientConfigKey key, Object defaultVal);
Object getProperty(IClientConfigKey key, Object defaultVal);
public boolean containsProperty(IClientConfigKey key);
boolean containsProperty(IClientConfigKey key);
/**
* Returns the applicable virtual addresses ("vip") used by this client configuration.
*/
public String resolveDeploymentContextbasedVipAddresses();
String resolveDeploymentContextbasedVipAddresses();
public int getPropertyAsInteger(IClientConfigKey key, int defaultValue);
int getPropertyAsInteger(IClientConfigKey key, int defaultValue);
public String getPropertyAsString(IClientConfigKey key, String defaultValue);
String getPropertyAsString(IClientConfigKey key, String defaultValue);
public boolean getPropertyAsBoolean(IClientConfigKey key, boolean defaultValue);
boolean getPropertyAsBoolean(IClientConfigKey key, boolean defaultValue);
/**
* Returns a typed property. If the property of IClientConfigKey is not set, it returns null.
* <p>
* For {@link DefaultClientConfigImpl}, if the value of the property is String,
* it will do basic type conversion from String to the following type:
* <ul>
* <li>Integer</li>
* <li>Boolean</li>
......@@ -91,20 +90,37 @@ public interface IClientConfig {
* </ul>
* <br><br>
*/
public <T> T get(IClientConfigKey<T> key);
<T> T get(IClientConfigKey<T> key);
/**
* Returns a typed property. If the property of IClientConfigKey is not set, it returns the default value, which
* could be null.
* <p>
* <ul>
* <li>Integer</li>
* <li>Boolean</li>
* <li>Float</li>
* <li>Long</li>
* <li>Double</li>
* </ul>
* <br><br>
*/
default <T> T getOrDefault(IClientConfigKey<T> key) {
return get(key, key.getDefaultValue());
}
/**
* Returns a typed property. If the property of IClientConfigKey is not set,
* it returns the default value passed in as the parameter.
*/
public <T> T get(IClientConfigKey<T> key, T defaultValue);
<T> T get(IClientConfigKey<T> key, T defaultValue);
/**
* Set the typed property with the given value.
*/
public <T> IClientConfig set(IClientConfigKey<T> key, T value);
<T> IClientConfig set(IClientConfigKey<T> key, T value);
public static class Builder {
class Builder {
private IClientConfig config;
......@@ -112,12 +128,11 @@ public interface IClientConfig {
}
/**
* Create a builder with no initial property and value for the configuration to be built. The configuration object
* that will be built is an instance of {@link DefaultClientConfigImpl}
* Create a builder with no initial property and value for the configuration to be built.
*/
public static Builder newBuilder() {
Builder builder = new Builder();
builder.config = new DefaultClientConfigImpl();
builder.config = ClientConfigFactory.findDefaultConfigFactory().newConfig();
return builder;
}
......@@ -130,7 +145,7 @@ public interface IClientConfig {
*/
public static Builder newBuilder(String clientName) {
Builder builder = new Builder();
builder.config = new DefaultClientConfigImpl();
builder.config = ClientConfigFactory.findDefaultConfigFactory().newConfig();
builder.config.loadProperties(clientName);
return builder;
}
......@@ -144,7 +159,8 @@ public interface IClientConfig {
*/
public static Builder newBuilder(String clientName, String propertyNameSpace) {
Builder builder = new Builder();
builder.config = new DefaultClientConfigImpl(propertyNameSpace);
builder.config = ClientConfigFactory.findDefaultConfigFactory().newConfig();
builder.config.setNameSpace(propertyNameSpace);
builder.config.loadProperties(clientName);
return builder;
}
......
......@@ -27,7 +27,7 @@ package com.netflix.client.config;
public interface IClientConfigKey<T> {
@SuppressWarnings("rawtypes")
public static final class Keys extends CommonClientConfigKey {
final class Keys extends CommonClientConfigKey {
private Keys(String configKey) {
super(configKey);
}
......@@ -36,10 +36,12 @@ public interface IClientConfigKey<T> {
/**
* @return string representation of the key used for hash purpose.
*/
public String key();
String key();
/**
* @return Data type for the key. For example, Integer.class.
*/
public Class<T> type();
Class<T> type();
default T getDefaultValue() { return null; }
}
......@@ -19,7 +19,6 @@ package com.netflix.client.config;
import static org.junit.Assert.*;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.config.ConfigurationManager;
......@@ -37,10 +36,6 @@ import java.util.Properties;
*
*/
public class ClientConfigTest {
@BeforeClass
public static void setUp() throws Exception {
}
......
......@@ -6,6 +6,7 @@ dependencies {
compile 'org.slf4j:slf4j-api:1.6.4'
compile "com.netflix.archaius:archaius-core:${archaius_version}"
testCompile project(":ribbon-archaius")
testCompile "junit:junit:${junit_version}"
testCompile "org.powermock:powermock-easymock-release-full:${powermock_version}"
testCompile "org.powermock:powermock-mockito-release-full:${powermock_version}"
......
......@@ -22,8 +22,8 @@ import java.util.List;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.appinfo.InstanceInfo.InstanceStatus;
import com.netflix.client.config.ClientConfigFactory;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.client.config.IClientConfigKey.Keys;
import com.netflix.config.ConfigurationManager;
......@@ -56,7 +56,7 @@ public class DiscoveryEnabledNIWSServerList extends AbstractServerList<Discovery
String datacenter;
String targetRegion;
int overridePort = DefaultClientConfigImpl.DEFAULT_PORT;
int overridePort = CommonClientConfigKey.Port.getDefaultValue();
boolean shouldUseOverridePort = false;
boolean shouldUseIpAddr = false;
......@@ -113,29 +113,23 @@ public class DiscoveryEnabledNIWSServerList extends AbstractServerList<Discovery
datacenter = ConfigurationManager.getDeploymentContext().getDeploymentDatacenter();
targetRegion = (String) clientConfig.getProperty(CommonClientConfigKey.TargetRegion);
shouldUseIpAddr = clientConfig.getPropertyAsBoolean(CommonClientConfigKey.UseIPAddrForServer, DefaultClientConfigImpl.DEFAULT_USEIPADDRESS_FOR_SERVER);
shouldUseIpAddr = clientConfig.getOrDefault(CommonClientConfigKey.UseIPAddrForServer);
// override client configuration and use client-defined port
if(clientConfig.getPropertyAsBoolean(CommonClientConfigKey.ForceClientPortConfiguration, false)){
if(isSecure){
if(clientConfig.containsProperty(CommonClientConfigKey.SecurePort)){
overridePort = clientConfig.getPropertyAsInteger(CommonClientConfigKey.SecurePort, DefaultClientConfigImpl.DEFAULT_PORT);
if (clientConfig.getPropertyAsBoolean(CommonClientConfigKey.ForceClientPortConfiguration, false)){
if (isSecure) {
if (clientConfig.containsProperty(CommonClientConfigKey.SecurePort)) {
overridePort = clientConfig.getOrDefault(CommonClientConfigKey.SecurePort);
shouldUseOverridePort = true;
}else{
} else {
logger.warn(clientName + " set to force client port but no secure port is set, so ignoring");
}
}else{
} else {
if(clientConfig.containsProperty(CommonClientConfigKey.Port)){
overridePort = clientConfig.getPropertyAsInteger(CommonClientConfigKey.Port, DefaultClientConfigImpl.DEFAULT_PORT);
overridePort = clientConfig.getOrDefault(CommonClientConfigKey.Port);
shouldUseOverridePort = true;
}else{
} else{
logger.warn(clientName + " set to force client port but no port is set, so ignoring");
}
}
......@@ -228,7 +222,7 @@ public class DiscoveryEnabledNIWSServerList extends AbstractServerList<Discovery
private static IClientConfig createClientConfig(String vipAddresses) {
IClientConfig clientConfig = DefaultClientConfigImpl.getClientConfigWithDefaultValues();
IClientConfig clientConfig = ClientConfigFactory.DEFAULT.newConfig();
clientConfig.set(Keys.DeploymentContextBasedVipAddresses, vipAddresses);
return clientConfig;
}
......
......@@ -18,7 +18,6 @@ package com.netflix.ribbon.guice;
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.netflix.client.config.ClientConfigFactory;
import com.netflix.client.config.ClientConfigFactory.DefaultClientConfigFactory;
import com.netflix.ribbon.DefaultResourceFactory;
import com.netflix.ribbon.RibbonResourceFactory;
import com.netflix.ribbon.RibbonTransportFactory;
......@@ -35,7 +34,7 @@ import com.netflix.ribbon.proxy.processor.AnnotationProcessorsProvider.DefaultAn
public class RibbonModule extends AbstractModule {
@Override
protected void configure() {
bind(ClientConfigFactory.class).to(DefaultClientConfigFactory.class).in(Scopes.SINGLETON);
bind(ClientConfigFactory.class).toInstance(ClientConfigFactory.DEFAULT);
bind(RibbonTransportFactory.class).to(DefaultRibbonTransportFactory.class).in(Scopes.SINGLETON);
bind(AnnotationProcessorsProvider.class).to(DefaultAnnotationProcessorsProvider.class).in(Scopes.SINGLETON);
bind(RibbonResourceFactory.class).to(DefaultResourceFactory.class).in(Scopes.SINGLETON);
......
......@@ -20,7 +20,6 @@ import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Scopes;
import com.netflix.client.config.ClientConfigFactory;
import com.netflix.client.config.ClientConfigFactory.DefaultClientConfigFactory;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.ribbon.transport.netty.http.LoadBalancingHttpClient;
......@@ -44,7 +43,7 @@ import static org.junit.Assert.assertTrue;
public class RxMovieProxyExampleTest extends RxMovieClientTestBase {
static class MyClientConfigFactory extends DefaultClientConfigFactory {
static class MyClientConfigFactory implements ClientConfigFactory {
@Override
public IClientConfig newConfig() {
return new DefaultClientConfigImpl() {
......
dependencies {
compile project(':ribbon-core')
compile project(':ribbon-archaius')
compile project(':ribbon-loadbalancer')
compile 'commons-collections:commons-collections:3.2.2'
compile 'org.apache.httpcomponents:httpclient:4.2.1'
......
......@@ -21,6 +21,7 @@ import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
......@@ -72,9 +73,7 @@ public class NFHttpClient extends DefaultHttpClient {
protected static final String EXECUTE_TRACER = "HttpClient-ExecuteTimer";
private static final DynamicIntProperty CORE_SIZE = new DynamicIntProperty("NFHttpClient.connectionPoolCleanerNumberCoreThreads", 2);
private static ScheduledExecutorService connectionPoolCleanUpScheduler;
private static ScheduledExecutorService connectionPoolCleanUpScheduler;
private HttpHost httpHost = null;
private HttpRoute httpRoute = null;
......@@ -99,9 +98,9 @@ public class NFHttpClient extends DefaultHttpClient {
ThreadFactory factory = (new ThreadFactoryBuilder()).setDaemon(true)
.setNameFormat("Connection pool clean up thread")
.build();
connectionPoolCleanUpScheduler = new ScheduledThreadPoolExectuorWithDynamicSize(CORE_SIZE, factory);
connectionPoolCleanUpScheduler = Executors.newScheduledThreadPool(2, factory);
}
protected NFHttpClient(String host, int port){
super(new ThreadSafeClientConnManager());
this.name = "UNNAMED_" + numNonNamedHttpClients.incrementAndGet();
......
......@@ -7,6 +7,8 @@ dependencies {
compile "com.google.guava:guava:${guava_version}"
compile "com.netflix.archaius:archaius-core:${archaius_version}"
compile 'com.netflix.netflix-commons:netflix-commons-util:0.1.1'
testCompile project(":ribbon-archaius")
testCompile 'junit:junit:4.11'
testCompile 'org.mockito:mockito-core:2.13.0'
testCompile 'org.awaitility:awaitility:3.0.0'
......
......@@ -17,8 +17,8 @@
*/
package com.netflix.client;
import com.netflix.client.config.ClientConfigFactory;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.servo.monitor.Monitors;
......@@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
/**
* A factory that creates client, load balancer and client configuration instances from properties. It also keeps mappings of client names to
......@@ -62,12 +63,11 @@ public class ClientFactory {
"A Rest Client with this name is already registered. Please use a different name");
}
try {
String clientClassName = (String) clientConfig.getProperty(CommonClientConfigKey.ClientClassName);
String clientClassName = clientConfig.getOrDefault(CommonClientConfigKey.ClientClassName);
client = (IClient<?, ?>) instantiateInstanceWithClientConfig(clientClassName, clientConfig);
boolean initializeNFLoadBalancer = Boolean.parseBoolean(clientConfig.getProperty(
CommonClientConfigKey.InitializeNFLoadBalancer, DefaultClientConfigImpl.DEFAULT_ENABLE_LOADBALANCER).toString());
boolean initializeNFLoadBalancer = clientConfig.getOrDefault(CommonClientConfigKey.InitializeNFLoadBalancer);
if (initializeNFLoadBalancer) {
loadBalancer = registerNamedLoadBalancerFromclientConfig(restClientName, clientConfig);
loadBalancer = registerNamedLoadBalancerFromclientConfig(restClientName, clientConfig);
}
if (client instanceof AbstractLoadBalancerAwareClient) {
((AbstractLoadBalancerAwareClient) client).setLoadBalancer(loadBalancer);
......@@ -93,7 +93,14 @@ public class ClientFactory {
* @throws RuntimeException if an error occurs in creating the client.
*/
public static synchronized IClient getNamedClient(String name) {
return getNamedClient(name, DefaultClientConfigImpl.class);
if (simpleClientMap.get(name) != null) {
return simpleClientMap.get(name);
}
try {
return registerClientFromProperties(name, getNamedConfig(name));
} catch (ClientException e) {
throw new RuntimeException("Unable to create client", e);
}
}
/**
......@@ -111,7 +118,7 @@ public class ClientFactory {
throw new RuntimeException("Unable to create client", e);
}
}
/**
* Creates a named client using a IClientConfig instance created off the configClass class object passed in as the parameter.
*
......@@ -123,12 +130,23 @@ public class ClientFactory {
}
/**
* Get the load balancer associated with the name, or create one with an instance {@link DefaultClientConfigImpl} if does not exist
* Get the load balancer associated with the name, or create one with the default {@link ClientConfigFactory} if does not exist
*
* @throws RuntimeException if any error occurs
*/
public static synchronized ILoadBalancer getNamedLoadBalancer(String name) {
return getNamedLoadBalancer(name, DefaultClientConfigImpl.class);
ILoadBalancer lb = namedLBMap.get(name);
if (lb != null) {
return lb;
} else {
try {
lb = registerNamedLoadBalancerFromclientConfig(name, getNamedConfig(name));
} catch (ClientException e) {
throw new RuntimeException("Unable to create load balancer", e);
}
namedLBMap.put(name, lb);
return lb;
}
}
/**
......@@ -163,7 +181,7 @@ public class ClientFactory {
}
ILoadBalancer lb = null;
try {
String loadBalancerClassName = (String) clientConfig.getProperty(CommonClientConfigKey.NFLoadBalancerClassName);
String loadBalancerClassName = clientConfig.getOrDefault(CommonClientConfigKey.NFLoadBalancerClassName);
lb = (ILoadBalancer) ClientFactory.instantiateInstanceWithClientConfig(loadBalancerClassName, clientConfig);
namedLBMap.put(name, lb);
logger.info("Client: {} instantiated a LoadBalancer: {}", name, lb);
......@@ -220,12 +238,12 @@ public class ClientFactory {
}
/**
* Get the client configuration given the name or create one with {@link DefaultClientConfigImpl} if it does not exist.
* Get the client configuration given the name or create one with the resolved {@link ClientConfigFactory} if it does not exist.
*
* @see #getNamedConfig(String, Class)
*/
public static IClientConfig getNamedConfig(String name) {
return getNamedConfig(name, DefaultClientConfigImpl.class);
return getNamedConfig(name, ClientConfigFactory.DEFAULT::newConfig);
}
/**
......@@ -233,24 +251,29 @@ public class ClientFactory {
* is created and {@link IClientConfig#loadProperties(String)} will be called.
*/
public static IClientConfig getNamedConfig(String name, Class<? extends IClientConfig> clientConfigClass) {
IClientConfig config = namedConfig.get(name);
if (config != null) {
return config;
} else {
return getNamedConfig(name, factoryFromConfigType(clientConfigClass));
}
public static IClientConfig getNamedConfig(String name, Supplier<IClientConfig> factory) {
return namedConfig.computeIfAbsent(name, ignore -> {
try {
config = (IClientConfig) clientConfigClass.newInstance();
IClientConfig config = factory.get();
config.loadProperties(name);
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Unable to create named client config '{}' instance for config class {}", name,
clientConfigClass, e);
return config;
} catch (Exception e) {
logger.error("Unable to create named client config '{}' instance for config factory {}", name, factory, e);
return null;
}
config.loadProperties(name);
IClientConfig old = namedConfig.putIfAbsent(name, config);
if (old != null) {
config = old;
}
return config;
}
});
}
private static Supplier<IClientConfig> factoryFromConfigType(Class<? extends IClientConfig> clientConfigClass) {
return () -> {
try {
return (IClientConfig) clientConfigClass.newInstance();
} catch (Exception e) {
throw new RuntimeException(String.format("Failed to create config for class '%s'", clientConfigClass));
}
};
}
}
......@@ -35,7 +35,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.Server;
import com.netflix.servo.monitor.Counter;
......@@ -126,26 +125,21 @@ public class PrimeConnections {
}
public PrimeConnections(String name, IClientConfig niwsClientConfig) {
int maxRetriesPerServerPrimeConnection = Integer.valueOf(DefaultClientConfigImpl.DEFAULT_MAX_RETRIES_PER_SERVER_PRIME_CONNECTION);
long maxTotalTimeToPrimeConnections = Long.valueOf(DefaultClientConfigImpl.DEFAULT_MAX_TOTAL_TIME_TO_PRIME_CONNECTIONS);
String primeConnectionsURI = DefaultClientConfigImpl.DEFAULT_PRIME_CONNECTIONS_URI;
String className = DefaultClientConfigImpl.DEFAULT_PRIME_CONNECTIONS_CLASS;
int maxRetriesPerServerPrimeConnection = CommonClientConfigKey.MaxRetriesPerServerPrimeConnection.getDefaultValue();
int maxTotalTimeToPrimeConnections = CommonClientConfigKey.MaxTotalTimeToPrimeConnections.getDefaultValue();
try {
maxRetriesPerServerPrimeConnection = Integer.parseInt(String.valueOf(niwsClientConfig.getProperty(
CommonClientConfigKey.MaxRetriesPerServerPrimeConnection, maxRetriesPerServerPrimeConnection)));
maxRetriesPerServerPrimeConnection = niwsClientConfig.getOrDefault(CommonClientConfigKey.MaxRetriesPerServerPrimeConnection);
} catch (Exception e) {
logger.warn("Invalid maxRetriesPerServerPrimeConnection");
}
try {
maxTotalTimeToPrimeConnections = Long.parseLong(String.valueOf(niwsClientConfig.getProperty(
CommonClientConfigKey.MaxTotalTimeToPrimeConnections,maxTotalTimeToPrimeConnections)));
maxTotalTimeToPrimeConnections = niwsClientConfig.getOrDefault(CommonClientConfigKey.MaxTotalTimeToPrimeConnections);
} catch (Exception e) {
logger.warn("Invalid maxTotalTimeToPrimeConnections");
}
primeConnectionsURI = String.valueOf(niwsClientConfig.getProperty(CommonClientConfigKey.PrimeConnectionsURI, primeConnectionsURI));
float primeRatio = Float.parseFloat(String.valueOf(niwsClientConfig.getProperty(CommonClientConfigKey.MinPrimeConnectionsRatio)));
className = niwsClientConfig.getPropertyAsString(CommonClientConfigKey.PrimeConnectionsClassName,
DefaultClientConfigImpl.DEFAULT_PRIME_CONNECTIONS_CLASS);
final String primeConnectionsURI = niwsClientConfig.getOrDefault(CommonClientConfigKey.PrimeConnectionsURI);
float primeRatio = niwsClientConfig.getOrDefault(CommonClientConfigKey.MinPrimeConnectionsRatio);
final String className = niwsClientConfig.getOrDefault(CommonClientConfigKey.PrimeConnectionsClassName);
try {
connector = (IPrimeConnection) Class.forName(className).newInstance();
connector.initWithNiwsConfig(niwsClientConfig);
......@@ -158,7 +152,7 @@ public class PrimeConnections {
public PrimeConnections(String name, int maxRetries,
long maxTotalTimeToPrimeConnections, String primeConnectionsURI) {
setUp(name, maxRetries, maxTotalTimeToPrimeConnections, primeConnectionsURI, DefaultClientConfigImpl.DEFAULT_MIN_PRIME_CONNECTIONS_RATIO);
setUp(name, maxRetries, maxTotalTimeToPrimeConnections, primeConnectionsURI, CommonClientConfigKey.MinPrimeConnectionsRatio.getDefaultValue());
}
public PrimeConnections(String name, int maxRetries,
......
......@@ -24,7 +24,6 @@ import com.netflix.client.ClientFactory;
import com.netflix.client.IClientConfigAware;
import com.netflix.client.PrimeConnections;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.servo.annotations.DataSourceType;
import com.netflix.servo.annotations.Monitor;
......@@ -195,8 +194,7 @@ public class BaseLoadBalancer extends AbstractLoadBalancer implements
((AbstractLoadBalancerPing) ping).setLoadBalancer(this);
}
logger.info("Client: {} instantiated a LoadBalancer: {}", name, this);
boolean enablePrimeConnections = clientConfig.get(
CommonClientConfigKey.EnablePrimeConnections, DefaultClientConfigImpl.DEFAULT_ENABLE_PRIME_CONNECTIONS);
boolean enablePrimeConnections = clientConfig.getOrDefault(CommonClientConfigKey.EnablePrimeConnections);
if (enablePrimeConnections) {
this.setEnablePrimingConnections(true);
......@@ -210,10 +208,8 @@ public class BaseLoadBalancer extends AbstractLoadBalancer implements
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
String ruleClassName = (String) clientConfig
.getProperty(CommonClientConfigKey.NFLoadBalancerRuleClassName);
String pingClassName = (String) clientConfig
.getProperty(CommonClientConfigKey.NFLoadBalancerPingClassName);
String ruleClassName = clientConfig.getOrDefault(CommonClientConfigKey.NFLoadBalancerRuleClassName);
String pingClassName = clientConfig.getOrDefault(CommonClientConfigKey.NFLoadBalancerPingClassName);
IRule rule;
IPing ping;
LoadBalancerStats stats;
......
......@@ -17,17 +17,12 @@
*/
package com.netflix.loadbalancer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.config.DynamicStringProperty;
/**
* Utility class that can load the List of Servers from a Configuration (i.e
......
......@@ -20,7 +20,6 @@ package com.netflix.loadbalancer;
import com.google.common.annotations.VisibleForTesting;
import com.netflix.client.ClientFactory;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.servo.annotations.DataSourceType;
import com.netflix.servo.annotations.Monitor;
......@@ -103,9 +102,7 @@ public class DynamicServerListLoadBalancer<T extends Server> extends BaseLoadBal
public void initWithNiwsConfig(IClientConfig clientConfig) {
try {
super.initWithNiwsConfig(clientConfig);
String niwsServerListClassName = clientConfig.getPropertyAsString(
CommonClientConfigKey.NIWSServerListClassName,
DefaultClientConfigImpl.DEFAULT_SEVER_LIST_CLASS);
String niwsServerListClassName = clientConfig.getOrDefault(CommonClientConfigKey.NIWSServerListClassName);
ServerList<T> niwsServerListImpl = (ServerList<T>) ClientFactory
.instantiateInstanceWithClientConfig(niwsServerListClassName, clientConfig);
......@@ -118,10 +115,8 @@ public class DynamicServerListLoadBalancer<T extends Server> extends BaseLoadBal
this.filter = niwsFilter;
}
String serverListUpdaterClassName = clientConfig.getPropertyAsString(
CommonClientConfigKey.ServerListUpdaterClassName,
DefaultClientConfigImpl.DEFAULT_SERVER_LIST_UPDATER_CLASS
);
String serverListUpdaterClassName = clientConfig.getOrDefault(
CommonClientConfigKey.ServerListUpdaterClassName);
this.serverListUpdater = (ServerListUpdater) ClientFactory
.instantiateInstanceWithClientConfig(serverListUpdaterClassName, clientConfig);
......
package com.netflix.loadbalancer;
import com.netflix.client.ClientFactory;
import com.netflix.client.config.ClientConfigFactory;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.client.config.IClientConfigKey;
......@@ -10,7 +10,7 @@ import java.util.List;
public class LoadBalancerBuilder<T extends Server> {
private IClientConfig config = DefaultClientConfigImpl.getClientConfigWithDefaultValues();
private IClientConfig config = ClientConfigFactory.findDefaultConfigFactory().newConfig();
private ServerListFilter serverListFilter;
private IRule rule;
private IPing ping = new DummyPing();
......@@ -65,7 +65,7 @@ public class LoadBalancerBuilder<T extends Server> {
}
private static IRule createRuleFromConfig(IClientConfig config) {
String ruleClassName = config.get(IClientConfigKey.Keys.NFLoadBalancerRuleClassName);
String ruleClassName = config.getOrDefault(IClientConfigKey.Keys.NFLoadBalancerRuleClassName);
if (ruleClassName == null) {
throw new IllegalArgumentException("NFLoadBalancerRuleClassName is not specified in the config");
}
......@@ -79,7 +79,7 @@ public class LoadBalancerBuilder<T extends Server> {
}
private static ServerListUpdater createServerListUpdaterFromConfig(IClientConfig config) {
String serverListUpdaterClassName = config.get(IClientConfigKey.Keys.ServerListUpdaterClassName);
String serverListUpdaterClassName = config.getOrDefault(IClientConfigKey.Keys.ServerListUpdaterClassName);
if (serverListUpdaterClassName == null) {
throw new IllegalArgumentException("NIWSServerListClassName is not specified in the config");
}
......
......@@ -24,7 +24,6 @@ import com.netflix.client.DefaultLoadBalancerRetryHandler;
import com.netflix.client.IClientConfigAware;
import com.netflix.client.RetryHandler;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.servo.monitor.Monitors;
import com.netflix.servo.monitor.Timer;
......@@ -49,13 +48,13 @@ public class LoadBalancerContext implements IClientConfigAware {
protected String vipAddresses;
protected int maxAutoRetriesNextServer = DefaultClientConfigImpl.DEFAULT_MAX_AUTO_RETRIES_NEXT_SERVER;
protected int maxAutoRetries = DefaultClientConfigImpl.DEFAULT_MAX_AUTO_RETRIES;
protected int maxAutoRetriesNextServer = CommonClientConfigKey.MaxAutoRetriesNextServer.getDefaultValue();
protected int maxAutoRetries = CommonClientConfigKey.MaxAutoRetries.getDefaultValue();
protected RetryHandler defaultRetryHandler = new DefaultLoadBalancerRetryHandler();
protected boolean okToRetryOnAllOperations = DefaultClientConfigImpl.DEFAULT_OK_TO_RETRY_ON_ALL_OPERATIONS.booleanValue();
protected boolean okToRetryOnAllOperations = CommonClientConfigKey.OkToRetryOnAllOperations.getDefaultValue();
private ILoadBalancer lb;
......@@ -92,10 +91,9 @@ public class LoadBalancerContext implements IClientConfigAware {
clientName = "default";
}
vipAddresses = clientConfig.resolveDeploymentContextbasedVipAddresses();
maxAutoRetries = clientConfig.getPropertyAsInteger(CommonClientConfigKey.MaxAutoRetries, DefaultClientConfigImpl.DEFAULT_MAX_AUTO_RETRIES);
maxAutoRetriesNextServer = clientConfig.getPropertyAsInteger(CommonClientConfigKey.MaxAutoRetriesNextServer,maxAutoRetriesNextServer);
okToRetryOnAllOperations = clientConfig.getPropertyAsBoolean(CommonClientConfigKey.OkToRetryOnAllOperations, okToRetryOnAllOperations);
maxAutoRetries = clientConfig.getOrDefault(CommonClientConfigKey.MaxAutoRetries);
maxAutoRetriesNextServer = clientConfig.getOrDefault(CommonClientConfigKey.MaxAutoRetriesNextServer);
okToRetryOnAllOperations = clientConfig.getOrDefault(CommonClientConfigKey.OkToRetryOnAllOperations);
defaultRetryHandler = new DefaultLoadBalancerRetryHandler(clientConfig);
tracer = getExecuteTracer();
......
......@@ -24,7 +24,7 @@ import java.util.Set;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.netflix.client.IClientConfigAware;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.DynamicFloatProperty;
import com.netflix.config.DynamicIntProperty;
......@@ -43,13 +43,13 @@ public class ServerListSubsetFilter<T extends Server> extends ZoneAffinityServer
private Random random = new Random();
private volatile Set<T> currentSubset = Sets.newHashSet();
private DynamicIntProperty sizeProp = new DynamicIntProperty(DefaultClientConfigImpl.DEFAULT_PROPERTY_NAME_SPACE + ".ServerListSubsetFilter.size", 20);
private DynamicIntProperty sizeProp = new DynamicIntProperty(CommonClientConfigKey.DEFAULT_NAME_SPACE + ".ServerListSubsetFilter.size", 20);
private DynamicFloatProperty eliminationPercent =
new DynamicFloatProperty(DefaultClientConfigImpl.DEFAULT_PROPERTY_NAME_SPACE + ".ServerListSubsetFilter.forceEliminatePercent", 0.1f);
new DynamicFloatProperty(CommonClientConfigKey.DEFAULT_NAME_SPACE + ".ServerListSubsetFilter.forceEliminatePercent", 0.1f);
private DynamicIntProperty eliminationFailureCountThreshold =
new DynamicIntProperty(DefaultClientConfigImpl.DEFAULT_PROPERTY_NAME_SPACE + ".ServerListSubsetFilter.eliminationFailureThresold", 0);
new DynamicIntProperty(CommonClientConfigKey.DEFAULT_NAME_SPACE + ".ServerListSubsetFilter.eliminationFailureThresold", 0);
private DynamicIntProperty eliminationConnectionCountThreshold =
new DynamicIntProperty(DefaultClientConfigImpl.DEFAULT_PROPERTY_NAME_SPACE + ".ServerListSubsetFilter.eliminationConnectionThresold", 0);
new DynamicIntProperty(CommonClientConfigKey.DEFAULT_NAME_SPACE + ".ServerListSubsetFilter.eliminationConnectionThresold", 0);
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
......
......@@ -27,18 +27,12 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.netflix.client.IClientConfigAware;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.ConfigurationManager;
import com.netflix.config.DeploymentContext.ContextKey;
import com.netflix.config.DynamicDoubleProperty;
import com.netflix.config.DynamicIntProperty;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.loadbalancer.AbstractServerListFilter;
import com.netflix.loadbalancer.LoadBalancerStats;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ZoneAffinityPredicate;
import com.netflix.loadbalancer.ZoneSnapshot;
import com.netflix.servo.monitor.Counter;
import com.netflix.servo.monitor.Monitors;
......@@ -56,8 +50,8 @@ import com.netflix.servo.monitor.Monitors;
public class ZoneAffinityServerListFilter<T extends Server> extends
AbstractServerListFilter<T> implements IClientConfigAware {
private volatile boolean zoneAffinity = DefaultClientConfigImpl.DEFAULT_ENABLE_ZONE_AFFINITY;
private volatile boolean zoneExclusive = DefaultClientConfigImpl.DEFAULT_ENABLE_ZONE_EXCLUSIVITY;
private volatile boolean zoneAffinity = CommonClientConfigKey.EnableZoneAffinity.getDefaultValue();
private volatile boolean zoneExclusive = CommonClientConfigKey.EnableZoneExclusivity.getDefaultValue();
private DynamicDoubleProperty activeReqeustsPerServerThreshold;
private DynamicDoubleProperty blackOutServerPercentageThreshold;
private DynamicIntProperty availableServersThreshold;
......
dependencies {
compile project(':ribbon-core')
compile project(':ribbon-archaius')
compile project(':ribbon-loadbalancer')
compile "io.reactivex:rxjava:${rx_java_version}"
compile "io.reactivex:rxnetty:${rx_netty_version}"
......
......@@ -22,7 +22,6 @@ import io.netty.buffer.ByteBufAllocator;
import io.netty.channel.ChannelOption;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.reactivex.netty.client.ClientMetricsEvent;
import io.reactivex.netty.client.CompositePoolLimitDeterminationStrategy;
import io.reactivex.netty.client.RxClient;
......@@ -56,7 +55,6 @@ import rx.functions.Func2;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.netflix.client.ClientException;
import com.netflix.client.RequestSpecificRetryHandler;
import com.netflix.client.RetryHandler;
import com.netflix.client.config.CommonClientConfigKey;
......
rootProject.name='ribbon'
include 'ribbon-core', 'ribbon-loadbalancer', 'ribbon-httpclient', 'ribbon-eureka', 'ribbon-transport', 'ribbon-examples', 'ribbon-test', 'ribbon-guice', 'ribbon', 'ribbon-evcache'
include 'ribbon-core'
include 'ribbon-archaius'
include 'ribbon-loadbalancer'
include 'ribbon-httpclient'
include 'ribbon-eureka'
include 'ribbon-transport'
include 'ribbon-examples'
include 'ribbon-test'
include 'ribbon-guice'
include 'ribbon'
include 'ribbon-evcache'
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册