Skip to content

docs: address PR #812 review feedback #586

docs: address PR #812 review feedback

docs: address PR #812 review feedback #586

name: Integration for Compatibility
on: [push, pull_request]
env:
CONTAINER_RUNTIME: docker
jobs:
integ-test-compat:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.entry.opensearch_version == 'latest' }}
strategy:
fail-fast: false
# OpenSearch <=2.17.x carries a node-join/node-left race condition
# (fixed in 2.18 via opensearch-project/OpenSearch#15521, backported
# via opensearch-project/OpenSearch#16118) that leaves a node in
# cluster state but disconnected at the transport layer, breaking
# NodesStats RPC fan-out indefinitely and hanging /_cat/nodes-based
# readiness gates. Single-node clusters cannot hit the race, so
# affected versions run with OPENSEARCH_NODE_COUNT=1 below.
matrix:
secured: ["true", "false"]
entry:
- { opensearch_version: 1.3.20, node_count: 1 }
- { opensearch_version: 2.0.1, node_count: 1 }
- { opensearch_version: 2.1.0, node_count: 1 }
- { opensearch_version: 2.2.1, node_count: 1 }
- { opensearch_version: 2.3.0, node_count: 1 }
- { opensearch_version: 2.4.1, node_count: 1 }
- { opensearch_version: 2.5.0, node_count: 1 }
- { opensearch_version: 2.6.0, node_count: 1 }
- { opensearch_version: 2.7.0, node_count: 1 }
- { opensearch_version: 2.8.0, node_count: 1 }
- { opensearch_version: 2.9.0, node_count: 1 }
- { opensearch_version: 2.10.0, node_count: 1 }
- { opensearch_version: 2.11.1, node_count: 1 }
- { opensearch_version: 2.12.0, node_count: 1 }
- { opensearch_version: 2.13.0, node_count: 1 }
- { opensearch_version: 2.14.0, node_count: 1 }
- { opensearch_version: 2.15.0, node_count: 1 }
- { opensearch_version: 2.16.0, node_count: 1 }
- { opensearch_version: 2.17.1, node_count: 1 }
- { opensearch_version: 2.18.0, node_count: 3 }
- { opensearch_version: 2.19.5, node_count: 3 }
- { opensearch_version: 3.0.0, node_count: 3 }
- { opensearch_version: 3.1.0, node_count: 3 }
- { opensearch_version: 3.2.0, node_count: 3 }
- { opensearch_version: 3.3.2, node_count: 3 }
- { opensearch_version: 3.4.0, node_count: 3 }
- { opensearch_version: 3.5.0, node_count: 3 }
- { opensearch_version: 3.6.0, node_count: 3 }
- { opensearch_version: latest, node_count: 3 }
steps:
- uses: actions/checkout@v6
- uses: actions/setup-go@v6
with: { go-version-file: 'go.mod' }
- run: go version
- name: Increase system limits
run: |
sudo swapoff -a
sudo sysctl -w vm.swappiness=1
sudo sysctl -w fs.file-max=262144
sudo sysctl -w vm.max_map_count=262144
- name: Launch OpenSearch cluster
run: |
export OPENSEARCH_VERSION=${{ matrix.entry.opensearch_version }}
export SECURE_INTEGRATION=${{ matrix.secured }}
export OPENSEARCH_NODE_COUNT=${{ matrix.entry.node_count }}
make cluster.clean cluster.build cluster.start
if [ "${SECURE_INTEGRATION}" = "true" ]; then
CURL_URL="https://localhost:9200"
# Password changed in OpenSearch 2.12.0
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
if [ $(version ${OPENSEARCH_VERSION}) -ge $(version "2.12.0") ] || [ "${OPENSEARCH_VERSION}" = "latest" ]; then
CURL_OPTS="-sfku admin:myStrongPassword123!"
else
CURL_OPTS="-sfku admin:admin"
fi
else
CURL_URL="http://localhost:9200"
CURL_OPTS="-sf"
fi
echo "=====> Waiting for OpenSearch ${OPENSEARCH_VERSION} (secure=${SECURE_INTEGRATION}) to be ready (max 125s)..."
for attempt in $(seq 25); do
sleep 5
if curl ${CURL_OPTS} ${CURL_URL} > /dev/null 2>&1; then
echo "=====> Cluster ready after $((attempt * 5))s"
curl -s ${CURL_OPTS} ${CURL_URL} | jq -r '.version.number // "unknown"' | xargs echo "OpenSearch version:"
break
fi
if [ $attempt -eq 25 ]; then
echo "=====> ERROR: Cluster failed to start after 125s"
echo ""
echo "=====> Container status:"
docker compose --project-directory .ci/opensearch ps
echo ""
echo "=====> Node 1 logs (last 50 lines):"
docker compose --project-directory .ci/opensearch logs --tail=50 opensearch-node1
echo ""
echo "=====> Node 2 logs (last 50 lines):"
docker compose --project-directory .ci/opensearch logs --tail=50 opensearch-node2
echo ""
echo "=====> Node 3 logs (last 50 lines):"
docker compose --project-directory .ci/opensearch logs --tail=50 opensearch-node3
exit 1
fi
echo "=====> Attempt $attempt/25 - waiting..."
done
- name: Integration test
run: |
export OPENSEARCH_VERSION=${{ matrix.entry.opensearch_version }}
export SECURE_INTEGRATION=${{ matrix.secured }}
export OPENSEARCH_NODE_COUNT=${{ matrix.entry.node_count }}
make cluster.get-cert test-integ-core test-integ-plugins race=true
- name: Stop the OpenSearch cluster
run: |
make cluster.stop