Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Image builder fails silently when there's an error loading the ephemeral image #23130

Closed
dsyer opened this issue Aug 28, 2020 · 1 comment
Closed
Assignees
Labels
type: bug A general bug
Milestone

Comments

@dsyer
Copy link
Member

dsyer commented Aug 28, 2020

When the ephemeral build image is loaded into docker it can fail, and we discard the result, so we never know. From DockerApi$ImageApi:

try (Response response = http().post(loadUri, "application/x-tar", archive::writeTo)) {
	jsonStream().get(response.getContent(), LoadImageUpdateEvent.class, listener::onUpdate);
}

The json is discarded and docker is actually sending an error message (with a 200 OK response status, which is admittedly unhelpful). It would suffice in this case to look at the unmarshalled response and check that it had some content (non null "stream" property).

This code in LayerId is responsible for the failure that we found:

public static LayerId ofSha256Digest(byte[] digest) {
	Assert.notNull(digest, "Digest must not be null");
	Assert.isTrue(digest.length == 32, "Digest must be exactly 32 bytes");
	String algorithm = "sha256";
	String hash = String.format("%32x", new BigInteger(1, digest));
	return new LayerId(algorithm + ":" + hash, algorithm, hash);
}

%32x is actually only guaranteed to be at least 32 characters. We need 64. So sometimes we get 63 because the content of the digest has a low leading byte value. This would probably work (because Java Formatter pads with spaces not zeros, and docker wants zeros):

String hash = String.format("%64x", new BigInteger(1, digest)).replace(" ", "0");
@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Aug 28, 2020
@scottfrederick scottfrederick added type: bug A general bug and removed status: waiting-for-triage An issue we've not yet triaged labels Aug 28, 2020
@scottfrederick scottfrederick added this to the 2.3.x milestone Aug 28, 2020
sdeleuze added a commit to spring-attic/spring-native that referenced this issue Aug 28, 2020
@scottfrederick scottfrederick self-assigned this Aug 28, 2020
@scottfrederick
Copy link
Contributor

Splitting this into separate issues, with the layer hash covered in #23132.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug A general bug
Projects
None yet
Development

No branches or pull requests

3 participants