示例#1
0
文件: main.py 项目: virajs/edgedb
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()
示例#2
0
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
示例#3
0
文件: cluster.py 项目: versada/edgedb
    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
示例#4
0
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
示例#5
0
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
示例#6
0
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()