Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1igiUM-0004ws-J3 for pgsql-bugs@arkaria.postgresql.org; Mon, 16 Dec 2019 05:00:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1igiUJ-0004iN-5I for pgsql-bugs@arkaria.postgresql.org; Mon, 16 Dec 2019 05:00:07 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1igiUI-0004iG-NS for pgsql-bugs@lists.postgresql.org; Mon, 16 Dec 2019 05:00:06 +0000 Received: from mail-lj1-x242.google.com ([2a00:1450:4864:20::242]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1igiUG-0006Bg-CG for pgsql-bugs@lists.postgresql.org; Mon, 16 Dec 2019 05:00:05 +0000 Received: by mail-lj1-x242.google.com with SMTP id r19so5294414ljg.3 for ; Sun, 15 Dec 2019 21:00:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=9EzNpRK9z8Gl8PZ8UVeMl+PioS8QWSjladT0xD0E50M=; b=qgYdZQFV9GmUusXll5qUU/JTQ1DIZZrpdEdzuM2Mvvu6Zqp031B9P8q9moDqD3QHMp R3CY3iWR6loozvejPkxo13DDNy4mq5unqzBVYdGP9K+sYez3jMjWBSWRh0oOfFvLRUNg S9DZygpDiSFpEJi1Cvlhm5h4tlyl3artWIjIgFl0Hxzx31pOUdvM9IpntPzCHotFc0Ri ADchdskUdBGv3wpqFI8t/thNw4UhBNnaCj+NujAiZ3C2Z5Eub6LlE1TazkKRs+q+KpTK Dqz979TlPDgPrqLzAi2NZyeEe/Vr9de/WWKo1cG1412nLCPW7eX+e/BGUISIeEFy4PHD +gQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=9EzNpRK9z8Gl8PZ8UVeMl+PioS8QWSjladT0xD0E50M=; b=tXgU1eIfYFwmTl76/1HbHQQXTdXiWk2DGSGLg0YbBo7FFEEuwM0jQhCpWxgZG9HhEz EOySavIN7yETRiRDxK6xyrzMI69c4PIgEV2iA5YcEMO0IbQw1JPk/zzu3gsVnzQ8vuqx YfuGTVBPolRF7z2GWKygrZgdKGuRtJRtRmpneL+QlYuIBa8s6YS+dK2PSuKgoCV1JOfm jTp0FvqKWckf6rDyX8hu0Q1Tola8G4HoiEzgbqF7dpW46Tx7SGLw97mDEKf7ucqJkXrD szZqp33sl5XzJq6spIs8ri3CCblSINgIZEsXmPXhGjXHHvXA7zIWgqkltPLqwPpf1a+G 8uAA== X-Gm-Message-State: APjAAAU0iIdr4JfFuaudIJ5bjQDQ2Y7ZIg8T/LuzdV1s1sggV/ytn4T1 7jirniVaMFDLQFzWpnWe2aeRCaAj X-Google-Smtp-Source: APXvYqxBCjd3m0qlqD4frrpr0JQnwgM2ePzmVx8+U3+TIbLLntQ8V8b0wpo/GVZ03vR5vEF5SYWvwQ== X-Received: by 2002:a2e:a0ce:: with SMTP id f14mr17329513ljm.55.1576472402321; Sun, 15 Dec 2019 21:00:02 -0800 (PST) Received: from [1.0.0.7] ([178.155.4.219]) by smtp.gmail.com with ESMTPSA id y7sm8150332lfe.7.2019.12.15.21.00.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 15 Dec 2019 21:00:01 -0800 (PST) Subject: Re: BUG #16161: pg_ctl stop fails sometimes (on Windows) To: Tom Lane Cc: pgsql-bugs@lists.postgresql.org References: <16161-7a985d2f1bbe8f71@postgresql.org> <4d28c7e1-fe91-b9fd-3227-478e549b05d5@gmail.com> <31098.1576445200@sss.pgh.pa.us> From: Alexander Lakhin Message-ID: Date: Mon, 16 Dec 2019 08:00:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <31098.1576445200@sss.pgh.pa.us> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Content-Language: en-US List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Hello Tom, 16.12.2019 0:26, Tom Lane wrote: > Alexander Lakhin writes: >>> The regression tests on Windows sometimes fail with 'Permission denied' >>> errors. For example: >>> https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=dory&dt=2019-12-11%2007%3A45%3A33 >> I see two ways to fix the issue: >> 1) Unlink postmaster.pid using rename operation (adopt the solution from >> https://stackoverflow.com/questions/3764072/). >> 2) Ignore such 'Permission denied' error and just try to open the file >> once again (attached fix_open_for_unlink.patch implements this). >> I'm inclined to the second approach as pgwin32_open() already handles >> two transient states (Windows-only), and it could be useful not only for >> postmaster.pid, but for some other files. > Agreed that (2) seems like the way to go. However, I'm not too pleased > with the patch as given, because it is gratuitously different in almost > every possible way from the adjacent code that's doing just about the same > thing for those other transient failures. Why is the timeout duration > different? Why is the looping logic not identical? Why did you make a > different decision about whether logging might be a good idea? Actually, > why didn't you just extend the existing if-block to also cover this case? > Maybe there's good reasons to be different, but you didn't explain them. Thanks for your questions. I'll try to add more details. I didn't want to use the existing code for three reasons. First, there are too many differences in the parameters: other error code, other error reason, no need for logging. Second, I wanted to decrease a delay, as whole unlink operation (comprising of three kernel calls: CreateFile, SetDispositionInformationFile, CloseFile) performed for me in 0.0002 seconds (as ProcessMonitor showed for several runs). Assuming even hundredfold duration seems sufficient. On the other side, ERROR_ACCESS_DENIED can be caused by a real access restriction and waiting for 30 seconds before erroring out is too long. Third, the logic of the existing loop confused me — I haven't seen a reason to sleep for a last time and then return an error without rechecking a condition. And I think that the logging is irrelevant as we want to handle here just the DELETE_PENDING state. If the "access denied" error state is disappeared within a second, then we can log only "the file probably was in a deletion state and now it's not", and if this state is persisting, we can log "access is really denied", but I believe that the existing calling code does the same anyway. > I'm also not that excited about memorializing a stackoverflow discussion > as the reason to do something. Can we point to something in Microsoft's > official docs? I'm not excited about this too, but I couldn't find something more appropriate. For example. there is a similar question on their forums: https://social.technet.microsoft.com/Forums/office/en-US/58e5c670-f024-44ff-9919-36c44ab11d9c/file-delete-pending-problem?forum=w7itprogeneral but it left without a reference to their docs. WebArchive contains their knowledge base article where STATUS_DELETE_PENDING is mapped to ERROR_ACCESS_DENIED, but today this information cannot be found on microsoft.com: https://web.archive.org/web/20150317121919/http://support.microsoft.com/en-us/kb/113996 Maybe they consider this as too low-level implementation details... I think, they have some internal documentation where this is described in details, but we can't reference it anyway. On the other hand, finding a couple of references to stackoverflow in src/ made me feel that it is not widely accepted, but still accepted (as an exception). Best regards. Alexander