{"push_id":2869126643,"size":18,"distinct_size":18,"ref":"refs/heads/storage-improvements-mostly-reflink","head":"3396a607cdaf8879af5fa9aa5f0b6a3ce335acd6","before":"cf1ea5cee1dfbe718a3d5328f97cff3d951560c3","commits":[{"sha":"e138253cc1c765b6596d4e97501cc660c2b8fea5","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage/reflink: factor out _attempt_ficlone()","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/e138253cc1c765b6596d4e97501cc660c2b8fea5"},{"sha":"c03b0af493b3abdbf2a622934ecbbc8a5a9e35db","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage/reflink: native FICLONE in _copy_file() happy path\n\nAvoid a subprocess launch, and distinguish reflink vs. fallback copy in\nthe log.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/c03b0af493b3abdbf2a622934ecbbc8a5a9e35db"},{"sha":"f827a64479606158f9e125c85aa4c4f8c48efb62","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage/reflink: run synchronous volume methods in executor\n\nConvert create(), verify(), remove(), start(), stop(), revert(),\nresize(), and import_volume() into coroutine methods, via a decorator\nthat runs them in the event loop's thread-based default executor.\n\nThis reduces UI hangs by unblocking the event loop, and can e.g. speed\nup VM starts by starting multiple volumes in parallel.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/f827a64479606158f9e125c85aa4c4f8c48efb62"},{"sha":"49290cbb91a07e33042a513cac41d1d2122c3282","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage/reflink: is_reflink_supported() -> is_supported()","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/49290cbb91a07e33042a513cac41d1d2122c3282"},{"sha":"13451bc5c70b0fa38400e3390db8a8d7f646c6ff","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage: fix docstrings","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/13451bc5c70b0fa38400e3390db8a8d7f646c6ff"},{"sha":"89dbe3543964d0fcb5fa58ca575b97c1fb0be1ad","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage: insert missing NotImplementedError in Volume.stop()","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/89dbe3543964d0fcb5fa58ca575b97c1fb0be1ad"},{"sha":"08feb755280a7c54c2ebdacd6b988e601f6cfbd7","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage: remove broken default parameter from isodate()\n\nWith that syntax, the default timestamp would have been from the time of\nthe function's definition (not invocation). But all callers are passing\nan explicit timestamp anyway.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/08feb755280a7c54c2ebdacd6b988e601f6cfbd7"},{"sha":"12b18a9e738a534251af2802494ec4b570b0ce4f","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage: fix search_pool_containing_dir()\n\nCanonicalize both directories, resolving symlink components. Compare\nwith commonpath() instead of startswith(), because /foo doesn't contain\n/foobar.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/12b18a9e738a534251af2802494ec4b570b0ce4f"},{"sha":"92b63d170b39a2da18bca0978c78476541d382b8","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"storage: factor out _wait_and_reraise(); fix clone/create\n\n_wait_and_reraise() is similar to asyncio.gather(), but it preserves the\ncurrent behavior of waiting for all futures and only _then_ reraising\nthe first exception (if there is any) in line.\n\nAlso switch Storage.create() and Storage.clone() to _wait_and_reraise().\nPreviously, they called asyncio.wait() and implicitly swallowed all\nexceptions.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/92b63d170b39a2da18bca0978c78476541d382b8"},{"sha":"981b4201edb7af3a066b51e081937da9696a53e3","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tools/qubes-create: fix docstring","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/981b4201edb7af3a066b51e081937da9696a53e3"},{"sha":"d050a5b133fd160bfee48cc681d71cbd31307868","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"app: uncouple pool setup from loading initial configuration\n\nAnd ensure that setup is called on every type of these pools, not just\nlvm_thin.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/d050a5b133fd160bfee48cc681d71cbd31307868"},{"sha":"f3f770991014700ea0d7e4530d1c4afd80332056","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"app: create /var/lib/qubes as file-reflink if supported\n\nUse the file-reflink storage driver if /var/lib/qubes is on a filesystem\nthat supports reflinks, e.g. when the btrfs layout was selected in\nAnaconda. If it doesn't support reflinks (or if detection fails, e.g. in\nan unprivileged test environment), use 'file' as before.","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/f3f770991014700ea0d7e4530d1c4afd80332056"},{"sha":"e2f8e80e3289fa55c1d15af172b60482b41f069a","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests: delete orphaned Makefile","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/e2f8e80e3289fa55c1d15af172b60482b41f069a"},{"sha":"1d9880912332228abafbbdcb4a4315cdafdc61b4","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests/integ/backupcompatibility: Storage.verify() is a coro","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/1d9880912332228abafbbdcb4a4315cdafdc61b4"},{"sha":"de69d23863623a6976923034641faba9c4253b26","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests/integ/basic: use export() in get_rootimg_checksum()\n\nvolume.path and volume.export() refer to the same thing in lvm_thin and\n'file', but not in file-reflink (where volume.path is the -dirty.img,\nwhich doesn't exist if the volume is not started).","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/de69d23863623a6976923034641faba9c4253b26"},{"sha":"540834e22f61363b84fb9447267efd4a559d0a41","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests/integ/storage: add file-reflink integration tests","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/540834e22f61363b84fb9447267efd4a559d0a41"},{"sha":"97deb5fa202fe5a30362a4bc139d4573573a37b9","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests/storage_reflink: test some file-reflink helpers\n\nTested:\n\n    - _copy_file()\n    - _create_sparse_file()\n    - _resize_file()\n    - _update_loopdev_sizes()\n\nSmoke tested by calls from the functions above:\n\n    - _replace_file()\n    - _rename_file()\n    - _make_dir()\n    - _fsync_dir()","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/97deb5fa202fe5a30362a4bc139d4573573a37b9"},{"sha":"3396a607cdaf8879af5fa9aa5f0b6a3ce335acd6","author":{"name":"Rusty Bird","email":"061cdeb8921d5f574aba7a8216be695b40f317f0@net-c.com"},"message":"tests/app: test varlibqubes pool driver selection","distinct":true,"url":"https://api.github.com/repos/rustybird/qubes-core-admin/commits/3396a607cdaf8879af5fa9aa5f0b6a3ce335acd6"}]}
{"actor":{"display_login":"rustybird"}}