Thread: Cannot cancel the change of a tablespace

Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Hi,

Today, I tried to cancel the change of a tablespace for a table (ALTER
TABLE ... SET TABLESPACE). I got the "Cancel request sent" but the query
continued and finally succeed. It was a big issue for my customer, and I
wanted to look more into that issue. So, I got a look at the source code
and found we didn't check for interrupts in this part of the code. I
added them, and it seems to work as I wanted.

I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.

Not sure we really want that change, and it don't feel like a bug to me.
Should I add it to to the next commitfest?

Comments?


--
Guillaume
 http://www.postgresql.fr
 http://dalibo.com

Attachment

Re: Cannot cancel the change of a tablespace

From
Simon Riggs
Date:
On Mon, 2010-06-21 at 18:46 +0200, Guillaume Lelarge wrote:

> Today, I tried to cancel the change of a tablespace for a table (ALTER
> TABLE ... SET TABLESPACE). I got the "Cancel request sent" but the query
> continued and finally succeed. It was a big issue for my customer, and I
> wanted to look more into that issue. So, I got a look at the source code
> and found we didn't check for interrupts in this part of the code. I
> added them, and it seems to work as I wanted.
> 
> I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
> copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
> SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.
> 
> Not sure we really want that change, and it don't feel like a bug to me.
> Should I add it to to the next commitfest?

Patch looks fine to me. Seems important.

Will apply tomorrow to 9.0, barring objections.

-- Simon Riggs           www.2ndQuadrant.com




Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Mon, Jun 21, 2010 at 12:46 PM, Guillaume Lelarge
<guillaume@lelarge.info> wrote:
> Today, I tried to cancel the change of a tablespace for a table (ALTER
> TABLE ... SET TABLESPACE). I got the "Cancel request sent" but the query
> continued and finally succeed. It was a big issue for my customer, and I
> wanted to look more into that issue. So, I got a look at the source code
> and found we didn't check for interrupts in this part of the code. I
> added them, and it seems to work as I wanted.
>
> I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
> copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
> SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.
>
> Not sure we really want that change, and it don't feel like a bug to me.
> Should I add it to to the next commitfest?

