Обсуждение: pgsql: Fix pg_rewind when pg_xlog is a symlink.

Поиск
Список
Период
Сортировка

pgsql: Fix pg_rewind when pg_xlog is a symlink.

От
Heikki Linnakangas
Дата:
Fix pg_rewind when pg_xlog is a symlink.

pg_xlog is often a symlink, typically to a different filesystem. Don't
get confused and comlain about by that, and just always pretend that it's a
normal directory, even if it's really a symlink.

Also add a test case for this.

Backpatch to 9.5.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/0e42397f42b370798461cbf3358185b520329f9f

Modified Files
--------------
src/bin/pg_rewind/RewindTest.pm            |   14 +++--
src/bin/pg_rewind/filemap.c                |   16 +++++-
src/bin/pg_rewind/t/001_basic.pl           |    1 +
src/bin/pg_rewind/t/002_databases.pl       |    1 +
src/bin/pg_rewind/t/003_extrafiles.pl      |    1 +
src/bin/pg_rewind/t/004_pg_xlog_symlink.pl |   79 ++++++++++++++++++++++++++++
6 files changed, 107 insertions(+), 5 deletions(-)


Re: pgsql: Fix pg_rewind when pg_xlog is a symlink.

От
Michael Paquier
Дата:
On Mon, Aug 3, 2015 at 9:34 PM, Heikki Linnakangas
<heikki.linnakangas@iki.fi> wrote:
> Fix pg_rewind when pg_xlog is a symlink.
>
> pg_xlog is often a symlink, typically to a different filesystem. Don't
> get confused and comlain about by that, and just always pretend that it's a
> normal directory, even if it's really a symlink.
>
> Also add a test case for this.

+   symlink($master_xlogdir, "$test_master_datadir/pg_xlog") or die;

This will die on Windows, hence I think that this test should be
skipped in this case.
--
Michael


Re: pgsql: Fix pg_rewind when pg_xlog is a symlink.

От
Heikki Linnakangas
Дата:
On 08/03/2015 03:54 PM, Michael Paquier wrote:
> On Mon, Aug 3, 2015 at 9:34 PM, Heikki Linnakangas
> <heikki.linnakangas@iki.fi> wrote:
>> Fix pg_rewind when pg_xlog is a symlink.
>>
>> pg_xlog is often a symlink, typically to a different filesystem. Don't
>> get confused and comlain about by that, and just always pretend that it's a
>> normal directory, even if it's really a symlink.
>>
>> Also add a test case for this.
>
> +   symlink($master_xlogdir, "$test_master_datadir/pg_xlog") or die;
>
> This will die on Windows, hence I think that this test should be
> skipped in this case.

Sure, I did have this at the top:

+if ($windows_os)
+{
+       plan skip_all => 'symlinks not supported on Windows';
+       exit;
+}
+else
+{
+       plan tests => 4;
+}

That's only on master, though. The TAP tests don't run on Windows in 9.5
anyway.

I guess the pg_rewind tests used to work, but we didn't really advertise
or make it easy to run it, so I'm not sure it's worth it to try to
maintain that. Then again, we might want to backpatch all the TAP-test
changes to make them work on Windows to 9.5, now that they've gotten
some testing in the buildfarm and seem to work.

BTW, I just noticed that the man page for perl's symlink says this:

>  On systems that don't support symbolic links, raises an exception. To check for that, use eval:
>
>     $symlink_exists = eval { symlink("",""); 1 };

I wonder if we should be testing for that, instead of $windows_os.

- Heikki



Re: pgsql: Fix pg_rewind when pg_xlog is a symlink.

От
Michael Paquier
Дата:
On Mon, Aug 3, 2015 at 10:37 PM, Heikki Linnakangas wrote:
> That's only on master, though. The TAP tests don't run on Windows in 9.5
> anyway.

Oops, yes I got mistaken by the commit on 9.5.

> I guess the pg_rewind tests used to work, but we didn't really advertise or
> make it easy to run it, so I'm not sure it's worth it to try to maintain
> that. Then again, we might want to backpatch all the TAP-test changes to
> make them work on Windows to 9.5, now that they've gotten some testing in
> the buildfarm and seem to work.

Usually new features are not backpatched, and the support for MSVC is one IMO.

>>  On systems that don't support symbolic links, raises an exception. To
>> check for that, use eval:
>>
>>     $symlink_exists = eval { symlink("",""); 1 };
>
>
> I wonder if we should be testing for that, instead of $windows_os.

Yes, good point! The second platform referred as unsupported is RISC OS:
http://perldoc.perl.org/perlport.html#symlink
And Postgres can visibly work on it. It would be good to get for
instance a RaspPI on the buildfarm with it, there is a development
version.
--
Michael


Re: pgsql: Fix pg_rewind when pg_xlog is a symlink.

От
Andrew Dunstan
Дата:
On 08/03/2015 09:05 PM, Michael Paquier wrote:
> On Mon, Aug 3, 2015 at 10:37 PM, Heikki Linnakangas wrote:
>> That's only on master, though. The TAP tests don't run on Windows in 9.5
>> anyway.
> Oops, yes I got mistaken by the commit on 9.5.
>
>> I guess the pg_rewind tests used to work, but we didn't really advertise or
>> make it easy to run it, so I'm not sure it's worth it to try to maintain
>> that. Then again, we might want to backpatch all the TAP-test changes to
>> make them work on Windows to 9.5, now that they've gotten some testing in
>> the buildfarm and seem to work.
> Usually new features are not backpatched, and the support for MSVC is one IMO.



I think we can be rather more liberal with testing regimes that we can
core server and client code.


I have not yet tested these things with MSVC, but I can tell you:

a) some more changes will be required to allow the tests to run on
mingw/msys
b) the rewind tests are currently failing very badly on my mingw/msys
test rig. I'll be posting about that separately before long

>
>>>   On systems that don't support symbolic links, raises an exception. To
>>> check for that, use eval:
>>>
>>>      $symlink_exists = eval { symlink("",""); 1 };
>>
>> I wonder if we should be testing for that, instead of $windows_os.
> Yes, good point! The second platform referred as unsupported is RISC OS:
> http://perldoc.perl.org/perlport.html#symlink
> And Postgres can visibly work on it. It would be good to get for
> instance a RaspPI on the buildfarm with it, there is a development
> version.


The statement that Windows doesn't support symlinks isn't actually true.
AS Perl in Windows doesn't (or might not, - I don't know about all
versions). The test above doesn't fail on Msys DTK perl, but symlink
calls in perl don't work either, So I think we'd better stay with the
current test, or add the test above to the current test.

cheers

andrew