private Mono getDigest()

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