Skip to content

Commit

Permalink
DDB is considered healthy in UPDATING status
Browse files Browse the repository at this point in the history
  • Loading branch information
Cai41 authored and Cory-Bradshaw committed Jun 24, 2020
1 parent be1e3cd commit 8767725
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ public boolean createLeaseTableIfNotExists(@NonNull final Long readCapacity, @No
*/
@Override
public boolean leaseTableExists() throws DependencyException {
return TableStatus.ACTIVE == tableStatus();
TableStatus tableStatus = tableStatus();
return TableStatus.ACTIVE == tableStatus || TableStatus.UPDATING == tableStatus;
}

private TableStatus tableStatus() throws DependencyException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
package software.amazon.kinesis.leases.dynamodb;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyLong;
Expand Down Expand Up @@ -54,6 +56,8 @@
import software.amazon.awssdk.services.dynamodb.model.ResourceNotFoundException;
import software.amazon.awssdk.services.dynamodb.model.ScanRequest;
import software.amazon.awssdk.services.dynamodb.model.ScanResponse;
import software.amazon.awssdk.services.dynamodb.model.TableDescription;
import software.amazon.awssdk.services.dynamodb.model.TableStatus;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemRequest;
import software.amazon.awssdk.services.dynamodb.model.UpdateItemResponse;
import software.amazon.awssdk.services.dynamodb.model.BillingMode;
Expand Down Expand Up @@ -149,6 +153,46 @@ public void testCreateLeaseIfNotExistsTimesOut() throws Exception {
verifyCancel(mockPutItemFuture, () -> leaseRefresher.createLeaseIfNotExists(lease));
}

@Test
public void testWaitUntilLeaseTableExistsUpdatingStatus() throws Exception {
when(dynamoDbClient.describeTable(any(DescribeTableRequest.class))).thenReturn(mockDescribeTableFuture);
when(mockDescribeTableFuture.get(anyLong(), any()))
.thenReturn(DescribeTableResponse.builder()
.table(TableDescription.builder().tableStatus(TableStatus.UPDATING).build())
.build());
assertTrue(leaseRefresher.waitUntilLeaseTableExists(0, 0));
}

@Test
public void testWaitUntilLeaseTableExistsActiveStatus() throws Exception {
when(dynamoDbClient.describeTable(any(DescribeTableRequest.class))).thenReturn(mockDescribeTableFuture);
when(mockDescribeTableFuture.get(anyLong(), any()))
.thenReturn(DescribeTableResponse.builder()
.table(TableDescription.builder().tableStatus(TableStatus.ACTIVE).build())
.build());
assertTrue(leaseRefresher.waitUntilLeaseTableExists(0, 0));
}

@Test
public void testWaitUntilLeaseTableExistsCreatingStatus() throws Exception {
when(dynamoDbClient.describeTable(any(DescribeTableRequest.class))).thenReturn(mockDescribeTableFuture);
when(mockDescribeTableFuture.get(anyLong(), any()))
.thenReturn(DescribeTableResponse.builder()
.table(TableDescription.builder().tableStatus(TableStatus.CREATING).build())
.build());
assertFalse(leaseRefresher.waitUntilLeaseTableExists(0, 0));
}

@Test
public void testWaitUntilLeaseTableExistsDeletingStatus() throws Exception {
when(dynamoDbClient.describeTable(any(DescribeTableRequest.class))).thenReturn(mockDescribeTableFuture);
when(mockDescribeTableFuture.get(anyLong(), any()))
.thenReturn(DescribeTableResponse.builder()
.table(TableDescription.builder().tableStatus(TableStatus.DELETING).build())
.build());
assertFalse(leaseRefresher.waitUntilLeaseTableExists(0, 0));
}

@Test
public void testGetLeaseTimesOut() throws Exception {
TimeoutException te = setRuleForDependencyTimeout();
Expand Down

0 comments on commit 8767725

Please sign in to comment.