in src/main/java/com/epam/aidial/service/RegistryService.java [76:113]
private Mono<String> getDigest(String manifestVersion, String name) {
return Mono.create(sink -> {
String imageName = imageName(name);
log.info("Retrieving digest for {} from manifest {}", imageName, manifestVersion);
String url = MANIFEST_URL_TEMPLATE.formatted(
registryProtocol, registry, imageName, imageLabel);
Request request = requestBuilder()
.head()
.url(url)
.header("Accept", manifestVersion)
.build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
sink.error(e);
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) {
if (response.code() == 404) {
sink.success();
} else if (response.isSuccessful()) {
String digest = response.header("Docker-Content-Digest");
if (StringUtils.isBlank(digest)) {
sink.error(new IllegalStateException(
"Missing digest in manifest %s response".formatted(manifestVersion)));
} else {
log.info("Retrieved {} digest for image {} and label {}: {}",
manifestVersion, imageName, imageLabel, digest);
sink.success(digest);
}
} else {
sink.error(new ResponseStatusException(response.code(), response.message(), null));
}
}
});
});
}