public ResourceStream getResourceStream()

in storage/src/main/java/com/epam/aidial/core/storage/service/ResourceService.java [339:377]


    public ResourceStream getResourceStream(ResourceDescriptor resource, EtagHeader etagHeader) throws IOException {
        if (resource.getType().requireCompression()) {
            throw new IllegalArgumentException("Streaming is supported for uncompressed resources only");
        }

        String key = redisKey(resource);
        Result result = redisGet(key, true);
        if (result != null) {
            return ResourceStream.fromResult(result, etagHeader);
        }

        try (LockService.Lock ignored = lockService.lock(key)) {
            result = redisGet(key, true);
            if (result != null) {
                return ResourceStream.fromResult(result, etagHeader);
            }

            Blob blob = blobStore.load(resource.getAbsoluteFilePath());
            if (blob == null) {
                redisPut(key, Result.DELETED_SYNCED);
                return null;
            }

            Payload payload = blob.getPayload();
            BlobMetadata metadata = blob.getMetadata();
            String etag = extractEtag(metadata.getUserMetadata());
            String contentType = metadata.getContentMetadata().getContentType();
            Long length = metadata.getContentMetadata().getContentLength();

            if (length <= maxSizeToCache) {
                result = blobToResult(blob, metadata);
                redisPut(key, result);
                return ResourceStream.fromResult(result, etagHeader);
            }

            etagHeader.validate(etag);
            return new ResourceStream(payload.openStream(), etag, contentType, length);
        }
    }