Example #1
0
 def resetBinLog(self):
     yield from self.execute("RESET MASTER")
     if self.stream is not None:
         self.stream.close()
     self.stream = yield from create_binlog_stream(
         self.database, server_id=1024, ignored_events=self.ignoredEvents(),
         loop=self.loop)
Example #2
0
    def test_connection_stream_lost_event(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            blocking=True,
            ignored_events=self.ignoredEvents(),
            loop=self.loop)

        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query2 = "INSERT INTO test (data) VALUES('a')"
        for i in range(0, 100):
            yield from self.execute(query2)
        yield from self.execute("COMMIT")

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        self.assertEqual(event.query, query)

        self.conn_control.kill(self.stream._stream_connection.thread_id())
        for i in range(0, 10):
            event = yield from self.stream.fetchone()
            self.assertIsNotNone(event)
    def test_connection_stream_lost_event(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database, server_id=1024, blocking=True,
            ignored_events=self.ignoredEvents(), loop=self.loop)

        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query2 = "INSERT INTO test (data) VALUES('a')"
        for i in range(0, 100):
            yield from self.execute(query2)
        yield from self.execute("COMMIT")

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        self.assertEqual(event.query, query)

        self.conn_control.kill(self.stream._stream_connection.thread_id())
        for i in range(0, 10):
            event = yield from self.stream.fetchone()
            self.assertIsNotNone(event)
Example #4
0
def test_example():
    stream = yield from create_binlog_stream(
        connection_settings=MYSQL_SETTINGS, server_id=1, blocking=True,
        loop=loop)

    while True:
        event = yield from stream.fetchone()
        event.dump()
    stream.close()
Example #5
0
 def resetBinLog(self):
     yield from self.execute("RESET MASTER")
     if self.stream is not None:
         self.stream.close()
     self.stream = yield from create_binlog_stream(
         self.database,
         server_id=1024,
         ignored_events=self.ignoredEvents(),
         loop=self.loop)
Example #6
0
def test_example():
    stream = yield from create_binlog_stream(
        connection_settings=MYSQL_SETTINGS,
        server_id=1,
        blocking=True,
        loop=loop)

    while True:
        event = yield from stream.fetchone()
        event.dump()
    stream.close()
    def test_filtering_ignore_events(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database, server_id=1024, ignored_events=[QueryEvent],
            loop=self.loop)
        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
Example #8
0
    def test_filtering_ignore_events(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            ignored_events=[QueryEvent],
            loop=self.loop)
        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
    def test_log_pos(self):
        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "INSERT INTO test (data) VALUES('Hello')"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        for i in range(6):
            yield from self.stream.fetchone()
        # record position after insert
        log_file, log_pos = self.stream.log_file, self.stream.log_pos

        query = "UPDATE test SET data = 'World' WHERE id = 1"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        # resume stream from previous position
        if self.stream is not None:
            self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            resume_stream=True,
            log_file=log_file,
            log_pos=log_pos,
            ignored_events=self.ignoredEvents(),
            loop=self.loop
        )
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)
        # QueryEvent for the BEGIN
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, UpdateRowsEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)
Example #10
0
    def test_log_pos(self):
        query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "INSERT INTO test (data) VALUES('Hello')"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        for i in range(6):
            yield from self.stream.fetchone()
        # record position after insert
        log_file, log_pos = self.stream.log_file, self.stream.log_pos

        query = "UPDATE test SET data = 'World' WHERE id = 1"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        # resume stream from previous position
        if self.stream is not None:
            self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            resume_stream=True,
            log_file=log_file,
            log_pos=log_pos,
            ignored_events=self.ignoredEvents(),
            loop=self.loop)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)
        # QueryEvent for the BEGIN
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, UpdateRowsEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)
    def test_reading_rotate_event(self):
        query = "CREATE TABLE test_2 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        self.stream.close()

        query = "CREATE TABLE test_3 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        # Rotate event
        self.stream = yield from create_binlog_stream(
            self.database, server_id=1024, blocking=True,
            ignored_events=self.ignoredEvents(), loop=self.loop)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
Example #12
0
    def test_position_gtid(self):
        query = "CREATE TABLE test (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(1, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        query = "CREATE TABLE test2 (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "SELECT @@global.gtid_executed;"
        cursor = yield from self.execute(query)
        (gtid, ) = yield from cursor.fetchone()

        self.stream.close()
        self.stream = yield from create_binlog_stream(self.database,
                                                      server_id=1024,
                                                      blocking=True,
                                                      auto_position=gtid,
                                                      loop=self.loop)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertEqual(
            event.query, 'CREATE TABLE test2 (id INT NOT NULL, '
            'data VARCHAR (50) NOT NULL, '
            'PRIMARY KEY (id))')
Example #13
0
    def test_reading_rotate_event(self):
        query = "CREATE TABLE test_2 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        self.stream.close()

        query = "CREATE TABLE test_3 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        # Rotate event
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            blocking=True,
            ignored_events=self.ignoredEvents(),
            loop=self.loop)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
    def test_filtering_table_event(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            only_events=[WriteRowsEvent],
            only_tables=["test_2"], loop=self.loop)

        query = "CREATE TABLE test_2 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "CREATE TABLE test_3 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        yield from self.execute("INSERT INTO test_2 (data) VALUES ('alpha')")
        yield from self.execute("INSERT INTO test_3 (data) VALUES ('alpha')")
        yield from self.execute("INSERT INTO test_2 (data) VALUES ('beta')")
        yield from self.execute("COMMIT")
        event = yield from self.stream.fetchone()
        self.assertEqual(event.table, "test_2")
        event = yield from self.stream.fetchone()
        self.assertEqual(event.table, "test_2")
