Обсуждение: cannot drop replication slot if server is running in single-user mode
Hi, I found that if server is running in single-user mode , there we can create replication slot but cannot drop it . backend> SELECT * FROM pg_create_physical_replication_slot('p'); 2018-03-06 13:20:03.441 GMT [14869] LOG: statement: SELECT * FROM pg_create_physical_replication_slot('p'); 1: slot_name (typeid = 19, len = 64, typmod = -1, byval = f) 2: lsn (typeid = 3220, len = 8, typmod = -1, byval = t) ---- 1: slot_name = "p" (typeid = 19, len = 64, typmod = -1, byval = f) ---- backend> select pg_drop_replication_slot('p'); 2018-03-06 13:20:24.390 GMT [14869] LOG: statement: select pg_drop_replication_slot('p'); 1: pg_drop_replication_slot (typeid = 2278, len = 4, typmod = -1, byval = t) ---- 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file descriptor 2018-03-06 13:20:24.391 GMT [14869] STATEMENT: select pg_drop_replication_slot('p'); -- regards,tushar EnterpriseDB https://www.enterprisedb.com/ The Enterprise PostgreSQL Company
On Tue, Mar 6, 2018 at 06:59:33PM +0530, tushar wrote: > Hi, > > I found that if server is running in single-user mode , there we can create > replication slot but cannot drop it . > > backend> SELECT * FROM pg_create_physical_replication_slot('p'); > 2018-03-06 13:20:03.441 GMT [14869] LOG: statement: SELECT * FROM > pg_create_physical_replication_slot('p'); > > 1: slot_name (typeid = 19, len = 64, typmod = -1, byval = f) > 2: lsn (typeid = 3220, len = 8, typmod = -1, byval = t) > ---- > 1: slot_name = "p" (typeid = 19, len = 64, typmod = -1, byval = f) > ---- > backend> select pg_drop_replication_slot('p'); > 2018-03-06 13:20:24.390 GMT [14869] LOG: statement: select > pg_drop_replication_slot('p'); > > 1: pg_drop_replication_slot (typeid = 2278, len = 4, typmod = -1, > byval = t) > ---- > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file > descriptor > 2018-03-06 13:20:24.391 GMT [14869] STATEMENT: select > pg_drop_replication_slot('p'); I can confirm this bug exists in single-user mode. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +
On 2018-03-29 17:42:57 -0400, Bruce Momjian wrote: > On Tue, Mar 6, 2018 at 06:59:33PM +0530, tushar wrote: > > Hi, > > > > I found that if server is running in single-user mode , there we can create > > replication slot but cannot drop it . > > > > backend> SELECT * FROM pg_create_physical_replication_slot('p'); > > 2018-03-06 13:20:03.441 GMT [14869] LOG: statement: SELECT * FROM > > pg_create_physical_replication_slot('p'); > > > > 1: slot_name (typeid = 19, len = 64, typmod = -1, byval = f) > > 2: lsn (typeid = 3220, len = 8, typmod = -1, byval = t) > > ---- > > 1: slot_name = "p" (typeid = 19, len = 64, typmod = -1, byval = f) > > ---- > > backend> select pg_drop_replication_slot('p'); > > 2018-03-06 13:20:24.390 GMT [14869] LOG: statement: select > > pg_drop_replication_slot('p'); > > > > 1: pg_drop_replication_slot (typeid = 2278, len = 4, typmod = -1, > > byval = t) > > ---- > > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file > > descriptor > > 2018-03-06 13:20:24.391 GMT [14869] STATEMENT: select > > pg_drop_replication_slot('p'); > > I can confirm this bug exists in single-user mode. I'm not sure we need to do anything about this, personally. This seems like a fairly rare thing to do in a mode that's definitely not intended to be general purpose. Greetings, Andres Freund
On Thu, Mar 29, 2018 at 02:51:24PM -0700, Andres Freund wrote: > On 2018-03-29 17:42:57 -0400, Bruce Momjian wrote: > > On Tue, Mar 6, 2018 at 06:59:33PM +0530, tushar wrote: > > > Hi, > > > > > > I found that if server is running in single-user mode , there we can create > > > replication slot but cannot drop it . > > > > > > backend> SELECT * FROM pg_create_physical_replication_slot('p'); > > > 2018-03-06 13:20:03.441 GMT [14869] LOG: statement: SELECT * FROM > > > pg_create_physical_replication_slot('p'); > > > > > > 1: slot_name (typeid = 19, len = 64, typmod = -1, byval = f) > > > 2: lsn (typeid = 3220, len = 8, typmod = -1, byval = t) > > > ---- > > > 1: slot_name = "p" (typeid = 19, len = 64, typmod = -1, byval = f) > > > ---- > > > backend> select pg_drop_replication_slot('p'); > > > 2018-03-06 13:20:24.390 GMT [14869] LOG: statement: select > > > pg_drop_replication_slot('p'); > > > > > > 1: pg_drop_replication_slot (typeid = 2278, len = 4, typmod = -1, > > > byval = t) > > > ---- > > > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file > > > descriptor > > > 2018-03-06 13:20:24.391 GMT [14869] STATEMENT: select > > > pg_drop_replication_slot('p'); > > > > I can confirm this bug exists in single-user mode. > > I'm not sure we need to do anything about this, personally. This seems > like a fairly rare thing to do in a mode that's definitely not intended > to be general purpose. I think the question is whether this is exposing a bug or is expected behavior. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +
On 2018-03-29 21:07:36 -0400, Bruce Momjian wrote: > I think the question is whether this is exposing a bug or is expected > behavior. It's unsurprising. Acquiring a slot uses a condition variable, which uses latches to sleep. Latches don't work in single user mode. Boom. Greetings, Andres Freund
On Thu, Mar 29, 2018 at 06:09:28PM -0700, Andres Freund wrote: > On 2018-03-29 21:07:36 -0400, Bruce Momjian wrote: > > I think the question is whether this is exposing a bug or is expected > > behavior. > > It's unsurprising. Acquiring a slot uses a condition variable, which > uses latches to sleep. Latches don't work in single user mode. Boom. OK, thanks for confirming. -- Bruce Momjian <bruce@momjian.us> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +
On Thu, Mar 29, 2018 at 5:51 PM, Andres Freund <andres@anarazel.de> wrote: >> > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file >> > descriptor >> >> I can confirm this bug exists in single-user mode. > > I'm not sure we need to do anything about this, personally. This seems > like a fairly rare thing to do in a mode that's definitely not intended > to be general purpose. Mmmph. I don't really think it's possible to view a user-visible EBADF as anything other than a coding error. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Robert Haas <robertmhaas@gmail.com> writes: > On Thu, Mar 29, 2018 at 5:51 PM, Andres Freund <andres@anarazel.de> wrote: >> I'm not sure we need to do anything about this, personally. This seems >> like a fairly rare thing to do in a mode that's definitely not intended >> to be general purpose. > Mmmph. I don't really think it's possible to view a user-visible > EBADF as anything other than a coding error. If we think this is worth spending any code at all on, what I'd suggest is to reject replication-related commands at some early stage if not IsUnderPostmaster. regards, tom lane
Robert Haas wrote: > On Thu, Mar 29, 2018 at 5:51 PM, Andres Freund <andres@anarazel.de> wrote: > >> > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file > >> > descriptor > >> > >> I can confirm this bug exists in single-user mode. > > > > I'm not sure we need to do anything about this, personally. This seems > > like a fairly rare thing to do in a mode that's definitely not intended > > to be general purpose. > > Mmmph. I don't really think it's possible to view a user-visible > EBADF as anything other than a coding error. IMO the problem is not the user-visible EBADF -- the problem is that the user might be attempting to clean up from some previous mistake by removing a replication slot. Using single-user mode might be a strange tool, but it's not completely unreasonable. Is it really all that difficult to fix slot acquisition for it? I agree with Tom that for any other operation we can just reject it early if not under postmaster, but dropping a slot seems a special case. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Alvaro Herrera wrote: > Robert Haas wrote: > > On Thu, Mar 29, 2018 at 5:51 PM, Andres Freund <andres@anarazel.de> wrote: > > >> > 2018-03-06 13:20:24.391 GMT [14869] ERROR: epoll_ctl() failed: Bad file > > >> > descriptor > > >> > > >> I can confirm this bug exists in single-user mode. > > > > > > I'm not sure we need to do anything about this, personally. This seems > > > like a fairly rare thing to do in a mode that's definitely not intended > > > to be general purpose. > > > > Mmmph. I don't really think it's possible to view a user-visible > > EBADF as anything other than a coding error. > > IMO the problem is not the user-visible EBADF -- the problem is that the > user might be attempting to clean up from some previous mistake by > removing a replication slot. Using single-user mode might be a strange > tool, but it's not completely unreasonable. Is it really all that > difficult to fix slot acquisition for it? Here's a patch (against pg10) to fix this problem. -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services