X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=examples%2Fgrok-pull.post_update_hook.sh;h=77489472123192ca1df6522e6a1bbaa8fe6845b5;hb=d07ba9c30800225052d17ccca458afbfa05a8ff0;hp=092ca283b30e289165cf86d279d22fb8a0ac1dbe;hpb=8096f9504d06f9a08726ff24df685cce7fcdcb09;p=public-inbox.git diff --git a/examples/grok-pull.post_update_hook.sh b/examples/grok-pull.post_update_hook.sh index 092ca283..77489472 100755 --- a/examples/grok-pull.post_update_hook.sh +++ b/examples/grok-pull.post_update_hook.sh @@ -25,11 +25,13 @@ then inbox_dir=$(expr "$full_git_dir" : "$EPOCH2MAIN") inbox_name=$(basename "$inbox_dir") msgmap="$inbox_dir"/msgmap.sqlite3 + inbox_lock="$inbox_dir"/inbox.lock else inbox_fmt=1 inbox_dir="$full_git_dir" inbox_name=$(basename "$inbox_dir" .git) msgmap="$inbox_dir"/public-inbox/msgmap.sqlite3 + inbox_lock="$inbox_dir"/ssoma.lock fi # run public-inbox-init iff unconfigured @@ -118,13 +120,26 @@ esac # don't know what indexlevel a user wants if test -f "$msgmap" then - n=$(echo 'SELECT COUNT(*) FROM msgmap' | sqlite3 -readonly "$msgmap") + # We need to use flock(1) (from util-linux) to avoid timeouts + # and SQLite locking problems. + # FreeBSD has a similar lockf(1) utility, but it unlinks by + # default so we use `-k' to keep the lock on the FS. + FLOCK=flock + case $(uname -s) in + FreeBSD) FLOCK='lockf -k' ;; + # ... other OSes here + esac + + n=$(echo 'SELECT COUNT(*) FROM msgmap' | \ + $FLOCK $inbox_lock sqlite3 -readonly "$msgmap") case $n in 0|'') : v2 inboxes may be init-ed with an empty msgmap ;; *) - # if on HDD and limited RAM, add `-j0' w/ public-inbox 1.6.0+ + # if on HDD and limited RAM, add `--sequential-shard' + # and possibly a large `--batch-size' if you have much + # memory in public-inbox 1.6.0+ $EATMYDATA public-inbox-index -v "$inbox_dir" ;; esac