Example #15
0
    def test_log_pos_handles_disconnects(self):

        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            resume_stream=False,
            only_events=[
                FormatDescriptionEvent, QueryEvent, TableMapEvent,
                WriteRowsEvent, XidEvent
            ],
            loop=self.loop)

        query = "CREATE TABLE test (id INT  PRIMARY KEY AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL)"
        yield from self.execute(query)
        query = "INSERT INTO test (data) VALUES('Hello')"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)
        self.assertGreater(self.stream.log_pos, 0)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        self.assertGreater(self.stream.log_pos, 0)
    def test_position_gtid(self):
        query = "CREATE TABLE test (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(1, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        query = "CREATE TABLE test2 (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "SELECT @@global.gtid_executed;"
        cursor = yield from self.execute(query)
        (gtid,) = yield from cursor.fetchone()

        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database, server_id=1024, blocking=True, auto_position=gtid,
            loop=self.loop)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertEqual(event.query, 'CREATE TABLE test2 (id INT NOT NULL, '
                                      'data VARCHAR (50) NOT NULL, '
                                      'PRIMARY KEY (id))')
    def test_log_pos_handles_disconnects(self):

        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            resume_stream=False,
            only_events=[FormatDescriptionEvent, QueryEvent, TableMapEvent,
                         WriteRowsEvent, XidEvent],
            loop=self.loop
        )

        query = "CREATE TABLE test (id INT  PRIMARY KEY AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL)"
        yield from self.execute(query)
        query = "INSERT INTO test (data) VALUES('Hello')"
        yield from self.execute(query)
        yield from self.execute("COMMIT")

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)
        self.assertGreater(self.stream.log_pos, 0)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        self.assertGreater(self.stream.log_pos, 0)
Example #18
0
    def test_filtering_table_event(self):
        self.stream.close()
        self.stream = yield from create_binlog_stream(
            self.database,
            server_id=1024,
            only_events=[WriteRowsEvent],
            only_tables=["test_2"],
            loop=self.loop)

        query = "CREATE TABLE test_2 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "CREATE TABLE test_3 (id INT NOT NULL AUTO_INCREMENT, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)

        yield from self.execute("INSERT INTO test_2 (data) VALUES ('alpha')")
        yield from self.execute("INSERT INTO test_3 (data) VALUES ('alpha')")
        yield from self.execute("INSERT INTO test_2 (data) VALUES ('beta')")
        yield from self.execute("COMMIT")
        event = yield from self.stream.fetchone()
        self.assertEqual(event.table, "test_2")
        event = yield from self.stream.fetchone()
        self.assertEqual(event.table, "test_2")
    def test_read_query_event(self):
        query = "CREATE TABLE test (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "SELECT @@global.gtid_executed;"
        cursor = yield from self.execute(query)
        (gtid,) = yield from cursor.fetchone()

        self.stream.close()

        self.stream = yield from create_binlog_stream(
            self.database, server_id=1024, blocking=True, auto_position=gtid,
            loop=self.loop)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        # Insert first event
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(1, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        firstevent = yield from self.stream.fetchone()
        self.assertIsInstance(firstevent, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        # Insert second event
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(2, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        secondevent = yield from self.stream.fetchone()
        self.assertIsInstance(secondevent, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        self.assertEqual(secondevent.gno, firstevent.gno + 1)
Example #20
0
    def test_read_query_event(self):
        query = "CREATE TABLE test (id INT NOT NULL, " \
                "data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
        yield from self.execute(query)
        query = "SELECT @@global.gtid_executed;"
        cursor = yield from self.execute(query)
        (gtid, ) = yield from cursor.fetchone()

        self.stream.close()

        self.stream = yield from create_binlog_stream(self.database,
                                                      server_id=1024,
                                                      blocking=True,
                                                      auto_position=gtid,
                                                      loop=self.loop)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, RotateEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, FormatDescriptionEvent)

        # Insert first event
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(1, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        firstevent = yield from self.stream.fetchone()
        self.assertIsInstance(firstevent, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        # Insert second event
        query = "BEGIN;"
        yield from self.execute(query)
        query = "INSERT INTO test (id, data) VALUES(2, 'Hello');"
        yield from self.execute(query)
        query = "COMMIT;"
        yield from self.execute(query)

        secondevent = yield from self.stream.fetchone()
        self.assertIsInstance(secondevent, GtidEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, QueryEvent)
        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, TableMapEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, WriteRowsEvent)

        event = yield from self.stream.fetchone()
        self.assertIsInstance(event, XidEvent)

        self.assertEqual(secondevent.gno, firstevent.gno + 1)