Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using dataplane API in versions of haproxy-docker-ubuntu container from 3.0.4 onward causes crash. #345

Open
JamesTGrant opened this issue Sep 20, 2024 · 2 comments

Comments

@JamesTGrant
Copy link

@dkorunic requested I create this issue which I reported in the haproxy-docker-ubuntu repo here: haproxytech/haproxy-docker-ubuntu#8

Using dataplane API in versions of haproxy-docker-ubuntu container from 3.0.4 onward causes crash.

Simple to replicate by uncommenting 'program api' and 'userlist haproxy-dataplaneapi' section of the example config (note the VERSION variable in the following link!)
(https://raw.githubusercontent.com/haproxytech/haproxy-docker-ubuntu/refs/tags/$VERSION/3.0/haproxy.cfg)
Not yet found a way to use the dataplane API in versions later than 3.0.3

working in 3.0.3-95a607c
broken in 3.0.4-7a59afa onward

Uncomment these two lines from the haproxy.cfg:

program api
    command /usr/bin/dataplaneapi --host 0.0.0.0 --port 5555 --haproxy-bin /usr/sbin/haproxy --config-file /usr/local/etc/haproxy/haproxy.cfg --reload-cmd "kill -SIGUSR2 1" --restart-cmd "kill -SIGUSR2 1" --reload-delay 5 --userlist haproxy-dataplaneapi
    no option start-on-reload

userlist haproxy-dataplaneapi
  user admin insecure-password mypassword

log output:

[NOTICE]   (1) : New program 'api' (8) forked
[NOTICE]   (1) : New worker (9) forked
[NOTICE]   (1) : Loading success.
[WARNING]  (9) : Server static/static1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 1 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
2024/09/19 13:47:00 maxprocs: Leaving GOMAXPROCS=4: CPU quota undefined
2024/09/19 13:47:00 INFO memory is not limited, skipping package=github.com/KimMachineGun/automemlimit/memlimit
[WARNING]  (9) : Server static/static2 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
[ALERT]    (9) : backend 'static' has no server available!
configuration file /etc/haproxy/dataplaneapi.yaml does not exists, creating one
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0xb0 pc=0x101ce74]

goroutine 1 [running]:
github.com/haproxytech/dataplaneapi/configuration.(*Configuration).migrateUsers(0xc0003c3608)
        github.com/haproxytech/dataplaneapi/configuration/configuration_deprecated.go:76 +0xf4
github.com/haproxytech/dataplaneapi/configuration.(*Configuration).migrateDeprecatedFields(0xc0003c3608)
        github.com/haproxytech/dataplaneapi/configuration/configuration_deprecated.go:34 +0x12c
github.com/haproxytech/dataplaneapi/configuration.(*Configuration).LoadDataplaneStorageConfig(0xc0003c3608)
        github.com/haproxytech/dataplaneapi/configuration/configuration.go:312 +0x6c
main.startServer(0xc0003c3608, 0xc0003d8140)
        github.com/haproxytech/dataplaneapi/cmd/dataplaneapi/main.go:154 +0x985
main.main()
        github.com/haproxytech/dataplaneapi/cmd/dataplaneapi/main.go:67 +0x59
[NOTICE]   (1) : haproxy version is 3.0.4-7a59afa
[NOTICE]   (1) : path to executable is /usr/local/sbin/haproxy
[ALERT]    (1) : Current program 'api' (8) exited with code 2 (Exit)
[ALERT]    (1) : exit-on-failure: killing every processes with SIGTERM
[ALERT]    (1) : Current worker (9) exited with code 143 (Terminated)
[WARNING]  (1) : All workers exited. Exiting... (2)

Here is a BASH script to reproduce the issue:

#! /bin/bash

# fails with VERSION=3.0.4
# works with VERSION=3.0.3
VERSION=3.0.4

# remove any previous instances
if [ "$(docker ps -a -q -f name=my-running-haproxy)" ]; then
    docker stop my-running-haproxy
    docker rm my-running-haproxy
fi

mkdir -p /tmp/haproxy
rm -fR /tmp/haproxy/*
curl -k -L https://raw.githubusercontent.com/haproxytech/haproxy-docker-ubuntu/refs/tags/$VERSION/3.0/haproxy.cfg -o /tmp/haproxy/haproxy.cfg

dataplaneLines=$(cat <<EOF
 userlist haproxy-dataplaneapi
     user admin insecure-password mypassword

 program api
    command /usr/bin/dataplaneapi --host 0.0.0.0 --port 5555 --haproxy-bin /usr/sbin/haproxy --config-file /usr/local/etc/haproxy/haproxy.cfg --reload-cmd "kill -SIGUSR2 1" --restart-cmd "kill -SIGUSR2 1" --reload-delay 5 --userlist haproxy-dataplaneapi
    no option start-on-reload
EOF
)
printf "%s\n" "$dataplaneLines" >> /tmp/haproxy/haproxy.cfg

docker pull ghcr.io/haproxytech/haproxy-docker-ubuntu:$VERSION
docker run -d --name my-running-haproxy --expose 5555 -v /tmp/haproxy:/usr/local/etc/haproxy:rw haproxytech/haproxy-ubuntu:$VERSION
sleep 5
CONTAINER_ID=$(docker ps -a | grep haproxy | awk '{print $1}')
docker logs $CONTAINER_ID
@mjuraga
Copy link
Collaborator

mjuraga commented Sep 20, 2024

Thanks for the report, a fix is incoming shortly. We'll also be releasing a new version soon with this and other fixes.

@tuxillo
Copy link

tuxillo commented Oct 2, 2024

Thanks for the report, a fix is incoming shortly. We'll also be releasing a new version soon with this and other fixes.

is this fixed in the latest release?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants