)]}'
{"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a9b8c7af7b8520a189a29305ce20034bf675d857","unresolved":false,"context_lines":[{"line_number":6240,"context_line":"            while (downtime_steps and"},{"line_number":6241,"context_line":"                   downtime[0] \u003e downtime_steps[0][0]):"},{"line_number":6242,"context_line":"                downtime_steps.pop(0)"},{"line_number":6243,"context_line":"            return (downtime_steps, downtime_config)"},{"line_number":6244,"context_line":"        return None"},{"line_number":6245,"context_line":""},{"line_number":6246,"context_line":"    def _clear_empty_migration(self, instance):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_a20a2a24","line":6243,"updated":"2016-06-29 12:45:25.000000000","message":"This is all rather confusing to follow. With the original code it made sense to compute the full list of steps upfront because it would never change.  Since you\u0027re allowing downtime to change while migration is running, IMHO, we should stop pre-computing the full list of steps.\n\nInstead, we should just calculate what the next step is, and not keep a full list of steps.","commit_id":"5514306d799d49a30e7c4f03cddddef033442dc1"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ecfc8b8dbb6e730fb2c8dc5b2df9e2d0fd60a395","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    # option value to its min/max."},{"line_number":326,"context_line":"    downtime \u003d max(downtime, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_MIN)"},{"line_number":327,"context_line":"    steps \u003d max(steps, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_STEPS_MIN)"},{"line_number":328,"context_line":"    delay \u003d max(delay, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_DELAY_MIN)"},{"line_number":329,"context_line":"    delay \u003d int(delay * data_gb)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    offset \u003d downtime / float(steps + 1)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b53c37e3","line":328,"updated":"2016-07-05 16:25:12.000000000","message":"Rather than refactoring the way we apply the max bounds, can you actually fix it the way that TODO item suggests, by moving it into the config opt declaration. Such a fix should be a separate pre-requisite patch","commit_id":"f84729d496a7bb74d31b08a7a15401c95b436fc7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"74258538bcd4a169841c37470995cb72fd5f8a5b","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    # option value to its min/max."},{"line_number":326,"context_line":"    downtime \u003d max(downtime, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_MIN)"},{"line_number":327,"context_line":"    steps \u003d max(steps, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_STEPS_MIN)"},{"line_number":328,"context_line":"    delay \u003d max(delay, nova.conf.libvirt.LIVE_MIGRATION_DOWNTIME_DELAY_MIN)"},{"line_number":329,"context_line":"    delay \u003d int(delay * data_gb)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    offset \u003d downtime / float(steps + 1)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_f3a224ad","line":328,"in_reply_to":"1aa78d24_b53c37e3","updated":"2016-07-06 13:46:52.000000000","message":"If I understand the comment correctly, that\u0027s a larger piece of work. Currently if you set a min on an IntOpt, then when Oslo reads a value below that, it will raise a ValueError. Whereas this code silently deals with it by raising the value to the min. So to deal with the TODO in the way it suggests, I\u0027d have to make oslo.config follow that behaviour.\n\nI\u0027m happy to move the mins to the configopts in a prereq patch but ValueErrors will be raised when the config is read which may perturb some deployers briefly.","commit_id":"f84729d496a7bb74d31b08a7a15401c95b436fc7"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ecfc8b8dbb6e730fb2c8dc5b2df9e2d0fd60a395","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    offset \u003d downtime / float(steps + 1)"},{"line_number":332,"context_line":"    base \u003d (downtime - offset) ** (1 / float(steps))"},{"line_number":333,"context_line":"    i \u003d elapsed // delay"},{"line_number":334,"context_line":"    newdowntime \u003d int(offset + base ** i)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    LOG.debug(\"Current downtime %(dt)s ms; elapsed %(elapsed)d s\""},{"line_number":337,"context_line":"              \"; step %(step)d/%(steps)d\","}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_5900ad01","line":334,"updated":"2016-07-05 16:25:12.000000000","message":"I\u0027d still like to see the calculation of next downtime in its own method, so it can be tested independently of the code which sets the downtime value on the guest.","commit_id":"f84729d496a7bb74d31b08a7a15401c95b436fc7"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"74258538bcd4a169841c37470995cb72fd5f8a5b","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    offset \u003d downtime / float(steps + 1)"},{"line_number":332,"context_line":"    base \u003d (downtime - offset) ** (1 / float(steps))"},{"line_number":333,"context_line":"    i \u003d elapsed // delay"},{"line_number":334,"context_line":"    newdowntime \u003d int(offset + base ** i)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    LOG.debug(\"Current downtime %(dt)s ms; elapsed %(elapsed)d s\""},{"line_number":337,"context_line":"              \"; step %(step)d/%(steps)d\","}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_f33864a2","line":334,"in_reply_to":"1aa78d24_5900ad01","updated":"2016-07-06 13:46:52.000000000","message":"Done","commit_id":"f84729d496a7bb74d31b08a7a15401c95b436fc7"}]}
