#!/bin/bash . lib/common set -e DBNAME=$(relation-get dbname) || { DBNAME="${BASE_SERVICE_NAME//\./_}" relation-set dbname "$DBNAME" } ## From: https://stackoverflow.com/questions/16989598 function version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } ensure_db_docker_running ## Enable read if db version >= 4.2 if ! version=$(mongo:db:version); then err "Couldn't get database version" exit 1 fi echo "Current mongo database version: '$version'." >&2 if version_gt "$version" 4.1; then cmd="db.getMongo().setSecondaryOk()" debug "${WHITE}running:$NORMAL $cmd" out=$(ddb < <(echo "use $DBNAME"; echo "$cmd")) || { err "Failed database command. Output:" echo "$out" | prefix " | " >&2 exit 1 } fi ## This is some sort of migrating code and should be moved to upgrade ## directory. if dbs=$(mongo:db:ls); then if matching_db=$(e "$dbs" | egrep "[a-zA-Z0-9.-_]*_${DBNAME}"); then if e "$dbs" | grep "^${DBNAME}$"; then err "Error: unexpected database '$matching_db'" \ "found along with database named '${DBNAME}'." exit 1 fi ## XXXvlab: there's probably an unsolved issue here when ## =ensure_db_docker_running= returned the current running ## service container, that we are about to stop in the ## following lines. I'm not digging much into that because ## this code is probably not concerning any current live ## deployment anymore: this was written for an evolution of ## the charm a long time ago, and probably should be deleted ## now. ## Let's take for granted that only current source service is ## concerned by the database. We need to restart source service ## container only if already running. container_ids=($(get_running_containers_for_service "$MASTER_BASE_SERVICE_NAME")) for container_id in "${container_ids[@]}"; do mongo_url=$(docker:container:env_get "$container_id" MONGO_URL) || exit 1 if [[ "$mongo_url" == */"${matching_db}"* ]]; then info "Attempting to stop current containers of service $MASTER_BASE_SERVICE_NAME" docker stop -t 5 "$container_id" || exit 1 fi done mongo:db:rename "$matching_db" "${DBNAME}" ## we DO NOT want to start the stopped container again as they are not ## properly configured fi else err "Failed to query for database list" exit 14 fi