Browse Source

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.
Rusty Bird 4 years ago
parent
commit
1d89acf698
3 changed files with 8 additions and 5 deletions
  1. 3 2
      qubes/app.py
  2. 1 1
      qubes/tests/api_admin.py
  3. 4 2
      qubes/tools/qubes_create.py

+ 3 - 2
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):

+ 1 - 1
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',

+ 4 - 2
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