@@ -20,7 +20,7 @@ POSTGRES_VERSION_DEFAULT=10
2020AWS_BLOCK_DURATION=0
2121
2222# ######################################
23- # Attach ebs drive with db backup
23+ # Attach an EBS volume containing the database backup (made with pg_basebackup)
2424# Globals:
2525# DOCKER_MACHINE, AWS_REGION, DB_EBS_VOLUME_ID
2626# Arguments:
@@ -32,12 +32,13 @@ function attach_db_ebs_drive() {
3232 docker-machine ssh $DOCKER_MACHINE " sudo sh -c \" mkdir /home/backup\" "
3333 docker-machine ssh $DOCKER_MACHINE " wget http://s3.amazonaws.com/ec2metadata/ec2-metadata"
3434 docker-machine ssh $DOCKER_MACHINE " chmod u+x ec2-metadata"
35- instance_id=$( docker-machine ssh $DOCKER_MACHINE ./ec2-metadata -i)
35+ local instance_id=$( docker-machine ssh $DOCKER_MACHINE ./ec2-metadata -i)
3636 instance_id=${instance_id: 13}
37- attachResult=$( aws --region=$AWS_REGION ec2 attach-volume --device /dev/xvdc --volume-id $DB_EBS_VOLUME_ID --instance-id $instance_id )
37+ local attach_result=$( aws --region=$AWS_REGION ec2 attach-volume \
38+ --device /dev/xvdc --volume-id $DB_EBS_VOLUME_ID --instance-id $instance_id )
3839 sleep 10
3940 docker-machine ssh $DOCKER_MACHINE sudo mount /dev/xvdc /home/backup
40- docker-machine ssh $DOCKER_MACHINE " sudo df -h /dev/xvdc"
41+ dbg $( docker-machine ssh $DOCKER_MACHINE " sudo df -h /dev/xvdc" )
4142}
4243
4344# ######################################
@@ -160,17 +161,22 @@ function help() {
160161 - dump in \" custom\" format, made with 'pg_dump -Fc ..' ('*.pgdmp'),
161162 * sequence of SQL commands specified as in a form of plain text.
162163
164+ \033[1m--db-name\033[22m (string)
165+
166+ Name of database which must be tested. Name 'test' is internal used name,
167+ so is not correct value.
168+
163169 \033[1m--db-ebs-volume-id\033[22m (string)
164170
165- Id of Amazon ebs volume with backup of database .
171+ ID of an AWS EBS volume, containing the database backup (made with pg_basebackup) .
166172
167- In root of drive expected be found
173+ In the volume's root directory, the following two files are expected:
168174 - base.tar.gz
169- - pg_xlog.tar.gz
175+ - pg_xlog.tar.gz for Postgres version up to 9.6 or pg_wal.tar.gz for Postgres 10+
170176
171- Created as result of execution :
172- 'pg_basebackup -U postgres -z -ZX -P -Ft - D /ebs-db-vol- root'
173- where X any compression level.
177+ The following command can be used to get such files :
178+ 'pg_basebackup -U postgres -zPFt -Z 5 - D /path/to/ ebs/volume/ root'
179+ Here '-Z 5' means that level 5 to be used for compression, you can choose any value from 0 to 9 .
174180
175181
176182 \033[1m--db-pgbench\033[22m (string)
@@ -541,7 +547,8 @@ function check_cli_parameters() {
541547 [[ ! -z ${WORKLOAD_CUSTOM_SQL+x} ]] && let workloads_count=$workloads_count +1
542548 [[ ! -z ${WORKLOAD_PGBENCH+x} ]] && let workloads_count=$workloads_count +1
543549
544- if [[ -z ${DB_PREPARED_SNAPSHOT+x} ]] && [[ -z ${DB_DUMP+x} ]] && [[ -z ${DB_PGBENCH+x} ]] && [[ -z ${DB_EBS_VOLUME_ID+x} ]]; then
550+ if [[ -z ${DB_PREPARED_SNAPSHOT+x} ]] && [[ -z ${DB_DUMP+x} ]] \
551+ && [[ -z ${DB_PGBENCH+x} ]] && [[ -z ${DB_EBS_VOLUME_ID+x} ]]; then
545552 err " ERROR: The object (database) is not defined."
546553 exit 1
547554 fi
@@ -1140,7 +1147,7 @@ elif [[ "$RUN_ON" == "aws" ]]; then
11401147 msg " To connect docker machine use:"
11411148 msg " docker-machine ssh $DOCKER_MACHINE "
11421149
1143- if [[ ! -z ${DB_EBS_VOLUME_ID+x} ]]; then
1150+ if [[ " $RUN_ON " == " aws " ]] && [[ ! -z ${DB_EBS_VOLUME_ID+x} ]]; then
11441151 attach_db_ebs_drive;
11451152 fi
11461153
@@ -1151,7 +1158,7 @@ elif [[ "$RUN_ON" == "aws" ]]; then
11511158 else
11521159 msg " Use EBS volume"
11531160 # Create new volume and attach them for non i3 instances if needed
1154- if [ ! -z ${AWS_EBS_VOLUME_SIZE+x} ]; then
1161+ if [[ " $RUN_ON " == " aws " ]] && [[ ! -z ${AWS_EBS_VOLUME_SIZE+x} ] ]; then
11551162 use_ec2_ebs_drive $AWS_EBS_VOLUME_SIZE
11561163 fi
11571164 fi
@@ -1179,7 +1186,7 @@ alias docker_exec='docker $DOCKER_CONFIG exec -i ${CONTAINER_HASH} '
11791186CPU_CNT=$( docker_exec bash -c " cat /proc/cpuinfo | grep processor | wc -l" ) # for execute in docker
11801187
11811188# ######################################
1182- # Extract database backup from attached ebs volume to database
1189+ # Extract the database backup from the attached EBS volume.
11831190# Globals:
11841191# PG_VERSION
11851192# Arguments:
@@ -1189,25 +1196,31 @@ CPU_CNT=$(docker_exec bash -c "cat /proc/cpuinfo | grep processor | wc -l") # fo
11891196# ######################################
11901197function cp_db_ebs_backup() {
11911198 # Here we think what postgress stopped
1192- msg " Restore(cp) database backup. "
1199+ msg " Extract database backup from EBS volume "
11931200 docker_exec bash -c " rm -rf /var/lib/postgresql/9.6/main/*"
11941201
1195- OP_START_TIME =$( date +%s) ;
1202+ local op_start_time =$( date +%s) ;
11961203 docker_exec bash -c " rm -rf /var/lib/postgresql/$PG_VERSION /main/*"
1197- docker_exec bash -c " tar -C /storage/postgresql/$PG_VERSION /main/ -xzvf /backup/base.tar.gz"
1198- docker_exec bash -c " tar -C /storage/postgresql/$PG_VERSION /main/pg_xlog -xzvf /backup/pg_xlog.tar.gz"
1199- END_TIME=$( date +%s) ;
1200- DURATION=$( echo $(( END_TIME- OP_START_TIME)) | awk ' {printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}' )
1201- msg " Backup copied for $DURATION ."
1204+ docker_exec bash -c " ([[ -f /backup/base.tar.gz ]] && tar -C /storage/postgresql/$PG_VERSION /main/ -xzvf /backup/base.tar.gz) || true"
1205+ docker_exec bash -c " ([[ -f /backup/base.tar ]] && tar -C /storage/postgresql/$PG_VERSION /main/ -xvf /backup/base.tar) || true"
1206+ docker_exec bash -c " ([[ -f /backup/pg_xlog.tar.gz ]] && tar -C /storage/postgresql/$PG_VERSION /main/pg_xlog -xzvf /backup/pg_xlog.tar.gz) || true"
1207+ docker_exec bash -c " ([[ -f /backup/pg_wal.tar.gz ]] && tar -C /storage/postgresql/$PG_VERSION /main/pg_xlog -xzvf /backup/pg_wal.tar.gz) || true"
1208+ docker_exec bash -c " ([[ -f /backup/pg_xlog.tar ]] && tar -C /storage/postgresql/$PG_VERSION /main/pg_xlog -xvf /backup/pg_xlog.tar) || true"
1209+ docker_exec bash -c " ([[ -f /backup/pg_wal.tar ]] && tar -C /storage/postgresql/$PG_VERSION /main/pg_xlog -xvf /backup/pg_wal.tar) || true"
1210+
1211+ local end_time=$( date +%s) ;
1212+ local duration=$( echo $(( end_time- op_start_time)) | awk ' {printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}' )
1213+ msg " Time taken to extract database backup from EBS volume: $duration ."
12021214
12031215 docker_exec bash -c " chown -R postgres:postgres /storage/postgresql/$PG_VERSION /main"
12041216 docker_exec bash -c " localedef -f UTF-8 -i en_US en_US.UTF-8"
1217+ docker_exec bash -c " localedef -f UTF-8 -i en_US ru_RU.UTF-8"
12051218}
12061219
12071220# ######################################
1208- # Dettach drive with database backup
1221+ # Detach EBS volume
12091222# Globals:
1210- # DOCKER_MACHINE, DB_EBS_VOLUME_ID
1223+ # DOCKER_MACHINE, DB_EBS_VOLUME_ID, AWS_REGION
12111224# Arguments:
12121225# None
12131226# Returns:
@@ -1216,7 +1229,7 @@ function cp_db_ebs_backup() {
12161229function dettach_db_ebs_drive() {
12171230 docker_exec bash -c " umount /backup"
12181231 docker-machine ssh $DOCKER_MACHINE sudo umount /home/backup
1219- dettachResult =$( aws --region=$AWS_REGION ec2 detach-volume --volume-id $DB_EBS_VOLUME_ID )
1232+ local dettach_result =$( aws --region=$AWS_REGION ec2 detach-volume --volume-id $DB_EBS_VOLUME_ID )
12201233}
12211234
12221235docker_exec bash -c " mkdir $MACHINE_HOME && chmod a+w $MACHINE_HOME "
@@ -1232,7 +1245,7 @@ if [[ "$RUN_ON" == "aws" ]]; then
12321245 docker_exec bash -c " ln -s /storage/postgresql /var/lib/postgresql"
12331246
12341247 if [[ ! -z ${DB_EBS_VOLUME_ID+x} ]]; then
1235- cp_db_ebs_backup;
1248+ cp_db_ebs_backup
12361249 dettach_db_ebs_drive
12371250 fi
12381251
@@ -1594,7 +1607,7 @@ function collect_results() {
15941607 msg " Time taken to generate and collect artifacts: $DURATION ."
15951608}
15961609
1597- if [[ ! -z ${DB_EBS_VOLUME_ID+x} ]]; then
1610+ if [[ ! -z ${DB_EBS_VOLUME_ID+x} ]] && [[ ! " $DB_NAME " == " test " ]] ; then
15981611 docker_exec bash -c " psql --set ON_ERROR_STOP=on -U postgres -c 'drop database if exists test;'"
15991612 docker_exec bash -c " psql --set ON_ERROR_STOP=on -U postgres -c 'alter database $DB_NAME rename to test;'"
16001613 DB_NAME=test
0 commit comments