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