Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dyQV6-0003NZ-5C for pgsql-committers@arkaria.postgresql.org; Sat, 30 Sep 2017 22:44:48 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dyQV5-0008D2-IG for pgsql-committers@arkaria.postgresql.org; Sat, 30 Sep 2017 22:44:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dyQUq-0007mW-3x for pgsql-committers@postgresql.org; Sat, 30 Sep 2017 22:44:32 +0000 Received: from out1-smtp.messagingengine.com ([66.111.4.25]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dyQUm-0002Wm-Eg for pgsql-committers@postgresql.org; Sat, 30 Sep 2017 22:44:31 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id 22295226E1; Sat, 30 Sep 2017 18:44:27 -0400 (EDT) Received: from frontend1 ([10.202.2.160]) by compute5.internal (MEProxy); Sat, 30 Sep 2017 18:44:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s= fm1; bh=/ipFvFLN6Cm1QJyGRZBJDIFVH6FSB+NPYqstXxYZGqc=; b=MbYB1Q0J /idYRtR7VDB0hbrpURWOH7mFpLF1vRrtw6PmpAjTH1Hu6upbCI8tgyaWlarxoWMS fxPQqU+UsOtIkKzZqtOWhzi2mcWSCVbu+VeVSYiDSu/r5PdTa4UvSairIysPX92i fHvGYiQp9DF6JnWYVxl8xRluRl1Rbhbo71vW0u8tai1aMU2g7C/OydbmxAbQT85v DQKxcleeBTbVwCizndnxCUpiNO9p8cFOc7Ol9WLcDEfLftaxlQAKd/5NQLEX6tbs 4Zn0in5PV8CSDX5SJw5J7VZZYsrmRjFeldHtn4aWcErtNeV7vM5i6YpPuoU2gOSS UMYamfZj+Pyf3A== X-ME-Sender: X-Sasl-enc: 08ltu8ouY4wO1YhtlTUOG8fnud1KyCrqbwmk1xgOTOt0 1506811466 Received: from intern.anarazel.de (unknown [136.24.76.72]) by mail.messagingengine.com (Postfix) with ESMTPA id B2C1A7E193; Sat, 30 Sep 2017 18:44:26 -0400 (EDT) Date: Sat, 30 Sep 2017 15:44:24 -0700 From: Andres Freund To: Andrew Dunstan Cc: Tom Lane , pgsql-committers Subject: Re: pgsql: Add test for postmaster crash restarts. Message-ID: <20170930224424.ud5ilchmclbl5y5n@alap3.anarazel.de> References: <17084.1505837634@sss.pgh.pa.us> <20170919164718.66hcedq2rtlkntvf@alap3.anarazel.de> <18695.1505840008@sss.pgh.pa.us> <20170919174232.soc2skrqxxdtnh22@alap3.anarazel.de> <21486.1506601297@sss.pgh.pa.us> <5ce9b1f4-dff8-6fe9-74ab-d8e1b993b1d5@2ndQuadrant.com> <20170930221043.iay4s7rmwm5l7wiw@alap3.anarazel.de> <56b65da3-f7cc-494c-7952-ba5f6c804d7e@2ndQuadrant.com> <20170930222712.xgdgxnt4sjvig5mn@alap3.anarazel.de> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="6c5vpau3pwll7d4k" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20170930222712.xgdgxnt4sjvig5mn@alap3.anarazel.de> List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-committers Precedence: bulk Sender: pgsql-committers-owner@postgresql.org --6c5vpau3pwll7d4k Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit On 2017-09-30 15:27:12 -0700, Andres Freund wrote: > On 2017-09-30 18:21:33 -0400, Andrew Dunstan wrote: > > > > [re-adding commiters which I inadvertently left off] > > > > > > On 09/30/2017 06:10 PM, Andres Freund wrote: > > > > > > > > >> I was just looking at this. Why aren't we using "pg_ctl kill" to > > >> terminate the backend? That's supposed to be portable. > > > Because pg_ctl can't do that for any process but postmaster, no? The > > > test is supposed to find issues with backend death (and has > > > defficiencies in error reporting already, and would have caught a bug > > > I'd introduced previously). > > > No, I don't think so. That's not what the docs say. That's why you give > > it a pid argument" "pg_ctl kill signal_name process_id" > > Oh, cool. Didn't know that one. So the answer is: > "Because Andres doesn't know squat.". > > But even after fixing that, there unfortunately is: > > static void > set_sig(char *signame) > { > … > #if 0 > /* probably should NOT provide SIGKILL */ > else if (strcmp(signame, "KILL") == 0) > sig = SIGKILL; > #endif > > I'm unclear on what that provision is achieving? If you can kill with > pg_ctl you can do other nasty stuff too (like just use kill instead of > pg_ctl)? Could you perhaps test whether windows likes things after the following patch? I don't think the kill_kill guarantees are really needed here, so we might even be able to allow this on msvc. Greetings, Andres Freund --6c5vpau3pwll7d4k Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="windowsify.patch" diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 4e02c4cea1..0990647297 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -1961,11 +1961,8 @@ set_sig(char *signame) sig = SIGQUIT; else if (strcmp(signame, "ABRT") == 0) sig = SIGABRT; -#if 0 - /* probably should NOT provide SIGKILL */ else if (strcmp(signame, "KILL") == 0) sig = SIGKILL; -#endif else if (strcmp(signame, "TERM") == 0) sig = SIGTERM; else if (strcmp(signame, "USR1") == 0) diff --git a/src/test/recovery/t/013_crash_restart.pl b/src/test/recovery/t/013_crash_restart.pl index ca02054ff0..91a8ef90c1 100644 --- a/src/test/recovery/t/013_crash_restart.pl +++ b/src/test/recovery/t/013_crash_restart.pl @@ -16,16 +16,8 @@ use Test::More; use Config; use Time::HiRes qw(usleep); -if ($Config{osname} eq 'MSWin32') -{ - # some Windows Perls at least don't like IPC::Run's - # start/kill_kill regime. - plan skip_all => "Test fails on Windows perl"; -} -else -{ - plan tests => 18; -} +plan tests => 18; + # To avoid hanging while expecting some specific input from a psql # instance being driven by us, add a timeout high enough that it @@ -106,10 +98,10 @@ $monitor_stdout = ''; $monitor_stderr = ''; # kill once with QUIT - we expect psql to exit, while emitting error message first -my $cnt = kill 'QUIT', $pid; +my $ret = TestLib::system_log('pg_ctl', 'kill', 'QUIT', $pid); # Exactly process should have been alive to be killed -is($cnt, 1, "exactly one process killed with SIGQUIT"); +is($ret, 0, "killed process with SIGQUIT"); # Check that psql sees the killed backend as having been terminated $killme_stdin .= q[ @@ -119,14 +111,14 @@ ok(pump_until($killme, \$killme_stderr, qr/WARNING: terminating connection beca "psql query died successfully after SIGQUIT"); $killme_stderr = ''; $killme_stdout = ''; -$killme->kill_kill; +$killme->finish; # Wait till server restarts - we should get the WARNING here, but # sometimes the server is unable to send that, if interrupted while # sending. ok(pump_until($monitor, \$monitor_stderr, qr/WARNING: terminating connection because of crash of another server process|server closed the connection unexpectedly/m), "psql monitor died successfully after SIGQUIT"); -$monitor->kill_kill; +$monitor->finish; # Wait till server restarts is($node->poll_query_until('postgres', 'SELECT $$restarted after sigquit$$;', 'restarted after sigquit'), @@ -179,8 +171,8 @@ $monitor_stderr = ''; # kill with SIGKILL this time - we expect the backend to exit, without # being able to emit an error error message -$cnt = kill 'KILL', $pid; -is($cnt, 1, "exactly one process killed with KILL"); +$ret = TestLib::system_log('pg_ctl', 'kill', 'KILL', $pid); +is($ret, 0, "killed process with KILL"); # Check that psql sees the server as being terminated. No WARNING, # because signal handlers aren't being run on SIGKILL. @@ -189,14 +181,14 @@ SELECT 1; ]; ok(pump_until($killme, \$killme_stderr, qr/server closed the connection unexpectedly/m), "psql query died successfully after SIGKILL"); -$killme->kill_kill; +$killme->finish; # Wait till server restarts - we should get the WARNING here, but # sometimes the server is unable to send that, if interrupted while # sending. ok(pump_until($monitor, \$monitor_stderr, qr/WARNING: terminating connection because of crash of another server process|server closed the connection unexpectedly/m), "psql monitor died successfully after SIGKILL"); -$monitor->kill_kill; +$monitor->finish; # Wait till server restarts is($node->poll_query_until('postgres', 'SELECT 1', '1'), "1", "reconnected after SIGKILL"); --6c5vpau3pwll7d4k Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-committers --6c5vpau3pwll7d4k--