def _start(self, timeout=60): try: port = self.port except RedisPortNotAssigned: port = get_available_port() self.log('Starting new process (port %d)...' % port) cmd = self.get_redis_server_cmd(port) + ' ' + '--loglevel debug ' \ '--protected-mode no ' \ '--daemonize yes ' \ '--timeout 0 ' \ '--client-output-buffer-limit slave 0 0 0 ' \ '--client-output-buffer-limit pubsub 0 0 0 ' \ '--save ""' if self.pid_file: cmd += ' --pidfile %s' % self.pid_file if self.log_file: cmd += ' --logfile %s' % self.log_file subprocess.check_call(shlex.split(cmd)) if not wait_until(os.path.exists, timeout, 0.1, self.pid_file): raise RedisDidNotBecomeActive( f'The Redis pid file {self.pid_file} did not exist within {timeout}s' ) self.wait_until_active(port=port, timeout=timeout) self.port = port self.create_password_file() self.create_metadata_file() self.log('redis started.')
def get_broker(cmd_output): logs_dir = get_log_dir_from_output(cmd_output) file_exists = wait_until( lambda: os.path.exists(RedisManager.get_metadata_file(logs_dir)), timeout=10, sleep_for=0.5) assert file_exists, "No broker metadata file." broker = BrokerFactory.broker_manager_from_logs_dir(logs_dir) return broker
def wait_on_keeper_complete(logs_dir, timeout=30) -> bool: # FIXME: subtract time spent waiting on query ready and schema before waiting on DB state. db_file_query_ready = wait_on_db_file_query_ready(logs_dir, timeout=timeout) if not db_file_query_ready: return db_file_query_ready with get_db_manager(logs_dir, read_only=True) as db_manager: return wait_until(db_manager.is_keeper_complete, timeout=timeout, sleep_for=1)
def wait_on_db_file_query_ready(logs_dir, timeout=15, db_manager=None): db_file_exists = wait_until(os.path.isfile, timeout, 1, get_db_file_path(logs_dir)) if not db_file_exists: return db_file_exists if db_manager: return _wait_task_table_exist(db_manager, timeout) else: with get_db_manager(logs_dir, read_only=True) as db_manager: return _wait_task_table_exist(db_manager, timeout)
def assert_expected_firex_output(self, cmd_output, cmd_err): logs_dir = get_log_dir_from_output(cmd_output) tasks = task_query.tasks_by_name(logs_dir, 'echo') assert tasks[0].name == 'echo' assert tasks[0].state == RunStates.SUCCEEDED.value firex_id = os.path.basename(logs_dir) with get_db_manager(logs_dir) as db_manager: run_metadata = db_manager.query_run_metadata(firex_id) is_complete = wait_until(db_manager.is_keeper_complete, timeout=5, sleep_for=0.5) assert is_complete is True assert run_metadata.chain == 'echo' assert run_metadata.firex_id == firex_id assert run_metadata.logs_dir == logs_dir all_uuids = {t.uuid for t in task_query.all_tasks(logs_dir)} assert run_metadata.root_uuid in all_uuids
def _wait_task_table_exist(db_manager, timeout): return wait_until(db_manager.task_table_exists, timeout=timeout, sleep_for=0.5)
def wait_until_broker_not_alive(broker): return wait_until(lambda b: not b.is_alive(), 60, 0.5, broker)