Skip to content

Commit 368e523

Browse files
authored
fix: fix "init" setup mode: ping_count, init bind address (#464)
* Increment the ping_count variable while waiting on the server to come up to prevent an infinite loop * Ensure init port works even when INFLUXD_HTTP_BIND_ADDRESS is set in the env
1 parent b58a76d commit 368e523

File tree

3 files changed

+59
-10
lines changed

3 files changed

+59
-10
lines changed

influxdb/2.0/alpine/entrypoint.sh

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,9 @@ function wait_for_influxd () {
169169
log info "got response from influxd, proceeding"
170170
return
171171
fi
172+
ping_count=$((ping_count+1))
172173
done
173-
log error "failed to detect influxd startup" ping_attempts ${STARTUP_PING_ATTEMPTS}
174+
log error "failed to detect influxd startup" ping_attempts ${ping_count}
174175
exit 1
175176
}
176177

@@ -237,18 +238,16 @@ function init_influxd () {
237238
upgrade_influxd
238239
fi
239240

240-
# Generate a config file with a known HTTP port
241-
local -r init_config=/tmp/config.yml
241+
# Capture final bind address, and check it is distinct from init addr
242242
local -r final_bind_addr="$(influxd print-config --key-name http-bind-address "${@}")"
243243
local -r init_bind_addr=":${INFLUXD_INIT_PORT}"
244244
if [ "${init_bind_addr}" = "${final_bind_addr}" ]; then
245245
log warn "influxd setup binding to same addr as final config, server will be exposed before ready" addr "${init_bind_addr}"
246246
fi
247-
influxd print-config "${@}" | sed "s#${final_bind_addr}#${init_bind_addr}#" > ${init_config}
248247

249248
# Start influxd in the background.
250249
log info "booting influxd server in the background"
251-
INFLUXD_CONFIG_PATH=${init_config} influxd "${@}" &
250+
INFLUXD_HTTP_BIND_ADDRESS="${init_bind_addr}" influxd "${@}" &
252251
local -r influxd_init_pid="$!"
253252
trap "handle_signal TERM ${influxd_init_pid}" TERM
254253
trap "handle_signal INT ${influxd_init_pid}" INT

influxdb/2.0/entrypoint.sh

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,8 +169,9 @@ function wait_for_influxd () {
169169
log info "got response from influxd, proceeding"
170170
return
171171
fi
172+
ping_count=$((ping_count+1))
172173
done
173-
log error "failed to detect influxd startup" ping_attempts ${STARTUP_PING_ATTEMPTS}
174+
log error "failed to detect influxd startup" ping_attempts ${ping_count}
174175
exit 1
175176
}
176177

@@ -237,18 +238,16 @@ function init_influxd () {
237238
upgrade_influxd
238239
fi
239240

240-
# Generate a config file with a known HTTP port
241-
local -r init_config=/tmp/config.yml
241+
# Capture final bind address, and check it is distinct from init addr
242242
local -r final_bind_addr="$(influxd print-config --key-name http-bind-address "${@}")"
243243
local -r init_bind_addr=":${INFLUXD_INIT_PORT}"
244244
if [ "${init_bind_addr}" = "${final_bind_addr}" ]; then
245245
log warn "influxd setup binding to same addr as final config, server will be exposed before ready" addr "${init_bind_addr}"
246246
fi
247-
influxd print-config "${@}" | sed "s#${final_bind_addr}#${init_bind_addr}#" > ${init_config}
248247

249248
# Start influxd in the background.
250249
log info "booting influxd server in the background"
251-
INFLUXD_CONFIG_PATH=${init_config} influxd "${@}" &
250+
INFLUXD_HTTP_BIND_ADDRESS="${init_bind_addr}" influxd "${@}" &
252251
local -r influxd_init_pid="$!"
253252
trap "handle_signal TERM ${influxd_init_pid}" TERM
254253
trap "handle_signal INT ${influxd_init_pid}" INT
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/usr/bin/env bash
2+
set -eo pipefail
3+
4+
declare -r SCRIPT_DIR=$(cd $(dirname $0) >/dev/null 2>&1 && pwd)
5+
source ${SCRIPT_DIR}/common.sh
6+
7+
declare -r tag=$1 container_name=$2 data=$3 config=$4 logs=$5
8+
9+
declare -ra docker_run_influxd=(
10+
docker run -i -d
11+
--name=${container_name}
12+
-u $(id -u):influxdb
13+
-p 8086:3333
14+
-v ${data}:/var/lib/influxdb2
15+
-v ${config}:/etc/influxdb2
16+
-e DOCKER_INFLUXDB_INIT_MODE=setup
17+
-e DOCKER_INFLUXDB_INIT_USERNAME=${TEST_USER}
18+
-e DOCKER_INFLUXDB_INIT_PASSWORD=${TEST_PASSWORD}
19+
-e DOCKER_INFLUXDB_INIT_ORG=${TEST_ORG}
20+
-e DOCKER_INFLUXDB_INIT_BUCKET=${TEST_BUCKET}
21+
-e INFLUXD_HTTP_BIND_ADDRESS=:3333
22+
-e INFLUXD_INIT_PORT=9998
23+
influxdb:${tag} influxd run
24+
)
25+
26+
# Boot the container
27+
log_msg Booting 2.x container in setup mode
28+
if ! ${docker_run_influxd[@]} > /dev/null; then
29+
log_msg Error: Failed to launch container
30+
exit 1
31+
fi
32+
wait_container_ready
33+
34+
# Destroy the container
35+
log_msg Tearing down 2.x container
36+
docker stop ${container_name} > /dev/null
37+
docker logs ${container_name} > ${logs}/init-docker-stdout.log 2> ${logs}/init-docker-stderr.log
38+
docker rm ${container_name} > /dev/null
39+
40+
# Check that setup actually used INFLUXD_INIT_PORT
41+
log_has () {
42+
grep "$2" ${logs}/init-docker-"$1".log > /dev/null
43+
}
44+
if ! log_has stdout 'msg=Listening.*transport=http addr=:9998 port=9998'; then
45+
log_msg Error: container did not use INFLUXD_INIT_PORT
46+
exit 1
47+
fi
48+
if ! log_has stderr 'got response from influxd, proceeding'; then
49+
log_msg Error: init ping never completed successfully
50+
exit 1
51+
fi

0 commit comments

Comments
 (0)