Adding a CHECK_FOR_INTERRUPTS() to copy_relation_data seems like it
ought to be OK (though I haven't tested), but copydir() is in
src/port, and I fear that putting CHECK_FOR_INTERRUPTS() in there
might cause problems.

I think that whatever portion of this we end up applying should be back-patched.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Tom Lane
Date:
Robert Haas <robertmhaas@gmail.com> writes:
> On Mon, Jun 21, 2010 at 12:46 PM, Guillaume Lelarge
> <guillaume@lelarge.info> wrote:
>> I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
>> copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
>> SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.

> Adding a CHECK_FOR_INTERRUPTS() to copy_relation_data seems like it
> ought to be OK (though I haven't tested), but copydir() is in
> src/port, and I fear that putting CHECK_FOR_INTERRUPTS() in there
> might cause problems.

copydir.c is already backend-specific thanks to all the ereport calls.
If we ever tried to make it usable in frontend code, we could easily
deal with CHECK_FOR_INTERRUPTS() via #ifndef FRONTEND --- changing the
error management would be far more painful.
        regards, tom lane


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 23/06/2010 22:54, Tom Lane a écrit :
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Mon, Jun 21, 2010 at 12:46 PM, Guillaume Lelarge
>> <guillaume@lelarge.info> wrote:
>>> I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
>>> copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
>>> SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.
> 
>> Adding a CHECK_FOR_INTERRUPTS() to copy_relation_data seems like it
>> ought to be OK (though I haven't tested), but copydir() is in
>> src/port, and I fear that putting CHECK_FOR_INTERRUPTS() in there
>> might cause problems.
> 
> copydir.c is already backend-specific thanks to all the ereport calls.
> If we ever tried to make it usable in frontend code, we could easily
> deal with CHECK_FOR_INTERRUPTS() via #ifndef FRONTEND --- changing the
> error management would be far more painful.
> 

I'm not sure I get it right. Do I need to do something on the patch so
that it can get commited?


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 23/06/2010 23:29, Guillaume Lelarge a écrit :
> Le 23/06/2010 22:54, Tom Lane a écrit :
>> Robert Haas <robertmhaas@gmail.com> writes:
>>> On Mon, Jun 21, 2010 at 12:46 PM, Guillaume Lelarge
>>> <guillaume@lelarge.info> wrote:
>>>> I added a CHECK_FOR_INTERRUPTS call in the copy_relation_data(),
>>>> copy_dir(), and copy_file() functions. Works for me on ALTER TABLE ...
>>>> SET TABLESPACE and ALTER DATABASE ... SET TABLESPACE, in 9.0 and 8.4.
>>
>>> Adding a CHECK_FOR_INTERRUPTS() to copy_relation_data seems like it
>>> ought to be OK (though I haven't tested), but copydir() is in
>>> src/port, and I fear that putting CHECK_FOR_INTERRUPTS() in there
>>> might cause problems.
>>
>> copydir.c is already backend-specific thanks to all the ereport calls.
>> If we ever tried to make it usable in frontend code, we could easily
>> deal with CHECK_FOR_INTERRUPTS() via #ifndef FRONTEND --- changing the
>> error management would be far more painful.
>>
> 
> I'm not sure I get it right. Do I need to do something on the patch so
> that it can get commited?
> 

Still not sure what to do right now for this patch :)

Could it be applied? or should I work on it? (and if yes on the latter,
to do what?)

Thanks.



-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com


Re: Cannot cancel the change of a tablespace

From
Tom Lane
Date:
Guillaume Lelarge <guillaume@lelarge.info> writes:
> Still not sure what to do right now for this patch :)

Put it on the commitfest list, if you didn't already.
        regards, tom lane


Re: Cannot cancel the change of a tablespace

From
Bruce Momjian
Date:
Tom Lane wrote:
> Guillaume Lelarge <guillaume@lelarge.info> writes:
> > Still not sure what to do right now for this patch :)
> 
> Put it on the commitfest list, if you didn't already.

So this is not something we want fixed for 9.0, as indicated by Simon?
I don't see the patch on the commit-fest page yet.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + None of us is going to be here forever. +


Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
> Tom Lane wrote:
>> Guillaume Lelarge <guillaume@lelarge.info> writes:
>> > Still not sure what to do right now for this patch :)
>>
>> Put it on the commitfest list, if you didn't already.
>
> So this is not something we want fixed for 9.0, as indicated by Simon?
> I don't see the patch on the commit-fest page yet.

I tend to think we should fix it for 9.0, but could be talked out of
it if someone has a compelling argument to make.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Tom Lane
Date:
Robert Haas <robertmhaas@gmail.com> writes:
> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>> So this is not something we want fixed for 9.0, as indicated by Simon?
>> I don't see the patch on the commit-fest page yet.

> I tend to think we should fix it for 9.0, but could be talked out of
> it if someone has a compelling argument to make.

Er, maybe I lost count, but I thought you were the one objecting to
the patch.
        regards, tom lane


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 30/06/2010 05:25, Tom Lane a écrit :
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>> I don't see the patch on the commit-fest page yet.
> 
>> I tend to think we should fix it for 9.0, but could be talked out of
>> it if someone has a compelling argument to make.
> 
> Er, maybe I lost count, but I thought you were the one objecting to
> the patch.
> 

You're right. Robert questioned the use of CHECK_FOR_INTERRUPTS() in
code available in the src/port directory. I don't see what issue could
result with this. He also said that whatever would be commited should be
back-patched.

I can still add it for the next commit fest, I just don't want this
patch to get lost. Though I won't be able to do this before getting back
from work.

Thanks.


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com


Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Tue, Jun 29, 2010 at 11:25 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>> I don't see the patch on the commit-fest page yet.
>
>> I tend to think we should fix it for 9.0, but could be talked out of
>> it if someone has a compelling argument to make.
>
> Er, maybe I lost count, but I thought you were the one objecting to
> the patch.

