Skip to content

Commit

Permalink
storage: pass a copy of volume_config to pool.init_volume
Browse files Browse the repository at this point in the history
Avoid local modification in a pool's init_volume influence
vm.volume_config. Currently every pool driver replaces
volume_config['pool'] with a pool object (instead of name) and it leads
to confusing cases where depending on start stage, it is sometimes an
object and sometimes a string.
Additionally, some pool drivers may modify volume_config in unexpected
way - for example test pool driver removes 'pool' entry entirely. Avoid
this fragile interface by giving pool driver a copy of volume_config,
instead of vm.volume_config directly.

Note one side effect is that 'vid' (and other pool-specific parameters)
is not set into vm.volume_config directly after creating a VM, but
possibly only after loading from XML. This should not be an issue in
theory (no core code should expect it), but if some place use
volume_config instead of Volume instance for getting pool-specific
options, it should be fixed.

(cherry picked from commit d9d55b0)
  • Loading branch information
marmarek committed Oct 22, 2020
1 parent 90043b0 commit cc32575
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion qubes/storage/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ def init_volume(self, name, volume_config):
if 'internal' in volume_config:
# migrate old config
del volume_config['internal']
volume = pool.init_volume(self.vm, volume_config)
volume = pool.init_volume(self.vm, volume_config.copy())
self.vm.volumes[name] = volume
return volume

Expand Down

0 comments on commit cc32575

Please sign in to comment.