Re: Fixed "Slony" related issues - Mailing list pgadmin-hackers

From Dave Page
Subject Re: Fixed "Slony" related issues
Date
Msg-id CA+OCxozz-+myo9qOE4ibzt832U6qWOYQQsL1P8hkdKy-3cexFg@mail.gmail.com
Whole thread Raw
In response to Fixed "Slony" related issues  (Akshay Joshi <akshay.joshi@enterprisedb.com>)
Responses Re: Fixed "Slony" related issues  (Akshay Joshi <akshay.joshi@enterprisedb.com>)
List pgadmin-hackers
Hi

On Mon, Aug 5, 2013 at 1:21 PM, Akshay Joshi
<akshay.joshi@enterprisedb.com> wrote:
> Hi Dave
>
> While testing pgAdmin with "Slony" I have found couple of following issues
>
> Found crash (segmentation fault) when create a new schema using slony
> replication cluster. Crash is reproducible when user opens the "New
> Schema..." dialog and select an slony cluster from "Use Slony" combo box and
> click "OK".
> DDL Statements like ( "CREATE SCHEMA" , "ALTER TABLE" ..)  didn't work if
> user select an slony cluster from "Use Slony" combo box and click "OK".
>
> I have analyze and fixed both the issues. Below is my analysis and solution
>
> Analysis for 1: - We have used wxComboBox for "Use Slony" option in the
> dlgProperty dialog. To add an item into the combo box we have used "Append"
> method of wxControlWithItems (wxComboBox is derived from
> wxControlWithItems).
>
> According to the documentation of "wxControlWithItems" it is mention that in
> the same control all items must have client data of the same type (typed or
> untyped), if any. This type is determined by the first call to Append (the
> version with client data pointer) or SetClientData. Attached is the
> screenshot.
>
> In pgAdmin we have appended the wxEmptyString without any client data first
> in the "Use Slony" combo box and then the slony cluster with client data. So
> when the first append call gets executed, type of the client data is
> determined as "Void *"
>
> Solution for 1:- There are two ways to solve this issue.
>
> Create a dummy object of client data(replClientData in our case) and passed
> it when we append the wxEmptyString".
> Typecast the "replClientData" to (void *) while appending the slony cluster.
>
> I have fixed it using the second option.

OK.

> Analysis for 2:- After fixing the above crash when we try to create the new
> schema or add any new column to the existing table it neither applied to the
> Master nor on Slave. As per the pgAdmin code if we select a slony cluster
> then following two statements runs:
>
> SELECT _slonycluster.ddlscript_prepare(1, 0);
> SELECT _slonycluster.ddlscript_complete(1, 'ALTER TABLE "Test" ADD COLUMN
> isSlony boolean; ', 0);
>
> Where "p_only_on_node" parameter is set to 0. It is hard coded. Then I have
> googled and found some example where this parameter is set to -1.
>
> I have analyze the code of "Slony 2.1.3 (slonik.c file) " and found that it
> executes the following statement in sequence
> SELECT _slonycluster.ddlscript_prepare(1, -1);
> ALTER TABLE "Test" ADD COLUMN isSlony boolean;
> SELECT _slonycluster.ddlscript_complete(1, 'ALTER TABLE "Test" ADD COLUMN
> isSlony boolean; ', -1);
>
> Comparing it with pgAdmin code we execute only two
> statements(ddlscript_prepare and ddlscript_complete) which is being used for
> replication only, but there is no logic to execute the statement on Master
> itself. May be my understanding here is wrong, please correct me.
>
>
> Solution for 2:- To solve the above issue, First I have set the value of
> "p_only_on_node" to -1 instead of 0 and then added the SQL which is going to
> be executed on Master.

Did you check that the modified version of the SQL is appropriate for
all versions of Slony? We currently support back to 1.2 iirc.

Thanks.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


pgadmin-hackers by date:

Previous
From: Dave Page
Date:
Subject: Re: Fixed help information issue for "Server Instrumentation" guru hint
Next
From: Akshay Joshi
Date:
Subject: Re: Fixed help information issue for "Server Instrumentation" guru hint