On Tue, 19 Aug 2025 06:40:18 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> Volkan Yazici has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   Improve style for declaring multiple consecutive fields of the same type
>
> The implementation and test changes look good to me.
> 
> I had some suggestions for the javadoc text. Here's what I had in mind, if 
> Daniel and Michael suggest that the current form in this PR is OK, then it's 
> OK to not change it:
> 
> 
> /**
>  * {@return a request body publisher whose body is the {@code length}
>  * content bytes read from the provided file {@code channel} starting
>  * from the specified {@code offset}}
>  * <p>
>  * This method does not modify the {@code channel}'s position.
>  * <p>
>  * This method does not close the {@code channel}. The caller is
>  * expected to close the {@code channel} when no longer needed.
>  *
>  * @apiNote
>  * This method can be used to either publish just a portion of a
>  * file's content as the request body or to publish different portions
>  * of the file's content concurrently.
>  * The typical approach to concurrently publish different portions of a
>  * file's content is to create an instance of {@link FileChannel}
>  * and then create multiple {@code HttpRequest}s each of which use
>  * a {@code ofFileChannel BodyPublisher} with a different non-overlapping
>  * offset and length.
>  *
>  * @param channel a file channel
>  * @param offset the offset of the first byte
>  * @param length the number of bytes to read from the file channel
>  *
>  * @throws IndexOutOfBoundsException if the specified byte range is
>  * found to be {@linkplain Objects#checkFromIndexSize(long, long, long)
>  * out of bounds} compared with the size of the file referred by the
>  * channel
>  *
>  * @throws IOException if the size of the {@code channel} cannot be
>  *                      determined or the {@code channel} is closed
>  *
>  * @throws NullPointerException if {@code channel} is null
>  *
>  * @since 26
>  */
> 
> 
> 
> (Apart from the text changes, do note that the `@throws IOException` 
> specification in that text is intentionally changed to note that it will be 
> thrown if the given channel is closed, in addition to if the size() cannot be 
> determined).

@jaikiran, regarding your spec. suggestion:


          * content bytes read from the provided file {@code channel} starting
          * from the specified {@code offset}}
          * <p>
-         * The {@linkplain FileChannel file channel} will be read using
-         * {@link FileChannel#read(ByteBuffer, long) 
FileChannel.read(ByteBuffer buffer, long position)},
-         * which does not modify the channel's position. Thus, the same file
-         * channel may be shared between several publishers passed to
-         * concurrent requests.
+         * This method does not modify the {@code channel}'s position.
          * <p>
-         * The file channel will not be closed upon completion. The caller is
-         * expected to manage the life cycle of the channel, and close it
-         * appropriately when not needed anymore.
+         * This method does not close the {@code channel}. The caller is
+         * expected to close the {@code channel} when no longer needed.
+         *
+         * @apiNote
+         * This method can be used to either publish just a portion of a
+         * file's content as the request body or to publish different portions
+         * of the file's content concurrently.
+         * The typical approach to concurrently publish different portions of a
+         * file's content is to create an instance of {@link FileChannel}
+         * and then create multiple {@code HttpRequest}s each of which use
+         * a {@code ofFileChannel BodyPublisher} with a different 
non-overlapping
+         * offset and length.
          *
          * @param channel a file channel
          * @param offset the offset of the first byte
@@ -744,8 +749,8 @@
          * out of bounds} compared with the size of the file referred by the
          * channel
          *
-         * @throws IOException if the size of the file referred by the provided
-         * channel cannot be read while verifying the specified byte range
+         * @throws IOException if the size of the {@code channel} cannot be
+         *                      determined or the {@code channel} is closed
          *
          * @throws NullPointerException if {@code channel} is null
          *


1. I see you removed the explicit mention of the `FileChannel#read(ByteBuffer, 
long)` usage. I had placed it intentionally there, as requested by @dfuch, for 
`FileChannel` can have custom implementations, and we better communicate what 
`FC` method we use under the hood and with which assumptions.
2. Regarding the _"the size of the {@code channel}"_ expression, maybe a little 
bit grammar policing, but a channel doesn't have a size, instead, the file 
referred by the channel has a size – `FC::size` Javadoc is worded in this way 
too.

I will wait for the input of @dfuch and/or @Michael-Mc-Mahon, and then submit 
the CSR.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/26155#issuecomment-3199748167

Reply via email to