Re: Integration of Psycopg with XTA

From: Federico Di Gregorio <fog(at)dndg(dot)it>
To: psycopg(at)lists(dot)postgresql(dot)org
Subject: Re: Integration of Psycopg with XTA
Date: 2018-09-26 07:33:22
Message-ID: e4d58a4a-ad55-1fba-53bf-5d301882a397@dndg.it
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: psycopg

Hi Christian,

first of all I don't like SWIG at all (having used it myself to create
Python bindings to the Ogre3D library). It makes too easy to depend on
the internal state of the C library instead of abstracting it. A Python
function that expects a C pointer (PQconn*) as its argument is...
ridiculous?

Anyway, I think that if Python has a way to encapsulate a C a pointer
and pass it unmodified from psycopg2 to XTA we'd have no problems
exposing it on the connection. Something like connection._raw_pgconn,
with a name horrible enough to make sure nobody tries to use it without
knowing what she is doing. I don't think that exposing it just as an
integer is enough, but I can be wrong here.

federico

On 09/25/2018 10:57 PM, Christian Ferrari wrote:
> Dear All,
> XTA (XA Transaction API, http://www.tiian.org/lixa/XTA.html) is a new
> API that has been developed inside the LIXA project to support two phase
> commit transactions in the context of FaaS (Function as a Service) and
> microservice oriented, polyglot applications.
>
> The API already supports C and C++ languages; it aims to support many
> more, at the bare minimum Python, PHP and Java.
> I'm currently working on supporting Python with PostgreSQL and MySQL,
> this mail thread is related to Python/PostgreSQL.
>
> XTA is implemented in C language and XTA for Python is generated using
> SWIG: I would like to repeat the approach for all the languages that
> provides drivers derived from libpq-fe.h
>
> Now the request for help: XTA needs to enlist all the resource managers
> (here PostgreSQL) to manage them using 2 phase commit, basically it
> requires a pointer (PGconn *) that must be passed to
> PostgresqlXaResource constructor
> (http://www.tiian.org/lixa/manuals/xta/CPP/classxta_1_1PostgresqlXaResource.html)
> to create an XTA object associated to an already opened PostgreSQL
> connection.
>
> Here are the basic steps of a Python example program
> (https://github.com/tiian/lixa/blob/master/doc/examples/xta/python/example_xta_sa21.py)
>
> # initialize XTA environment
> Xta_Init()
>
> # create a new PostgreSQL connection
> # Note: using PostgreSQL Psycopg2 functions
> rm1 = psycopg2.connect("dbname=testdb")
>
> # create a new MySQL connection
> # Note: using MySQLdb functions
> rm2 = MySQLdb.connect("localhost", "lixa", "", "lixa")
>
> # create a new XTA Transaction Manager object
> tm = TransactionManager()
>
> # create an XA resource for PostgreSQL
> # second parameter "PostgreSQL" is descriptive
> # third parameter "dbname=testdb" identifies the specific database
> #
> # how to retrieve PGconn * from rm1?!
> xar1 = PostgresqlXaResource(rm1.conn, "PostgreSQL", "dbname=testdb")
>
> Looking at the last statement, the stack is:
> - XTA native C library expects "PGconn *" to register the connection handler
> - XTA C++ wrapper expects "PGconn *" as the first parameter to construct
> the object
> - XTA Python (SWIG generated) wrapper expects a "SWIG generated" PGconn
> * pointer
> - psycopg2.connect does not provide me something equivalent to PGconn *,
> at least it seems so to me.
>
> Stated that replacing "PGconn *" with "void *" in the API stack would
> not be an issue, the question is: what's the best way to retrieve
> something thatcan be transformed in a C pointer that could be passed to
> XTA constructor?
>
> From my point of view, this new API layout should solve most of the
> issues presented by the old style TX API that I explored some years ago:
> https://grokbase.com/t/postgresql/psycopg/122b1re71w/psycopg2-and-lixa
>
> Thanks in advance for your help.
> Regards,
> Ch.F.
>
>

--
Federico Di Gregorio federico(dot)digregorio(at)dndg(dot)it
DNDG srl http://dndg.it
I filosofi son come i sociologi: il mondo non lo capiscono. -- A.R.M.

In response to

Browse psycopg by date

  From Date Subject
Next Message Daniele Varrazzo 2018-09-26 12:25:45 Re: Integration of Psycopg with XTA
Previous Message Christian Ferrari 2018-09-25 20:57:05 Integration of Psycopg with XTA