@Override public void delete(final GeoWaveRow row) { final DynamoDBRow dynRow = (DynamoDBRow) row; for (final Map<String, AttributeValue> attributeMappings : dynRow.getAttributeMapping()) { operations.getClient().deleteItem( tableName, Maps.filterEntries(attributeMappings, new Predicate<Entry<String, AttributeValue>>() { @Override public boolean apply(final Entry<String, AttributeValue> input) { return DynamoDBRow.GW_PARTITION_ID_KEY.equals(input.getKey()) || DynamoDBRow.GW_RANGE_KEY.equals(input.getKey()); } })); } }
@Override public void deleteAll() throws Exception { final ListTablesResult tables = client.listTables(); for (final String tableName : tables.getTableNames()) { if ((gwNamespace == null) || tableName.startsWith(gwNamespace)) { client.deleteTable(new DeleteTableRequest(tableName)); } } tableExistsCache.clear(); }
getDynamodb().putItemAsync((PutItemRequest) request, (AsyncHandler<PutItemRequest, PutItemResult>) getHandler(toSubmit, failedRecords, retryCount, doneSignal, record)); } else if (request instanceof DeleteItemRequest) { // DELETE getDynamodb().deleteItemAsync((DeleteItemRequest) request, (AsyncHandler<DeleteItemRequest, DeleteItemResult>) getHandler(toSubmit, failedRecords, retryCount, doneSignal, record)); } else if (request instanceof UpdateItemRequest) { // UPDATE getDynamodb().updateItemAsync((UpdateItemRequest) request, (AsyncHandler<UpdateItemRequest, UpdateItemResult>) getHandler(toSubmit, failedRecords, retryCount, doneSignal, record)); } else { // Should only happen if DynamoDB allows a new operation other than {PutItem, DeleteItem,
client.batchWriteItemAsync( batchRequest, new AsyncHandler<BatchWriteItemRequest, BatchWriteItemResult>() { } else { final BatchWriteItemResult response = client.batchWriteItem(new BatchWriteItemRequest(writes)); retry(response.getUnprocessedItems());
@BeforeClass public static void init() { dynamoDB = DYNAMO_DB_RUNNING.getDynamoDB(); try { dynamoDB.deleteTableAsync(DynamoDbLockRegistry.DEFAULT_TABLE_NAME); Waiter<DescribeTableRequest> waiter = dynamoDB.waiters() .tableNotExists(); waiter.run(new WaiterParameters<>(new DescribeTableRequest(DynamoDbLockRegistry.DEFAULT_TABLE_NAME)) .withPollingStrategy(new PollingStrategy(new MaxAttemptsRetryStrategy(25), new FixedDelayStrategy(1)))); } catch (Exception e) { } }
@Override public void onSuccess(CreateTableRequest request, CreateTableResult createTableResult) { Waiter<DescribeTableRequest> waiter = DynamoDbMetadataStore.this.dynamoDB.waiters() .tableExists(); WaiterParameters<DescribeTableRequest> waiterParameters = new WaiterParameters<>( new DescribeTableRequest(DynamoDbMetadataStore.this.table.getTableName())) .withPollingStrategy( new PollingStrategy( new MaxAttemptsRetryStrategy(DynamoDbMetadataStore.this.createTableRetries), new FixedDelayStrategy(DynamoDbMetadataStore.this.createTableDelay))); waiter.runAsync(waiterParameters, new WaiterHandler<DescribeTableRequest>() { @Override public void onWaitSuccess(DescribeTableRequest request) { updateTimeToLiveIfAny(); DynamoDbMetadataStore.this.createTableLatch.countDown(); DynamoDbMetadataStore.this.table.describe(); } @Override public void onWaitFailure(Exception e) { logger.error("Cannot describe DynamoDb table: " + DynamoDbMetadataStore.this.table.getTableName(), e); DynamoDbMetadataStore.this.createTableLatch.countDown(); } }); }
new AttributeValue().withB(ByteBuffer.wrap(metadata.getPrimaryId()))); final QueryResult queryResult = operations.getClient().query(queryRequest); for (Map<String, AttributeValue> entry : queryResult.getItems()) { Map<String, AttributeValue> key = new HashMap<>(); DynamoDBOperations.METADATA_TIMESTAMP_KEY, entry.get(DynamoDBOperations.METADATA_TIMESTAMP_KEY)); operations.getClient().deleteItem(tableName, key);
private void updateTimeToLiveIfAny() { if (this.timeToLive != null) { UpdateTimeToLiveRequest updateTimeToLiveRequest = new UpdateTimeToLiveRequest() .withTableName(this.table.getTableName()) .withTimeToLiveSpecification( new TimeToLiveSpecification() .withAttributeName(TTL) .withEnabled(this.timeToLive > 0)); try { this.dynamoDB.updateTimeToLive(updateTimeToLiveRequest); } catch (AmazonDynamoDBException e) { if (logger.isWarnEnabled()) { logger.warn("The error during 'updateTimeToLive' request", e); } } } }
this.dynamoDB.createTableAsync(createTableRequest, new AsyncHandler<CreateTableRequest, CreateTableResult>() {
private void retryAsync(final Map<String, List<WriteRequest>> map) { for (final Entry<String, List<WriteRequest>> requests : map.entrySet()) { for (final WriteRequest r : requests.getValue()) { if (r.getPutRequest() != null) { /** * The code is pretty similar to retry. The only difference is retryAsync uses * putItemAsync instead of putItem */ final PutItemRequest putRequest = new PutItemRequest(requests.getKey(), r.getPutRequest().getItem()); final Future<PutItemResult> future = client.putItemAsync(putRequest, new AsyncHandler<PutItemRequest, PutItemResult>() { @Override public void onError(final Exception exception) { LOGGER.warn("Putitem Async failed in Dynamo"); futureMap.remove(putRequest); } @Override public void onSuccess(final PutItemRequest request, final PutItemResult result) { if (futureMap.remove(request) == null) { LOGGER.warn("Unable to delete PutItemRequest from futuresMap "); } return; } }); futureMap.put(putRequest, future); } } } }
@AfterClass public static void destroy() { dynamoDB.deleteTable(DynamoDbLockRegistry.DEFAULT_TABLE_NAME); }
@Override public Statement apply(Statement base, Description description) { assumeTrue(dynamoDbOnline.get(this.port)); String url = "http://localhost:" + this.port; this.amazonDynamoDB = AmazonDynamoDBAsyncClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("", ""))) .withClientConfiguration( new ClientConfiguration() .withMaxErrorRetry(0) .withConnectionTimeout(1000)) .withEndpointConfiguration( new AwsClientBuilder.EndpointConfiguration(url, Regions.DEFAULT_REGION.getName())) .build(); try { this.amazonDynamoDB.listTables(); } catch (SdkClientException e) { logger.warn("Tests not running because no DynamoDb on " + url, e); assumeNoException(e); } return super.apply(base, description); }
private BatchGetItemResult getResults( final Map<String, KeysAndAttributes> requestItems, final short adapterId, final Map<ByteArray, GeoWaveRow> resultMap) { final BatchGetItemRequest request = new BatchGetItemRequest(requestItems); final BatchGetItemResult result = client.batchGetItem(request); result.getResponses().values().forEach(results -> results.stream().forEach(objMap -> { final byte[] dataId = objMap.get(DynamoDBRow.GW_PARTITION_ID_KEY).getB().array(); final AttributeValue valueAttr = objMap.get(DynamoDBRow.GW_VALUE_KEY); final byte[] value = valueAttr == null ? null : valueAttr.getB().array(); resultMap.put( new ByteArray(dataId), DataIndexUtils.deserializeDataIndexRow(dataId, adapterId, value, false)); })); return result; }
public void deleteRowsFromDataIndex(final byte[][] dataIds, final short adapterId) { final String tableName = getQualifiedTableName(DataIndexUtils.DATA_ID_INDEX.getName()); final Iterator<byte[]> dataIdIterator = Arrays.stream(dataIds).iterator(); while (dataIdIterator.hasNext()) { final List<WriteRequest> deleteRequests = new ArrayList<>(); int i = 0; while (dataIdIterator.hasNext() && (i < MAX_ROWS_FOR_BATCHWRITER)) { deleteRequests.add( new WriteRequest( new DeleteRequest( Collections.singletonMap( DynamoDBRow.GW_PARTITION_ID_KEY, new AttributeValue().withB(ByteBuffer.wrap(dataIdIterator.next())))))); i++; } client.batchWriteItem(Collections.singletonMap(tableName, deleteRequests)); } }
@BeforeClass public static void setup() { AmazonDynamoDBAsync dynamoDB = DYNAMO_DB_RUNNING.getDynamoDB(); try { dynamoDB.deleteTableAsync(DynamoDbLockRegistry.DEFAULT_TABLE_NAME); Waiter<DescribeTableRequest> waiter = dynamoDB.waiters() .tableNotExists(); waiter.run(new WaiterParameters<>(new DescribeTableRequest(DynamoDbLockRegistry.DEFAULT_TABLE_NAME)) .withPollingStrategy(new PollingStrategy(new MaxAttemptsRetryStrategy(25), new FixedDelayStrategy(1)))); } catch (Exception e) { } }
@Override public void onSuccess(CreateTableRequest request, CreateTableResult createTableResult) { Waiter<DescribeTableRequest> waiter = DynamoDbMetadataStore.this.dynamoDB.waiters() .tableExists(); WaiterParameters<DescribeTableRequest> waiterParameters = new WaiterParameters<>( new DescribeTableRequest(DynamoDbMetadataStore.this.table.getTableName())) .withPollingStrategy( new PollingStrategy( new MaxAttemptsRetryStrategy(DynamoDbMetadataStore.this.createTableRetries), new FixedDelayStrategy(DynamoDbMetadataStore.this.createTableDelay))); waiter.runAsync(waiterParameters, new WaiterHandler<DescribeTableRequest>() { @Override public void onWaitSuccess(DescribeTableRequest request) { updateTimeToLiveIfAny(); DynamoDbMetadataStore.this.createTableLatch.countDown(); DynamoDbMetadataStore.this.table.describe(); } @Override public void onWaitFailure(Exception e) { logger.error("Cannot describe DynamoDb table: " + DynamoDbMetadataStore.this.table.getTableName(), e); DynamoDbMetadataStore.this.createTableLatch.countDown(); } }); }
private void updateTimeToLiveIfAny() { if (this.timeToLive != null) { UpdateTimeToLiveRequest updateTimeToLiveRequest = new UpdateTimeToLiveRequest() .withTableName(this.table.getTableName()) .withTimeToLiveSpecification( new TimeToLiveSpecification() .withAttributeName(TTL) .withEnabled(this.timeToLive > 0)); try { this.dynamoDB.updateTimeToLive(updateTimeToLiveRequest); } catch (AmazonDynamoDBException e) { if (logger.isWarnEnabled()) { logger.warn("The error during 'updateTimeToLive' request", e); } } } }
this.dynamoDB.createTableAsync(createTableRequest, new AsyncHandler<CreateTableRequest, CreateTableResult>() {
@BeforeClass public static void setup() { AmazonDynamoDBAsync dynamoDB = DYNAMO_DB_RUNNING.getDynamoDB(); try { dynamoDB.deleteTableAsync(TEST_TABLE); Waiter<DescribeTableRequest> waiter = dynamoDB.waiters() .tableNotExists(); waiter.run(new WaiterParameters<>(new DescribeTableRequest(TEST_TABLE)) .withPollingStrategy(new PollingStrategy(new MaxAttemptsRetryStrategy(25), new FixedDelayStrategy(1)))); } catch (Exception e) { } store = new DynamoDbMetadataStore(dynamoDB, TEST_TABLE); store.setTimeToLive(10); // Dynalite doesn't support TTL store.afterPropertiesSet(); }
@Before public void clear() throws InterruptedException { CountDownLatch createTableLatch = TestUtils.getPropertyValue(store, "createTableLatch", CountDownLatch.class); createTableLatch.await(); DYNAMO_DB_RUNNING.getDynamoDB() .deleteItem(TEST_TABLE, Collections.singletonMap("KEY", new AttributeValue() .withS(this.file1))); }