e6data-python-connector 3.0.1rc2__tar.gz → 3.0.1rc3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {e6data_python_connector-3.0.1rc2/e6data_python_connector.egg-info → e6data_python_connector-3.0.1rc3}/PKG-INFO +1 -1
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/cluster_manager.py +54 -6
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3/e6data_python_connector.egg-info}/PKG-INFO +1 -1
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/setup.py +1 -1
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/LICENSE +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/MANIFEST.in +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/README.md +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/aio.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_cluster_manager.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_connection.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_connection_pool.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_cursor.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_dialect.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_oauth.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/async_work.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/cluster_server/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/cluster_server/cluster_pb2.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/cluster_server/cluster_pb2_grpc.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/common.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/connection_pool.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/constants.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/datainputstream.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/date_time_utils.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/dialect.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/e6data_grpc.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/e6x_vector/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/e6x_vector/constants.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/e6x_vector/ttypes.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/exceptions.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/oauth.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/oauth_cache.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/oauth_common.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/result_batch.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/result_decode.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/result_decode_worker.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/result_prefetch.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/QueryEngineService.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/constants.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/e6x_engine_pb2.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/e6x_engine_pb2.pyi +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/e6x_engine_pb2_grpc.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/server/ttypes.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/strategy.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/typeId.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector.egg-info/SOURCES.txt +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector.egg-info/dependency_links.txt +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector.egg-info/entry_points.txt +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector.egg-info/requires.txt +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector.egg-info/top_level.txt +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/pyproject.toml +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/setup.cfg +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_38_nines.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_all_cases.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_binary.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_correct_value.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_fields.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/check_decimal_errors.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/cleanup_test_files.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/conftest.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/debug_38_nines.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/debug_binary.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/final_test.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/__init__.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/benchmark_preflight.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/benchmark_result_batch_v2.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/benchmark_sync_async.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/expiry_preflight.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/result_batch_benchmark_support.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/support.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_connection.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_pool.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_queries.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_resume.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_sqlalchemy.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_async_token_lifecycle.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_e2e_auth_boundary.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_e2e_oauth_continuation.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_e2e_readonly_matrix.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_result_batch_v2.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_shared_token_issuance.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/test_sync_oauth_lifecycle.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/token_observation.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/move_tests.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/quick_test.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_38_nines.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_all_decimal128_cases.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_cluster_manager_efficiency.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_cluster_manager_none_strategy.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_cluster_manager_oauth.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_cluster_manager_strategy.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_code_optimizations.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_comprehensive.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_connection_pool.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_connection_pool_e2e.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_current_implementation.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_decimal128_binary_parsing.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_decimal128_parsing.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_dialect_columns.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_fix.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_improved_parsing.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_known_case.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_manual_analysis.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_mock_server.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_multiprocessing_fix.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_new_implementation.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_oauth_authentication.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_oauth_auto_resume.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_oauth_resume_integration.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_pool_concurrency_simple.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_pool_threading_multiprocessing.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_simple_connection_pool.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_specific_binary.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_strategy.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_strategy_logic.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_strategy_persistence_fix.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_strategy_sharing_fix.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_user_binary_value.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/tests.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/tests_grpc.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/validate_decimal128.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/validate_implementation.py +0 -0
- {e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/verify_decimal_fix.py +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import hashlib
|
|
1
2
|
import logging
|
|
3
|
+
import os
|
|
2
4
|
import threading
|
|
3
5
|
import time
|
|
4
6
|
import e6data_python_connector.cluster_server.cluster_pb2 as cluster_pb2
|
|
@@ -74,6 +76,7 @@ class _StatusLock:
|
|
|
74
76
|
self._status_multiprocessing_lock = (threading.Semaphore() if is_decode_worker()
|
|
75
77
|
else multiprocessing.Semaphore())
|
|
76
78
|
self._is_active = False
|
|
79
|
+
self._resume_completion = None
|
|
77
80
|
|
|
78
81
|
@property
|
|
79
82
|
def is_active(self) -> bool:
|
|
@@ -109,8 +112,14 @@ class _StatusLock:
|
|
|
109
112
|
_StatusLock: The current instance of the lock, used for context management.
|
|
110
113
|
"""
|
|
111
114
|
|
|
112
|
-
self._status_thread_lock.acquire(timeout=self._LOCK_TIMEOUT)
|
|
113
|
-
|
|
115
|
+
if not self._status_thread_lock.acquire(timeout=self._LOCK_TIMEOUT):
|
|
116
|
+
raise TimeoutError('Cluster recovery timed out waiting for status lock.')
|
|
117
|
+
try:
|
|
118
|
+
if not self._status_multiprocessing_lock.acquire(timeout=self._LOCK_TIMEOUT):
|
|
119
|
+
raise TimeoutError('Cluster recovery timed out waiting for process lock.')
|
|
120
|
+
except BaseException:
|
|
121
|
+
self._status_thread_lock.release()
|
|
122
|
+
raise
|
|
114
123
|
return self
|
|
115
124
|
|
|
116
125
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
@@ -127,8 +136,8 @@ class _StatusLock:
|
|
|
127
136
|
exc_tb (Traceback): The traceback object of the exception (if any).
|
|
128
137
|
"""
|
|
129
138
|
|
|
130
|
-
self._status_thread_lock.release()
|
|
131
139
|
self._status_multiprocessing_lock.release()
|
|
140
|
+
self._status_thread_lock.release()
|
|
132
141
|
|
|
133
142
|
@contextmanager
|
|
134
143
|
def hold_until(self, deadline):
|
|
@@ -465,6 +474,34 @@ class ClusterManager:
|
|
|
465
474
|
logger.warning(f"Status check failed with error: {e}")
|
|
466
475
|
yield None
|
|
467
476
|
|
|
477
|
+
def _legacy_resume_identity(self):
|
|
478
|
+
"""Fingerprint exact connection inputs without retaining credentials.
|
|
479
|
+
|
|
480
|
+
Copy standard option containers. Unknown or mutable option values disable
|
|
481
|
+
sharing so their existing RPC behavior is preserved without guessing.
|
|
482
|
+
"""
|
|
483
|
+
values = (self._host, self._port, self.cluster_uuid, self._secure_channel,
|
|
484
|
+
self._ssl_cert, self._user, self._password)
|
|
485
|
+
scalar_types = (type(None), str, bytes, bool, int)
|
|
486
|
+
if any(type(value) not in scalar_types for value in values):
|
|
487
|
+
return None
|
|
488
|
+
options = self._grpc_options
|
|
489
|
+
if type(options) is dict:
|
|
490
|
+
pairs = tuple(options.items())
|
|
491
|
+
elif type(options) in (list, tuple):
|
|
492
|
+
pairs = tuple(options)
|
|
493
|
+
else:
|
|
494
|
+
return None
|
|
495
|
+
frozen_options = []
|
|
496
|
+
for pair in pairs:
|
|
497
|
+
if (type(pair) not in (tuple, list) or len(pair) != 2
|
|
498
|
+
or any(type(value) not in scalar_types for value in pair)):
|
|
499
|
+
return None
|
|
500
|
+
frozen_options.append(tuple((type(value).__name__, value) for value in pair))
|
|
501
|
+
identity = (tuple((type(value).__name__, value) for value in values),
|
|
502
|
+
type(options).__name__, tuple(frozen_options))
|
|
503
|
+
return hashlib.sha256(repr(identity).encode('utf-8')).digest()
|
|
504
|
+
|
|
468
505
|
def resume(self) -> bool:
|
|
469
506
|
"""
|
|
470
507
|
Resumes the cluster if it is currently suspended or not in the 'active' state.
|
|
@@ -494,14 +531,21 @@ class ClusterManager:
|
|
|
494
531
|
"""
|
|
495
532
|
if self._metadata_provider is not None:
|
|
496
533
|
return self._resume_oauth()
|
|
534
|
+
call_started = time.monotonic()
|
|
497
535
|
if self._debug:
|
|
498
536
|
logger.info(f"Starting auto-resume for cluster {self.cluster_uuid} at {self._host}:{self._port}")
|
|
499
537
|
|
|
500
538
|
with status_lock as lock:
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
539
|
+
identity = self._legacy_resume_identity()
|
|
540
|
+
process_id = os.getpid()
|
|
541
|
+
completion = lock._resume_completion
|
|
542
|
+
if (identity is not None and completion is not None
|
|
543
|
+
and completion[0] == process_id and completion[1] == identity
|
|
544
|
+
and completion[2] > call_started):
|
|
504
545
|
return True
|
|
546
|
+
# A fresh attempt can observe a new failure before older waiters run.
|
|
547
|
+
# Invalidate first, including when the attempt later raises an error.
|
|
548
|
+
lock._resume_completion = None
|
|
505
549
|
|
|
506
550
|
# Retrieve the current cluster status with strategy header
|
|
507
551
|
if self._debug:
|
|
@@ -530,6 +574,8 @@ class ClusterManager:
|
|
|
530
574
|
elif current_status.status == 'active':
|
|
531
575
|
if self._debug:
|
|
532
576
|
logger.info("Cluster is already active, no action needed")
|
|
577
|
+
if identity is not None:
|
|
578
|
+
lock._resume_completion = (process_id, identity, time.monotonic())
|
|
533
579
|
return True
|
|
534
580
|
elif current_status.status != 'resuming':
|
|
535
581
|
"""
|
|
@@ -548,6 +594,8 @@ class ClusterManager:
|
|
|
548
594
|
if status == 'active':
|
|
549
595
|
if self._debug:
|
|
550
596
|
logger.info(f"Cluster became active after {check_count} status checks")
|
|
597
|
+
if identity is not None:
|
|
598
|
+
lock._resume_completion = (process_id, identity, time.monotonic())
|
|
551
599
|
return True
|
|
552
600
|
elif status == 'failed':
|
|
553
601
|
if self._debug:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/e6data_python_connector/aio.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_38_nines.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_all_cases.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_binary.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_correct_value.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/analyze_fields.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/check_decimal_errors.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/cleanup_test_files.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/debug_38_nines.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/integration/support.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_comprehensive.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_connection_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_dialect_columns.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_improved_parsing.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_known_case.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_manual_analysis.py
RENAMED
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_mock_server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_oauth_auto_resume.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_specific_binary.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_strategy_logic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/test_user_binary_value.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/validate_decimal128.py
RENAMED
|
File without changes
|
|
File without changes
|
{e6data_python_connector-3.0.1rc2 → e6data_python_connector-3.0.1rc3}/test/verify_decimal_fix.py
RENAMED
|
File without changes
|