diff options
| author | EuAndreh <eu@euandre.org> | 2025-12-04 06:17:50 -0300 |
|---|---|---|
| committer | EuAndreh <eu@euandre.org> | 2025-12-04 06:25:04 -0300 |
| commit | 13edba0fa2bd4c3847160809499ce837f52d1264 (patch) | |
| tree | 73c1df9c4e2d1b36102eddfffb52babb98c5d406 /bin | |
| parent | etc/transactor.properties.tmpl: Default to "tmp" for data-dir (diff) | |
| download | datomic-13edba0fa2bd4c3847160809499ce837f52d1264.tar.gz datomic-13edba0fa2bd4c3847160809499ce837f52d1264.tar.xz | |
Diffstat (limited to 'bin')
| -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 |
