Integration of Psycopg with XTA

Поиск
Список
Период
Сортировка
От Christian Ferrari
Тема Integration of Psycopg with XTA
Дата
Msg-id 2001056273.7945904.1537909025251@mail.yahoo.com
обсуждение исходный текст
Ответы Re: Integration of Psycopg with XTA  (Federico Di Gregorio <fog@dndg.it>)
Re: Integration of Psycopg with XTA  (Daniele Varrazzo <daniele.varrazzo@gmail.com>)
Список psycopg
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.


# 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 that can 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.



В списке psycopg по дате отправления:

Предыдущее
От: Thomas Güttler
Дата:
Сообщение: Re: R: Number of SQL queries
Следующее
От: Federico Di Gregorio
Дата:
Сообщение: Re: Integration of Psycopg with XTA