<div dir="ltr"><div>I built a patched version of 3.6.4 and the problem does seem to be fixed on a test server/client when I mounted with those flags (acl, resolve-gids, and gid-timeout). Seeing as it was a test system, I can&#39;t really provide anything meaningful as to the performance hit seen without the gid-timeout option. Thank you for implementing it so quickly, though! <br><br>Is there any chance of getting this fix incorporated in the upcoming 3.6.5 release?<br><br></div>Patrick<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 23, 2015 at 6:27 PM, Niels de Vos <span dir="ltr">&lt;<a href="mailto:ndevos@redhat.com" target="_blank">ndevos@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Tue, Jul 21, 2015 at 10:30:04PM +0200, Niels de Vos wrote:<br>
&gt; On Wed, Jul 08, 2015 at 03:20:41PM -0400, Glomski, Patrick wrote:<br>
&gt; &gt; Gluster devs,<br>
&gt; &gt;<br>
&gt; &gt; I&#39;m running gluster v3.6.3 (both server and client side). Since my<br>
&gt; &gt; application requires more than 32 groups, I don&#39;t mount with ACLs on the<br>
&gt; &gt; client. If I mount with ACLs between the bricks and set a default ACL on<br>
&gt; &gt; the server, I think I&#39;m right in stating that the server should respect<br>
&gt; &gt; that ACL whenever a new file or folder is made.<br>
&gt;<br>
&gt; I would expect that the ACL gets in herited on the brick. When a new<br>
&gt; file is created without the default ACL, things seem to be wrong. You<br>
&gt; mention that creating the file directly on the brick has the correct<br>
&gt; ACL, so there must be some Gluster component interfering.<br>
&gt;<br>
&gt; You reminded me on IRC about this email, and that helped a lot. Its very<br>
&gt; easy to get distracted when trying to investigate things from the<br>
&gt; mailinglists.<br>
&gt;<br>
&gt; I had a brief look, and I think we could reach a solution. An ugly patch<br>
&gt; for initial testing is ready. Well... it compiles. I&#39;ll try to run some<br>
&gt; basic tests tomorrow and see if it improves things and does not crash<br>
&gt; immediately.<br>
&gt;<br>
&gt; The change can be found here:<br>
&gt;   <a href="http://review.gluster.org/11732" rel="noreferrer" target="_blank">http://review.gluster.org/11732</a><br>
&gt;<br>
&gt; It basically adds a &quot;resolve-gids&quot; mount option for the FUSE client.<br>
&gt; This causes the fuse daemon to call getgrouplist() and retrieve all the<br>
&gt; groups for the UID that accesses the mountpoint. Without this option,<br>
&gt; the behavior is not changed, and /proc/$PID/status is used to get up to<br>
&gt; 32 groups (the $PID is the process that accesses the mountpoint).<br>
&gt;<br>
&gt; You probably want to also mount with &quot;gid-timeout=N&quot; where N is seconds<br>
&gt; that the group cache is valid. In the current master branch this is set<br>
&gt; to 300 seconds (like the sssd default), but if the groups of a used<br>
&gt; rarely change, this value can be increased. Previous versions had a<br>
&gt; lower timeout which could cause resolving the groups on almost each<br>
&gt; network packet that arrives (HUGE performance impact).<br>
&gt;<br>
&gt; When using this option, you may also need to enable server.manage-gids.<br>
&gt; This option allows using more than ~93 groups on the bricks. The network<br>
&gt; packets can only contain ~93 groups, when server.manage-gids is enabled,<br>
&gt; the groups are not sent in the network packets, but are resolved on the<br>
&gt; bricks with getgrouplist().<br>
<br>
</div></div>The patch linked above had been tested, corrected and updated. The<br>
change works for me on a test-system.<br>
<br>
A backport that you should be able to include in a package for 3.6 can<br>
be found here: <a href="http://termbin.com/f3cj" rel="noreferrer" target="_blank">http://termbin.com/f3cj</a><br>
Let me know if you are not familiar with rebuilding patched packages,<br>
and I can build a test-version for you tomorrow.<br>
<br>
On glusterfs-3.6, you will want to pass a gid-timeout mount option too.<br>
The option enables caching of the resolved groups that the uid belongs<br>
too, if caching is not enebled (or expires quickly), you will probably<br>
notice a preformance hit. Newer version of GlusterFS set the timeout to<br>
300 seconds (like the default timeout sssd uses).<br>
<br>
Please test and let me know if this fixes your use case.<br>
<br>
Thanks,<br>
Niels<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
&gt;<br>
&gt; Cheers,<br>
&gt; Niels<br>
&gt;<br>
&gt; &gt; Maybe an example is in order:<br>
&gt; &gt;<br>
&gt; &gt; We first set up a test directory with setgid bit so that our new<br>
&gt; &gt; subdirectories inherit the group.<br>
&gt; &gt; [root@gfs01a hpc_shared]# mkdir test; cd test; chown pglomski.users .;<br>
&gt; &gt; chmod 2770 .; getfacl .<br>
&gt; &gt; # file: .<br>
&gt; &gt; # owner: pglomski<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::rwx<br>
&gt; &gt; other::---<br>
&gt; &gt;<br>
&gt; &gt; New subdirectories share the group, but the umask leads to them being group<br>
&gt; &gt; read-only.<br>
&gt; &gt; [root@gfs01a test]# mkdir a; getfacl a<br>
&gt; &gt; # file: a<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::r-x<br>
&gt; &gt; other::r-x<br>
&gt; &gt;<br>
&gt; &gt; Setting default ACLs on the server allows group write to new directories<br>
&gt; &gt; made on the server.<br>
&gt; &gt; [root@gfs01a test]# setfacl -m d:g::rwX ./; mkdir b; getfacl b<br>
&gt; &gt; # file: b<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::rwx<br>
&gt; &gt; other::---<br>
&gt; &gt; default:user::rwx<br>
&gt; &gt; default:group::rwx<br>
&gt; &gt; default:other::---<br>
&gt; &gt;<br>
&gt; &gt; The respect for ACLs is (correctly) shared across bricks.<br>
&gt; &gt; [root@gfs02a test]# getfacl b<br>
&gt; &gt; # file: b<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::rwx<br>
&gt; &gt; other::---<br>
&gt; &gt; default:user::rwx<br>
&gt; &gt; default:group::rwx<br>
&gt; &gt; default:other::---<br>
&gt; &gt;<br>
&gt; &gt; [root@gfs02a test]# mkdir c; getfacl c<br>
&gt; &gt; # file: c<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::rwx<br>
&gt; &gt; other::---<br>
&gt; &gt; default:user::rwx<br>
&gt; &gt; default:group::rwx<br>
&gt; &gt; default:other::---<br>
&gt; &gt;<br>
&gt; &gt; However, when folders are created client-side, the default ACLs appear on<br>
&gt; &gt; the server, but don&#39;t seem to be correctly applied.<br>
&gt; &gt; [root@client test]# mkdir d; getfacl d<br>
&gt; &gt; # file: d<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::r-x<br>
&gt; &gt; other::---<br>
&gt; &gt;<br>
&gt; &gt; [root@gfs01a test]# getfacl d<br>
&gt; &gt; # file: d<br>
&gt; &gt; # owner: root<br>
&gt; &gt; # group: users<br>
&gt; &gt; # flags: -s-<br>
&gt; &gt; user::rwx<br>
&gt; &gt; group::r-x<br>
&gt; &gt; other::---<br>
&gt; &gt; default:user::rwx<br>
&gt; &gt; default:group::rwx<br>
&gt; &gt; default:other::---<br>
&gt; &gt;<br>
&gt; &gt; As no groups or users were specified, I shouldn&#39;t need to specify a mask<br>
&gt; &gt; for the ACL and, indeed, specifying a mask doesn&#39;t help.<br>
&gt; &gt;<br>
&gt; &gt; If it helps diagnose the problem, the volume options are as follows:<br>
&gt; &gt; Options Reconfigured:<br>
&gt; &gt; performance.io-thread-count: 32<br>
&gt; &gt; performance.cache-size: 128MB<br>
&gt; &gt; performance.write-behind-window-size: 128MB<br>
&gt; &gt; server.allow-insecure: on<br>
&gt; &gt; network.ping-timeout: 10<br>
&gt; &gt; storage.owner-gid: 100<br>
&gt; &gt; geo-replication.indexing: off<br>
&gt; &gt; geo-replication.ignore-pid-check: on<br>
&gt; &gt; changelog.changelog: on<br>
&gt; &gt; changelog.fsync-interval: 3<br>
&gt; &gt; changelog.rollover-time: 15<br>
&gt; &gt; server.manage-gids: on<br>
&gt; &gt;<br>
&gt; &gt; This approach to server-side ACLs worked properly with previous versions of<br>
&gt; &gt; gluster. Can anyone assess the situation for me, confirm/deny that<br>
&gt; &gt; something changed, and possibly suggest how I can achieve inherited groups<br>
&gt; &gt; with write permission for new subdirectories in a &gt;32-group environment?<br>
&gt; &gt;<br>
&gt; &gt; Thanks for your time,<br>
&gt; &gt;<br>
&gt; &gt; Patrick<br>
&gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Gluster-devel mailing list<br>
&gt; &gt; <a href="mailto:Gluster-devel@gluster.org">Gluster-devel@gluster.org</a><br>
&gt; &gt; <a href="http://www.gluster.org/mailman/listinfo/gluster-devel" rel="noreferrer" target="_blank">http://www.gluster.org/mailman/listinfo/gluster-devel</a><br>
&gt;<br>
</div></div></blockquote></div><br></div>