Open JamesTGrant opened 2 months ago
Using dataplane API in versions 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
Please if possible open an issue in dataplaneapi issue tracker, but in the meantime I'll ping DPAPI devs right away. Thanks!
Using dataplane API in versions 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:
log output:
Here is a BASH script to reproduce the issue: