On Tue, Jun 2, 2015 at 2:23 PM, Shulgin, Oleksandr <
oleksandr.shul...@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

Reply via email to