RFR 8213031: (zipfs) Add support for POSIX file permissions

Alan Bateman Alan.Bateman at oracle.com
Mon Feb 25 08:31:03 UTC 2019

On 21/02/2019 15:04, Langer, Christoph wrote:
> Hi Alan,
> here is the next iteration:http://cr.openjdk.java.net/~clanger/webrevs/8213031.7/
> I focused on your comments regarding implementation details:
> :
> Are there other major implementation points left? If not I guess we should start refining the documentation...

I think it would be useful to write down a summary of the proposal as 
there are several detailed points that we've been discussing in this 
thread that reviewers will need to understand the proposal before diving 
into the implementation/patch.  This might also help getting the javadoc 
aligned, and eventually the CSR. Here's where I think we are:

1. By default, a zip file system will have no support for the "posix" 
and "owner" views of file attributes, this means the following will fail 
with UOE:

   PosixFileAttributes attrs = Files.readAttributes(file, 

and the zip file system's supportedFileAttributView method will not 
include "posix".

2. Creating a zip file system with configuration parameter XXX set to 
"true" will create the zip file system that supports 
PosixFileAttributeView (and FileOwnerAttributeView). The current patch 
names the configuration parameter "posix". That name might be misleading 
as a configuration parameter as it conveys more than it actually does. 
Something like "enablePosixFileAttributes" clear conveys that it enables 
support for POSIX file attribute but might be a better wordy.

The value in the configuration map is documented as Boolean but I think 
we are allowing it to be the string representation of a Boolean, meaning 
it can be "true" or "false" like we have with the "create" parameter.

3. The map of configurations parameters can optionally include the 
parameters "defaultOwner", "defaultGroup", and "defaultPermissions" with 
the default owner/group/permissions to return. These names seem okay to me.

For the owner/group, the parameter type can be 
UserPrincipal/GroupPrincipal or strings. If the value is a String then 
we need to decide if there is any validation. If I read the current 
patch correctly then it doesn't do any validation - that might be okay 
but minimally maybe we should disallow the empty string.

If the defaultXXX parameters aren't present then the zip file 
owner/group would be a sensible default. If the zip file is on a file 
store that supports FileOwnerAttributeView then we've got the owner. If 
the file store supports PosixFileAttributeView then we have a group 
owner. If PosixFileAttributeView is not supported then using the owner 
as the group is okay. I see the current patch as a fallback to fallback 
to "<zipfs_default>" but I'd prefer not have that because it will be 
very confusing to diagnose if there are issues.

For defaultPermissions, the value is a Set<PosixFilePermissions> or the 
string representation. In the implementation, initPermissions can be 
changed to use PosixFilePermissions.fromString as it does the 
translation that we need.

4. As an alternative to the type safe access that PosixFileAttributeView 
provides, the proposal is to document the "zip" view of file attributes. 
Initially, it will admit to one file attribute for the permissions. The 
current patch uses the name "storedPermissions" but it might be simpler 
to use "permissions" so that "zip:permissions" and "posix:permissions" 
are the same when the zip entry has permissions. With this support you 
can write code like this:
     Set<PosixFilePermission> perms = (Set<PosixFilePermission>) 
Files.getAttribute(file, "zip:permissions");

The cast is ugly of course but that's the consequence of not exposing 
ZipFileAttributes in the API so there is no type token to specify on the 

Documenting the "zip" view brings up a few issues, e.g. will 
Files.readAttributes(file, "zip:*") reveal more than "permissions". For 
this API it is okay for the map to attributes beyond the specified list.

5. There will be no support for specifying as POSIX FileAttribute to 
createFile or createDirectory to atomically set the permissions when 
creating a new file/directory, UOE will thrown as is is now.

Is this a reasonable summary?


More information about the nio-dev mailing list