|
14 | 14 | import com.amazonaws.DnsResolver; |
15 | 15 | import com.amazonaws.SdkClientException; |
16 | 16 | import com.amazonaws.services.s3.AmazonS3ClientBuilder; |
17 | | -import com.amazonaws.services.s3.internal.MD5DigestCalculatingInputStream; |
18 | 17 | import com.amazonaws.services.s3.model.AmazonS3Exception; |
19 | | -import com.amazonaws.util.Base16; |
20 | 18 | import com.sun.net.httpserver.HttpExchange; |
21 | 19 | import com.sun.net.httpserver.HttpHandler; |
22 | 20 |
|
|
30 | 28 | import org.elasticsearch.common.blobstore.BlobPath; |
31 | 29 | import org.elasticsearch.common.blobstore.OperationPurpose; |
32 | 30 | import org.elasticsearch.common.blobstore.OptionalBytesReference; |
| 31 | +import org.elasticsearch.common.bytes.BytesArray; |
33 | 32 | import org.elasticsearch.common.bytes.BytesReference; |
| 33 | +import org.elasticsearch.common.hash.MessageDigests; |
34 | 34 | import org.elasticsearch.common.io.Streams; |
35 | 35 | import org.elasticsearch.common.lucene.store.ByteArrayIndexInput; |
36 | 36 | import org.elasticsearch.common.lucene.store.InputStreamIndexInput; |
@@ -377,13 +377,12 @@ public void testWriteLargeBlob() throws Exception { |
377 | 377 | } |
378 | 378 | } else if (s3Request.isUploadPartRequest()) { |
379 | 379 | // upload part request |
380 | | - MD5DigestCalculatingInputStream md5 = new MD5DigestCalculatingInputStream(exchange.getRequestBody()); |
381 | | - BytesReference bytes = Streams.readFully(md5); |
| 380 | + BytesReference bytes = Streams.readFully(exchange.getRequestBody()); |
382 | 381 | assertThat((long) bytes.length(), anyOf(equalTo(lastPartSize), equalTo(bufferSize.getBytes()))); |
383 | 382 | assertThat(contentLength, anyOf(equalTo(lastPartSize), equalTo(bufferSize.getBytes()))); |
384 | 383 |
|
385 | 384 | if (countDownUploads.decrementAndGet() % 2 == 0) { |
386 | | - exchange.getResponseHeaders().add("ETag", Base16.encodeAsString(md5.getMd5Digest())); |
| 385 | + exchange.getResponseHeaders().add("ETag", getBase16MD5Digest(bytes)); |
387 | 386 | exchange.sendResponseHeaders(HttpStatus.SC_OK, -1); |
388 | 387 | exchange.close(); |
389 | 388 | return; |
@@ -475,12 +474,11 @@ public void testWriteLargeBlobStreaming() throws Exception { |
475 | 474 | } |
476 | 475 | } else if (s3Request.isUploadPartRequest()) { |
477 | 476 | // upload part request |
478 | | - MD5DigestCalculatingInputStream md5 = new MD5DigestCalculatingInputStream(exchange.getRequestBody()); |
479 | | - BytesReference bytes = Streams.readFully(md5); |
| 477 | + BytesReference bytes = Streams.readFully(exchange.getRequestBody()); |
480 | 478 |
|
481 | 479 | if (counterUploads.incrementAndGet() % 2 == 0) { |
482 | 480 | bytesReceived.addAndGet(bytes.length()); |
483 | | - exchange.getResponseHeaders().add("ETag", Base16.encodeAsString(md5.getMd5Digest())); |
| 481 | + exchange.getResponseHeaders().add("ETag", getBase16MD5Digest(bytes)); |
484 | 482 | exchange.sendResponseHeaders(HttpStatus.SC_OK, -1); |
485 | 483 | exchange.close(); |
486 | 484 | return; |
@@ -1105,6 +1103,21 @@ public void testTrimmedLogAndCappedSuppressedErrorOnMultiObjectDeletionException |
1105 | 1103 | } |
1106 | 1104 | } |
1107 | 1105 |
|
| 1106 | + private static String getBase16MD5Digest(BytesReference bytesReference) { |
| 1107 | + return MessageDigests.toHexString(MessageDigests.digest(bytesReference, MessageDigests.md5())); |
| 1108 | + } |
| 1109 | + |
| 1110 | + public void testGetBase16MD5Digest() { |
| 1111 | + // from Wikipedia, see also org.elasticsearch.common.hash.MessageDigestsTests.testMd5 |
| 1112 | + assertBase16MD5Digest("", "d41d8cd98f00b204e9800998ecf8427e"); |
| 1113 | + assertBase16MD5Digest("The quick brown fox jumps over the lazy dog", "9e107d9d372bb6826bd81d3542a419d6"); |
| 1114 | + assertBase16MD5Digest("The quick brown fox jumps over the lazy dog.", "e4d909c290d0fb1ca068ffaddf22cbd0"); |
| 1115 | + } |
| 1116 | + |
| 1117 | + private static void assertBase16MD5Digest(String input, String expectedDigestString) { |
| 1118 | + assertEquals(expectedDigestString, getBase16MD5Digest(new BytesArray(input))); |
| 1119 | + } |
| 1120 | + |
1108 | 1121 | @Override |
1109 | 1122 | protected Matcher<Integer> getMaxRetriesMatcher(int maxRetries) { |
1110 | 1123 | // some attempts make meaningful progress and do not count towards the max retry limit |
|
0 commit comments