Check for lease table using DescribeTable prior to trying to create it

This commit is contained in:
Avram Lyon 2015-09-23 10:36:49 -07:00
parent d824147d7e
commit e7ea3bb537

View file

@ -99,11 +99,25 @@ public class LeaseManager<T extends Lease> implements ILeaseManager<T> {
*/ */
@Override @Override
public boolean createLeaseTableIfNotExists(Long readCapacity, Long writeCapacity) public boolean createLeaseTableIfNotExists(Long readCapacity, Long writeCapacity)
throws ProvisionedThroughputException, DependencyException { throws ProvisionedThroughputException, DependencyException {
verifyNotNull(readCapacity, "readCapacity cannot be null"); verifyNotNull(readCapacity, "readCapacity cannot be null");
verifyNotNull(writeCapacity, "writeCapacity cannot be null"); verifyNotNull(writeCapacity, "writeCapacity cannot be null");
boolean tableDidNotExist = true; boolean tableDidNotExist = true;
// First, attempt to describe the table and short-circuit if it already existed
try {
dynamoDBClient.describeTable(table);
return false;
} catch (ResourceNotFoundException e) {
tableDidNotExist = true;
} catch (AmazonClientException e) {
// In order to insulate ourselves from failures specific to DescribeTable, we swallow this exception;
// we can still rely on CreateTable request failing if present.
LOG.error("Failed to retrieve table description for table " + table, e);
}
// We believe the table does not exist, so we proceed to creating it
CreateTableRequest request = new CreateTableRequest(); CreateTableRequest request = new CreateTableRequest();
request.setTableName(table); request.setTableName(table);
request.setKeySchema(serializer.getKeySchema()); request.setKeySchema(serializer.getKeySchema());