List of usage examples for com.amazonaws.services.dynamodbv2.model WriteRequest WriteRequest
public WriteRequest()
From source file:com.clicktravel.infrastructure.persistence.aws.dynamodb.DynamoDbTemplate.java
License:Apache License
/** * Creates the PutRequests to allow us to perform the batch write. Takes a batch of items and creates a bunch of * WriteRequests for the DynamoDB table we're writing to, then attaches PutRequests to these WriteRequests. We keep * a track of the versions and PutRequests for each item so we can process the results afterwards. * @param itemConfiguration - allows us to know which table we're writing to * @param itemVersions - keeps track of which version belongs to which item * @param requestItems - the requests to be written to DynamoDB, map of table name as the key and the WriteRequest * as the value./*from www . jav a2s . co m*/ * @param batch - the batch of items to be converted into WriteRequests with PutRequests. * @param itemPutRequests - a map to keep track of which PutRequest belongs to which item to allow us to process the * results. */ private <T extends Item> void createRequestItems(final ItemConfiguration itemConfiguration, final Map<T, Long> itemVersions, final Map<String, List<WriteRequest>> requestItems, final List<T> batch, final Map<PutRequest, T> itemPutRequests) { for (final T item : batch) { final long newVersion = item.getVersion() != null ? item.getVersion() + 1 : 1l; final Map<String, AttributeValue> attributeMap = getAttributeMap(item, itemConfiguration, newVersion); final String tableName = databaseSchemaHolder.schemaName() + "." + itemConfiguration.tableName(); List<WriteRequest> writeRequestsForTable = requestItems.get(tableName); if (writeRequestsForTable == null) { writeRequestsForTable = new ArrayList<WriteRequest>(); requestItems.put(tableName, writeRequestsForTable); } final PutRequest putRequest = new PutRequest().withItem(attributeMap); itemPutRequests.put(putRequest, item); itemVersions.put(item, newVersion); writeRequestsForTable.add(new WriteRequest().withPutRequest(putRequest)); } }
From source file:com.dell.doradus.db.s3.DynamoDBService2.java
License:Apache License
public void commit(DBTransaction dbTran) { Timer t = new Timer(); List<WriteRequest> list = new ArrayList<>(); for (ColumnUpdate mutation : dbTran.getColumnUpdates()) { Map<String, AttributeValue> item = getPrimaryKey(mutation.getStoreName() + "_" + mutation.getRowKey(), mutation.getColumn().getName()); byte[] value = mutation.getColumn().getRawValue(); if (value.length == 0) value = EMPTY_VALUE;//w w w.ja v a2 s. com item.put("value", new AttributeValue().withB(ByteBuffer.wrap(value))); list.add(new WriteRequest().withPutRequest(new PutRequest(item))); if (list.size() >= 25) { commitPartial(list); } } for (ColumnDelete mutation : dbTran.getColumnDeletes()) { Map<String, AttributeValue> item = getPrimaryKey(mutation.getStoreName() + "_" + mutation.getRowKey(), mutation.getColumnName()); list.add(new WriteRequest().withDeleteRequest(new DeleteRequest(item))); if (list.size() >= 25) { commitPartial(list); } } for (RowDelete mutation : dbTran.getRowDeletes()) { for (DColumn c : getColumnSlice(mutation.getStoreName(), mutation.getRowKey(), null, null)) { Map<String, AttributeValue> item = getPrimaryKey( mutation.getStoreName() + "_" + mutation.getRowKey(), c.getName()); list.add(new WriteRequest().withDeleteRequest(new DeleteRequest(item))); if (list.size() >= 25) { commitPartial(list); } } } if (list.size() > 0) { commitPartial(list); } m_logger.debug("Committed transaction to {} in {}", getTenant().getName(), t); }
From source file:com.erudika.para.persistence.AWSDynamoDAO.java
License:Apache License
@Override public <P extends ParaObject> void deleteAll(String appid, List<P> objects) { if (objects == null || objects.isEmpty() || StringUtils.isBlank(appid)) { return;/*from w w w .j a va2 s . c o m*/ } List<WriteRequest> reqs = new ArrayList<WriteRequest>(objects.size()); for (ParaObject object : objects) { if (object != null) { reqs.add(new WriteRequest().withDeleteRequest(new DeleteRequest().withKey(Collections .singletonMap(Config._KEY, new AttributeValue(getKeyForAppid(object.getId(), appid)))))); } } batchWrite(Collections.singletonMap(getTableNameForAppid(appid), reqs)); logger.debug("DAO.deleteAll() {}", objects.size()); }
From source file:com.erudika.para.persistence.AWSDynamoDAO.java
License:Apache License
private <P extends ParaObject> void writeAll(String appid, List<P> objects, boolean updateOp) { if (objects == null || objects.isEmpty() || StringUtils.isBlank(appid)) { return;/*w w w. ja v a 2 s . co m*/ } List<WriteRequest> reqs = new ArrayList<WriteRequest>(objects.size()); int batchSteps = 1; if ((objects.size() > MAX_ITEMS_PER_WRITE)) { batchSteps = (objects.size() / MAX_ITEMS_PER_WRITE) + ((objects.size() % MAX_ITEMS_PER_WRITE > 0) ? 1 : 0); } Iterator<P> it = objects.iterator(); int j = 0; for (int i = 0; i < batchSteps; i++) { while (it.hasNext() && j < MAX_ITEMS_PER_WRITE) { ParaObject object = it.next(); if (StringUtils.isBlank(object.getId())) { object.setId(Utils.getNewId()); } if (object.getTimestamp() == null) { object.setTimestamp(Utils.timestamp()); } if (updateOp) { object.setUpdated(Utils.timestamp()); } object.setAppid(appid); Map<String, AttributeValue> row = toRow(object, null); setRowKey(getKeyForAppid(object.getId(), appid), row); reqs.add(new WriteRequest().withPutRequest(new PutRequest().withItem(row))); j++; } batchWrite(Collections.singletonMap(getTableNameForAppid(appid), reqs)); reqs.clear(); j = 0; } }
From source file:com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi.java
License:Open Source License
/** * /*from www. ja va 2 s . c o m*/ * @{inheritDoc */ @Override public void addTimingResults(final @Nonnull String tableName, final @Nonnull List<TankResult> results, boolean async) { if (!results.isEmpty()) { Runnable task = new Runnable() { public void run() { MethodTimer mt = new MethodTimer(logger, this.getClass(), "addTimingResults (" + results + ")"); List<WriteRequest> requests = new ArrayList<WriteRequest>(); try { for (TankResult result : results) { Map<String, AttributeValue> item = getTimingAttributes(result); PutRequest putRequest = new PutRequest().withItem(item); WriteRequest writeRequest = new WriteRequest().withPutRequest(putRequest); requests.add(writeRequest); } sendBatch(tableName, requests); } catch (Exception t) { logger.error("Error adding results: " + t.getMessage(), t); throw new RuntimeException(t); } mt.endAndLog(); } }; if (async) { EXECUTOR.execute(task); } else { task.run(); } } }
From source file:com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi.java
License:Open Source License
/** * @{inheritDoc/* w ww . j a va 2 s.c om*/ */ @Override public void addItems(final String tableName, List<Item> itemList, final boolean asynch) { if (!itemList.isEmpty()) { final List<Item> items = new ArrayList<Item>(itemList); Runnable task = new Runnable() { public void run() { MethodTimer mt = new MethodTimer(logger, this.getClass(), "addItems (" + items + ")"); List<WriteRequest> requests = new ArrayList<WriteRequest>(); try { for (Item item : items) { Map<String, AttributeValue> toInsert = itemToMap(item); PutRequest putRequest = new PutRequest().withItem(toInsert); WriteRequest writeRequest = new WriteRequest().withPutRequest(putRequest); requests.add(writeRequest); } sendBatch(tableName, requests); } catch (Exception t) { logger.error("Error adding results: " + t.getMessage(), t); throw new RuntimeException(t); } mt.endAndLog(); } }; if (asynch) { EXECUTOR.execute(task); } else { task.run(); } } }
From source file:com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi.java
License:Open Source License
/** * @{inheritDoc// w w w. j a va2 s . c om */ @Override public void deleteForJob(final String tableName, final String jobId, final boolean asynch) { Runnable task = new Runnable() { public void run() { MethodTimer mt = new MethodTimer(logger, this.getClass(), "deleteForJob (" + jobId + ")"); List<Item> items = getItems(tableName, null, null, null, jobId); if (!items.isEmpty()) { List<WriteRequest> requests = new ArrayList<WriteRequest>(); try { for (Item item : items) { String id = null; for (Attribute attr : item.getAttributes()) { if (DatabaseKeys.REQUEST_NAME_KEY.getShortKey().equals(attr.getName())) { id = attr.getValue(); break; } } if (id != null) { Map<String, AttributeValue> keyMap = new HashMap<String, AttributeValue>(); keyMap.put(DatabaseKeys.REQUEST_NAME_KEY.getShortKey(), new AttributeValue().withS(id)); keyMap.put(DatabaseKeys.JOB_ID_KEY.getShortKey(), new AttributeValue().withS(jobId)); DeleteRequest deleteRequest = new DeleteRequest().withKey(keyMap); WriteRequest writeRequest = new WriteRequest().withDeleteRequest(deleteRequest); requests.add(writeRequest); } } sendBatch(tableName, requests); } catch (Exception t) { logger.error("Error adding results: " + t.getMessage(), t); throw new RuntimeException(t); } } mt.endAndLog(); } }; if (asynch) { EXECUTOR.execute(task); } else { task.run(); } }
From source file:com.mortardata.pig.storage.DynamoDBStorage.java
License:Apache License
private WriteRequestWithCapacity getWriteRequestWithCapacity(Tuple tuple) throws IOException { ResourceFieldSchema[] fields = this.schema.getFields(); Map<String, AttributeValue> dynamoItem = new HashMap<String, AttributeValue>(); int dataSize = 0; int dynamoItemSize = 0; int tupleSize = tuple.size(); for (int i = 0; i < tupleSize; i++) { Object field = tuple.get(i); AttributeValue dynamoValue = null; switch (DataType.findType(field)) { case DataType.NULL: // dynamodb does not support null values // simply don't write field reportCounter(DYNAMO_COUNTER_NULL_FIELDS_DISCARDED, 1); break; case DataType.BOOLEAN: if (((Boolean) field).booleanValue()) { dynamoValue = new AttributeValue().withN("1"); } else { dynamoValue = new AttributeValue().withN("0"); }// w w w . ja v a 2 s.c o m dataSize += 1; dynamoItemSize += 1; break; case DataType.INTEGER: case DataType.LONG: case DataType.FLOAT: case DataType.DOUBLE: String numAsString = field.toString(); dynamoValue = new AttributeValue().withN(numAsString); dataSize += numAsString.length(); dynamoItemSize += numAsString.length(); break; case DataType.BYTEARRAY: byte[] b = ((DataByteArray) field).get(); ByteBuffer buffer = ByteBuffer.allocate(b.length); buffer.put(b, 0, b.length); buffer.position(0); dynamoValue = new AttributeValue().withB(buffer); dataSize += b.length; dynamoItemSize += b.length; break; case DataType.CHARARRAY: String fieldStr = (String) field; int fieldLen = fieldStr.length(); if (fieldLen > 0) { dynamoValue = new AttributeValue().withS(fieldStr); dataSize += fieldLen; dynamoItemSize += fieldLen; } else { // DynamoDB cannot handle empty strings reportCounter(DYNAMO_COUNTER_EMPTY_STRING_FIELDS_DISCARDED, 1); } break; case DataType.BYTE: ByteBuffer buf = ByteBuffer.allocate(1); buf.put((Byte) field); buf.position(0); dynamoValue = new AttributeValue().withB(buf); dataSize += 1; dynamoItemSize += 1; break; case DataType.MAP: case DataType.TUPLE: case DataType.BAG: throw new RuntimeException("DynamoDBStorage does not support Maps, Tuples or Bags"); } if (dynamoValue != null) { ResourceFieldSchema fieldSchema = fields[i]; String fieldName = fieldSchema.getName(); if (fieldName == null) { throw new IllegalArgumentException( "Cannot write a field with no name (element " + i + " ) FieldSchema: " + fields); } dynamoItemSize += fieldName.length(); dynamoItem.put(fieldName, dynamoValue); } } // check for max item size if (dynamoItemSize > DYNAMO_MAX_ITEM_SIZE_IN_BYTES) { throw new RuntimeException("Item size " + dynamoItemSize + " bytes is larger than max dynamo item size " + DYNAMO_MAX_ITEM_SIZE_IN_BYTES + ". Aborting. Item: " + dynamoItem); } WriteRequest writeRequest = new WriteRequest().withPutRequest(new PutRequest().withItem(dynamoItem)); return new WriteRequestWithCapacity(writeRequest, dynamoItemSize, dataSize); }
From source file:com.netflix.config.sources.DynamoDbIntegrationTestHelper.java
License:Apache License
static void addElements(AmazonDynamoDB dbClient, String tableName) { Map<String, List<WriteRequest>> requestMap = new HashMap<String, List<WriteRequest>>(1); List<WriteRequest> writeList = new ArrayList<WriteRequest>(3); Map<String, AttributeValue> item1 = new HashMap<String, AttributeValue>(1); item1.put(DynamoDbConfigurationSource.defaultKeyAttribute, new AttributeValue().withS("test1")); item1.put(DynamoDbConfigurationSource.defaultValueAttribute, new AttributeValue().withS("val1")); writeList.add(new WriteRequest().withPutRequest(new PutRequest().withItem(item1))); HashMap<String, AttributeValue> item2 = new HashMap<String, AttributeValue>(1); item2.put(DynamoDbConfigurationSource.defaultKeyAttribute, new AttributeValue().withS("test2")); item2.put(DynamoDbConfigurationSource.defaultValueAttribute, new AttributeValue().withS("val2")); writeList.add(new WriteRequest().withPutRequest(new PutRequest().withItem(item2))); HashMap<String, AttributeValue> item3 = new HashMap<String, AttributeValue>(1); item3.put(DynamoDbConfigurationSource.defaultKeyAttribute, new AttributeValue().withS("test3")); item3.put(DynamoDbConfigurationSource.defaultValueAttribute, new AttributeValue().withS("val3")); writeList.add(new WriteRequest().withPutRequest(new PutRequest().withItem(item3))); requestMap.put(tableName, writeList); BatchWriteItemRequest request = new BatchWriteItemRequest().withRequestItems(requestMap); dbClient.batchWriteItem(request);/*from w w w. j a v a 2 s . c o m*/ }
From source file:jp.xet.uncommons.spring.DynamoPersistentTokenRepository.java
License:Apache License
@Override public void removeUserTokens(String username) { if (logger.isTraceEnabled()) { logger.trace("Remove token: username={}", username); }//from w w w .ja v a 2s . c om try { Condition cond = new Condition().withComparisonOperator(ComparisonOperator.EQ) .withAttributeValueList(new AttributeValue(username)); ScanRequest scanRequest = new ScanRequest().withTableName(persistentLoginTable) .withAttributesToGet(SERIES).withScanFilter(Collections.singletonMap(USERNAME, cond)); ScanResult result = dynamoDb.scan(scanRequest); List<WriteRequest> writeRequests = Lists.newArrayListWithCapacity(result.getCount()); for (Map<String, AttributeValue> item : result.getItems()) { DeleteRequest deleteRequest = new DeleteRequest() .withKey(Collections.singletonMap(SERIES, item.get(SERIES))); writeRequests.add(new WriteRequest().withDeleteRequest(deleteRequest)); } Map<String, List<WriteRequest>> requestItems = Maps.newHashMapWithExpectedSize(0); requestItems.put(persistentLoginTable, writeRequests); BatchWriteItemResult batchItemResult; do { BatchWriteItemRequest batchWriteItemRequest = new BatchWriteItemRequest() .withRequestItems(requestItems); batchItemResult = dynamoDb.batchWriteItem(batchWriteItemRequest); requestItems = batchItemResult.getUnprocessedItems(); if (logger.isDebugEnabled()) { logger.debug("Token removed: {}", batchItemResult); } } while (batchItemResult.getUnprocessedItems().size() > 0); } catch (Exception e) { logger.error("unknown exception", e); } }