yandex / odyssey

Scalable PostgreSQL connection pooler
BSD 3-Clause "New" or "Revised" License
3.13k stars 155 forks source link

Segfault on console calls #538

Open evkuzin opened 8 months ago

evkuzin commented 8 months ago

Привет не могу понять что я делаю не так.

➤ 2023-10-31 11:02 AM EDT /odyssey_console
=> show server_prep_stmts;
SSL SYSCALL error: EOF detected
The connection to the server was lost. Attempting reset: Failed.
The connection to the server was lost. Attempting reset: Failed.

сразу же вызывает краш софта

mesg -T | tail
[Tue Oct 31 10:26:35 2023] worker: 0[38220]: segfault at 0 ip 0000559d68a85510 sp 00007f13491a5850 error 4 in odyssey[559d68a68000+50000]
[Tue Oct 31 10:26:35 2023] Code: 24 38 48 85 c0 0f 84 09 06 00 00 48 8d 84 24 80 00 00 00 48 89 04 24 48 8b 44 24 18 66 0f 1f 44 00 00 4c 8b 78 c8 48 8b 40 d8 <48> 83 38 00 48 89 44 24 28 0f 84 2c 05 00 00 48 8b 44 24 18 4c 89
[Tue Oct 31 10:29:39 2023] worker: 4[45619]: segfault at 0 ip 00005579da1b5510 sp 00007f74d0e2e850 error 4 in odyssey[5579da198000+50000]
[Tue Oct 31 10:29:39 2023] Code: 24 38 48 85 c0 0f 84 09 06 00 00 48 8d 84 24 80 00 00 00 48 89 04 24 48 8b 44 24 18 66 0f 1f 44 00 00 4c 8b 78 c8 48 8b 40 d8 <48> 83 38 00 48 89 44 24 28 0f 84 2c 05 00 00 48 8b 44 24 18 4c 89
[Tue Oct 31 10:41:23 2023] worker: 2[76597]: segfault at 0 ip 00005562f0727510 sp 00007feba02e8850 error 4 in odyssey[5562f070a000+50000]
[Tue Oct 31 10:41:23 2023] Code: 24 38 48 85 c0 0f 84 09 06 00 00 48 8d 84 24 80 00 00 00 48 89 04 24 48 8b 44 24 18 66 0f 1f 44 00 00 4c 8b 78 c8 48 8b 40 d8 <48> 83 38 00 48 89 44 24 28 0f 84 2c 05 00 00 48 8b 44 24 18 4c 89
[Tue Oct 31 11:04:07 2023] worker: 2[121094]: segfault at 0 ip 000055dfa3839710 sp 00007f43141f6850 error 4 in odyssey[55dfa381c000+51000]
[Tue Oct 31 11:04:07 2023] Code: 24 38 48 85 c0 0f 84 09 06 00 00 48 8d 84 24 80 00 00 00 48 89 04 24 48 8b 44 24 18 66 0f 1f 44 00 00 4c 8b 78 c8 48 8b 40 d8 <48> 83 38 00 48 89 44 24 28 0f 84 2c 05 00 00 48 8b 44 24 18 4c 89
[Tue Oct 31 11:06:39 2023] worker: 2[125566]: segfault at 0 ip 000055743d4d3710 sp 00007fc503962850 error 4 in odyssey[55743d4b6000+51000]
[Tue Oct 31 11:06:39 2023] Code: 24 38 48 85 c0 0f 84 09 06 00 00 48 8d 84 24 80 00 00 00 48 89 04 24 48 8b 44 24 18 66 0f 1f 44 00 00 4c 8b 78 c8 48 8b 40 d8 <48> 83 38 00 48 89 44 24 28 0f 84 2c 05 00 00 48 8b 44 24 18 4c 89

Меня мучают сомнения что я собираю бинарник правильно. Я попробовал сделать билд на основе вашего докера но debian:bullseye

FROM  debian:bullseye

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    lsb-release \
    ca-certificates \
    libssl-dev \
    libldap-common \
    gnupg \
    openssl \
    ldap-utils \
    libldap-2.4-2 \
    libldap-dev \
    git

RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - && \
    sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

RUN apt-get update && apt-get install -y --no-install-recommends \
    sudo postgresql-14 \
    build-essential \
    cmake \
    clang \
    gdb \
    libpam0g-dev \
    valgrind \
    libpq5 \
    libpq-dev \
    vim \
    postgresql-common \
    postgresql-server-dev-14

ENTRYPOINT ["/bin/bash"]

и потом

docker run -it -v /home/evgeny/odyssey:/opt/odyssey odyssey_build_container 
cd /opt/odysey
make build_release

Что может быть не так? Еще мне не нравился что psql показывает что сервер версия 9 - это нормально?

sudo -u postgres psql "postgresql://prometheus@localhost:5432/odyssey_console"
psql (15.2 (Debian 15.2-1.pgdg100+1), server 9.6.0)
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.
evkuzin commented 8 months ago

Не - по ходу не в сборке дело

С таким конфигом краш происходит

storage "local" {
    type "local"
}

database "odyssey_console" {
    user "prometheus" {
        authentication "md5"
        auth_query "SELECT uname, phash FROM odyssey_user_lookup($1)"
        auth_query_db "postgres"
        auth_query_user "odyssey"
        storage "local"
        pool "session"
        pool_size 2
        role "stat"
        pool_timeout 0
        pool_ttl 60
        pool_discard yes
        pool_cancel yes
        pool_rollback yes
        pool_client_idle_timeout 0
        pool_idle_in_transaction_timeout 0
        client_fwd_error yes
        application_name_add_host yes
        server_lifetime 3600
        log_debug no
    }
}

Усли же я меняю авторизацию с md5 на что-то другое (например clear_text) то все работает