mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-08-25 14:53:37 +00:00
Previously we were running pg_rewind only in limited amount of cases: * when we knew postgres was a master (no recovery.conf in data dir) * when we were doing a manual switchover to a specific node (no guaranty that this node is the most up-to-date) * when a given node has nofailover tag (it could be ahead of new master) This approach was kind of working in most of the cases, but sometimes we were executing pg_rewind when it was not necessary and in some other cases we were not executing it although it was needed. The main idea of this PR is first try to figure out that we really need to run pg_rewind by analyzing timelineid, LSN and history file on master and replica and run it only if it's needed.
117 lines
4.2 KiB
YAML
117 lines
4.2 KiB
YAML
sudo: false
|
|
dist: trusty
|
|
language: python
|
|
python:
|
|
- "3.4" # 2.7 and 3.5 are preinstalled by default
|
|
env:
|
|
global:
|
|
- ETCDVERSION=3.0.17 ZKVERSION=3.4.9 CONSULVERSION=0.7.4
|
|
- PYVERSIONS="2.7 3.4 3.5"
|
|
matrix:
|
|
- TEST_SUITE="python setup.py"
|
|
- DCS="etcd" TEST_SUITE="behave"
|
|
- DCS="exhibitor" TEST_SUITE="behave"
|
|
- DCS="consul" TEST_SUITE="behave"
|
|
cache:
|
|
directories:
|
|
- $HOME/mycache
|
|
before_cache:
|
|
- |
|
|
rm -fr $HOME/mycache/python*
|
|
for pv in $PYVERSIONS; do
|
|
if [[ $TEST_SUITE != "behave" || $pv != "3.4" ]]; then
|
|
fpv=$(basename $(readlink $HOME/virtualenv/python${pv}))
|
|
mv $HOME/virtualenv/${fpv} $HOME/mycache/${fpv}
|
|
fi
|
|
done
|
|
install:
|
|
- |
|
|
set -e
|
|
|
|
if [[ $TEST_SUITE == "behave" ]]; then
|
|
function get_consul() {
|
|
CC=~/mycache/consul_${CONSULVERSION}
|
|
if [[ ! -x $CC ]]; then
|
|
curl -L https://releases.hashicorp.com/consul/${CONSULVERSION}/consul_${CONSULVERSION}_linux_amd64.zip \
|
|
| gunzip > $CC
|
|
[[ ${PIPESTATUS[0]} == 0 ]] || return 1
|
|
chmod +x $CC
|
|
fi
|
|
ln -s $CC consul
|
|
}
|
|
|
|
function get_etcd() {
|
|
EC=~/mycache/etcd_${ETCDVERSION}
|
|
if [[ ! -x $EC ]]; then
|
|
curl -L https://github.com/coreos/etcd/releases/download/v${ETCDVERSION}/etcd-v${ETCDVERSION}-linux-amd64.tar.gz \
|
|
| tar xz -C . --strip=1 --wildcards --no-anchored etcd
|
|
[[ ${PIPESTATUS[0]} == 0 ]] || return 1
|
|
mv etcd $EC
|
|
fi
|
|
ln -s $EC etcd
|
|
}
|
|
|
|
function get_exhibitor() {
|
|
ZC=~/mycache/zookeeper-${ZKVERSION}
|
|
if [[ ! -d $ZC ]]; then
|
|
curl -L http://www.apache.org/dist/zookeeper/zookeeper-${ZKVERSION}/zookeeper-${ZKVERSION}.tar.gz | tar xz
|
|
[[ ${PIPESTATUS[0]} == 0 ]] || return 1
|
|
mv zookeeper-${ZKVERSION}/conf/zoo_sample.cfg zookeeper-${ZKVERSION}/conf/zoo.cfg
|
|
mv zookeeper-${ZKVERSION} $ZC
|
|
fi
|
|
$ZC/bin/zkServer.sh start
|
|
# following lines are 'emulating' exhibitor REST API
|
|
while true; do
|
|
echo -e 'HTTP/1.0 200 OK\nContent-Type: application/json\n\n{"servers":["127.0.0.1"],"port":2181}' \
|
|
| nc -l 8181 &> /dev/null
|
|
done&
|
|
}
|
|
|
|
attempt_num=1
|
|
until get_${DCS}; do
|
|
[[ $attempt_num -ge 3 ]] && exit 1
|
|
echo "Attempt $attempt_num failed! Trying again in $attempt_num seconds..."
|
|
sleep $(( attempt_num++ ))
|
|
done
|
|
fi
|
|
|
|
for pv in $PYVERSIONS; do
|
|
if [[ $TEST_SUITE != "behave" || $pv != "3.4" ]]; then
|
|
fpv=$(basename $(readlink $HOME/virtualenv/python$pv))
|
|
if [[ -d ~/mycache/${fpv} ]]; then
|
|
mv ~/virtualenv/${fpv} ~/virtualenv/${fpv}.bckp
|
|
mv ~/mycache/${fpv} ~/virtualenv/${fpv}
|
|
fi
|
|
source ~/virtualenv/python${pv}/bin/activate
|
|
# explicitly install all needed python modules to cache them
|
|
for p in '-r requirements.txt' 'behave codacy-coverage coverage coveralls flake8 mock pytest-cov pytest setuptools'; do
|
|
pip install $p --upgrade
|
|
done
|
|
fi
|
|
done
|
|
script:
|
|
- |
|
|
for pv in $PYVERSIONS; do
|
|
source ~/virtualenv/python${pv}/bin/activate
|
|
|
|
if [[ $TEST_SUITE != "behave" ]]; then
|
|
echo Running unit tests using python${pv}
|
|
$TEST_SUITE test
|
|
$TEST_SUITE flake8
|
|
elif [[ $pv != "3.4" ]]; then
|
|
echo Running acceptance tests using python${pv}
|
|
if ! PATH=.:/usr/lib/postgresql/9.6/bin:$PATH $TEST_SUITE; then
|
|
# output all log files when tests are failing
|
|
grep . features/output/*/*postgres?.*
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
set +e
|
|
after_success:
|
|
# before_cache is executed earlier than after_success, so we need to restore one of virtualenv directories
|
|
- fpv=$(basename $(readlink $HOME/virtualenv/python3.5)) && mv $HOME/mycache/${fpv} $HOME/virtualenv/${fpv}
|
|
- coveralls
|
|
- if [[ $TEST_SUITE != "behave" ]]; then python-codacy-coverage -r coverage.xml; fi
|