Francesco Romani has uploaded a new change for review. Change subject: migration: validate progress fields from libvirt ......................................................................
migration: validate progress fields from libvirt migration monitoring and progress report consume quite some data from libvirt virDomainGetJobStats(). According to the libvirt documentation, all the data we use are supposed to be unsigned integer, but up until now we blindly trust this. This patch adds validation to make sure we don't receive negative data. Should this happen, we raise ValueError. Change-Id: I6de262ce30f32e908a65d5d44fe8499f6951aa63 Signed-off-by: Francesco Romani <[email protected]> --- M vdsm/virt/migration.py 1 file changed, 21 insertions(+), 17 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/78/56378/1 diff --git a/vdsm/virt/migration.py b/vdsm/virt/migration.py index 30ed6d4..f5dcd1f 100644 --- a/vdsm/virt/migration.py +++ b/vdsm/virt/migration.py @@ -660,23 +660,27 @@ @classmethod def from_job_stats(cls, stats): - return cls( - stats['type'], - stats[libvirt.VIR_DOMAIN_JOB_TIME_ELAPSED], - stats[libvirt.VIR_DOMAIN_JOB_DATA_TOTAL], - stats[libvirt.VIR_DOMAIN_JOB_DATA_PROCESSED], - stats[libvirt.VIR_DOMAIN_JOB_DATA_REMAINING], - stats[libvirt.VIR_DOMAIN_JOB_MEMORY_TOTAL], - stats[libvirt.VIR_DOMAIN_JOB_MEMORY_PROCESSED], - stats[libvirt.VIR_DOMAIN_JOB_MEMORY_REMAINING], - stats[libvirt.VIR_DOMAIN_JOB_MEMORY_BPS], - stats[libvirt.VIR_DOMAIN_JOB_MEMORY_CONSTANT], - stats[libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES], - # available since libvirt 1.3 - stats.get('memory_dirty_rate', -1), - # available since libvirt 1.3 - stats.get('memory_iteration', -1), - ) + fields = [stats['type']] + for key in (libvirt.VIR_DOMAIN_JOB_TIME_ELAPSED, + libvirt.VIR_DOMAIN_JOB_DATA_TOTAL, + libvirt.VIR_DOMAIN_JOB_DATA_PROCESSED, + libvirt.VIR_DOMAIN_JOB_DATA_REMAINING, + libvirt.VIR_DOMAIN_JOB_MEMORY_TOTAL, + libvirt.VIR_DOMAIN_JOB_MEMORY_PROCESSED, + libvirt.VIR_DOMAIN_JOB_MEMORY_REMAINING, + libvirt.VIR_DOMAIN_JOB_MEMORY_BPS, + libvirt.VIR_DOMAIN_JOB_MEMORY_CONSTANT, + libvirt.VIR_DOMAIN_JOB_COMPRESSION_BYTES): + value = stats[key] + if value < 0: + raise ValueError('bad value for %r: %r', key, value) + fields.append(value) + + # optional fields available since libvirt 1.3 + for key in ('memory_dirty_rate', 'memory_iteration'): + fields.append(stats.get(key, -1)) + + return cls(*fields) @property def ongoing(self): -- To view, visit https://gerrit.ovirt.org/56378 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6de262ce30f32e908a65d5d44fe8499f6951aa63 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Francesco Romani <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
