RFR: 8360887: (fs) Files.getFileAttributeView returns unusable FileAttributeView if UserDefinedFileAttributeView unavailable (aix) [v4]

Martin Doerr mdoerr at openjdk.org
Tue Jul 1 12:08:46 UTC 2025


On Tue, 1 Jul 2025 06:30:09 GMT, Alan Bateman <alanb at openjdk.org> wrote:

>> Martin Doerr has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Fix typo in comment.
>
> src/java.base/aix/classes/sun/nio/fs/AixFileSystemProvider.java line 57:
> 
>> 55:     static boolean supportsUserDefinedFileAttributeView(Path obj) {
>> 56:         try {
>> 57:             FileStore store = Files.getFileStore(obj);
> 
> This needs to be `new AixFileStore(obj)` rather than `Files.getFileStore` to avoid cycles. It might be that no one on AIX replaces the default provider but always have to avoid making use of the API in the API implementation.

Makes sense, but requires a cast to `UnixPath`.

> test/jdk/java/nio/file/FileStore/Basic.java line 113:
> 
>> 111:         if (!store1.supportsFileAttributeView(UserDefinedFileAttributeView.class) &&
>> 112:             Files.getFileAttributeView(dir, UserDefinedFileAttributeView.class) != null) {
>> 113:             throw new RuntimeException("UserDefinedFileAttributeView not supported, getFileAttributeView should return null");
> 
> I think it's okay to extend FileStore/Basic.java but to test Files.getFileAttributeView works consistently will require changes to test each of supported views. We shouldn't be testing UserDefinedFileAttributeView in isolation here. Can you try this instead:
> 
> 
>     static <V extends FileAttributeView> void testFileAttributes(Path file,
>                                                                  Class<V> viewClass,
>                                                                  String viewName) throws IOException {
>         FileStore store = Files.getFileStore(file);
>         boolean supported = store.supportsFileAttributeView(viewClass);
>         assertTrue(store.supportsFileAttributeView(viewName) == supported);
>         boolean haveView = Files.getFileAttributeView(file, viewClass) != null;
>         assertTrue(haveView == supported);
>     }
> 
> 
> 
>         /**
>          * Test: File and FileStore attributes
>          */
>         assertTrue(store1.supportsFileAttributeView("basic"));
>         testFileAttributes(dir, BasicFileAttributeView.class, "basic");
>         testFileAttributes(dir, PosixFileAttributeView.class, "posix");
>         testFileAttributes(dir, DosFileAttributeView.class, "dos");
>         testFileAttributes(dir, AclFileAttributeView.class, "acl");
>         testFileAttributes(dir, UserDefinedFileAttributeView.class, "user");

Nice! Thanks a lot!

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26021#discussion_r2177427353
PR Review Comment: https://git.openjdk.org/jdk/pull/26021#discussion_r2177426145


More information about the nio-dev mailing list