in kinesis_manager/src/kinesis_stream_manager.cpp [368:407]
KinesisManagerStatus KinesisStreamManager::UpdateShardIterator(const std::string & stream_name)
{
if (!rekognition_config_.at(stream_name).shard_iterator.empty()) {
/* Already loaded */
return KINESIS_MANAGER_STATUS_SUCCESS;
}
/* First ListShards, then GetShardIterator */
Model::ListShardsRequest list_shards_request;
list_shards_request.SetStreamName(rekognition_config_.at(stream_name).data_stream_name);
list_shards_request.SetMaxResults(1);
auto list_shards_outcome = kinesis_client_->ListShards(list_shards_request);
if (!list_shards_outcome.IsSuccess()) {
AWS_LOGSTREAM_ERROR(__func__,
"ListShards failed with code "
<< static_cast<int>(list_shards_outcome.GetError().GetErrorType()) << ": "
<< list_shards_outcome.GetError().GetMessage());
return KINESIS_MANAGER_STATUS_LIST_SHARDS_FAILED;
}
if (list_shards_outcome.GetResult().GetShards().empty()) {
AWS_LOG_ERROR(__func__, "ListShards: no shards available");
return KINESIS_MANAGER_STATUS_LIST_SHARDS_EMPTY;
}
Aws::String shard_id = list_shards_outcome.GetResult().GetShards().front().GetShardId();
Model::GetShardIteratorRequest get_shard_iterator_request;
get_shard_iterator_request.SetStreamName(rekognition_config_.at(stream_name).data_stream_name);
get_shard_iterator_request.SetShardId(shard_id);
get_shard_iterator_request.SetShardIteratorType(Model::ShardIteratorType::LATEST);
auto get_shard_iterator_outcome = kinesis_client_->GetShardIterator(get_shard_iterator_request);
if (!get_shard_iterator_outcome.IsSuccess()) {
AWS_LOGSTREAM_ERROR(
__func__, "GetShardIterator failed with code "
<< static_cast<int>(get_shard_iterator_outcome.GetError().GetErrorType()) << ": "
<< get_shard_iterator_outcome.GetError().GetMessage());
return KINESIS_MANAGER_STATUS_GET_SHARD_ITERATOR_FAILED;
}
rekognition_config_.at(stream_name).shard_iterator =
get_shard_iterator_outcome.GetResult().GetShardIterator();
return KINESIS_MANAGER_STATUS_SUCCESS;
}