Browse Source

fix: [mongo] make charm compatible with mongo versions >= ``4.2``

Signed-off-by: Valentin Lab <valentin.lab@kalysto.org>
pull/29/head
Valentin Lab 2 years ago
parent
commit
949d15a0e9
  1. 67
      mongo/hooks/mongo_database-relation-joined
  2. 12
      mongo/lib/common

67
mongo/hooks/mongo_database-relation-joined

@ -10,8 +10,55 @@ DBNAME=$(relation-get dbname) || {
} }
## From: https://stackoverflow.com/questions/16989598
function version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; }
ensure_db_docker_running ensure_db_docker_running
## ReplicaSet initialization
cmd="rs.initiate({ _id: 'rs01', members: [ { _id: 0, host: '$TARGET_SERVICE_NAME:27017' } ]})"
debug "${WHITE}running:$NORMAL $cmd"
out=$(ddb < <(echo "use $DBNAME";
echo "$cmd"))
if [[ "$out" == *"\"codeName\" : \"AlreadyInitialized\""* ]]; then
info "ReplicaSet already initialized."
elif [[ "$out" == *"\"ok\" : 1"* ]]; then
info "ReplicaSet initialized. "
else
err "ReplicaSet initialisation failed:"
echo "$out" >&2
exit 13
fi
## 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
if dbs=$(mongo:db:ls); then if dbs=$(mongo:db:ls); then
if matching_db=$(e "$dbs" | egrep "[a-zA-Z0-9.-_]*_${DBNAME}"); then if matching_db=$(e "$dbs" | egrep "[a-zA-Z0-9.-_]*_${DBNAME}"); then
if e "$dbs" | grep "^${DBNAME}$"; then if e "$dbs" | grep "^${DBNAME}$"; then
@ -41,23 +88,3 @@ else
exit 14 exit 14
fi fi
## ReplicaSet initialization
cmd="rs.initiate({ _id: 'rs01', members: [ { _id: 0, host: '$TARGET_SERVICE_NAME:27017' } ]})"
debug "${WHITE}running:$NORMAL $cmd"
out=$(ddb < <(echo "use $DBNAME";
echo "$cmd"))
if [[ "$out" == *"\"codeName\" : \"AlreadyInitialized\""* ]]; then
info "ReplicaSet already initialized."
elif [[ "$out" == *"\"ok\" : 1"* ]]; then
info "ReplicaSet initialized. "
else
err "ReplicaSet initialisation failed:"
echo "$out" >&2
exit 13
fi

12
mongo/lib/common

@ -91,3 +91,15 @@ EOF
fi fi
debug "$out" debug "$out"
} }
mongo:db:version() {
local out
if out=$(ddb < <(echo "db.version()")); then
e "$out"
return 0
else
err "Could not query version of database."
return 1
fi
}
Loading…
Cancel
Save