-
Notifications
You must be signed in to change notification settings - Fork 355
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding in bridge for creating java driver config from astyanax config
- Loading branch information
Showing
5 changed files
with
148 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
135 changes: 135 additions & 0 deletions
135
astyanax-cql/src/main/java/com/netflix/astyanax/cql/JavaDriverConfigBridge.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
package com.netflix.astyanax.cql; | ||
|
||
import com.datastax.driver.core.AuthProvider; | ||
import com.datastax.driver.core.Configuration; | ||
import com.datastax.driver.core.ConsistencyLevel; | ||
import com.datastax.driver.core.HostDistance; | ||
import com.datastax.driver.core.MetricsOptions; | ||
import com.datastax.driver.core.PlainTextAuthProvider; | ||
import com.datastax.driver.core.PoolingOptions; | ||
import com.datastax.driver.core.ProtocolOptions; | ||
import com.datastax.driver.core.QueryOptions; | ||
import com.datastax.driver.core.SocketOptions; | ||
import com.datastax.driver.core.policies.LoadBalancingPolicy; | ||
import com.datastax.driver.core.policies.Policies; | ||
import com.datastax.driver.core.policies.RoundRobinPolicy; | ||
import com.datastax.driver.core.policies.TokenAwarePolicy; | ||
import com.netflix.astyanax.AstyanaxConfiguration; | ||
import com.netflix.astyanax.AuthenticationCredentials; | ||
import com.netflix.astyanax.connectionpool.ConnectionPoolConfiguration; | ||
import com.netflix.astyanax.cql.util.ConsistencyLevelTransform; | ||
|
||
public class JavaDriverConfigBridge { | ||
|
||
private final AstyanaxConfiguration asConfig; | ||
private final ConnectionPoolConfiguration cpConfig; | ||
|
||
public JavaDriverConfigBridge(AstyanaxConfiguration asConfig, ConnectionPoolConfiguration cpConfig) { | ||
this.asConfig = asConfig; | ||
this.cpConfig = cpConfig; | ||
} | ||
|
||
public Configuration getJDConfig() { | ||
|
||
return new Configuration(getPolicies(), | ||
getProtocolOptions(), | ||
getPoolingOptions(), | ||
getSocketOptions(), | ||
getMetricsOptions(), | ||
getQueryOptions()); | ||
} | ||
|
||
private Policies getPolicies() { | ||
return new Policies(getLB(), | ||
Policies.defaultReconnectionPolicy(), | ||
Policies.defaultRetryPolicy(), | ||
Policies.defaultAddressTranslater()); | ||
} | ||
|
||
private LoadBalancingPolicy getLB() { | ||
|
||
switch (asConfig.getConnectionPoolType()) { | ||
case ROUND_ROBIN: | ||
return new RoundRobinPolicy(); | ||
case TOKEN_AWARE: | ||
return new TokenAwarePolicy(new RoundRobinPolicy()); | ||
case BAG: | ||
throw new RuntimeException("Unsupported connection pool type, use ROUND_ROBIN or TOKEN_AWARE"); | ||
default: | ||
return new RoundRobinPolicy(); | ||
} | ||
} | ||
|
||
private ProtocolOptions getProtocolOptions() { | ||
|
||
int port = cpConfig.getPort(); | ||
int protocolVersion = -1; // use default | ||
|
||
AuthProvider authProvider = AuthProvider.NONE; | ||
|
||
AuthenticationCredentials creds = cpConfig.getAuthenticationCredentials(); | ||
if (creds != null) { | ||
authProvider = new PlainTextAuthProvider(creds.getUsername(), creds.getPassword()); | ||
} | ||
|
||
return new ProtocolOptions(port, protocolVersion, null, authProvider); | ||
} | ||
|
||
private PoolingOptions getPoolingOptions() { | ||
return new CpConfigBasedPoolingOptions(); | ||
} | ||
|
||
private SocketOptions getSocketOptions() { | ||
return new CpConfigBasedSocketOptions(); | ||
} | ||
|
||
private MetricsOptions getMetricsOptions() { | ||
return new MetricsOptions(); | ||
} | ||
|
||
private QueryOptions getQueryOptions() { | ||
return new ConfigBasedQueryOptions(); | ||
} | ||
|
||
private class CpConfigBasedPoolingOptions extends PoolingOptions { | ||
|
||
private CpConfigBasedPoolingOptions() { | ||
|
||
} | ||
|
||
@Override | ||
public int getCoreConnectionsPerHost(HostDistance distance) { | ||
return cpConfig.getMaxConnsPerHost() > 4 ? cpConfig.getMaxConnsPerHost()/2 : cpConfig.getMaxConnsPerHost(); | ||
} | ||
|
||
@Override | ||
public int getMaxConnectionsPerHost(HostDistance distance) { | ||
return cpConfig.getMaxConnsPerHost(); | ||
} | ||
} | ||
|
||
private class CpConfigBasedSocketOptions extends SocketOptions { | ||
|
||
private CpConfigBasedSocketOptions() { | ||
|
||
} | ||
|
||
@Override | ||
public int getConnectTimeoutMillis() { | ||
return cpConfig.getConnectTimeout(); | ||
} | ||
|
||
@Override | ||
public int getReadTimeoutMillis() { | ||
return cpConfig.getSocketTimeout(); | ||
} | ||
} | ||
|
||
private class ConfigBasedQueryOptions extends QueryOptions { | ||
|
||
@Override | ||
public ConsistencyLevel getConsistencyLevel() { | ||
return ConsistencyLevelTransform.getConsistencyLevel(asConfig.getDefaultReadConsistencyLevel()); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters