Example usage for com.amazonaws.services.dynamodbv2.model WriteRequest WriteRequest

List of usage examples for com.amazonaws.services.dynamodbv2.model WriteRequest WriteRequest

Introduction

In this page you can find the example usage for com.amazonaws.services.dynamodbv2.model WriteRequest WriteRequest.

Prototype

public WriteRequest() 

Source Link

Document

Default constructor for WriteRequest object.

Usage

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);
    }
}