def readrepair_test(self): cluster = self.cluster cluster.set_configuration_options( values={'hinted_handoff_enabled': False}) if DISABLE_VNODES: cluster.populate(2).start() else: tokens = cluster.balanced_tokens(2) cluster.populate(2, tokens=tokens).start() [node1, node2] = cluster.nodelist() cursor = self.patient_cql_connection(node1) self.create_ks(cursor, 'ks', 2) create_c1c2_table(self, cursor, read_repair=1.0) node2.stop(wait_other_notice=True) for n in xrange(0, 10000): insert_c1c2(cursor, n, ConsistencyLevel.ONE) node2.start(wait_other_notice=True) # query everything to cause RR for n in xrange(0, 10000): query_c1c2(cursor, n, ConsistencyLevel.QUORUM) node1.stop(wait_other_notice=True) # Check node2 for all the keys that should have been repaired cursor = self.patient_cql_connection(node2, keyspace='ks') for n in xrange(0, 10000): query_c1c2(cursor, n, ConsistencyLevel.ONE)
def quorum_available_during_failure_test(self): CL = ConsistencyLevel.QUORUM RF = 3 debug("Creating a ring") cluster = self.cluster if DISABLE_VNODES: cluster.populate(3).start() else: tokens = cluster.balanced_tokens(3) cluster.populate(3, tokens=tokens).start() [node1, node2, node3] = cluster.nodelist() cluster.start() debug("Set to talk to node 2") cursor = self.patient_cql_connection(node2) self.create_ks(cursor, 'ks', RF) create_c1c2_table(self, cursor) debug("Generating some data") for n in xrange(100): insert_c1c2(cursor, n, CL) debug("Taking down node1") node1.stop(wait_other_notice=True) debug("Reading back data.") for n in xrange(100): query_c1c2(cursor, n, CL)
def hintedhandoff_test(self): cluster = self.cluster if DISABLE_VNODES: cluster.populate(2).start() else: tokens = cluster.balanced_tokens(2) cluster.populate(2, tokens=tokens).start() [node1, node2] = cluster.nodelist() cursor = self.patient_cql_connection(node1) self.create_ks(cursor, 'ks', 2) create_c1c2_table(self, cursor) node2.stop(wait_other_notice=True) for n in xrange(0, 100): insert_c1c2(cursor, n, ConsistencyLevel.ONE) log_mark = node1.mark_log() node2.start() node1.watch_log_for(["Finished hinted"], from_mark=log_mark, timeout=120) node1.stop(wait_other_notice=True) # Check node2 for all the keys that should have been delivered via HH cursor = self.patient_cql_connection(node2, keyspace='ks') for n in xrange(0, 100): query_c1c2(cursor, n, ConsistencyLevel.ONE)
def readrepair_test(self): cluster = self.cluster cluster.set_configuration_options(values={ 'hinted_handoff_enabled' : False}) if DISABLE_VNODES: cluster.populate(2).start() else: tokens = cluster.balanced_tokens(2) cluster.populate(2, tokens=tokens).start() [node1, node2] = cluster.nodelist() cursor = self.patient_cql_connection(node1) self.create_ks(cursor, 'ks', 2) create_c1c2_table(self, cursor, read_repair=1.0) node2.stop(wait_other_notice=True) for n in xrange(0, 10000): insert_c1c2(cursor, n, ConsistencyLevel.ONE) node2.start(wait_other_notice=True) # query everything to cause RR for n in xrange(0, 10000): query_c1c2(cursor, n, ConsistencyLevel.QUORUM) node1.stop(wait_other_notice=True) # Check node2 for all the keys that should have been repaired cursor = self.patient_cql_connection(node2, keyspace='ks') for n in xrange(0, 10000): query_c1c2(cursor, n, ConsistencyLevel.ONE)
def hintedhandoff_test(self): cluster = self.cluster if DISABLE_VNODES: cluster.populate(2).start() else: tokens = cluster.balanced_tokens(2) cluster.populate(2, tokens=tokens).start() [node1, node2] = cluster.nodelist() cursor = self.patient_cql_connection(node1) self.create_ks(cursor, 'ks', 2) create_c1c2_table(self, cursor) node2.stop(wait_other_notice=True) for n in xrange(0, 100): insert_c1c2(cursor, n, ConsistencyLevel.ONE) log_mark = node1.mark_log() node2.start() node1.watch_log_for(["Finished hinted"], from_mark=log_mark, timeout=90) node1.stop(wait_other_notice=True) # Check node2 for all the keys that should have been delivered via HH cursor = self.patient_cql_connection(node2, keyspace='ks') for n in xrange(0, 100): query_c1c2(cursor, n, ConsistencyLevel.ONE)
def non_local_read_test(self): """ This test reads from a coordinator we know has no copy of the data """ cluster = self.cluster cluster.populate(3).start() [node1, node2, node3] = cluster.nodelist() cursor = self.patient_cql_connection(node1) self.create_ks(cursor, 'ks', 2) create_c1c2_table(self, cursor) # insert and get at CL.QUORUM (since RF=2, node1 won't have all key locally) for n in xrange(0, 1000): tools.insert_c1c2(cursor, n, ConsistencyLevel.QUORUM) tools.query_c1c2(cursor, n, ConsistencyLevel.QUORUM)
def cl_cl_prepare(self, write_cl, read_cl): cluster = self.cluster cluster.populate(3).start() node1, node2, node3 = cluster.nodelist() session = self.patient_cql_connection(node1) self.create_ks(session, 'ks', 3) create_c1c2_table(self, session) session2 = self.patient_cql_connection(node2, 'ks') # insert and get at CL.QUORUM for n in xrange(0, 100): insert_c1c2(session, n, write_cl) query_c1c2(session2, n, read_cl) return session, session2
def consistent_reads_after_bootstrap_test(self): debug("Creating a ring") cluster = self.cluster cluster.set_configuration_options(values={ 'hinted_handoff_enabled' : False, 'write_request_timeout_in_ms' : 60000, 'read_request_timeout_in_ms' : 60000, 'dynamic_snitch_badness_threshold' : 0.0}, batch_commitlog=True) cluster.populate(2).start() [node1, node2] = cluster.nodelist() cluster.start() debug("Set to talk to node 2") n2cursor = self.patient_cql_connection(node2) self.create_ks(n2cursor, 'ks', 2) create_c1c2_table(self, n2cursor) debug("Generating some data for all nodes") for n in xrange(10,20): insert_c1c2(n2cursor, n, ConsistencyLevel.ALL) node1.flush() debug("Taking down node1") node1.stop(wait_other_notice=True) debug("Writing data to only node2") for n in xrange(30,1000): insert_c1c2(n2cursor, n, ConsistencyLevel.ONE) node2.flush() debug("Restart node1") node1.start(wait_other_notice=True) debug("Boostraping node3") node3 = new_node(cluster) node3.start() n3cursor = self.patient_cql_connection(node3) n3cursor.execute("USE ks"); debug("Checking that no data was lost") for n in xrange(10,20): query_c1c2(n3cursor, n, ConsistencyLevel.ALL) for n in xrange(30,1000): query_c1c2(n3cursor, n, ConsistencyLevel.ALL)
def tracing_from_system_traces_test(self): self.cluster.populate(1).start() node1, = self.cluster.nodelist() node1.watch_log_for('thrift clients...') session = self.patient_cql_connection(node1) self.create_ks(session, 'ks', 1) create_c1c2_table(self, session) for n in xrange(100): insert_c1c2(session, n) out, err = self.run_cqlsh(node1, 'TRACING ON; SELECT * FROM ks.cf') self.assertIn('Tracing session: ', out) out, err = self.run_cqlsh(node1, 'TRACING ON; SELECT * FROM system_traces.events') self.assertNotIn('Tracing session: ', out) out, err = self.run_cqlsh(node1, 'TRACING ON; SELECT * FROM system_traces.sessions') self.assertNotIn('Tracing session: ', out)
def tracing_from_system_traces_test(self): self.cluster.populate(1).start() node1, = self.cluster.nodelist() node1.watch_log_for('thrift clients...') session = self.patient_cql_connection(node1) self.create_ks(session, 'ks', 1) create_c1c2_table(self, session) for n in xrange(100): insert_c1c2(session, n) out, err = self.run_cqlsh(node1, 'TRACING ON; SELECT * FROM ks.cf') self.assertIn('Tracing session: ', out) out, err = self.run_cqlsh( node1, 'TRACING ON; SELECT * FROM system_traces.events') self.assertNotIn('Tracing session: ', out) out, err = self.run_cqlsh( node1, 'TRACING ON; SELECT * FROM system_traces.sessions') self.assertNotIn('Tracing session: ', out)