summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2014-05-24 08:56:20 -0700
committerJesse Morgan <jesse@jesterpm.net>2014-05-24 08:56:20 -0700
commit706466db4a2cdf9978543d2ab5b1e5af1bdbaf09 (patch)
treec572e83d49053a119a2d7966a9ba129f55301322 /src
parentb191ad08fa7bc43706bbed52a46bc463e5affbb0 (diff)
Adding region and table name prefix support.
Diffstat (limited to 'src')
-rw-r--r--src/com/p4square/grow/backend/DynamoGrowData.java18
-rw-r--r--src/com/p4square/grow/backend/dynamo/DbTool.java20
-rw-r--r--src/com/p4square/grow/backend/dynamo/DynamoDatabase.java61
-rw-r--r--src/grow.properties5
4 files changed, 55 insertions, 49 deletions
diff --git a/src/com/p4square/grow/backend/DynamoGrowData.java b/src/com/p4square/grow/backend/DynamoGrowData.java
index 4123999..3b38eac 100644
--- a/src/com/p4square/grow/backend/DynamoGrowData.java
+++ b/src/com/p4square/grow/backend/DynamoGrowData.java
@@ -55,23 +55,7 @@ class DynamoGrowData implements GrowData {
public DynamoGrowData(final Config config) {
mConfig = config;
- AWSCredentials creds = new AWSCredentials() {
- @Override
- public String getAWSAccessKeyId() {
- return config.getString("awsAccessKey");
- }
- @Override
- public String getAWSSecretKey() {
- return config.getString("awsSecretKey");
- }
- };
-
- String endpoint = config.getString("dynamoEndpoint");
- if (endpoint != null) {
- mDatabase = new DynamoDatabase(creds, endpoint);
- } else {
- mDatabase = new DynamoDatabase(creds);
- }
+ mDatabase = new DynamoDatabase(config);
mUserRecordProvider = new DelegateProvider<String, DynamoKey, UserRecord>(
new DynamoProviderImpl<UserRecord>(mDatabase, UserRecord.class)) {
diff --git a/src/com/p4square/grow/backend/dynamo/DbTool.java b/src/com/p4square/grow/backend/dynamo/DbTool.java
index c904844..4bccd8b 100644
--- a/src/com/p4square/grow/backend/dynamo/DbTool.java
+++ b/src/com/p4square/grow/backend/dynamo/DbTool.java
@@ -62,6 +62,8 @@ public class DbTool {
mConfig = new Config();
try {
+ mConfig.updateConfig(DbTool.class.getResourceAsStream("/grow.properties"));
+
int offset = 0;
while (offset < args.length) {
if ("--domain".equals(args[offset])) {
@@ -126,23 +128,7 @@ public class DbTool {
private static DynamoDatabase getDatabase() {
if (mDatabase == null) {
- AWSCredentials creds = new AWSCredentials() {
- @Override
- public String getAWSAccessKeyId() {
- return mConfig.getString("awsAccessKey");
- }
- @Override
- public String getAWSSecretKey() {
- return mConfig.getString("awsSecretKey");
- }
- };
-
- String endpoint = mConfig.getString("dynamoEndpoint");
- if (endpoint != null) {
- mDatabase = new DynamoDatabase(creds, endpoint);
- } else {
- mDatabase = new DynamoDatabase(creds);
- }
+ mDatabase = new DynamoDatabase(mConfig);
}
return mDatabase;
diff --git a/src/com/p4square/grow/backend/dynamo/DynamoDatabase.java b/src/com/p4square/grow/backend/dynamo/DynamoDatabase.java
index 076844f..0c77c49 100644
--- a/src/com/p4square/grow/backend/dynamo/DynamoDatabase.java
+++ b/src/com/p4square/grow/backend/dynamo/DynamoDatabase.java
@@ -10,6 +10,9 @@ import java.util.LinkedHashMap;
import java.util.Map;
import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
+import com.amazonaws.regions.Region;
+import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.model.AttributeAction;
import com.amazonaws.services.dynamodbv2.model.AttributeDefinition;
@@ -33,19 +36,47 @@ import com.amazonaws.services.dynamodbv2.model.UpdateItemResult;
import com.amazonaws.services.dynamodbv2.model.UpdateTableRequest;
import com.amazonaws.services.dynamodbv2.model.UpdateTableResult;
+import com.p4square.grow.config.Config;
+
/**
* A wrapper around the Dynamo API.
*/
public class DynamoDatabase {
private final AmazonDynamoDBClient mClient;
+ private final String mTablePrefix;
- public DynamoDatabase(AWSCredentials awsCreds) {
- mClient = new AmazonDynamoDBClient(awsCreds);
- }
+ public DynamoDatabase(final Config config) {
+ AWSCredentials creds;
+
+ String awsAccessKey = config.getString("awsAccessKey");
+ if (awsAccessKey != null) {
+ creds = new AWSCredentials() {
+ @Override
+ public String getAWSAccessKeyId() {
+ return config.getString("awsAccessKey");
+ }
+ @Override
+ public String getAWSSecretKey() {
+ return config.getString("awsSecretKey");
+ }
+ };
+ } else {
+ creds = new DefaultAWSCredentialsProviderChain().getCredentials();
+ }
+
+ mClient = new AmazonDynamoDBClient(creds);
+
+ String endpoint = config.getString("dynamoEndpoint");
+ if (endpoint != null) {
+ mClient.setEndpoint(endpoint);
+ }
+
+ String region = config.getString("awsRegion");
+ if (region != null) {
+ mClient.setRegion(Region.getRegion(Regions.fromName(region)));
+ }
- public DynamoDatabase(AWSCredentials awsCreds, String endpoint) {
- this(awsCreds);
- mClient.setEndpoint(endpoint);
+ mTablePrefix = config.getString("dynamoTablePrefix", "");
}
public void createTable(String name, long reads, long writes) {
@@ -62,7 +93,7 @@ public class DynamoDatabase {
.withWriteCapacityUnits(writes);
CreateTableRequest request = new CreateTableRequest()
- .withTableName(name)
+ .withTableName(mTablePrefix + name)
.withAttributeDefinitions(attributeDefinitions)
.withKeySchema(ks)
.withProvisionedThroughput(provisionedThroughput);
@@ -76,7 +107,7 @@ public class DynamoDatabase {
.withWriteCapacityUnits(writes);
UpdateTableRequest request = new UpdateTableRequest()
- .withTableName(name)
+ .withTableName(mTablePrefix + name)
.withProvisionedThroughput(provisionedThroughput);
UpdateTableResult result = mClient.updateTable(request);
@@ -84,14 +115,14 @@ public class DynamoDatabase {
public void deleteTable(String name) {
DeleteTableRequest deleteTableRequest = new DeleteTableRequest()
- .withTableName(name);
+ .withTableName(mTablePrefix + name);
DeleteTableResult result = mClient.deleteTable(deleteTableRequest);
}
public Map<String, String> getKey(final DynamoKey key) {
GetItemRequest getItemRequest = new GetItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withKey(generateKey(key));
GetItemResult getItemResult = mClient.getItem(getItemRequest);
@@ -113,7 +144,7 @@ public class DynamoDatabase {
checkAttributeKey(key);
GetItemRequest getItemRequest = new GetItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withKey(generateKey(key))
.withAttributesToGet(key.getAttribute());
@@ -149,7 +180,7 @@ public class DynamoDatabase {
item.putAll(generateKey(key));
PutItemRequest putItemRequest = new PutItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withItem(item);
PutItemResult result = mClient.putItem(putItemRequest);
@@ -171,7 +202,7 @@ public class DynamoDatabase {
.withValue(new AttributeValue().withS(value)));
UpdateItemRequest updateItemRequest = new UpdateItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withKey(generateKey(key))
.withAttributeUpdates(updateItem);
// TODO: Check conditions.
@@ -186,7 +217,7 @@ public class DynamoDatabase {
*/
public void deleteKey(final DynamoKey key) {
DeleteItemRequest deleteItemRequest = new DeleteItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withKey(generateKey(key));
DeleteItemResult result = mClient.deleteItem(deleteItemRequest);
@@ -205,7 +236,7 @@ public class DynamoDatabase {
new AttributeValueUpdate().withAction(AttributeAction.DELETE));
UpdateItemRequest updateItemRequest = new UpdateItemRequest()
- .withTableName(key.getTable())
+ .withTableName(mTablePrefix + key.getTable())
.withKey(generateKey(key))
.withAttributeUpdates(updateItem);
diff --git a/src/grow.properties b/src/grow.properties
index 941cc0e..cb3b86b 100644
--- a/src/grow.properties
+++ b/src/grow.properties
@@ -12,3 +12,8 @@ prod.postAccountCreationPage = http://foursquaregrow.com/login.html
dev.clusterName = Dev Cluster
prod.clusterName = Prod Cluster
+
+*.awsRegion = us-west-2
+prod.dynamoTablePrefix = grow-prod-
+serverprod.dynamoTablePrefix = grow-prod-
+dev.dynamoTablePrefix = grow-dev-