X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=examples%2Fgrok-pull.post_update_hook.sh;h=77489472123192ca1df6522e6a1bbaa8fe6845b5;hb=21fcd8a37c82c1ef654d402cf592f0c9d803aa26;hp=ec4ae93e829dc93eee66b3dbfc4a58bd28c49e4b;hpb=2ca7db34a51b858c9d7f6f7366afb9fffee86b6e;p=public-inbox.git diff --git a/examples/grok-pull.post_update_hook.sh b/examples/grok-pull.post_update_hook.sh index ec4ae93e..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 @@ -108,7 +110,7 @@ case $cfg_dir in git config -f "$PI_CONFIG" \ "publicinbox.$inbox_name.infourl" "$url" done - curl -sSfv "remote_inbox_url"/description >"$inbox_dir"/description + curl -sSfv "$remote_inbox_url"/description >"$inbox_dir"/description echo "I: $inbox_name at $inbox_dir ($addresses) $local_url" ;; esac @@ -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