Note that I'd like to propose followup for this.
1. CMD1 could IMO safely exclude _only_ repomd.xml files.
2, CMD2 could safely _only_ sync/replace repomd.xml files.
3, then caches need to be invalidated, so we are sure we can --delete
4. CMD3 is keep as-is
The current approach is fine as well, but CMD2 must take unnecessarily
long time to calculate (do we have stats?).
There actually is slight risk, in current $CMD2, that 'repomd.xml' is
updated slightly faster than the rest of metadata. So repomd.xml for
slight moment references non-existing metadata files... which might
result in some unnecessary dnf fallbacks (that should succeed, but still).
WDYT?
Pavel
On Sunday, March 22, 2020 12:30:08 PM CET Pavel Raiskup wrote:
> Doing this has risk that '*' expands to directories:
>
> $> x='echo *'
> $> $x
> bin boot dev etc home
>
> So it is better to use bash array (we have bash shebang anyways):
> $> x=( echo '*' )
> $> "${x[@]}"
> *
>
> Also de-duplicate few things so it is easier to concentrate on the code.
> ---
> roles/s3-mirror/files/s3.sh | 288 +++++++++++++-----------------------
> 1 file changed, 106 insertions(+), 182 deletions(-)
>
> diff --git a/roles/s3-mirror/files/s3.sh b/roles/s3-mirror/files/s3.sh
> index c70defb52..163e3dc36 100644
> --- a/roles/s3-mirror/files/s3.sh
> +++ b/roles/s3-mirror/files/s3.sh
> @@ -3,207 +3,131 @@
> # LGPL
> # Author: Rick Elrod <[email protected]>
>
> -# first run this command that syncs, but does not delete.
> +base_cmd=(
> + aws s3 sync
> + --no-follow-symlinks
> + --exclude "*/.snapshot/*"
> + --exclude "*/source/*"
> + --exclude "*/SRPMS/*"
> + --exclude "*/debug/*"
> + --exclude "*/beta/*"
> + --exclude "*/ppc/*"
> + --exclude "*/ppc64/*"
> + --exclude "*/repoview/*"
> + --exclude "*/Fedora/*"
> + --exclude "*/EFI/*"
> + --exclude "*/core/*"
> + --exclude "*/extras/*"
> + --exclude "*/LiveOS/*"
> + --exclude "*/development/rawhide/*"
> + --exclude "*/releases/8/*"
> + --exclude "*/releases/9/*"
> + --exclude "*/releases/10/*"
> + --exclude "*/releases/11/*"
> + --exclude "*/releases/12/*"
> + --exclude "*/releases/13/*"
> + --exclude "*/releases/14/*"
> + --exclude "*/releases/15/*"
> + --exclude "*/releases/16/*"
> + --exclude "*/releases/17/*"
> + --exclude "*/releases/18/*"
> + --exclude "*/releases/19/*"
> + --exclude "*/releases/20/*"
> + --exclude "*/releases/21/*"
> + --exclude "*/releases/22/*"
> + --exclude "*/releases/23/*"
> + --exclude "*/releases/24/*"
> + --exclude "*/releases/25/*"
> + --exclude "*/releases/26/*"
> + --exclude "*/releases/27/*"
> + --exclude "*/releases/28/*"
> + --exclude "*/releases/29/*"
> + --exclude "*/updates/8/*"
> + --exclude "*/updates/9/*"
> + --exclude "*/updates/10/*"
> + --exclude "*/updates/11/*"
> + --exclude "*/updates/12/*"
> + --exclude "*/updates/13/*"
> + --exclude "*/updates/14/*"
> + --exclude "*/updates/15/*"
> + --exclude "*/updates/16/*"
> + --exclude "*/updates/17/*"
> + --exclude "*/updates/18/*"
> + --exclude "*/updates/19/*"
> + --exclude "*/updates/20/*"
> + --exclude "*/updates/21/*"
> + --exclude "*/updates/22/*"
> + --exclude "*/updates/23/*"
> + --exclude "*/updates/24/*"
> + --exclude "*/updates/25/*"
> + --exclude "*/updates/26/*"
> + --exclude "*/updates/27/*"
> + --exclude "*/updates/28/*"
> + --exclude "*/updates/29/*"
> + --exclude "*/updates/testing/8/*"
> + --exclude "*/updates/testing/9/*"
> + --exclude "*/updates/testing/10/*"
> + --exclude "*/updates/testing/11/*"
> + --exclude "*/updates/testing/12/*"
> + --exclude "*/updates/testing/13/*"
> + --exclude "*/updates/testing/14/*"
> + --exclude "*/updates/testing/15/*"
> + --exclude "*/updates/testing/16/*"
> + --exclude "*/updates/testing/17/*"
> + --exclude "*/updates/testing/18/*"
> + --exclude "*/updates/testing/19/*"
> + --exclude "*/updates/testing/20/*"
> + --exclude "*/updates/testing/21/*"
> + --exclude "*/updates/testing/22/*"
> + --exclude "*/updates/testing/23/*"
> + --exclude "*/updates/testing/24/*"
> + --exclude "*/updates/testing/25/*"
> + --exclude "*/updates/testing/26/*"
> + --exclude "*/updates/testing/27/*"
> + --exclude "*/updates/testing/28/*"
> + --exclude "*/updates/testing/29/*"
> +)
> +
> +# First run this command that syncs, but does not delete.
> # It also excludes repodata.
> -CMD1="aws s3 sync \
> - --exclude */repodata/* \
> - --exclude */.snapshot/* \
> - --exclude */source/* \
> - --exclude */SRPMS/* \
> - --exclude */debug/* \
> - --exclude */beta/* \
> - --exclude */ppc/* \
> - --exclude */ppc64/* \
> - --exclude */repoview/* \
> - --exclude */Fedora/* \
> - --exclude */EFI/* \
> - --exclude */core/* \
> - --exclude */extras/* \
> - --exclude */LiveOS/* \
> - --exclude */development/rawhide/* \
> - --exclude */releases/8/* \
> - --exclude */releases/9/* \
> - --exclude */releases/10/* \
> - --exclude */releases/11/* \
> - --exclude */releases/12/* \
> - --exclude */releases/13/* \
> - --exclude */releases/14/* \
> - --exclude */releases/15/* \
> - --exclude */releases/16/* \
> - --exclude */releases/17/* \
> - --exclude */releases/18/* \
> - --exclude */releases/19/* \
> - --exclude */releases/20/* \
> - --exclude */releases/21/* \
> - --exclude */releases/22/* \
> - --exclude */releases/23/* \
> - --exclude */releases/24/* \
> - --exclude */releases/25/* \
> - --exclude */releases/26/* \
> - --exclude */releases/27/* \
> - --exclude */releases/28/* \
> - --exclude */releases/29/* \
> - --exclude */updates/8/* \
> - --exclude */updates/9/* \
> - --exclude */updates/10/* \
> - --exclude */updates/11/* \
> - --exclude */updates/12/* \
> - --exclude */updates/13/* \
> - --exclude */updates/14/* \
> - --exclude */updates/15/* \
> - --exclude */updates/16/* \
> - --exclude */updates/17/* \
> - --exclude */updates/18/* \
> - --exclude */updates/19/* \
> - --exclude */updates/20/* \
> - --exclude */updates/21/* \
> - --exclude */updates/22/* \
> - --exclude */updates/23/* \
> - --exclude */updates/24/* \
> - --exclude */updates/25/* \
> - --exclude */updates/26/* \
> - --exclude */updates/27/* \
> - --exclude */updates/28/* \
> - --exclude */updates/29/* \
> - --exclude */updates/testing/8/* \
> - --exclude */updates/testing/9/* \
> - --exclude */updates/testing/10/* \
> - --exclude */updates/testing/11/* \
> - --exclude */updates/testing/12/* \
> - --exclude */updates/testing/13/* \
> - --exclude */updates/testing/14/* \
> - --exclude */updates/testing/15/* \
> - --exclude */updates/testing/16/* \
> - --exclude */updates/testing/17/* \
> - --exclude */updates/testing/18/* \
> - --exclude */updates/testing/19/* \
> - --exclude */updates/testing/20/* \
> - --exclude */updates/testing/21/* \
> - --exclude */updates/testing/22/* \
> - --exclude */updates/testing/23/* \
> - --exclude */updates/testing/24/* \
> - --exclude */updates/testing/25/* \
> - --exclude */updates/testing/26/* \
> - --exclude */updates/testing/27/* \
> - --exclude */updates/testing/28/* \
> - --exclude */updates/testing/29/* \
> - --no-follow-symlinks \
> - "
> - #--dryrun \
> +CMD1=( "${base_cmd[@]}" --exclude "*/repodata/*" )
>
> # Next we run this command which also includes repodata.
> -CMD2="aws s3 sync \
> - --exclude */.snapshot/* \
> - --exclude */source/* \
> - --exclude */SRPMS/* \
> - --exclude */debug/* \
> - --exclude */beta/* \
> - --exclude */ppc/* \
> - --exclude */ppc64/* \
> - --exclude */repoview/* \
> - --exclude */Fedora/* \
> - --exclude */EFI/* \
> - --exclude */core/* \
> - --exclude */extras/* \
> - --exclude */LiveOS/* \
> - --exclude */development/rawhide/* \
> - --exclude */releases/8/* \
> - --exclude */releases/9/* \
> - --exclude */releases/10/* \
> - --exclude */releases/11/* \
> - --exclude */releases/12/* \
> - --exclude */releases/13/* \
> - --exclude */releases/14/* \
> - --exclude */releases/15/* \
> - --exclude */releases/16/* \
> - --exclude */releases/17/* \
> - --exclude */releases/18/* \
> - --exclude */releases/19/* \
> - --exclude */releases/20/* \
> - --exclude */releases/21/* \
> - --exclude */releases/22/* \
> - --exclude */releases/23/* \
> - --exclude */releases/24/* \
> - --exclude */releases/25/* \
> - --exclude */releases/26/* \
> - --exclude */releases/27/* \
> - --exclude */releases/28/* \
> - --exclude */releases/29/* \
> - --exclude */updates/8/* \
> - --exclude */updates/9/* \
> - --exclude */updates/10/* \
> - --exclude */updates/11/* \
> - --exclude */updates/12/* \
> - --exclude */updates/13/* \
> - --exclude */updates/14/* \
> - --exclude */updates/15/* \
> - --exclude */updates/16/* \
> - --exclude */updates/17/* \
> - --exclude */updates/18/* \
> - --exclude */updates/19/* \
> - --exclude */updates/20/* \
> - --exclude */updates/21/* \
> - --exclude */updates/22/* \
> - --exclude */updates/23/* \
> - --exclude */updates/24/* \
> - --exclude */updates/25/* \
> - --exclude */updates/26/* \
> - --exclude */updates/27/* \
> - --exclude */updates/28/* \
> - --exclude */updates/29/* \
> - --exclude */updates/testing/8/* \
> - --exclude */updates/testing/9/* \
> - --exclude */updates/testing/10/* \
> - --exclude */updates/testing/11/* \
> - --exclude */updates/testing/12/* \
> - --exclude */updates/testing/13/* \
> - --exclude */updates/testing/14/* \
> - --exclude */updates/testing/15/* \
> - --exclude */updates/testing/16/* \
> - --exclude */updates/testing/17/* \
> - --exclude */updates/testing/18/* \
> - --exclude */updates/testing/19/* \
> - --exclude */updates/testing/20/* \
> - --exclude */updates/testing/21/* \
> - --exclude */updates/testing/22/* \
> - --exclude */updates/testing/23/* \
> - --exclude */updates/testing/24/* \
> - --exclude */updates/testing/25/* \
> - --exclude */updates/testing/26/* \
> - --exclude */updates/testing/27/* \
> - --exclude */updates/testing/28/* \
> - --exclude */updates/testing/29/* \
> - --no-follow-symlinks \
> - "
> - #--dryrun \
> +CMD2=( "${base_cmd[@]}" )
> +
> +# Then we delete old RPMs and old metadata (but after invalidating caches).
> +CMD3=( "${base_cmd[@]}" --delete )
> +
> +S3_MIRROR=s3-mirror-us-west-1-02.fedoraproject.org
> +DIST_ID=E2KJMDC0QAJDMU
>
> # Sync EPEL
> -#echo $CMD /srv/pub/epel/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> +#echo $CMD /srv/pub/epel/ s3://$S3_MIRROR/pub/epel/
> echo "Starting EPEL sync at $(date)" >> /var/log/s3-mirror/timestamps
> -$CMD1 /srv/pub/epel/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> -$CMD2 /srv/pub/epel/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> +"${CMD1[@]}" /srv/pub/epel/ "s3://$S3_MIRROR/pub/epel/"
> +"${CMD2[@]}" /srv/pub/epel/ "s3://$S3_MIRROR/pub/epel/"
> echo "Ending EPEL sync at $(date)" >> /var/log/s3-mirror/timestamps
> for file in $(echo /srv/pub/epel/6/*/repodata/repomd.xml | sed 's#/srv##g');
> do
> - aws cloudfront create-invalidation --distribution-id E2KJMDC0QAJDMU
> --paths "$file"
> + aws cloudfront create-invalidation --distribution-id "$DIST_ID" --paths
> "$file"
> done
>
> for file in $(echo /srv/pub/epel/7/*/repodata/repomd.xml | sed 's#/srv##g');
> do
> - aws cloudfront create-invalidation --distribution-id E2KJMDC0QAJDMU
> --paths "$file"
> + aws cloudfront create-invalidation --distribution-id "$DIST_ID" --paths
> "$file"
> done
>
> for file in $(echo /srv/pub/epel/8/*/repodata/repomd.xml | sed 's#/srv##g');
> do
> - aws cloudfront create-invalidation --distribution-id E2KJMDC0QAJDMU
> --paths "$file"
> + aws cloudfront create-invalidation --distribution-id "$DIST_ID" --paths
> "$file"
> done
> -$CMD2 --delete /srv/pub/epel/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> +"${CMD3[@]}" /srv/pub/epel/ "s3://$S3_MIRROR/pub/epel/"
>
> # Sync Fedora
> -#echo $CMD /srv/pub/fedora/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> +#echo $CMD /srv/pub/fedora/ s3://$S3_MIRROR/pub/fedora/
> echo "Starting Fedora sync at $(date)" >> /var/log/s3-mirror/timestamps
> -$CMD1 /srv/pub/fedora/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> -$CMD2 /srv/pub/fedora/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> +"${CMD1[@]}" /srv/pub/fedora/ "s3://$S3_MIRROR/pub/fedora/"
> +"${CMD2[@]}" /srv/pub/fedora/ "s3://$S3_MIRROR/pub/fedora/"
> echo "Ending Fedora sync at $(date)" >> /var/log/s3-mirror/timestamps
>
> for file in $(echo /srv/pub/fedora/linux/updates/*/*/*/repodata/repomd.xml |
> sed 's#/srv##g'); do
> - aws cloudfront create-invalidation --distribution-id E2KJMDC0QAJDMU
> --paths "$file"
> + aws cloudfront create-invalidation --distribution-id "$DIST_ID" --paths
> "$file"
> done
> -$CMD2 --delete /srv/pub/fedora/
> s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> +"${CMD3[@]}" /srv/pub/fedora/ s3://$S3_MIRROR/pub/fedora/
> --
> 2.25.1
> _______________________________________________
> infrastructure mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> Fedora Code of Conduct:
> https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives:
> https://lists.fedoraproject.org/archives/list/[email protected]
>
_______________________________________________
infrastructure mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Fedora Code of Conduct:
https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives:
https://lists.fedoraproject.org/archives/list/[email protected]