No, I just wasn't sure whether it was safe.  If it's safe, I'm 100% in
favor of applying it and back-patching.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 30/06/2010 06:53, Guillaume Lelarge a écrit :
> Le 30/06/2010 05:25, Tom Lane a écrit :
>> Robert Haas <robertmhaas@gmail.com> writes:
>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>> I don't see the patch on the commit-fest page yet.
>>
>>> I tend to think we should fix it for 9.0, but could be talked out of
>>> it if someone has a compelling argument to make.
>>
>> Er, maybe I lost count, but I thought you were the one objecting to
>> the patch.
>>
> 
> You're right. Robert questioned the use of CHECK_FOR_INTERRUPTS() in
> code available in the src/port directory. I don't see what issue could
> result with this. He also said that whatever would be commited should be
> back-patched.
> 
> I can still add it for the next commit fest, I just don't want this
> patch to get lost. Though I won't be able to do this before getting back
> from work.
> 

Finally, I added it to the next commit fest. Robert can work on it
before if he wants to (or has the time).

https://commitfest.postgresql.org/action/patch_view?id=331


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com


Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Thu, Jul 1, 2010 at 5:30 AM, Guillaume Lelarge
<guillaume@lelarge.info> wrote:
>>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>>> I don't see the patch on the commit-fest page yet.
>
> Finally, I added it to the next commit fest. Robert can work on it
> before if he wants to (or has the time).

I'd been avoiding working on this because Simon had said he was going
to commit it, but I can pick it up.  I've committed and back-patched
(to 8.0, as 7.4 does not have tablespaces) the fix for ALTER TABLE ..
SET TABLESPACE.  I'll take a look at the rest of it as well.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Thu, Jul 1, 2010 at 10:18 AM, Robert Haas <robertmhaas@gmail.com> wrote:
> On Thu, Jul 1, 2010 at 5:30 AM, Guillaume Lelarge
> <guillaume@lelarge.info> wrote:
>>>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>>>> I don't see the patch on the commit-fest page yet.
>>
>> Finally, I added it to the next commit fest. Robert can work on it
>> before if he wants to (or has the time).
>
> I'd been avoiding working on this because Simon had said he was going
> to commit it, but I can pick it up.  I've committed and back-patched
> (to 8.0, as 7.4 does not have tablespaces) the fix for ALTER TABLE ..
> SET TABLESPACE.  I'll take a look at the rest of it as well.

It looks like we have two reasonable choices here:

- We could backpatch this only to 8.4, where ALTER DATABASE .. SET
TABLESPACE was introduced.

