public CreateQueueResult createQueue()

in src/main/java/com/amazonaws/services/sqs/AmazonSQSIdleQueueDeletingClient.java [173:213]


    public CreateQueueResult createQueue(CreateQueueRequest request) {
        Map<String, String> attributes = new HashMap<>(request.getAttributes());
        Optional<Long> retentionPeriod = getRetentionPeriod(attributes);
        if (!retentionPeriod.isPresent()) {
            return super.createQueue(request);
        }

        String queueName = request.getQueueName();
        if (!queueName.startsWith(queueNamePrefix)) {
            throw new IllegalArgumentException();
        }

        String retentionPeriodString = retentionPeriod.get().toString();
        long currentTimestamp = System.currentTimeMillis();
        CreateQueueRequest superRequest = request.clone()
                .withQueueName(queueName)
                .withAttributes(attributes);

        CreateQueueResult result = super.createQueue(superRequest);
        String queueUrl = result.getQueueUrl();

        TagQueueRequest tagQueueRequest = new TagQueueRequest().withQueueUrl(queueUrl)
                .addTagsEntry(IDLE_QUEUE_RETENTION_PERIOD_TAG, retentionPeriodString)
                .addTagsEntry(LAST_HEARTBEAT_TIMESTAMP_TAG, String.valueOf(currentTimestamp));
        amazonSqsToBeExtended.tagQueue(tagQueueRequest);

        // TODO-RS: Filter more carefully to all attributes valid for createQueue 
        List<String> attributeNames = Arrays.asList(QueueAttributeName.ReceiveMessageWaitTimeSeconds.toString(),
                                                    QueueAttributeName.VisibilityTimeout.toString());
        Map<String, String> createdAttributes = amazonSqsToBeExtended.getQueueAttributes(queueUrl, attributeNames).getAttributes();
        createdAttributes.put(Constants.IDLE_QUEUE_RETENTION_PERIOD, retentionPeriodString);

        QueueMetadata metadata = new QueueMetadata(queueName, queueUrl, createdAttributes);
        queues.put(queueUrl, metadata);

        long initialDelay = ThreadLocalRandom.current().nextLong(heartbeatIntervalSeconds);
        metadata.heartbeater = executor.scheduleAtFixedRate(() -> heartbeatToQueue(queueUrl),
                initialDelay, heartbeatIntervalSeconds, TimeUnit.SECONDS);

        return result;
    }