def run_server(args): logger.info('EdgeDB server starting.') pg_cluster_started_by_us = False if args['data_dir']: server_settings = { 'log_connections': 'yes', 'log_statement': 'all', 'log_disconnections': 'yes', 'log_min_messages': 'INFO', } if args['timezone']: server_settings['TimeZone'] = args['timezone'] cluster = pg_cluster.Cluster(data_dir=args['data_dir']) cluster_status = cluster.get_status() if cluster_status == 'not-initialized': logger.info('Initializing database cluster in %s', args['data_dir']) initdb_output = cluster.init(username='******') for line in initdb_output.splitlines(): logger.debug('initdb: %s', line) cluster.reset_hba() cluster.add_hba_entry(type='local', database='all', user='******', auth_method='trust') cluster.add_hba_entry(type='local', address=ipaddress.ip_network('127.0.0.0/24'), database='all', user='******', auth_method='trust') cluster_status = cluster.get_status() if cluster_status == 'stopped': cluster.start(port=edgedb_cluster.find_available_port(), server_settings=server_settings) pg_cluster_started_by_us = True elif cluster_status != 'running': abort('Could not start database cluster in %s', args['data_dir']) cluster.override_connection_spec(user='******', database='template1') else: cluster = pg_cluster.RunningCluster(dsn=args['postgres']) if args['bootstrap']: _init_cluster(cluster, args) else: _run_server(cluster, args) if pg_cluster_started_by_us: cluster.stop()
def _start_default_cluster(server_settings={}): global _default_cluster if _default_cluster is None: pg_host = os.environ.get('PGHOST') if pg_host: # Using existing cluster, assuming it is initialized and running _default_cluster = pg_cluster.RunningCluster() else: _default_cluster = _start_cluster(pg_cluster.TempCluster, {}, server_settings) return _default_cluster
def __init__(self, data_dir_or_pg_cluster, *, pg_config_path=None, pg_superuser='******', port=edgedb_defines.EDGEDB_PORT, env=None): if (isinstance(data_dir_or_pg_cluster, str) and (data_dir_or_pg_cluster.startswith('postgres://') or data_dir_or_pg_cluster.startswith('postgres://'))): self._pg_dsn = data_dir_or_pg_cluster data_dir_or_pg_cluster = pg_cluster.RunningCluster( dsn=self._pg_dsn) else: self._pg_dsn = None self._edgedb_cmd = ['edgedb-server'] if isinstance(data_dir_or_pg_cluster, pg_cluster.Cluster): self._data_dir = None self._location = None self._pg_cluster = data_dir_or_pg_cluster pg_conn_spec = dict(self._pg_cluster.get_connection_spec()) pg_conn_spec['user'] = pg_superuser if self._pg_dsn is None: self._pg_dsn = connect_utils.render_dsn( 'postgres', pg_conn_spec) reduced_spec = { k: v for k, v in pg_conn_spec.items() if k in ('dsn', 'host', 'port') } self._location = connect_utils.render_dsn('postgres', reduced_spec) self._edgedb_cmd.extend(['-P', self._pg_dsn]) else: self._data_dir = data_dir_or_pg_cluster self._location = self._data_dir self._pg_cluster = self._get_pg_cluster(self._data_dir, pg_config_path) self._edgedb_cmd.extend(['-D', self._data_dir]) self._pg_superuser = pg_superuser self._daemon_process = None self._port = port self._effective_port = None self._env = env
def _init_default_cluster(initdb_options=None): global _default_cluster if _default_cluster is None: pg_host = os.environ.get('PGHOST') if pg_host: # Using existing cluster, assuming it is initialized and running _default_cluster = pg_cluster.RunningCluster() else: _default_cluster = _init_cluster( pg_cluster.TempCluster, cluster_kwargs={}, initdb_options=_get_initdb_options(initdb_options)) return _default_cluster
def _start_cluster(server_settings={}): global _default_cluster if _default_cluster is None: pg_host = os.environ.get('PGHOST') if pg_host: # Using existing cluster, assuming it is initialized and running _default_cluster = pg_cluster.RunningCluster() else: _default_cluster = pg_cluster.TempCluster() _default_cluster.init() _default_cluster.trust_local_connections() _default_cluster.start(port='dynamic', server_settings=server_settings) atexit.register(_shutdown_cluster, _default_cluster) return _default_cluster
def run_server(args): if devmode.is_in_dev_mode(): logger.info('EdgeDB server starting in DEV mode.') else: logger.info('EdgeDB server starting.') pg_cluster_init_by_us = False pg_cluster_started_by_us = False try: if not args['postgres']: server_settings = { 'log_connections': 'yes', 'log_statement': 'all', 'log_disconnections': 'yes', 'log_min_messages': 'INFO', 'client_min_messages': 'INFO', 'listen_addresses': '', # we use Unix sockets } if args['timezone']: server_settings['TimeZone'] = args['timezone'] cluster = edgedb_cluster.get_pg_cluster(args['data_dir']) cluster_status = cluster.get_status() if cluster_status == 'not-initialized': logger.info('Initializing database cluster in %s', args['data_dir']) initdb_output = cluster.init(username='******', locale='C', encoding='UTF8') for line in initdb_output.splitlines(): logger.debug('initdb: %s', line) cluster.reset_hba() cluster.add_hba_entry(type='local', database='all', user='******', auth_method='trust') pg_cluster_init_by_us = True cluster_status = cluster.get_status() if cluster_status == 'stopped': cluster.start(port=edgedb_cluster.find_available_port(), server_settings=server_settings) pg_cluster_started_by_us = True elif cluster_status != 'running': abort('Could not start database cluster in %s', args['data_dir']) cluster.override_connection_spec(user='******', database='template1') else: cluster = pg_cluster.RunningCluster(dsn=args['postgres']) cluster._data_dir = args['data_dir'] if args['bootstrap']: _init_cluster(cluster, args) else: with _runstate_dir(args['runstate_dir']) as rsdir: _run_server(cluster, args, rsdir) except BaseException: if pg_cluster_init_by_us and not _server_initialized: logger.warning('server bootstrap did not complete successfully, ' 'removing the data directory') if cluster.get_status() == 'running': cluster.stop() cluster.destroy() raise if pg_cluster_started_by_us: cluster.stop()