|
19 | 19 |
|
20 | 20 | from cassandra import OperationTimedOut, SchemaTargetType, SchemaChangeType |
21 | 21 | from cassandra.protocol import ResultMessage, RESULT_KIND_ROWS |
22 | | -from cassandra.cluster import ControlConnection, _Scheduler, ProfileManager, EXEC_PROFILE_DEFAULT, ExecutionProfile |
| 22 | +from cassandra.cluster import (ControlConnection, _Scheduler, ProfileManager, |
| 23 | + EXEC_PROFILE_DEFAULT, ExecutionProfile, |
| 24 | + refresh_schema_and_set_result) |
23 | 25 | from cassandra.pool import Host |
24 | 26 | from cassandra.connection import (EndPoint, DefaultEndPoint, DefaultEndPointFactory, |
25 | 27 | ConnectionException, ConnectionShutdown, ConnectionBusy) |
@@ -343,6 +345,31 @@ def test_wait_for_schema_agreement_raises_connection_error_after_mismatch(self): |
343 | 345 | with self.assertRaises(ConnectionShutdown): |
344 | 346 | self.control_connection.wait_for_schema_agreement() |
345 | 347 |
|
| 348 | + def test_schema_change_refresh_does_not_session_fallback_after_mismatch_then_connection_error(self): |
| 349 | + session = Mock(is_shutdown=False) |
| 350 | + session.wait_for_schema_agreement.return_value = True |
| 351 | + self.cluster.sessions = [session] |
| 352 | + self.cluster.metadata.refresh = Mock() |
| 353 | + |
| 354 | + peer_columns = self.connection.peer_results[0] |
| 355 | + mismatching_peer_rows = [list(row) for row in self.connection.peer_results[1]] |
| 356 | + mismatching_peer_rows[1][2] = 'b' |
| 357 | + self.connection.wait_for_responses.side_effect = [ |
| 358 | + _node_meta_results(self.connection.local_results, (peer_columns, mismatching_peer_rows)), |
| 359 | + ConnectionShutdown("closed")] |
| 360 | + |
| 361 | + response_future = Mock() |
| 362 | + response_future.session = session |
| 363 | + event = {'target_type': SchemaTargetType.TABLE, 'change_type': SchemaChangeType.CREATED, |
| 364 | + 'keyspace': "keyspace1", "table": "table1"} |
| 365 | + |
| 366 | + refresh_schema_and_set_result(self.control_connection, response_future, self.connection, **event) |
| 367 | + |
| 368 | + session.wait_for_schema_agreement.assert_not_called() |
| 369 | + self.cluster.metadata.refresh.assert_not_called() |
| 370 | + assert not response_future.is_schema_agreed |
| 371 | + response_future._set_final_result.assert_called_once_with(None) |
| 372 | + |
346 | 373 | def test_wait_for_schema_agreement_does_not_exceed_configured_wait_with_session_fallback(self): |
347 | 374 | session = Mock(is_shutdown=False) |
348 | 375 |
|
|
0 commit comments