sapling/tests/test-infinitepush-replaybookmarksqueue-ignore-backup.t
Thomas Orozco cfaec40232 infinitepush: add replaybookmarksqueue
Summary:
This adds a new queue to replay scratch bookmark changes into Mononoke, which will allow us to replay them there.

There's not a lot going on in Mercurial (i.e. in this diff) to achieve this: we simply record bookmark changes as they happen in infinitepush, and allow for excluding some bookmarks. Specifically, we'll want to exclude backup branches, which we don't want to copy, since a) there's way too many of them and b) they're deprecated in favor of Commit Cloud.

Currently, this does not allow for replaying deletions. That would require further rework of how we delete things, since right now we do it my matching on bookmark names in the DB, which means the Python side of things is not aware of which bookmarks exactly were deleted. I'm not aware of how much use this is currently getting, but I'll research that and add it in if necessary.

Finally, one thing that's worth calling out here is the `bookmark_hash` column in this table. This is here in case we need to scale out the replication of bookmarks across multiple workers.

Indeed, we'll always want the replication of any given bookmark to happen sequentially, so we should perform it in a single worker. However, if we have too many bookmarks to replicate, then that could become a bottleneck. If that happens, we'll want to scale out workers, which we can do by having each worker operate on separate bookmarks.

The `bookmark_hash` column allows us to evenly divide up the space of bookmarks across workers if that becomes necessary (e.g. we could have 16 workers: one for each first hex digit of the hash). We won't use `bookmark_hash` immediately, but since it's very cheap to add (just compute one hash in Mercurial and put it in the table), I'm adding it in this diff now in case we need it later to avoid the friction of having to re-redeploy hg servers for that.

Reviewed By: StanislavGlebik

Differential Revision: D15778665

fbshipit-source-id: c34898c1a66e5bec08663a0887adca263222300d
2019-06-17 06:19:12 -07:00

61 lines
2.3 KiB
Perl

#if no-windows no-osx
$ setconfig extensions.treemanifest=!
$ mkcommit() {
> echo "$1" > "$1"
> hg add "$1"
> hg ci -d "0 0" -m "$1"
> }
$ . "$TESTDIR/infinitepush/library.sh"
$ setupcommon
Configure the server
$ hg init server
$ cd server
$ setupsqlserverhgrc repo123
$ setupdb
$ enablereplaybookmarks
$ cd ..
It should backup many bookmarks
$ hg clone -q ssh://user@dummy/server client
$ cd client
$ setupsqlclienthgrc
$ mkcommit commit0
$ commit0="$(hg id -i)"
$ hg up -q "$commit0" && mkcommit commit1
$ hg up -q "$commit0" && mkcommit commit2
$ hg up -q "$commit0" && mkcommit commit3
$ hg cloud backup
backing up stack rooted at ace906b76ab4
remote: pushing 4 commits:
remote: ace906b76ab4 commit0
remote: b1e07bb9979c commit1
remote: 33701f08790f commit2
remote: db45a2d42cf6 commit3
commitcloud: backed up 4 commits
$ hg push -r . --to scratch/book --create
pushing to ssh://user@dummy/server
searching for changes
remote: pushing 2 commits:
remote: ace906b76ab4 commit0
remote: db45a2d42cf6 commit3
$ cd ..
Backups should be excluded
$ querysqlindex "SELECT * FROM nodestobundle;"
node bundle reponame
33701f08790f0e038ca262ddb72728754f60ec88 318c3749b9def132140c54c6f84e853855aa5042 repo123
ace906b76ab45ac794eb67142e1466725def57cb 318c3749b9def132140c54c6f84e853855aa5042 repo123
b1e07bb9979cf151ae6a05d0cd9008737c77dfea 318c3749b9def132140c54c6f84e853855aa5042 repo123
db45a2d42cf67d746ba59e17f09df3eb9e8c2f4c 318c3749b9def132140c54c6f84e853855aa5042 repo123
$ querysqlindex "SELECT reponame, synced, bookmark, node FROM replaybookmarksqueue;"
reponame synced bookmark node
repo123 0 scratch/book db45a2d42cf67d746ba59e17f09df3eb9e8c2f4c
$ querysqlindex "SELECT reponame, bookmark, node FROM bookmarkstonode ORDER BY node ASC;"
reponame bookmark node
repo123 infinitepush/backups/test/*/client/heads/33701f08790f0e038ca262ddb72728754f60ec88 33701f08790f0e038ca262ddb72728754f60ec88 (glob)
repo123 infinitepush/backups/test/*/client/heads/b1e07bb9979cf151ae6a05d0cd9008737c77dfea b1e07bb9979cf151ae6a05d0cd9008737c77dfea (glob)
repo123 infinitepush/backups/test/*/client/heads/db45a2d42cf67d746ba59e17f09df3eb9e8c2f4c db45a2d42cf67d746ba59e17f09df3eb9e8c2f4c (glob)
repo123 scratch/book db45a2d42cf67d746ba59e17f09df3eb9e8c2f4c
#endif