in src/main/java/com/amazonaws/kinesisvideo/java/service/CachedInfoMultiAuthServiceCallbacksImpl.java [202:272]
public void tagResource(@Nonnull final String resourceArn,
@Nullable final Tag[] tagsUnused,
final long callAfter,
final long timeout,
@Nullable final byte[] authData,
final int authType,
final long streamHandle,
final KinesisVideoProducerStream stream) throws ProducerException {
Preconditions.checkState(isInitialized(), "Service callbacks object should be initialized first");
final long delay = calculateRelativeServiceCallAfter(callAfter);
// arn:aws:kinesisvideo:us-west-2:xxxxxxxxxxx:stream/streamName/xxxxxxxxxxxxx
// stream object is not ready if tagStream is in createStreamSync() process, so stream.getStreamName() cannot
// be used
final String[] arns = resourceArn.split("/");
Tag[] tagsOfStream = null;
if (arns.length > 2) {
tagsOfStream = tagInfoMap.get(arns[1]);
}
if (tagsOfStream == null || tagsOfStream.length == 0) {
try {
kinesisVideoProducer.tagResourceResult(stream, streamHandle, HTTP_OK);
} catch (final ProducerException e) {
throw new RuntimeException(e);
}
return;
}
final Tag[] tags = tagsOfStream;
final Runnable task = new Runnable() {
@Override
public void run() {
final KinesisVideoCredentialsProvider credentialsProvider = getCredentialsProvider(authData, log);
final long timeoutInMillis = timeout / Time.HUNDREDS_OF_NANOS_IN_A_MILLISECOND;
int statusCode = HTTP_OK;
Map<String, String> tagsMap = null;
if (null != tags) {
// Convert the tags to map
tagsMap = new HashMap<String, String>(tags.length);
for (final Tag tag : tags) {
tagsMap.put(tag.getName(), tag.getValue());
}
}
try {
kinesisVideoServiceClient.tagStream(resourceArn,
tagsMap,
timeoutInMillis,
credentialsProvider);
} catch (final KinesisVideoException e) {
log.error("Kinesis Video service client returned an error " + e.getMessage()
+ ". Reporting to Kinesis Video PIC.");
statusCode = getStatusCodeFromException(e);
}
if (statusCode != HTTP_OK) {
// TODO: more URI validation
statusCode = HTTP_BAD_REQUEST;
}
try {
kinesisVideoProducer.tagResourceResult(stream, streamHandle, statusCode);
} catch (final ProducerException e) {
throw new RuntimeException(e);
}
}
};
executor.schedule(task, delay, TimeUnit.NANOSECONDS);
}