public void tagResource()

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