diff --git a/cassandra/cluster.py b/cassandra/cluster.py index a518fefd..dfa82ec9 100644 --- a/cassandra/cluster.py +++ b/cassandra/cluster.py @@ -2617,7 +2617,7 @@ def refresh_schema_and_set_result(control_conn, response_future, **kwargs): if control_conn._meta_refresh_enabled: log.debug("Refreshing schema in response to schema change. " "%s", kwargs) - control_conn._refresh_schema(response_future._connection, **kwargs) + response_future.is_schema_agreed = control_conn._refresh_schema(response_future._connection, **kwargs) else: log.debug("Skipping schema refresh in response to schema change because meta refresh is disabled; " "%s", kwargs) @@ -2646,6 +2646,13 @@ class ResponseFuture(object): :class:`.ResponseFuture`. """ + is_schema_agreed = True + """ + For DDL requests, this may be set ``False`` if the schema agreement poll after the response fails. + + Always ``True`` for non-DDL requests. + """ + session = None row_factory = None message = None @@ -2869,6 +2876,7 @@ class ResponseFuture(object): elif response.kind == RESULT_KIND_SCHEMA_CHANGE: # refresh the schema before responding, but do it in another # thread instead of the event loop thread + self.is_schema_agreed = False self.session.submit( refresh_schema_and_set_result, self.session.cluster.control_connection, diff --git a/docs/api/cassandra/cluster.rst b/docs/api/cassandra/cluster.rst index fbe8fe3f..7fe878ca 100644 --- a/docs/api/cassandra/cluster.rst +++ b/docs/api/cassandra/cluster.rst @@ -131,6 +131,8 @@ .. autoattribute:: custom_payload() + .. autoattribute:: is_schema_agreed + .. autoattribute:: has_more_pages .. autoattribute:: warnings