diff options
Diffstat (limited to 'bin/datomic.in')
| -rwxr-xr-x | bin/datomic.in | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/bin/datomic.in b/bin/datomic.in new file mode 100755 index 0000000..2f60912 --- /dev/null +++ b/bin/datomic.in @@ -0,0 +1,85 @@ +#!/bin/sh +set -euo pipefail + + +usage() { + cat <<-'EOF' + Usage: + datomic backup DBFILE TODIR + datomic gc DBFILE + EOF +} + + +ACTION="${1:-}" +DBFILE="${2:-}" +TODIR="${3:-}" + +if [ -z "$ACTION" ]; then + echo 'Missing ACTION.' >&2 + usage >&2 + exit 2 +fi + +if [ -z "$DBFILE" ]; then + echo 'Missing DBFILE.' >&2 + usage >&2 + exit 2 +fi + +if [ "$ACTION" = 'backup' ] && [ -z "$TODIR" ]; then + echo 'Missing TODIR.' >&2 + usage >&2 + exit 2 +fi + + + +lastroot() ( + cd "$TODIR"/datomic/roots + find * | sort -n | tail -n1 +) + +backupcmd() { + java \ + -server \ + -Xms4g \ + -Xmx4g \ + --class-path '@SYSCONFDIR@/:@JAVADIR@/*' \ + clojure.main \ + -m backup \ + "$@" +} + + +case "$ACTION" in + (backup) + backupcmd backup datomic:sql://app?jdbc:sqlite:"$DBFILE" file:"$TODIR"/datomic + backupcmd verify file:"$TODIR"/datomic true "$(lastroot)" + sqlite3 "$DBFILE" ".backup '$TODIR/sqlite.db'" + { + sqlite3 "$DBFILE" .dump > "$TODIR"/dump.sql.next + mv "$TODIR"/dump.sql.next "$TODIR"/dump.sql + } + { + sqlite3 "$TODIR"/restored.db < @SYSCONFDIR@/init.sql > /dev/null + backupcmd restore file:"$TODIR"/datomic datomic:sql://app?jdbc:sqlite:"$TODIR"/restored.db + } + ;; + (gc) + exec java \ + -server \ + -Xms4g \ + -Xmx4g \ + --class-path '@SYSCONFDIR@/:@JAVADIR@/*' \ + clojure.main \ + -m datomic.tools.gc-db \ + datomic:sql://app?jdbc:sqlite:"$DBFILE" \ + "$(date --date="$(date +'%Y-%m-01') - 3 months" -Is)" + ;; + (*) + printf 'Bad ACTION: "%s"\n' "$ACTION" >&2 + usage >&2 + exit 2 + ;; +esac |
