Skip to content

Commit c2b999c

Browse files
committed
Ensure serial consistency gets set on statements and messages
PYTHON-299
1 parent 25f10a5 commit c2b999c

2 files changed

Lines changed: 39 additions & 6 deletions

File tree

cassandra/query.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ def _set_serial_consistency_level(self, serial_consistency_level):
248248
raise ValueError(
249249
"serial_consistency_level must be either ConsistencyLevel.SERIAL "
250250
"or ConsistencyLevel.LOCAL_SERIAL")
251+
self._serial_consistency_level = serial_consistency_level
251252

252253
def _del_serial_consistency_level(self):
253254
self._serial_consistency_level = None

tests/integration/standard/test_query.py

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -325,14 +325,22 @@ def test_conditional_update(self):
325325
statement = SimpleStatement(
326326
"UPDATE test3rf.test SET v=1 WHERE k=0 IF v=1",
327327
serial_consistency_level=ConsistencyLevel.SERIAL)
328-
result = self.session.execute(statement)
328+
# crazy test, but PYTHON-299
329+
# TODO: expand to check more parameters get passed to statement, and on to messages
330+
self.assertEqual(statement.serial_consistency_level, ConsistencyLevel.SERIAL)
331+
future = self.session.execute_async(statement)
332+
result = future.result()
333+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.SERIAL)
329334
self.assertEqual(1, len(result))
330335
self.assertFalse(result[0].applied)
331336

332337
statement = SimpleStatement(
333338
"UPDATE test3rf.test SET v=1 WHERE k=0 IF v=0",
334-
serial_consistency_level=ConsistencyLevel.SERIAL)
335-
result = self.session.execute(statement)
339+
serial_consistency_level=ConsistencyLevel.LOCAL_SERIAL)
340+
self.assertEqual(statement.serial_consistency_level, ConsistencyLevel.LOCAL_SERIAL)
341+
future = self.session.execute_async(statement)
342+
result = future.result()
343+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.LOCAL_SERIAL)
336344
self.assertEqual(1, len(result))
337345
self.assertTrue(result[0].applied)
338346

@@ -342,15 +350,39 @@ def test_conditional_update_with_prepared_statements(self):
342350
"UPDATE test3rf.test SET v=1 WHERE k=0 IF v=2")
343351

344352
statement.serial_consistency_level = ConsistencyLevel.SERIAL
345-
result = self.session.execute(statement)
353+
future = self.session.execute_async(statement)
354+
result = future.result()
355+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.SERIAL)
346356
self.assertEqual(1, len(result))
347357
self.assertFalse(result[0].applied)
348358

349359
statement = self.session.prepare(
350360
"UPDATE test3rf.test SET v=1 WHERE k=0 IF v=0")
351361
bound = statement.bind(())
352-
bound.serial_consistency_level = ConsistencyLevel.SERIAL
353-
result = self.session.execute(statement)
362+
bound.serial_consistency_level = ConsistencyLevel.LOCAL_SERIAL
363+
future = self.session.execute_async(bound)
364+
result = future.result()
365+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.LOCAL_SERIAL)
366+
self.assertEqual(1, len(result))
367+
self.assertTrue(result[0].applied)
368+
369+
def test_conditional_update_with_batch_statements(self):
370+
self.session.execute("INSERT INTO test3rf.test (k, v) VALUES (0, 0)")
371+
statement = BatchStatement(serial_consistency_level=ConsistencyLevel.SERIAL)
372+
statement.add("UPDATE test3rf.test SET v=1 WHERE k=0 IF v=1")
373+
self.assertEqual(statement.serial_consistency_level, ConsistencyLevel.SERIAL)
374+
future = self.session.execute_async(statement)
375+
result = future.result()
376+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.SERIAL)
377+
self.assertEqual(1, len(result))
378+
self.assertFalse(result[0].applied)
379+
380+
statement = BatchStatement(serial_consistency_level=ConsistencyLevel.LOCAL_SERIAL)
381+
statement.add("UPDATE test3rf.test SET v=1 WHERE k=0 IF v=0")
382+
self.assertEqual(statement.serial_consistency_level, ConsistencyLevel.LOCAL_SERIAL)
383+
future = self.session.execute_async(statement)
384+
result = future.result()
385+
self.assertEqual(future.message.serial_consistency_level, ConsistencyLevel.LOCAL_SERIAL)
354386
self.assertEqual(1, len(result))
355387
self.assertTrue(result[0].applied)
356388

0 commit comments

Comments
 (0)