Ejemplo n.º 1
0
    def test_pool_management(self):
        # Ensure that in_flight and request_ids quiesce after cluster operations
        cluster = Cluster(
            protocol_version=PROTOCOL_VERSION, idle_heartbeat_interval=0
        )  # no idle heartbeat here, pool management is tested in test_idle_heartbeat
        session = cluster.connect()
        session2 = cluster.connect()

        # prepare
        p = session.prepare("SELECT * FROM system.local WHERE key=?")
        self.assertTrue(session.execute(p, ('local', )))

        # simple
        self.assertTrue(
            session.execute("SELECT * FROM system.local WHERE key='local'"))

        # set keyspace
        session.set_keyspace('system')
        session.set_keyspace('system_traces')

        # use keyspace
        session.execute('USE system')
        session.execute('USE system_traces')

        # refresh schema
        cluster.refresh_schema_metadata()
        cluster.refresh_schema_metadata(max_schema_agreement_wait=0)

        assert_quiescent_pool_state(self, cluster)

        cluster.shutdown()
Ejemplo n.º 2
0
    def test_refresh_schema(self):
        cluster = Cluster(protocol_version=PROTOCOL_VERSION)
        session = cluster.connect()

        original_meta = cluster.metadata.keyspaces
        # full schema refresh, with wait
        cluster.refresh_schema_metadata()
        self.assertIsNot(original_meta, cluster.metadata.keyspaces)
        self.assertEqual(original_meta, cluster.metadata.keyspaces)

        cluster.shutdown()
Ejemplo n.º 3
0
    def test_refresh_schema_no_wait(self):

        contact_points = [DSE_IP]
        with Cluster(protocol_version=PROTOCOL_VERSION,
                     max_schema_agreement_wait=10,
                     contact_points=contact_points,
                     execution_profiles={
                         EXEC_PROFILE_DEFAULT:
                         ExecutionProfile(
                             load_balancing_policy=WhiteListRoundRobinPolicy(
                                 contact_points))
                     }) as cluster:
            session = cluster.connect()

            schema_ver = session.execute(
                "SELECT schema_version FROM system.local WHERE key='local'"
            )[0][0]
            new_schema_ver = uuid4()
            session.execute(
                "UPDATE system.local SET schema_version=%s WHERE key='local'",
                (new_schema_ver, ))

            try:
                agreement_timeout = 1

                # cluster agreement wait exceeded
                c = Cluster(protocol_version=PROTOCOL_VERSION,
                            max_schema_agreement_wait=agreement_timeout)
                c.connect()
                self.assertTrue(c.metadata.keyspaces)

                # cluster agreement wait used for refresh
                original_meta = c.metadata.keyspaces
                start_time = time.time()
                self.assertRaisesRegexp(
                    Exception, r"Schema metadata was not refreshed.*",
                    c.refresh_schema_metadata)
                end_time = time.time()
                self.assertGreaterEqual(end_time - start_time,
                                        agreement_timeout)
                self.assertIs(original_meta, c.metadata.keyspaces)

                # refresh wait overrides cluster value
                original_meta = c.metadata.keyspaces
                start_time = time.time()
                c.refresh_schema_metadata(max_schema_agreement_wait=0)
                end_time = time.time()
                self.assertLess(end_time - start_time, agreement_timeout)
                self.assertIsNot(original_meta, c.metadata.keyspaces)
                self.assertEqual(original_meta, c.metadata.keyspaces)

                c.shutdown()

                refresh_threshold = 0.5
                # cluster agreement bypass
                c = Cluster(protocol_version=PROTOCOL_VERSION,
                            max_schema_agreement_wait=0)
                start_time = time.time()
                s = c.connect()
                end_time = time.time()
                self.assertLess(end_time - start_time, refresh_threshold)
                self.assertTrue(c.metadata.keyspaces)

                # cluster agreement wait used for refresh
                original_meta = c.metadata.keyspaces
                start_time = time.time()
                c.refresh_schema_metadata()
                end_time = time.time()
                self.assertLess(end_time - start_time, refresh_threshold)
                self.assertIsNot(original_meta, c.metadata.keyspaces)
                self.assertEqual(original_meta, c.metadata.keyspaces)

                # refresh wait overrides cluster value
                original_meta = c.metadata.keyspaces
                start_time = time.time()
                self.assertRaisesRegexp(
                    Exception,
                    r"Schema metadata was not refreshed.*",
                    c.refresh_schema_metadata,
                    max_schema_agreement_wait=agreement_timeout)
                end_time = time.time()
                self.assertGreaterEqual(end_time - start_time,
                                        agreement_timeout)
                self.assertIs(original_meta, c.metadata.keyspaces)
                c.shutdown()
            finally:
                # TODO once fixed this connect call
                session = cluster.connect()
                session.execute(
                    "UPDATE system.local SET schema_version=%s WHERE key='local'",
                    (schema_ver, ))