- Or, since this also makes it easier to interrupt CREATE DATABASE new
TEMPLATE = some_big_database, we could back-patch it all the way to
8.1, which is the first release where we use copydir() rather than
invoking cp -r (except on Windows, where copydir() has always been
used, but releases < 8.2 aren't supported on Windows anyway).

Since I can't remember anyone complaining about difficulty
interrupting CREATE DATABASE, I'm inclined to go back only to 8.4, and
will do that a bit later.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 01/07/2010 17:54, Robert Haas a écrit :
> On Thu, Jul 1, 2010 at 10:18 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>> On Thu, Jul 1, 2010 at 5:30 AM, Guillaume Lelarge
>> <guillaume@lelarge.info> wrote:
>>>>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>>>>> I don't see the patch on the commit-fest page yet.
>>>
>>> Finally, I added it to the next commit fest. Robert can work on it
>>> before if he wants to (or has the time).
>>
>> I'd been avoiding working on this because Simon had said he was going
>> to commit it, but I can pick it up.  I've committed and back-patched
>> (to 8.0, as 7.4 does not have tablespaces) the fix for ALTER TABLE ..
>> SET TABLESPACE.  I'll take a look at the rest of it as well.
> 
> It looks like we have two reasonable choices here:
> 
> - We could backpatch this only to 8.4, where ALTER DATABASE .. SET
> TABLESPACE was introduced.
> 
> - Or, since this also makes it easier to interrupt CREATE DATABASE new
> TEMPLATE = some_big_database, we could back-patch it all the way to
> 8.1, which is the first release where we use copydir() rather than
> invoking cp -r (except on Windows, where copydir() has always been
> used, but releases < 8.2 aren't supported on Windows anyway).
> 
> Since I can't remember anyone complaining about difficulty
> interrupting CREATE DATABASE, I'm inclined to go back only to 8.4, and
> will do that a bit later.
> 

I agree that a backpatch to 8.4 seems enough.


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com


Re: Cannot cancel the change of a tablespace

From
Robert Haas
Date:
On Thu, Jul 1, 2010 at 12:11 PM, Guillaume Lelarge
<guillaume@lelarge.info> wrote:
> Le 01/07/2010 17:54, Robert Haas a écrit :
>> On Thu, Jul 1, 2010 at 10:18 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>>> On Thu, Jul 1, 2010 at 5:30 AM, Guillaume Lelarge
>>> <guillaume@lelarge.info> wrote:
>>>>>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>>>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>>>>>> I don't see the patch on the commit-fest page yet.
>>>>
>>>> Finally, I added it to the next commit fest. Robert can work on it
>>>> before if he wants to (or has the time).
>>>
>>> I'd been avoiding working on this because Simon had said he was going
>>> to commit it, but I can pick it up.  I've committed and back-patched
>>> (to 8.0, as 7.4 does not have tablespaces) the fix for ALTER TABLE ..
>>> SET TABLESPACE.  I'll take a look at the rest of it as well.
>>
>> It looks like we have two reasonable choices here:
>>
>> - We could backpatch this only to 8.4, where ALTER DATABASE .. SET
>> TABLESPACE was introduced.
>>
>> - Or, since this also makes it easier to interrupt CREATE DATABASE new
>> TEMPLATE = some_big_database, we could back-patch it all the way to
>> 8.1, which is the first release where we use copydir() rather than
>> invoking cp -r (except on Windows, where copydir() has always been
>> used, but releases < 8.2 aren't supported on Windows anyway).
>>
>> Since I can't remember anyone complaining about difficulty
>> interrupting CREATE DATABASE, I'm inclined to go back only to 8.4, and
>> will do that a bit later.
>>
>
> I agree that a backpatch to 8.4 seems enough.

Done.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


Re: Cannot cancel the change of a tablespace

From
Guillaume Lelarge
Date:
Le 01/07/2010 22:13, Robert Haas a écrit :
> On Thu, Jul 1, 2010 at 12:11 PM, Guillaume Lelarge
> <guillaume@lelarge.info> wrote:
>> Le 01/07/2010 17:54, Robert Haas a écrit :
>>> On Thu, Jul 1, 2010 at 10:18 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>>>> On Thu, Jul 1, 2010 at 5:30 AM, Guillaume Lelarge
>>>> <guillaume@lelarge.info> wrote:
>>>>>>>> On Tue, Jun 29, 2010 at 9:42 PM, Bruce Momjian <bruce@momjian.us> wrote:
>>>>>>>>> So this is not something we want fixed for 9.0, as indicated by Simon?
>>>>>>>>> I don't see the patch on the commit-fest page yet.
>>>>>
>>>>> Finally, I added it to the next commit fest. Robert can work on it
>>>>> before if he wants to (or has the time).
>>>>
>>>> I'd been avoiding working on this because Simon had said he was going
>>>> to commit it, but I can pick it up.  I've committed and back-patched
>>>> (to 8.0, as 7.4 does not have tablespaces) the fix for ALTER TABLE ..
>>>> SET TABLESPACE.  I'll take a look at the rest of it as well.
>>>
>>> It looks like we have two reasonable choices here:
>>>
>>> - We could backpatch this only to 8.4, where ALTER DATABASE .. SET
>>> TABLESPACE was introduced.
>>>
>>> - Or, since this also makes it easier to interrupt CREATE DATABASE new
>>> TEMPLATE = some_big_database, we could back-patch it all the way to
>>> 8.1, which is the first release where we use copydir() rather than
>>> invoking cp -r (except on Windows, where copydir() has always been
>>> used, but releases < 8.2 aren't supported on Windows anyway).
>>>
>>> Since I can't remember anyone complaining about difficulty
>>> interrupting CREATE DATABASE, I'm inclined to go back only to 8.4, and
>>> will do that a bit later.
>>>
>>
>> I agree that a backpatch to 8.4 seems enough.
> 
> Done.
> 

Thanks, Robert.


-- 
Guillaumehttp://www.postgresql.frhttp://dalibo.com