From 1d89acf6985d3858f57d2b3ebd551b63d0c298ce Mon Sep 17 00:00:00 2001 From: Rusty Bird Date: Fri, 28 Jun 2019 10:29:26 +0000 Subject: [PATCH] app: setup_pools() must be a coroutine This is needed as a consequence of d8b6d3ef ("Make add_pool/remove_pool coroutines, allow Pool.{setup,destroy} as coroutines"), but there hasn't been any problem so far because no storage driver implemented pool setup() as a coroutine. --- qubes/app.py | 5 +++-- qubes/tests/api_admin.py | 2 +- qubes/tools/qubes_create.py | 6 ++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/qubes/app.py b/qubes/app.py index 07353b4b..9f6b4332 100644 --- a/qubes/app.py +++ b/qubes/app.py @@ -1242,10 +1242,11 @@ class Qubes(qubes.PropertyHolder): raise KeyError(label) + @asyncio.coroutine def setup_pools(self): """ Run implementation specific setup for each storage pool. """ - for pool in self.pools.values(): - pool.setup() + yield from qubes.utils.void_coros_maybe( + pool.setup() for pool in self.pools.values()) @asyncio.coroutine def add_pool(self, name, **kwargs): diff --git a/qubes/tests/api_admin.py b/qubes/tests/api_admin.py index 8cd99969..ac577048 100644 --- a/qubes/tests/api_admin.py +++ b/qubes/tests/api_admin.py @@ -60,7 +60,7 @@ class AdminAPITestCase(qubes.tests.QubesTestCase): app = qubes.Qubes('/tmp/qubes-test.xml', load=False) app.vmm = unittest.mock.Mock(spec=qubes.app.VMMConnection) app.load_initial_values() - app.setup_pools() + self.loop.run_until_complete(app.setup_pools()) app.default_kernel = '1.0' app.default_netvm = None self.template = app.add_new_vm('TemplateVM', label='black', diff --git a/qubes/tools/qubes_create.py b/qubes/tools/qubes_create.py index 56e66c7f..3fc391c4 100644 --- a/qubes/tools/qubes_create.py +++ b/qubes/tools/qubes_create.py @@ -20,6 +20,7 @@ '''qubes-create - Create new Qubes OS store''' +import asyncio import sys import qubes import qubes.tools @@ -37,8 +38,9 @@ def main(args=None): ''' args = parser.parse_args(args) - qubes.Qubes.create_empty_store(args.app, - offline_mode=args.offline_mode).setup_pools() + asyncio.get_event_loop().run_until_complete( + qubes.Qubes.create_empty_store( + args.app, offline_mode=args.offline_mode).setup_pools()) return 0