tests/test-remotefilelog-gcrepack.t
author Augie Fackler <augie@google.com>
Wed, 03 Oct 2018 23:47:43 -0400
changeset 40505 b6b2a3d22344
parent 40495 3a333a582d7b
child 40506 10c10da14c5d
permissions -rw-r--r--
remotefilelog: avoid hard-coding pack names in tests I'm about to alter the pack format, which alters the content-addressed name of the pack file. In order to reduce my own confusion I found it helpful to use an ls | head pipeline since we always want to inspect the newest pack. Differential Revision: https://phab.mercurial-scm.org/D4942

  $ PYTHONPATH=$TESTDIR/..:$PYTHONPATH
  $ export PYTHONPATH

  $ . "$TESTDIR/remotefilelog-library.sh"

  $ hginit master
  $ cd master
  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > server=True
  > EOF
  $ echo x > x
  $ hg commit -qAm x
  $ echo y > y
  $ rm x
  $ hg commit -qAm DxAy
  $ echo yy > y
  $ hg commit -qAm y
  $ cd ..

  $ hgcloneshallow ssh://user@dummy/master shallow -q
  1 files fetched over 1 fetches - (1 misses, 0.00% hit ratio) over *s (glob)

# Set the prefetchdays config to zero so that all commits are prefetched
# no matter what their creation date is.
  $ cd shallow
  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > prefetchdays=0
  > EOF
  $ cd ..

# Prefetch all data and repack

  $ cd shallow
  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > bgprefetchrevs=all()
  > EOF

  $ hg prefetch
  2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
  $ hg repack
  $ sleep 0.5
  $ hg debugwaitonrepack >/dev/null 2>%1

  $ find $CACHEDIR | sort | grep ".datapack\|.histpack"
  $TESTTMP/hgcache/master/packs/9a2ea858fe2967db9b6ea4c0ca238881cae9d6eb.histpack
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4.datapack

# Ensure that all file versions were prefetched

  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4:
  x:
  Node          Delta Base    Delta Length  Blob Size
  1406e7411862  000000000000  2             2
  
  Total:                      2             2         (0.0% bigger)
  y:
  Node          Delta Base    Delta Length  Blob Size
  50dbc4572b8e  000000000000  3             3
  076f5e2225b3  50dbc4572b8e  14            2
  
  Total:                      17            5         (240.0% bigger)

# Test garbage collection during repack

  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > bgprefetchrevs=tip
  > gcrepack=True
  > nodettl=86400
  > EOF

  $ hg repack
  $ sleep 0.5
  $ hg debugwaitonrepack >/dev/null 2>%1

  $ find $CACHEDIR | sort | grep ".datapack\|.histpack"
  $TESTTMP/hgcache/master/packs/05baa499c6b07f2bf0ea3d2c8151da1cb86f5e33.datapack
  $TESTTMP/hgcache/master/packs/9a2ea858fe2967db9b6ea4c0ca238881cae9d6eb.histpack

# Ensure that file 'x' was garbage collected. It should be GCed because it is not in the keepset
# and is old (commit date is 0.0 in tests). Ensure that file 'y' is present as it is in the keepset.

  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
  $TESTTMP/hgcache/master/packs/05baa499c6b07f2bf0ea3d2c8151da1cb86f5e33:
  y:
  Node          Delta Base    Delta Length  Blob Size
  50dbc4572b8e  000000000000  3             3
  
  Total:                      3             3         (0.0% bigger)

# Prefetch all data again and repack for later garbage collection

  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > bgprefetchrevs=all()
  > EOF

  $ hg prefetch
  2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
  $ hg repack
  $ sleep 0.5
  $ hg debugwaitonrepack >/dev/null 2>%1

  $ find $CACHEDIR | sort | grep ".datapack\|.histpack"
  $TESTTMP/hgcache/master/packs/9a2ea858fe2967db9b6ea4c0ca238881cae9d6eb.histpack
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4.datapack

# Ensure that all file versions were prefetched

  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4:
  x:
  Node          Delta Base    Delta Length  Blob Size
  1406e7411862  000000000000  2             2
  
  Total:                      2             2         (0.0% bigger)
  y:
  Node          Delta Base    Delta Length  Blob Size
  50dbc4572b8e  000000000000  3             3
  076f5e2225b3  50dbc4572b8e  14            2
  
  Total:                      17            5         (240.0% bigger)

# Test garbage collection during repack. Ensure that new files are not removed even though they are not in the keepset
# For the purposes of the test the TTL of a file is set to current time + 100 seconds. i.e. all commits in tests have
# a date of 1970 and therefore to prevent garbage collection we have to set nodettl to be farther from 1970 than we are now.

  $ cat >> .hg/hgrc <<EOF
  > [remotefilelog]
  > bgprefetchrevs=
  > nodettl=$(($(date +%s) + 100))
  > EOF

  $ hg repack
  $ sleep 0.5
  $ hg debugwaitonrepack >/dev/null 2>%1

  $ find $CACHEDIR | sort | grep ".datapack\|.histpack"
  $TESTTMP/hgcache/master/packs/9a2ea858fe2967db9b6ea4c0ca238881cae9d6eb.histpack
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4.datapack

# Ensure that all file versions were prefetched

  $ hg debugdatapack `ls -ct $TESTTMP/hgcache/master/packs/*.datapack | head -n 1`
  $TESTTMP/hgcache/master/packs/f7a942a6e4673d2c7b697fdd926ca2d153831ca4:
  x:
  Node          Delta Base    Delta Length  Blob Size
  1406e7411862  000000000000  2             2
  
  Total:                      2             2         (0.0% bigger)
  y:
  Node          Delta Base    Delta Length  Blob Size
  50dbc4572b8e  000000000000  3             3
  076f5e2225b3  50dbc4572b8e  14            2
  
  Total:                      17            5         (240.0% bigger)