Add configurable timeout to netcat calls with 10s default (#78370)

Add configurable timeout to netcat calls with 10s default

Without any timeout, netcat can get stuck forever (until Kubernetes
kills unhealthy Pod) when configured address and port combination is
wrong, or the connection gets stuck.
For example `nc -z bitnami.com 12345` doesn't seem to ever finish.

In the case when an attempt gets stuck, the timeout will allow further
attempts to be performed, instead of waiting until Pod is killed.

Signed-off-by: Mateusz Mikuła <oss@mateuszmikula.dev>
This commit is contained in:
Mateusz Mikuła
2025-03-13 17:48:09 +01:00
committed by GitHub
parent 6bc270fe9c
commit ee01f555fa
11 changed files with 48 additions and 37 deletions

View File

@@ -30,6 +30,7 @@ ksql_env_vars=(
KSQL_SSL_TRUSTSTORE_PASSWORD
KSQL_CLIENT_AUTHENTICATION
KSQL_BOOTSTRAP_SERVERS
KSQL_CONNECTION_ATTEMPT_TIMEOUT
)
for env_var in "${ksql_env_vars[@]}"; do
file_env_var="${env_var}_FILE"
@@ -67,5 +68,6 @@ export KSQL_SSL_KEYSTORE_PASSWORD="${KSQL_SSL_KEYSTORE_PASSWORD:-}"
export KSQL_SSL_TRUSTSTORE_PASSWORD="${KSQL_SSL_TRUSTSTORE_PASSWORD:-}"
export KSQL_CLIENT_AUTHENTICATION="${KSQL_CLIENT_AUTHENTICATION:-}"
export KSQL_BOOTSTRAP_SERVERS="${KSQL_BOOTSTRAP_SERVERS:-}"
export KSQL_CONNECTION_ATTEMPT_TIMEOUT="${KSQL_CONNECTION_ATTEMPT_TIMEOUT:10}"
# Custom environment variables may be defined below

View File

@@ -181,7 +181,7 @@ ksql_wait_for_kafka_brokers() {
if [[ "$b" =~ [_a-zA-Z]*://(.*):([0-9]*) ]]; then
host="${BASH_REMATCH[1]}"
port="${BASH_REMATCH[2]}"
if ! retry_while "debug_execute nc -z ${host} ${port}" 10 10; then
if ! retry_while "debug_execute nc -w $KSQL_CONNECTION_ATTEMPT_TIMEOUT -z ${host} ${port}" 10 10; then
error "Failed to connect to the broker at $host:$port"
return 1
fi

View File

@@ -64,13 +64,14 @@ docker build -t bitnami/APP:latest .
### Customizable environment variables
| Name | Description | Default Value |
|--------------------------------|-----------------------------------------------------------------------------------------------|--------------------------|
|-----------------------------------|-----------------------------------------------------------------------------------------------|--------------------------|
| `KSQL_MOUNTED_CONF_DIR` | Directory for including custom configuration files (that override the default generated ones) | `${KSQL_VOLUME_DIR}/etc` |
| `KSQL_LISTENERS` | Comma-separated list of listeners that listen for API requests over either HTTP or HTTPS. | `nil` |
| `KSQL_SSL_KEYSTORE_PASSWORD` | Password to access the SSL keystore. | `nil` |
| `KSQL_SSL_TRUSTSTORE_PASSWORD` | Password to access the SSL truststore. | `nil` |
| `KSQL_CLIENT_AUTHENTICATION` | Client authentication configuration. Valid options: none, requested, over required. | `nil` |
| `KSQL_BOOTSTRAP_SERVERS` | The set of Kafka brokers to bootstrap Kafka cluster information from. | `nil` |
| `KSQL_CONNECTION_ATTEMPT_TIMEOUT` | Timeout in seconds for connection attempts. | `10` |
### Read-only environment variables

View File

@@ -254,7 +254,7 @@ schema_registry_for_kafka_brokers() {
if [[ "$b" =~ [_a-zA-Z]*://(.*):([0-9]*) ]]; then
host="${BASH_REMATCH[1]}"
port="${BASH_REMATCH[2]}"
if ! retry_while "debug_execute nc -z ${host} ${port}" 10 10; then
if ! retry_while "debug_execute nc -w $SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT -z ${host} ${port}" 10 10; then
error "Failed to connect to the broker at $host:$port"
return 1
fi

View File

@@ -40,6 +40,7 @@ schema_registry_env_vars=(
SCHEMA_REGISTRY_CLIENT_AUTHENTICATION
SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL
SCHEMA_REGISTRY_DEBUG
SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT
)
for env_var in "${schema_registry_env_vars[@]}"; do
file_env_var="${env_var}_FILE"
@@ -87,5 +88,6 @@ export SCHEMA_REGISTRY_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM="${SCHEMA_REGISTRY_
export SCHEMA_REGISTRY_CLIENT_AUTHENTICATION="${SCHEMA_REGISTRY_CLIENT_AUTHENTICATION:-}"
export SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL="${SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL:-}"
export SCHEMA_REGISTRY_DEBUG="${SCHEMA_REGISTRY_DEBUG:-}"
export SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT="${SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT:10}"
# Custom environment variables may be defined below

View File

@@ -254,7 +254,7 @@ schema_registry_for_kafka_brokers() {
if [[ "$b" =~ [_a-zA-Z]*://(.*):([0-9]*) ]]; then
host="${BASH_REMATCH[1]}"
port="${BASH_REMATCH[2]}"
if ! retry_while "debug_execute nc -z ${host} ${port}" 10 10; then
if ! retry_while "debug_execute nc -w $SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT -z ${host} ${port}" 10 10; then
error "Failed to connect to the broker at $host:$port"
return 1
fi

View File

@@ -40,6 +40,7 @@ schema_registry_env_vars=(
SCHEMA_REGISTRY_CLIENT_AUTHENTICATION
SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL
SCHEMA_REGISTRY_DEBUG
SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT
)
for env_var in "${schema_registry_env_vars[@]}"; do
file_env_var="${env_var}_FILE"
@@ -87,5 +88,6 @@ export SCHEMA_REGISTRY_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM="${SCHEMA_REGISTRY_
export SCHEMA_REGISTRY_CLIENT_AUTHENTICATION="${SCHEMA_REGISTRY_CLIENT_AUTHENTICATION:-}"
export SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL="${SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL:-}"
export SCHEMA_REGISTRY_DEBUG="${SCHEMA_REGISTRY_DEBUG:-}"
export SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT="${SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT:10}"
# Custom environment variables may be defined below

View File

@@ -84,6 +84,7 @@ docker build -t bitnami/APP:latest .
| `SCHEMA_REGISTRY_CLIENT_AUTHENTICATION` | Client authentication configuration. Valid options: none, requested, over required. | `nil` |
| `SCHEMA_REGISTRY_AVRO_COMPATIBILY_LEVEL` | The Avro compatibility type. Valid options: none, backward, backward_transitive, forward, forward_transitive, full, or full_transitive | `nil` |
| `SCHEMA_REGISTRY_DEBUG` | Enable Schema Registry debug logs. Valid options: true or false | `nil` |
| `SCHEMA_REGISTRY_CONNECTION_ATTEMPT_TIMEOUT` | Timeout for connection attempts in seconds. | `10` |
#### Read-only environment variables

View File

@@ -162,7 +162,7 @@ solr_wait_for_zookeeper() {
host="${BASH_REMATCH[1]}"
port="${BASH_REMATCH[2]}"
debug "Trying: $host:$port"
if ! retry_while "debug_execute nc -z ${host} ${port}" "$SOLR_ZK_MAX_RETRIES" "$SOLR_ZK_SLEEP_TIME"; then
if ! retry_while "debug_execute nc -w $SOLR_ZK_CONNECTION_ATTEMPT_TIMEOUT -z ${host} ${port}" "$SOLR_ZK_MAX_RETRIES" "$SOLR_ZK_SLEEP_TIME"; then
error "Failed to connect to the zookeeper node at ${host}:${port}"
return 1
fi

View File

@@ -48,6 +48,7 @@ solr_env_vars=(
SOLR_ZK_CHROOT
SOLR_ZK_HOSTS
SOLR_COLLECTION
SOLR_ZK_CONNECTION_ATTEMPT_TIMEOUT
)
for env_var in "${solr_env_vars[@]}"; do
file_env_var="${env_var}_FILE"
@@ -109,5 +110,6 @@ export SOLR_ZK_MAX_RETRIES="${SOLR_ZK_MAX_RETRIES:-5}"
export SOLR_ZK_SLEEP_TIME="${SOLR_ZK_SLEEP_TIME:-5}"
export SOLR_ZK_CHROOT="${SOLR_ZK_CHROOT:-/solr}"
export SOLR_ZK_HOSTS="${SOLR_ZK_HOSTS:-}"
export SOLR_ZK_CONNECTION_ATTEMPT_TIMEOUT="${SOLR_ZK_CONNECTION_ATTEMPT_TIMEOUT:-10}"
# Custom environment variables may be defined below

View File

@@ -151,7 +151,7 @@ docker-compose up -d
#### Customizable environment variables
| Name | Description | Default Value |
|---------------------------------|-------------------------------------------------------------------------------|----------------------------------------------------|
|--------------------------------------|-------------------------------------------------------------------------------|----------------------------------------------------|
| `SOLR_ENABLE_CLOUD_MODE` | Starts solr in cloud mode | `no` |
| `SOLR_NUMBER_OF_NODES` | Number of nodes of the solr cloud cluster | `1` |
| `SOLR_HOST` | Solr Host name | `nil` |
@@ -175,6 +175,7 @@ docker-compose up -d
| `SOLR_ZK_SLEEP_TIME` | Sleep time when waiting for zookeeper configuration operations to finish | `5` |
| `SOLR_ZK_CHROOT` | ZooKeeper ZNode chroot where to store solr data. Default: /solr | `/solr` |
| `SOLR_ZK_HOSTS` | ZooKeeper nodes (comma-separated list of `host:port`\) | `nil` |
| `SOLR_ZK_CONNECTION_ATTEMPT_TIMEOUT` | ZooKeeper connection attempt timeout in seconds | `10` |
#### Read-only environment variables