From c3908c9c3458387a6cb7d3e776d779bbec1a4aaa Mon Sep 17 00:00:00 2001 From: Kai Zimmermann Date: Tue, 10 Oct 2017 17:26:30 +0200 Subject: [PATCH] Ensure that S3object gets closed if file does not exist. (#588) Signed-off-by: kaizimmerm --- .../artifact/repository/S3Repository.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/extensions/hawkbit-extension-artifact-repository-s3/src/main/java/org/eclipse/hawkbit/artifact/repository/S3Repository.java b/extensions/hawkbit-extension-artifact-repository-s3/src/main/java/org/eclipse/hawkbit/artifact/repository/S3Repository.java index 86eb03402..45d579538 100644 --- a/extensions/hawkbit-extension-artifact-repository-s3/src/main/java/org/eclipse/hawkbit/artifact/repository/S3Repository.java +++ b/extensions/hawkbit-extension-artifact-repository-s3/src/main/java/org/eclipse/hawkbit/artifact/repository/S3Repository.java @@ -179,19 +179,23 @@ public class S3Repository implements ArtifactRepository { final String key = objectKey(tenant, sha1Hash); LOG.info("Retrieving S3 object from bucket {} and key {}", s3Properties.getBucketName(), key); - final S3Object s3Object = amazonS3.getObject(s3Properties.getBucketName(), key); - if (s3Object == null) { + try (final S3Object s3Object = amazonS3.getObject(s3Properties.getBucketName(), key)) { + if (s3Object == null) { + return null; + } + + final ObjectMetadata s3ObjectMetadata = s3Object.getObjectMetadata(); + + // the MD5Content is stored in the ETag + return new S3Artifact(amazonS3, s3Properties, key, sha1Hash, + new DbArtifactHash(sha1Hash, + BaseEncoding.base16().lowerCase() + .encode(BaseEncoding.base64().decode(s3ObjectMetadata.getETag()))), + s3ObjectMetadata.getContentLength(), s3ObjectMetadata.getContentType()); + } catch (final IOException e) { + LOG.error("Could not verify S3Object", e); return null; } - - final ObjectMetadata s3ObjectMetadata = s3Object.getObjectMetadata(); - - // the MD5Content is stored in the ETag - return new S3Artifact(amazonS3, s3Properties, key, sha1Hash, - new DbArtifactHash(sha1Hash, - BaseEncoding.base16().lowerCase() - .encode(BaseEncoding.base64().decode(s3ObjectMetadata.getETag()))), - s3ObjectMetadata.getContentLength(), s3ObjectMetadata.getContentType()); } private static void checkHashes(final AbstractDbArtifact artifact, final DbArtifactHash hash) {