)]}'
{"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"18e66c86457940664c7c35c989e4bb79b0d304dc","unresolved":false,"context_lines":[{"line_number":6230,"context_line":"        else:"},{"line_number":6231,"context_line":"            if expect_result \u003d\u003d self.EXPECT_ABORT:"},{"line_number":6232,"context_line":"                self.assertTrue(mock_abort.called,"},{"line_number":6233,"context_line":"                                \u0027abortJob not called when abort expected\u0027)"},{"line_number":6234,"context_line":"            else:"},{"line_number":6235,"context_line":"                self.assertFalse(mock_abort.called,"},{"line_number":6236,"context_line":"                                 \u0027abortJob called when failure expected\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_49546f20","line":6233,"updated":"2015-05-26 12:29:04.000000000","message":"Take the \"not\" from this sentence....","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"18e66c86457940664c7c35c989e4bb79b0d304dc","unresolved":false,"context_lines":[{"line_number":6233,"context_line":"                                \u0027abortJob not called when abort expected\u0027)"},{"line_number":6234,"context_line":"            else:"},{"line_number":6235,"context_line":"                self.assertFalse(mock_abort.called,"},{"line_number":6236,"context_line":"                                 \u0027abortJob called when failure expected\u0027)"},{"line_number":6237,"context_line":"            self.assertFalse(fake_post_method.called,"},{"line_number":6238,"context_line":"                             \u0027Post method called when success not expected\u0027)"},{"line_number":6239,"context_line":"            fake_recover_method.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_a92403c6","line":6236,"updated":"2015-05-26 12:29:04.000000000","message":"...and put it in this sentence.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"18e66c86457940664c7c35c989e4bb79b0d304dc","unresolved":false,"context_lines":[{"line_number":6406,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6407,"context_line":"            host.DomainJobInfo("},{"line_number":6408,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6409,"context_line":"            host.DomainJobInfo("},{"line_number":6410,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6411,"context_line":"            host.DomainJobInfo("},{"line_number":6412,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_9be62e43","line":6409,"updated":"2015-05-26 12:29:04.000000000","message":"This one and onwards are not necessary as the job should have been aborted between the 3rd and 4th entries.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7e75ae870ef82abeafb2f150e0c5e4bafb56e910","unresolved":false,"context_lines":[{"line_number":6406,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6407,"context_line":"            host.DomainJobInfo("},{"line_number":6408,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6409,"context_line":"            host.DomainJobInfo("},{"line_number":6410,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6411,"context_line":"            host.DomainJobInfo("},{"line_number":6412,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_5b9436e7","line":6409,"in_reply_to":"7a016987_9be62e43","updated":"2015-05-26 12:38:58.000000000","message":"Sure, they are harmless though. By leaving them in though, we can detect if the timeout was not handled and the code went on to report cancelled instead of aborted.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":9420,"name":"Matthew Gilliard","email":"matthew.gilliard@hp.com","username":"gilliard"},"change_message_id":"18e66c86457940664c7c35c989e4bb79b0d304dc","unresolved":false,"context_lines":[{"line_number":6439,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6440,"context_line":"            host.DomainJobInfo("},{"line_number":6441,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6442,"context_line":"            host.DomainJobInfo("},{"line_number":6443,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6444,"context_line":"            host.DomainJobInfo("},{"line_number":6445,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_5b3676b5","line":6442,"updated":"2015-05-26 12:29:04.000000000","message":"Ditto the above comment.  Also, it\u0027s difficult to see how this is testing what we want it to unless we include data_remaining in these fake_job_info records.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7e75ae870ef82abeafb2f150e0c5e4bafb56e910","unresolved":false,"context_lines":[{"line_number":6439,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6440,"context_line":"            host.DomainJobInfo("},{"line_number":6441,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6442,"context_line":"            host.DomainJobInfo("},{"line_number":6443,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"},{"line_number":6444,"context_line":"            host.DomainJobInfo("},{"line_number":6445,"context_line":"                type\u003dfakelibvirt.VIR_DOMAIN_JOB_UNBOUNDED),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_3b64da47","line":6442,"in_reply_to":"7a016987_5b3676b5","updated":"2015-05-26 12:38:58.000000000","message":"I could add non-zero data to this to make it clearer, but the code works regardless as it doesn\u0027t see any progress.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"2af4b26c834dbbfae2a195d0ab5a8ea3042fe856","unresolved":false,"context_lines":[{"line_number":174,"context_line":"               default\u003d64,"},{"line_number":175,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":176,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":177,"context_line":"                    \u0027operation. Value is per GiB of guest RAM\u0027),"},{"line_number":178,"context_line":"    cfg.IntOpt(\u0027live_migration_progress_timeout\u0027,"},{"line_number":179,"context_line":"               default\u003d150,"},{"line_number":180,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to make forward \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_5e2387a7","line":177,"updated":"2015-05-19 21:21:43.000000000","message":"add in \"with minimum of 2GB\"?\n\nAlso, the default values seem a bit odd.  We\u0027re going to wait 128 sec to complete transferring data, but we\u0027ll wait 150 seconds to make any forward progress at all?  Shouldn\u0027t the forward progress timeout be smaller than the completion timeout?","commit_id":"73099b980c4e3fae3b019b8033226d94d15f679e"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"c1c05d14ce4e4e1013a1fab0ec23051d52eb0926","unresolved":false,"context_lines":[{"line_number":174,"context_line":"               default\u003d64,"},{"line_number":175,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":176,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":177,"context_line":"                    \u0027operation. Value is per GiB of guest RAM\u0027),"},{"line_number":178,"context_line":"    cfg.IntOpt(\u0027live_migration_progress_timeout\u0027,"},{"line_number":179,"context_line":"               default\u003d150,"},{"line_number":180,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to make forward \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_3aefa2ea","line":177,"in_reply_to":"7a016987_1a3991a4","updated":"2015-05-20 17:08:08.000000000","message":"For a small instance we\u0027ll use a minimum of 2GiB for accounting, right? 64sec/GiB * 2GB \u003d 128 sec for the completion timeout, which is smaller than the default of 150 for the progress timeout.","commit_id":"73099b980c4e3fae3b019b8033226d94d15f679e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b450d7c97f64a4aa6c46d96107803376e6abac74","unresolved":false,"context_lines":[{"line_number":174,"context_line":"               default\u003d64,"},{"line_number":175,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":176,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":177,"context_line":"                    \u0027operation. Value is per GiB of guest RAM\u0027),"},{"line_number":178,"context_line":"    cfg.IntOpt(\u0027live_migration_progress_timeout\u0027,"},{"line_number":179,"context_line":"               default\u003d150,"},{"line_number":180,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to make forward \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_9a00d667","line":177,"in_reply_to":"7a016987_3aefa2ea","updated":"2015-05-20 17:13:50.000000000","message":"I meant to say that for guests /larger/ that 2 GB the completion timeout will be greater than the progess timeout. Essentially what this means is that for small guests, the logic for detecting stuck migrations won\u0027t activate by default, as we\u0027ll have already aborted the migration due to the overall timeout. This is fine - its just an arbitrary policy decision after all. I didn\u0027t feel I wanted to change the defaults over what oVirt has already used for this logic.  The admin can reduce the progress timeout, or increase the completion timeout if they desire. With real world feedback from usage of Liberty we may choose to change our defaults at a later date.","commit_id":"73099b980c4e3fae3b019b8033226d94d15f679e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"6ae5bd424174e1a50fbb4d4e942c54398f5a3ffe","unresolved":false,"context_lines":[{"line_number":174,"context_line":"               default\u003d64,"},{"line_number":175,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":176,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":177,"context_line":"                    \u0027operation. Value is per GiB of guest RAM\u0027),"},{"line_number":178,"context_line":"    cfg.IntOpt(\u0027live_migration_progress_timeout\u0027,"},{"line_number":179,"context_line":"               default\u003d150,"},{"line_number":180,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to make forward \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_1a3991a4","line":177,"in_reply_to":"7a016987_5e2387a7","updated":"2015-05-20 09:10:32.000000000","message":"Note that the completion timeout is scaled by the total amount of guest RAM. The progress timeout is a non-scaled value. So given the 2 GB minimum scaling, completion timeout will be greater than progress timeout.","commit_id":"73099b980c4e3fae3b019b8033226d94d15f679e"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"81cb4a6071133ab168b9d16931dc7c03b368c9f7","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_1bc84c73","line":174,"updated":"2015-05-21 22:03:18.000000000","message":"Why is there no correlation between live_migration_completion_timeout and live_migration_downtime? It is confusing for me because without reading the code I would have no idea if maximum value for live migration downtime will be reached with specific live_migration_completion_timeout.\n\nAlso, why is there no lower bound for live migration completion timeout? Do we assume that even smallest VM will live migrate in 1 second?","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"a3bbedd9b4fd8d47ee98f500f6e4579348ed9d48","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_95076081","line":174,"in_reply_to":"7a016987_1bc84c73","updated":"2015-05-22 08:59:23.000000000","message":"It isn\u0027t really practical to infer one of the values from the other. The problem you describe is really a matter of documentation. Migration is a complex problem so we cant really expect admins to figure out the right thing just from reading the config file inline help. We\u0027ll need to properly document the whole setup elsewhere. In addition,as explained in the commit message I really don\u0027t want to invent something custom for openstack, when we can use this existing logic that has already proved practical \u0026 usable in oVirt","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"6ebf81b2ac71453627972d5df212a26da9368730","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_bb37f8fd","line":174,"in_reply_to":"7a016987_1bc84c73","updated":"2015-05-21 22:24:01.000000000","message":"While there is some correlation between  live_migration_completion_timeout and live_migration_downtime, it also depends on the rate of dirtying and the network bandwidth available which we may not know in advance.\n\nAs for lower bounds, with a 10Gbps link I think we can migrate an idle VM with 512MB of RAM in under a second.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7e75ae870ef82abeafb2f150e0c5e4bafb56e910","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_1b111e5e","line":174,"in_reply_to":"7a016987_2b6cbd06","updated":"2015-05-26 12:38:58.000000000","message":"Yes, that explanation is really a job for the docs - it isn\u0027t something that is easily described in individual help strings.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"2f959d42d5e41315bca9cfdb9fee15d78e929dbe","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_2b6cbd06","line":174,"in_reply_to":"7a016987_95076081","updated":"2015-05-22 20:45:33.000000000","message":"I do not expect anything custom, I like whole idea in its current state. My point is that it should be clear how these flags correlate. There should be no room for misunderstanding so it may speed up adoption of a new feature.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"68f8442924070029a0771dd9f65bb85a34364ba2","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_0f46c24e","line":174,"in_reply_to":"7a016987_bb37f8fd","updated":"2015-05-22 00:52:39.000000000","message":"I agree that we don\u0027t know about dirty pages, but there is correlation between these two options so why don\u0027t we just use it? Completion timeout shouldn\u0027t make live_migration_downtime option useless (OR we should inform in help message about this possibility). The most common reason that LM fails is that it starts but never ends and such thing does not help.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"4af833424062b41a20813bd6eeead2a438e0108f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_40879912","line":175,"updated":"2015-05-26 15:04:12.000000000","message":"I think that this configuration option should actually be a global driver configuration (nova/virt/driver.py).  At least as a start, the general timeout for the whole operation seems like something every driver should have available.\n\nI\u0027m working on the PowerVM driver (in StackForge currently) and I\u0027d like this conf option available.  Rather than re-implement, I\u0027d prefer it be part of nova/virt/driver.py.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"e41d773049cdb7870c706cea83a7f0cbbd430a1f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_49855a57","line":175,"in_reply_to":"7a016987_1d8b2720","updated":"2015-05-27 14:38:35.000000000","message":"XenAPI does support live migration, but XenServer contains various timeouts for the different stages of migration that shouldn\u0027t be coded in Nova.  A timeout for the whole process might be useful, but I can certainly imagine that we\u0027d want a different description of the value at least (for example, if transferring the disk then this can take a long time which is in addition to the final RAM transfer).  I\u0027m therefore not convinced that having this as a global value would be useable by XenAPI","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c0c3115bbeb25449acec5728bdcfb398f2d972e2","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_ea0f832c","line":175,"in_reply_to":"7a016987_40879912","updated":"2015-05-26 15:17:21.000000000","message":"I\u0027m rather wary of making this single parameter a standard across all hypervisors. This is just one setting out of 5 that are controlling libvirt live migration behaviour and their default values \u0026 semantics are all inter-related.  As such I think it is probably better for you to define your own parameters for PowerVM","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d9632de948d8f9a387fa4eebf69272435435d12d","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_1d8b2720","line":175,"in_reply_to":"7a016987_5ee659e9","updated":"2015-05-27 12:17:46.000000000","message":"At the moment the VMware driver does not support live migration. This is for a number of reasons but we are in the process of working on it. I do not think that having a common timeout is the way to go as it may all be specific per hypervisor. What would someone do if they had a hybrid setup and the behavior of the migrations is different. Would we want different timeouts?","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":8768,"name":"Chris Friesen","email":"chris.friesen@windriver.com","username":"cbf123"},"change_message_id":"e435d6539ca6a0ea21299546ff92711d15c58e2a","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_5ee659e9","line":175,"in_reply_to":"7a016987_ea0f832c","updated":"2015-05-26 17:15:27.000000000","message":"Not sure I agree. An overall live-migration timeout seems like something that actually would be useful across all drivers.  (I suppose it might be a problem if there were a hypervisor which simply couldn\u0027t abort a live migration once started, but that seems unlikely.)","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"0c08c5bf64f113ed1652392d4d99bb5cde38dd04","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":173,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":174,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":175,"context_line":"               default\u003d64,"},{"line_number":176,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":177,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":178,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_d01c786c","line":175,"in_reply_to":"7a016987_ea0f832c","updated":"2015-05-26 16:04:40.000000000","message":"OK.  We definitely can.  This one felt like an \u0027overall, overarching\u0027 parameter, where as the others felt more libvirt specific.\n\nWe will at least keep the parameter the same and information within it, so that operators have consistency.","commit_id":"52422fefb23352e5562ec441c6df871c8ad57aca"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"09716d9b24cf589cb5c1cd618ba3c231187296e5","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":174,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":175,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":176,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":177,"context_line":"               default\u003d800,"},{"line_number":178,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":179,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5afe65bd_143cf0c6","line":176,"updated":"2015-06-04 00:02:03.000000000","message":"There was a lot of discussion on this timeout and whether or not it makes sense to be common parameter across the drivers in the previous revision.\n\nThere seemed to be two threads.  First, there are many hypervisor specific parameters that can be used for tuning.  An example might be live_migration_uri or perhaps the bandwidth.  Those are very useful for administrators that are tuning greatly.  Those definitely need to be independent, hypervisor specific.\n\nThere are certain other parameters that tend to be more global.  An overall timeout, like the one introduced here, *could* fall into that category.\n\nI honestly feel as an administrator, that this new one would be the very first parameter I tune.\n\nIt is also important to note that while the parameter name may be common, it does not prevent the admin from using different timeouts for different compute hosts (that hybrid scenario that was discussed).  It simply provides consistency to admins.\n\nLastly, I do think Bob Ball has a point.  If we do name it the same, but it means different things to various hypervisors...then its not really the same.  If that\u0027s the case, then yeah, each hypervisor should have a different parameter name.\n\nHowever, I thought there was a libvirt migration where the disk is also transferred over the network (similar to what Bob indicated for Xen)?  Does this overall timeout take the disk transfer time into consideration?  If it does, then the description may need to be updated.  If it does not, do we anticipate a code change being needed?","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ea277ecbf1c9609ff8b14217b12644a8bbe76f9c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"                    \u0027of the migration downtime. Minimum delay is 10 seconds. \u0027"},{"line_number":174,"context_line":"                    \u0027Value is per GiB of guest RAM, with lower bound of a \u0027"},{"line_number":175,"context_line":"                    \u0027minimum of 2 GiB\u0027),"},{"line_number":176,"context_line":"    cfg.IntOpt(\u0027live_migration_completion_timeout\u0027,"},{"line_number":177,"context_line":"               default\u003d800,"},{"line_number":178,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to successfully \u0027"},{"line_number":179,"context_line":"                    \u0027complete transferring data before aborting the \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_f749f831","line":176,"in_reply_to":"5afe65bd_143cf0c6","updated":"2015-06-10 16:03:04.000000000","message":"Yes, we do really need to take into account disk size too. I was planning todo that as a separate commit, but thinking about it, from a functional pov it probably ought to be in this commit, otherwise we have an intermediate state where we\u0027d be timing out block migration too easily.","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa0e3971c4382b5844f7a1f26615df9a846929d7","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                    \u0027complete transferring data before aborting the \u0027"},{"line_number":180,"context_line":"                    \u0027operation. Value is per GiB of guest RAM, with lower \u0027"},{"line_number":181,"context_line":"                    \u0027bound of a minimum of 2 GiB. Should usually be larger \u0027"},{"line_number":182,"context_line":"                    \u0027than downtime delay * downtime steps\u0027),"},{"line_number":183,"context_line":"    cfg.IntOpt(\u0027live_migration_progress_timeout\u0027,"},{"line_number":184,"context_line":"               default\u003d150,"},{"line_number":185,"context_line":"               help\u003d\u0027Time to wait, in seconds, for migration to make forward \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_540b2a7d","line":182,"updated":"2015-06-10 15:53:44.000000000","message":"Hmm, yeah, after reading Drew\u0027s comment above, doesn\u0027t this need to take disk size into account or something?","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa0e3971c4382b5844f7a1f26615df9a846929d7","unresolved":false,"context_lines":[{"line_number":5687,"context_line":"                             (now - progress_time), instance\u003dinstance)"},{"line_number":5688,"context_line":"                    abort \u003d True"},{"line_number":5689,"context_line":""},{"line_number":5690,"context_line":"                if elapsed \u003e completion_timeout:"},{"line_number":5691,"context_line":"                    LOG.warn(_LW(\"Live migration not completed after %d sec\"),"},{"line_number":5692,"context_line":"                             completion_timeout, instance\u003dinstance)"},{"line_number":5693,"context_line":"                    abort \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_b4dffed4","line":5690,"updated":"2015-06-10 15:53:44.000000000","message":"So, given the question above, and the potential for some strange situation with guests doing weird things.. I wonder if we need to handle these properties being set to zero for \"disabled\" so that we don\u0027t require them to just set them absurdly high to avoid this behavior. If I have some workload that does something that trips this algorithm up constantly, I may want to just disable this abort behavior entirely...","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ea277ecbf1c9609ff8b14217b12644a8bbe76f9c","unresolved":false,"context_lines":[{"line_number":5687,"context_line":"                             (now - progress_time), instance\u003dinstance)"},{"line_number":5688,"context_line":"                    abort \u003d True"},{"line_number":5689,"context_line":""},{"line_number":5690,"context_line":"                if elapsed \u003e completion_timeout:"},{"line_number":5691,"context_line":"                    LOG.warn(_LW(\"Live migration not completed after %d sec\"),"},{"line_number":5692,"context_line":"                             completion_timeout, instance\u003dinstance)"},{"line_number":5693,"context_line":"                    abort \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_f770d873","line":5690,"in_reply_to":"3afb71cf_b4dffed4","updated":"2015-06-10 16:03:04.000000000","message":"Yes, we could easily make 0 a magic value","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa0e3971c4382b5844f7a1f26615df9a846929d7","unresolved":false,"context_lines":[{"line_number":5694,"context_line":""},{"line_number":5695,"context_line":"                if abort:"},{"line_number":5696,"context_line":"                    try:"},{"line_number":5697,"context_line":"                        LOG.warn(_LW(\"Requesting migration abort\"))"},{"line_number":5698,"context_line":"                        dom.abortJob()"},{"line_number":5699,"context_line":"                    except libvirt.libvirtError as e:"},{"line_number":5700,"context_line":"                        LOG.warn(_LW(\"Failed to abort migration %s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_549e8a07","line":5697,"updated":"2015-06-10 15:53:44.000000000","message":"Is this redundant? You\u0027ve already logged the reason above. If we tacked \"aborting\" onto the strings above, I think it would be just as informative but more consistent, right?","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ea277ecbf1c9609ff8b14217b12644a8bbe76f9c","unresolved":false,"context_lines":[{"line_number":5694,"context_line":""},{"line_number":5695,"context_line":"                if abort:"},{"line_number":5696,"context_line":"                    try:"},{"line_number":5697,"context_line":"                        LOG.warn(_LW(\"Requesting migration abort\"))"},{"line_number":5698,"context_line":"                        dom.abortJob()"},{"line_number":5699,"context_line":"                    except libvirt.libvirtError as e:"},{"line_number":5700,"context_line":"                        LOG.warn(_LW(\"Failed to abort migration %s\"),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afb71cf_f7f7b8d0","line":5697,"in_reply_to":"3afb71cf_549e8a07","updated":"2015-06-10 16:03:04.000000000","message":"I guess I was just going for overkill here.","commit_id":"7805bdcec39a607b64385744999f1c90df29472e"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d3c9023cc2a4266a90af5e4f066df0ae924d1e08","unresolved":false,"context_lines":[{"line_number":5686,"context_line":""},{"line_number":5687,"context_line":"                if abort:"},{"line_number":5688,"context_line":"                    try:"},{"line_number":5689,"context_line":"                        dom.abortJob()"},{"line_number":5690,"context_line":"                    except libvirt.libvirtError as e:"},{"line_number":5691,"context_line":"                        LOG.warn(_LW(\"Failed to abort migration %s\"),"},{"line_number":5692,"context_line":"                                 e, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_60706edd","line":5689,"updated":"2015-07-30 13:54:28.000000000","message":"shouldn\u0027t we return at this point?","commit_id":"ef361acbec731979152192dc4d5fc52aa0db98b4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"41b88402656ffa25bae04dd84cb5eb9311115096","unresolved":false,"context_lines":[{"line_number":5686,"context_line":""},{"line_number":5687,"context_line":"                if abort:"},{"line_number":5688,"context_line":"                    try:"},{"line_number":5689,"context_line":"                        dom.abortJob()"},{"line_number":5690,"context_line":"                    except libvirt.libvirtError as e:"},{"line_number":5691,"context_line":"                        LOG.warn(_LW(\"Failed to abort migration %s\"),"},{"line_number":5692,"context_line":"                                 e, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_a32e80f8","line":5689,"in_reply_to":"3a50d1a3_60706edd","updated":"2015-07-30 14:07:54.000000000","message":"Nope, we\u0027re waiting for the migration state to actually indicate that it has completed aborting.","commit_id":"ef361acbec731979152192dc4d5fc52aa0db98b4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e577873f2889950a468907a0675b40f73cf4abea","unresolved":false,"context_lines":[{"line_number":5654,"context_line":"        start \u003d time.time()"},{"line_number":5655,"context_line":"        progress_time \u003d start"},{"line_number":5656,"context_line":"        progress_watermark \u003d None"},{"line_number":5657,"context_line":"        while True:"},{"line_number":5658,"context_line":"            info \u003d host.DomainJobInfo.for_domain(dom)"},{"line_number":5659,"context_line":""},{"line_number":5660,"context_line":"            if info.type \u003d\u003d libvirt.VIR_DOMAIN_JOB_NONE:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_ddfbc345","line":5657,"updated":"2015-08-06 17:02:46.000000000","message":"This giant method could really use some refactoring, IMHO.","commit_id":"2bb66e9455cfa60258089114c61241b0c5f8fcc0"}]}
