in storehaus-dynamodb/src/main/scala/com/twitter/storehaus/dynamodb/DynamoLongStore.scala [46:63]
override def merge(kv: (String, Long)): Future[Option[Long]] = {
val attributeUpdateValue = new AttributeValueUpdate(
kv._2.as[AttributeValue],
AttributeAction.ADD
)
val updateRequest = new UpdateItemRequest(
underlying.tableName,
Map(underlying.primaryKeyColumn -> kv._1.as[AttributeValue]).as[JMap[String, AttributeValue]],
Map(underlying.valueColumn -> attributeUpdateValue).as[JMap[String, AttributeValueUpdate]]
)
underlying.apiRequestFuturePool {
val res = underlying.client.updateItem(updateRequest)
// Returns the result, we need the value before
Option(res.getAttributes.get(kv._1)).map { av => av.as[Try[Long]].get - kv._2 }
}
}