diff --git a/.changes/next-release/feature-AWSSDKforJavav2-5e523a4.json b/.changes/next-release/feature-AWSSDKforJavav2-5e523a4.json new file mode 100644 index 000000000000..65a2b1ccf338 --- /dev/null +++ b/.changes/next-release/feature-AWSSDKforJavav2-5e523a4.json @@ -0,0 +1,6 @@ +{ + "type": "feature", + "category": "AWS SDK for Java v2", + "contributor": "StephenFlavin", + "description": "Enable zero-copy ByteBuffer publishing in AsyncRequestBody via \"unsafe\" constructors" +} diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBody.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBody.java index e7e9d00dd0e5..87540e5363ba 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBody.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBody.java @@ -25,7 +25,6 @@ import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.internal.util.Mimetype; -import software.amazon.awssdk.utils.BinaryUtils; import software.amazon.awssdk.utils.Logger; /** @@ -96,11 +95,6 @@ public void request(long n) { do { ByteBuffer buffer = buffers[i]; - // Pending discussions on https://github.com/aws/aws-sdk-java-v2/issues/3928 - if (buffer.isDirect()) { - buffer = BinaryUtils.toNonDirectBuffer(buffer); - } - s.onNext(buffer.asReadOnlyBuffer()); remaining--; } while (remaining > 0 && (i = index.getAndIncrement()) < buffers.length); diff --git a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBodyTest.java b/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBodyTest.java index b4073247f8b9..7c0a43f10e51 100644 --- a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBodyTest.java +++ b/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/async/ByteBuffersAsyncRequestBodyTest.java @@ -186,26 +186,6 @@ public void canceledSubscriberDoesNotReturnNewResults() { assertTrue(subscriber.publishedResults.isEmpty()); } - // Pending discussions on https://github.com/aws/aws-sdk-java-v2/issues/3928 - @Test - public void directBuffersAreCoppiedToNonDirectBuffers() { - byte[] bytes = "Hello World!".getBytes(StandardCharsets.UTF_8); - ByteBuffer buffer = ByteBuffer.allocateDirect(bytes.length) - .put(bytes); - buffer.flip(); - AsyncRequestBody requestBody = ByteBuffersAsyncRequestBody.of(buffer); - - TestSubscriber subscriber = new TestSubscriber(); - requestBody.subscribe(subscriber); - subscriber.request(1); - - ByteBuffer publishedBuffer = subscriber.publishedResults.get(0); - assertFalse(publishedBuffer.isDirect()); - byte[] publishedBytes = new byte[publishedBuffer.remaining()]; - publishedBuffer.get(publishedBytes); - assertArrayEquals(bytes, publishedBytes); - } - @Test public void staticOfByteBufferConstructorSetsLengthBasedOnBufferRemaining() { ByteBuffer bb1 = ByteBuffer.allocate(2);