Deploy swh.loader.mercurial 2.1 in staging, and smoke test it with remote and local (archived from BitBucket) repositories
Description
| Status | Assigned | Task | ||
|---|---|---|---|---|
| Migrated | gitlab-migration | T3338 Load the archived bitbucket mercurial repositories | ||
| Migrated | gitlab-migration | T3337 Smoke test ingestion of bitbucket repositories with latest loader mercurial | ||
| Migrated | gitlab-migration | T3336 Deploy swh.loader.mercurial 2.1 in staging |
Event Timeline
So that's been done on Friday, and things seem to work in general, but there is a bunch of issues:
- loading the same origin again and again results in the snapshot flapping between two values; this has been noticed while loading the following repository: refugees/data/76/76f9bde3-96fb-40df-84e4-2a74536b5dec/main-repo.mercurial https://bitbucket.org/pbui/weaver. Archive contents: P1049
- loading repositories archived with the old loader makes the new loader break with duplicate nodeids in the extid table. That's... Pretty bad. Noticed this issue with https://foss.heptapod.net/mercurial/hgview, which is our "save code now" test repository for mercurial. Loader output: P1050
Reproduction for the duplicate nodeids in the extid table:
loader.yml
---
storage:
cls: pipeline
steps:
- cls: buffer
min_batch_size:
content: 1000
content_bytes: 52428800 # 50 MB
directory: 1000
revision: 1000
release: 1000
- cls: filter
- cls: postgresql
db: ""
objstorage:
cls: memoryInitialize database:
dropdb swh-test-hg; swh db create -d swh-test-hg storage; swh db init -d swh-test-hg storage
Load hgview with legacy loader:
PGDATABASE=swh-test-hg SWH_CONFIG_FILENAME=loader.yml swh --log-level=DEBUG loader run mercurial https://foss.heptapod.net/mercurial/hgview
Then load hvgiew with the new loader:
PGDATABASE=swh-test-hg SWH_CONFIG_FILENAME=~/work/swh-environment/scratch/loader.db.yml swh --log-level=DEBUG loader run mercurial_from_disk https://foss.heptapod.net/mercurial/hgview
The first *two* loads with the new loader complete successfully, and the third load fails with:
WARNING:swh.core.cli:Could not load subcommand scanner: No package metadata was found for swh-scanner
DEBUG:swh.loader.cli:ctx: <click.core.Context object at 0x7f5c7e87db50>
DEBUG:swh.core.config:Loading config file /home/nicolasd/work/swh-environment/scratch/loader.db.yml
DEBUG:swh.loader.cli:config_file: /home/nicolasd/work/swh-environment/scratch/loader.db.yml
DEBUG:swh.loader.cli:config:
DEBUG:swh.loader.cli:kw: {}
DEBUG:swh.loader.cli:registry: {'task_modules': ['swh.loader.mercurial.tasks_from_disk'], 'loader': <class 'swh.loader.mercurial.from_disk.HgLoaderFromDisk'>}
DEBUG:swh.loader.cli:loader class: <class 'swh.loader.mercurial.from_disk.HgLoaderFromDisk'>
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
INFO:swh.loader.mercurial.LoaderFromDisk:Load origin 'https://foss.heptapod.net/mercurial/hgview' with type 'hg'
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.loader.mercurial.LoaderFromDisk:Cloning https://foss.heptapod.net/mercurial/hgview to None with timeout 7200 seconds
requesting all changes
adding changesets
adding manifests
adding file changes
added 1245 changesets with 2634 changes to 312 files
new changesets 7bf307e75523:6cd8ebdbc158
INFO:swh.loader.mercurial.LoaderFromDisk:New revisions found: 5
ERROR:swh.loader.mercurial.LoaderFromDisk:Loading failure, updating to `failed` status
Traceback (most recent call last):
File "/home/nicolasd/work/swh-environment/swh-loader-core/swh/loader/core/loader.py", line 339, in load
self.store_data()
File "/home/nicolasd/work/swh-environment/swh-loader-mercurial/swh/loader/mercurial/from_disk.py", line 332, in store_data
self.store_revision(repo[rev])
File "/home/nicolasd/work/swh-environment/swh-loader-mercurial/swh/loader/mercurial/from_disk.py", line 485, in store_revision
parents=self.get_revision_parents(rev_ctx),
File "/home/nicolasd/work/swh-environment/swh-loader-mercurial/swh/loader/mercurial/from_disk.py", line 432, in get_revision_parents
revision_id = self.get_revision_id_from_hg_nodeid(parent_hg_nodeid)
File "/home/nicolasd/work/swh-environment/swh-loader-mercurial/swh/loader/mercurial/from_disk.py", line 414, in get_revision_id_from_hg_nodeid
assert len(from_storage) == 1, msg % (hg_nodeid, len(from_storage))
AssertionError: Expected 1 match from storage for hg node b"\t\x91j\xa0L\xf5\xc8\xb4?y\xa6\xe3\xa8'\x14\xa6\x9c@?\x14", got 2
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.core.statsd:Error submitting statsd packet. Dropping the packet and closing the socket.
DEBUG:swh.loader.mercurial.LoaderFromDisk:Cleanup up repository /tmp/swh.loader.mercurial.from_diskedakj9pt-177021
{'status': 'failed'}After packaging swh.loader.mercurial 1.1 with @Alphare 's changes, all seems well on the staging environment (at least the inconsistencies I had noticed are not there anymore).
I've now mounted the bitbucket archive on a staging worker, and I'll be running a larger scale test over more archived bitbucket repositories over the weekend, to see if we're looking good to deploy this further.
base_dir=/srv/storage/space/mirrors/boatbucket tail -n +10000 $base_dir/mapping-to-repos.txt | head -10000 | while read dir url; do repo_dir="$base_dir/$dir" visit_date=`stat -c %z $repo_dir/.hg/blackbox.log | sed -E 's/ \+0000/+0000/'` SWH_CONFIG_FILENAME=/etc/softwareheritage/loader_mercurial.yml swh --log-level=DEBUG loader run mercurial_from_disk $url directory=$repo_dir visit_date="\"$visit_date\"" done 2>&1 | tee -a bitbucket-archive.2.log
After the weekend, the loader ran a few thousand loading tasks (out of 235k total). Out of those, only 2 failed for already known concurrency reasons. We should be good to go to production on this loader.
Now that the branch structure has landed, I've deployed this latest version. After some cleanup of the duplicate extids left over from an earlier deployment, everything seems to be fine and the loader is ready for production.
For history purpose readabillty, this must bev2.1 git-patched version (not a release per say).
A more recent version release which is a tag v2.1.0 [1] has been done built with the work
solving the extid version inconsistency issue @olasd started.
[1] https://forge.softwareheritage.org/source/swh-loader-mercurial/history/master/;v2.1.0