The place to look here is `lib/lp/archivepublisher/config.py`. It's
unreasonably complex for historical reasons, but if you boil it down, it
_mostly_ uses directories under `ppa_config.root` or `ppa_config.private_root`
in the PPA case - all the key directories such as `distsroot` and `poolroot`
end up under there. However, `temproot` ends up under a path derived from the
`PublisherConfig` table.
Up to now, this mostly hasn't mattered. It's only temporary, as the name
implies: files get dropped in there briefly until they're renamed into place in
wherever they're actually supposed to live.
Until very recently, Ubuntu's `PublisherConfig.root_dir` in production was
"/srv/launchpad.net/ubuntu-archive/", and hence `temproot` was
"/srv/launchpad.net/ubuntu-archive/ubuntu-temp". This apparently existed on
the PPA publisher and was on the same filesystem as
`ppa_config.{root,private_root}`, so all was well.
However, because one of my early design decisions for our charms was to use
"/srv/launchpad/" for everything rather than having things like
"/srv/launchpad.net/", "/srv/staging.launchpad.net/", etc. depending on the
application and environment, having "/srv/launchpad.net/" hardcoded in the
database was problematic, especially for migration; we ran into this when
deploying the qastaging ftpmaster. I changed Launchpad to automatically
prepend `config.archivepublisher.archives_dir` to `PublisherConfig.root_dir`,
set that to appropriate values in various places, and changed the database to
drop the "/srv/launchpad.net/" prefix. But this caused the production outage
that you can see in
https://chat.canonical.com/canonical/pl/gfs13ina87rfzc9xrx1ncuf8zh, in
particular:
OSError: [Errno 18] Invalid cross-device link:
'/var/tmp/archives/ubuntu-archive/ubuntu-temp/temp-download.3z8mk9bd' ->
'/srv/launchpad.net/ppa-archive/ubuntu-elisp/ppa/ubuntu/pool/main/e/emacs-snapshot/emacs-snapshot_107161-dd818ed821f~ubuntu20.04.1.tar.gz'
I fixed the legacy PPA publisher deployment in
https://code.launchpad.net/~cjwatson/lp-production-configs/ppa-archives-dir/+merge/450824,
and I think we should do the same here. `temproot` needs to end up somewhere
under `data_dir`, since we intend to mount that as a separate filesystem. The
reason I went for creating a new subdirectory of `data_dir` was that I was a
little concerned that if we're building the `temproot` path from a combination
of `config.archivepublisher.archives_dir` and a database column then it might
be possible to accidentally collide with something else; a subdirectory seemed
like a simple way to avoid that problem without having to think about it too
hard.
--
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/450825
Your team Launchpad code reviewers is requested to review the proposed merge of
~cjwatson/launchpad:charm-ppa-publisher-archives-dir into launchpad:master.
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help : https://help.launchpad.net/ListHelp