private ResourceItemMetadata putResource()

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


    private ResourceItemMetadata putResource(
            ResourceDescriptor descriptor,
            byte[] body,
            EtagHeader etag,
            String contentType,
            boolean lock) {
        String redisKey = redisKey(descriptor);

        try (var ignore = lock ? lockService.lock(redisKey) : null) {
            ResourceItemMetadata metadata = getResourceMetadata(descriptor);

            if (metadata != null) {
                etag.validate(metadata.getEtag());
            }

            Long updatedAt = time();
            Long createdAt = metadata == null ? updatedAt : metadata.getCreatedAt();
            String newEtag = EtagBuilder.generateEtag(body);
            Result result = new Result(body, newEtag, createdAt, updatedAt, contentType,
                    descriptor.getType().requireCompression(), (long) body.length, descriptor.getType().name(), false);
            if (body.length <= maxSizeToCache) {
                redisPut(redisKey, result);
                if (metadata == null) {
                    String blobKey = blobKey(descriptor);
                    blobPut(blobKey, result.toStub()); // create an empty object for listing
                }
            } else {
                flushToBlobStore(redisKey);
                String blobKey = blobKey(descriptor);
                blobPut(blobKey, result);
            }

            ResourceEvent.Action action = metadata == null
                    ? ResourceEvent.Action.CREATE
                    : ResourceEvent.Action.UPDATE;
            publishEvent(descriptor, action, updatedAt, newEtag);
            return descriptor.getType().requireCompression()
                    ? toResourceItemMetadata(descriptor, result)
                    : toFileMetadata(descriptor, result);
        }
    }