On Mon, Mar 05, 2018 at 03:07:20PM -0500, David Steele wrote: > On 2/28/18 2:28 AM, Michael Paquier wrote: >> On Tue, Feb 27, 2018 at 03:52:32PM -0500, David Steele wrote: >> I don't quite understand here. I have no objection into extending >> setup_cluster() with a group_access argument so as the tests run both >> the group access and without it, but I'd rather keep the low-level API >> clean of anything fancy if we can use the facility which already >> exists. > > I'm not sure what you mean by, "facility that already exists". I think > I implemented this the same as the allows_streaming and has_archiving > flags. The only difference is that this option must be set at initdb > time rather than in postgresql.conf. > > Could you be more specific?
Let's remove has_group_access from PostgresNode::init and instead use existing parameter called "extra". In your patch, this setup: has_group_access => 1 is equivalent to that: extra => [ -g ] You can also guess the value of has_group_access by parsing the arguments from the array "extra". > I think I prefer grouping 1 and 2. It produces less churn, as you say, > and I don't think MakeDirectoryDefaultPerm really needs its own patch. > Based on comments so far, nobody has an objection to it. > > In theory, the first two patches could be applied just for refactoring > without adding group permissions at all. There are a lot of new tests > to make sure permissions are set correctly so it seems like a win > right off. Okay, that's fine for me. >> check_pg_data_perm() looks useful even without $allow_group even if the >> grouping facility is reverted at the end. S_ISLNK should be considered >> as well for tablespaces or symlinks of pg_wal? We have such cases in >> the regression tests. > > Hmmm, the link is just pointing to a directory whose permissions have > been changed. Why do we need to worry about the link? Oh, perhaps I misread your code here, but this ignores symlinks, for example take an instance where pg_wal is symlinked, we'd likely want to make sure that at least archive_status is using a correct set of permissions, no? There is a "follow" option in File::Find which could help. >> - if (chmod(path, S_IRUSR | S_IWUSR) != 0) >> - { >> - fprintf(stderr, _("%s: could not change permissions of \"%s\": %s\n"), >> - progname, path, strerror(errno)); >> - exit_nicely(); >> - } >> Hm. Why are those removed? > > When I started working on this, pg_upgrade did not set umask and instead > did chmod for each dir created. umask() has since been added (even > before my patch) and so these are now noops. Seemed easier to remove > them than to change them all. > >> setup_signals(); >> >> - umask(S_IRWXG | S_IRWXO); >> - >> create_data_directory(); >> This should not be moved around. > > Hmmm - I moved it much earlier in the process which seems like a good > thing. Consider if there was a option to fixup permissions, like there > is to fsync. Isn't it best to set the mode as soon as possible to > prevent code from being inserted before it? Those two are separate issues. Could you begin a new thread on the matter? This will attract more attention. The indentation in RewindTest.pm is a bit wrong. - if (chmod(location, S_IRWXU) != 0) + current_umask = umask(0); + umask(current_umask); [...] - if (chmod(pg_data, S_IRWXU) != 0) + if (chmod(pg_data, PG_DIR_MODE_DEFAULT & ~file_mode_mask) != 0) Such modifications should be part of patch 3, not 2, where the group features really apply. my $test_mode = shift; + umask(0077); + RewindTest::setup_cluster($test_mode); What's that for? A comment would be welcome. +# make sure all directories and files have group permissions +if [ $(find ${PGDATA} -type f ! -perm 600 | wc -l) -ne 0 ]; then + echo "files in PGDATA with permission != 600"; + exit 1; +fi Perhaps on hold if we are able to move pg_upgrade tests to a TAP suite... We'll see what happens. Perhaps the tests should be cut into a separate patch? Those are not directly related to the refactoring done in patch 2. Patch 2 begins to look fine for me. I still need to look at patch 3 in more details. -- Michael
signature.asc
Description: PGP signature