Re: Streaming replication for psycopg2 - Mailing list psycopg

From Shulgin, Oleksandr
Subject Re: Streaming replication for psycopg2
Date
Msg-id CACACo5Rb1A6rpjFJ9aOad2THF1RksbH6u8Bt7P6Dx_H3JK+OvA@mail.gmail.com
Whole thread Raw
In response to Streaming replication for psycopg2  ("Shulgin, Oleksandr" <oleksandr.shulgin@zalando.de>)
Responses Re: Streaming replication for psycopg2  ("Shulgin, Oleksandr" <oleksandr.shulgin@zalando.de>)
List psycopg
On Tue, Jun 2, 2015 at 2:23 PM, Shulgin, Oleksandr <oleksandr.shulgin@zalando.de> wrote:
>
> Hello,
>
> I've submitted a patch to psycopg2 to support streaming replication protocol (COPY_BOTH): https://github.com/psycopg/psycopg2/pull/322
>
> It would be great if more people had a chance to take a look and provide feedback about it.  In particular, please see example usage at this github comment[1]. Some bikeshedding is really needed here. :-)

I've been suggested that instead of putting the sync/stop methods into the replication message class like this

class ReplicationMessage(str):
    #wal_end
    #data_start
    #send_time
    #def commit(self):
    #def stop(self):
    ...

it would make more sense to put them into the cursor, like this:

class ReplicationCursor(...):

    def sync_server(self, msg):
        ...

    def stop_replication(self):
        ...

The client code will be able then to do this:

class LogicalWriter(object):

    def __init__(self, cursor):
        self.cursor = cursor

    def write(self, msg): # receives instance of ReplicationMessage
        if should_stop_replication():
            self.cursor.stop_replication()
            return

        self.actually_store_the_message(msg)

        if stored_reliably() and want_to_report_now():
            self.cursor.sync_server(msg)

        # return value not examined by caller


That seems like a more sane interface to me.

--
Alex

psycopg by date:

Previous
From: "Shulgin, Oleksandr"
Date:
Subject: Streaming replication for psycopg2
Next
From: Dan Sawyer
Date:
Subject: how to update specific cells