Re: Freeze Break Request: s3-mirror adjustments

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 05, 2020 at 10:31:22PM +0100, Adrian Reber wrote:
> The only thing which is not clear in the documentation is when the
> delete is happening. With rsync there is an option '--delete-after' to
> make sure first all files are transferred and deletion happens
> afterwards. If 'aws s3 sync' does the deletion during or before all
> files are transferred you might again have a small time window where
> repodata has not been updated but files have already been deleted.

Yeah, it's not well documented, but it sounds like it does delete first.
:( 

https://github.com/aws/aws-cli/issues/1417

> To be on the safe side the repodata probably needs to be transferred
> before files are being deleted.

ok. Let me add in a repodata sync step
> 
> Deletion should probably only happen after doing the invalidate to be
> sure that no files are being referenced by the caches which are
> currently being deleted.

sure. 

kevin
--
> 
> 		Adrian
> 
> On Thu, Mar 05, 2020 at 01:05:20PM -0800, Kevin Fenzi wrote:
> > First, I noticed we are running the full sync twice right now, at the
> > same time: 
> > 
> > [root@mm-backend01 cron.d][PROD]# cat /etc/cron.d/s3.sh 
> > #Ansible: s3sync
> > 0 0,11 * * * s3-mirror /usr/local/bin/lock-wrapper s3sync /usr/local/bin/s3.sh 2>&1 | /usr/local/bin/nag-once s3.sh 1d 2>
> > &1
> > #Ansible: s3sync-main
> > 0 0 * * * s3-mirror /usr/local/bin/lock-wrapper s3sync-main /usr/local/bin/s3.sh 2>&1 | /usr/local/bin/nag-once s3.sh 1d 
> > 2>&1
> > 
> > Second, the attached patch changes the sync scripts to: 
> > 
> > * do one sync with no --delete and excluding repodata
> > * do another one with --delete and including repodata
> > * invalidate the repodata
> > 
> > I adjusted the cron jobs to handle the repodata invalidate (I think). 
> > 
> > TODO: only sync when things have changed. 
> > 
> > +1s?
> > 
> > kevin
> > --
> 
> > From 72a86a9f4d80344b96f8752ead2cc2877de292ef Mon Sep 17 00:00:00 2001
> > From: Kevin Fenzi <kevin@xxxxxxxxx>
> > Date: Thu, 5 Mar 2020 20:46:53 +0000
> > Subject: [PATCH] s3-mirror: Split things into 2 sync runs, one without
> >  repodata and delete, the other with both.
> > 
> > In order to make sure the s3 mirror always is consistent, split out the commands
> > to make it sync without repodata and delete, then do another run with those, then finally
> > invalidate all the repodata/* files.
> > 
> > Some of the cron jobs are adjusted to allow the repodata invalidation.
> > 
> > Signed-off-by: Kevin Fenzi <kevin@xxxxxxxxx>
> > ---
> >  roles/s3-mirror/files/s3-sync-path.sh |  38 ++++++++----
> >  roles/s3-mirror/files/s3.sh           | 110 +++++++++++++++++++++++++++++++++-
> >  roles/s3-mirror/tasks/main.yml        |   4 +-
> >  3 files changed, 136 insertions(+), 16 deletions(-)
> > 
> > diff --git a/roles/s3-mirror/files/s3-sync-path.sh b/roles/s3-mirror/files/s3-sync-path.sh
> > index e6ac994..40a0f90 100644
> > --- a/roles/s3-mirror/files/s3-sync-path.sh
> > +++ b/roles/s3-mirror/files/s3-sync-path.sh
> > @@ -9,7 +9,30 @@ if [[ "$1" == "" ]] || [[ $1 != /pub* ]] || [[ $1 != */ ]]; then
> >    exit 1
> >  fi
> >  
> > -CMD="aws s3 sync                   \
> > +# first run do not delete anything or copy the 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/* \
> > +  --no-follow-symlinks            \
> > +  --only-show-errors              \
> > +  "
> > +  #--dryrun                         \
> > +
> > +# second we delete old content and also copy the repodata
> > +CMD2="aws s3 sync                   \
> >    --delete                         \
> >    --exclude *.snapshot/*          \
> >    --exclude *source/*             \
> > @@ -32,19 +55,12 @@ CMD="aws s3 sync                   \
> >  
> >  #echo "$CMD /srv$1 s3://s3-mirror-us-west-1-02.fedoraproject.org$1"
> >  echo "Starting $1 sync at $(date)" >> /var/log/s3-mirror/timestamps
> > -$CMD /srv$1 s3://s3-mirror-us-west-1-02.fedoraproject.org$1
> > +$CMD1 /srv$1 s3://s3-mirror-us-west-1-02.fedoraproject.org$1
> > +$CMD2 /srv$1 s3://s3-mirror-us-west-1-02.fedoraproject.org$1
> >  echo "Ending $1 sync at $(date)" >> /var/log/s3-mirror/timestamps
> >  
> >  # Always do the invalidations because they are quick and prevent issues
> >  # depending on which path is synced.
> > -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" > /dev/null
> > -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" > /dev/null
> > -done
> > -
> > -for file in $(echo /srv/pub/fedora/linux/updates/*/*/*/repodata/repomd.xml | sed 's#/srv##g'); do
> > +for file in $(echo $1/repodata/* ); do
> >    aws cloudfront create-invalidation --distribution-id E2KJMDC0QAJDMU --paths "$file" > /dev/null
> >  done
> > diff --git a/roles/s3-mirror/files/s3.sh b/roles/s3-mirror/files/s3.sh
> > index 55c1940..e36744e 100644
> > --- a/roles/s3-mirror/files/s3.sh
> > +++ b/roles/s3-mirror/files/s3.sh
> > @@ -3,7 +3,96 @@
> >  # LGPL
> >  # Author: Rick Elrod <relrod@xxxxxxxxxx>
> >  
> > -CMD="aws s3 sync                   \
> > +# 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                         \
> > +
> > +# Next we run this command which deletes old content and also includes repodata.
> > +CMD2="aws s3 sync                   \
> >    --delete                         \
> >    --exclude */.snapshot/*          \
> >    --exclude */source/*             \
> > @@ -38,6 +127,9 @@ CMD="aws s3 sync                   \
> >    --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/*         \
> > @@ -57,6 +149,9 @@ CMD="aws s3 sync                   \
> >    --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/* \
> > @@ -76,6 +171,9 @@ CMD="aws s3 sync                   \
> >    --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                         \
> > @@ -83,7 +181,8 @@ CMD="aws s3 sync                   \
> >  # Sync EPEL
> >  #echo $CMD /srv/pub/epel/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> >  echo "Starting EPEL sync at $(date)" >> /var/log/s3-mirror/timestamps
> > -$CMD /srv/pub/epel/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/epel/
> > +$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/
> >  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
> > @@ -94,10 +193,15 @@ 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"
> >  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"
> > +done
> > +
> >  # Sync Fedora
> >  #echo $CMD /srv/pub/fedora/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> >  echo "Starting Fedora sync at $(date)" >> /var/log/s3-mirror/timestamps
> > -$CMD /srv/pub/fedora/ s3://s3-mirror-us-west-1-02.fedoraproject.org/pub/fedora/
> > +$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/
> >  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
> > diff --git a/roles/s3-mirror/tasks/main.yml b/roles/s3-mirror/tasks/main.yml
> > index 12351cb..5da7a02 100644
> > --- a/roles/s3-mirror/tasks/main.yml
> > +++ b/roles/s3-mirror/tasks/main.yml
> > @@ -69,7 +69,7 @@
> >  
> >  - name: s3sync cron - updates for current
> >    cron: name="s3sync-updates-current" minute="0" hour="3,9,15,21" user="s3-mirror"
> > -        job='/usr/local/bin/lock-wrapper s3sync-updates-current "/usr/local/bin/s3-sync-path.sh /pub/fedora/linux/updates/{{ FedoraCycleNumber|int }}/" 2>&1 | /usr/local/bin/nag-once s3-updates-current.sh 1d 2>&1'
> > +        job='/usr/local/bin/lock-wrapper s3sync-updates-current "/usr/local/bin/s3-sync-path.sh /pub/fedora/linux/updates/{{ FedoraCycleNumber|int }}/Everything/x86_64/os" 2>&1 | /usr/local/bin/nag-once s3-updates-current.sh 1d 2>&1'
> >          cron_file=s3-updates-current.sh
> >    when: env != 'staging' and inventory_hostname.startswith('mm-backend01.')
> >    tags:
> > @@ -95,7 +95,7 @@
> >  
> >  - name: s3sync cron - updates for current-1
> >    cron: name="s3sync-updates-previous" minute="30" hour="0,6,12,18" user="s3-mirror"
> > -        job='/usr/local/bin/lock-wrapper s3sync-updates-previous "/usr/local/bin/s3-sync-path.sh /pub/fedora/linux/updates/{{ FedoraCycleNumber|int - 1 }}/" 2>&1 | /usr/local/bin/nag-once s3-updates-previous.sh 1d 2>&1'
> > +        job='/usr/local/bin/lock-wrapper s3sync-updates-previous "/usr/local/bin/s3-sync-path.sh /pub/fedora/linux/updates/{{ FedoraCycleNumber|int - 1 }}/Everything/x86_64/" 2>&1 | /usr/local/bin/nag-once s3-updates-previous.sh 1d 2>&1'
> >          cron_file=s3-updates-previous.sh
> >    when: env != 'staging' and inventory_hostname.startswith('mm-backend01.')
> >    tags:
> > -- 
> > 1.8.3.1
> > 
> _______________________________________________
> infrastructure mailing list -- infrastructure@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to infrastructure-leave@xxxxxxxxxxxxxxxxxxxxxxx
> 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/infrastructure@xxxxxxxxxxxxxxxxxxxxxxx

Attachment: signature.asc
Description: PGP signature

_______________________________________________
infrastructure mailing list -- infrastructure@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to infrastructure-leave@xxxxxxxxxxxxxxxxxxxxxxx
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/infrastructure@xxxxxxxxxxxxxxxxxxxxxxx

[Index of Archives]     [Fedora Development]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]

  Powered by Linux