)]}'
{"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e36004e827def6f23f176d277361031d740081f8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"                    \u0027before uploading them to image service\u0027),"},{"line_number":210,"context_line":"    cfg.BoolOpt(\u0027libvirt_migrate_unsafe\u0027,"},{"line_number":211,"context_line":"                default\u003dFalse,"},{"line_number":212,"context_line":"                help\u003d\u0027Force migration even if it is considered unsafe.\u0027),"},{"line_number":213,"context_line":"    cfg.StrOpt(\u0027xen_hvmloader_path\u0027,"},{"line_number":214,"context_line":"                default\u003d\u0027/usr/lib/xen/boot/hvmloader\u0027,"},{"line_number":215,"context_line":"                help\u003d\u0027Location where the Xen hvmloader is kept\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FZ5c%3D","line":212,"updated":"2013-10-16 16:06:43.000000000","message":"This kind of configuration option is just awful from a usability POV. \n\nThe bug states that this is to let migration work in cases where Nova is using a storage backend that doesn\u0027t do cache\u003dnone, but is none the less safe.\n\nA typical person deploying Nova does not have the knowledge to understand when this is true or not. Giving them this global config option is just providing a way for them to massively shoot themselves in the foot.\n\nNova should know what storage is in use by a VM, and thus should be able to know when it is ok to use the UNSAFE flag, and when it is not ok. So we should make Nova just do the right thing, and not push the burden on end users who don\u0027t have the knowledge to make a safe decision about this config option.","commit_id":"19f478069bc4c813d1f4000a399e414d981ca202"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"bd4418861300214269a419047f163508e1143b07","unresolved":false,"context_lines":[{"line_number":4020,"context_line":"        \"\"\"Returns libvirt migration flags.\"\"\""},{"line_number":4021,"context_line":""},{"line_number":4022,"context_line":"        return (CONF.libvirt_migrate_unsafe and"},{"line_number":4023,"context_line":"                libvirt.VIR_MIGRATE_UNSAFE or None)"},{"line_number":4024,"context_line":""},{"line_number":4025,"context_line":"    def _live_migration(self, context, instance, dest, post_method,"},{"line_number":4026,"context_line":"                        recover_method, block_migration\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2F3V8%3D","line":4023,"updated":"2013-10-08 19:30:33.000000000","message":"I know the and/or trick, but I still have to read this about 5 times to understand what it\u0027s doing.  A simple if statement would make this code much clearer.","commit_id":"19f478069bc4c813d1f4000a399e414d981ca202"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"4597aebbc6927eb20f0b7295aad5da195d289306","unresolved":false,"context_lines":[{"line_number":4020,"context_line":"        \"\"\"Returns libvirt migration flags.\"\"\""},{"line_number":4021,"context_line":""},{"line_number":4022,"context_line":"        return (CONF.libvirt_migrate_unsafe and"},{"line_number":4023,"context_line":"                libvirt.VIR_MIGRATE_UNSAFE or None)"},{"line_number":4024,"context_line":""},{"line_number":4025,"context_line":"    def _live_migration(self, context, instance, dest, post_method,"},{"line_number":4026,"context_line":"                        recover_method, block_migration\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FfSQ%3D","line":4023,"in_reply_to":"AAAATH%2F%2F3V8%3D","updated":"2013-10-15 14:37:03.000000000","message":"+1, we should always make the code easy to understand.  ;-)","commit_id":"19f478069bc4c813d1f4000a399e414d981ca202"},{"author":{"_account_id":8122,"name":"Cyril Roelandt","email":"cyril@redhat.com","username":"cyril.roelandt.enovance"},"change_message_id":"a294a0a1512eea0a70acb16effa602d26ca9a1a3","unresolved":false,"context_lines":[{"line_number":4021,"context_line":""},{"line_number":4022,"context_line":"        return (CONF.libvirt_migrate_unsafe and"},{"line_number":4023,"context_line":"                libvirt.VIR_MIGRATE_UNSAFE or None)"},{"line_number":4024,"context_line":""},{"line_number":4025,"context_line":"    def _live_migration(self, context, instance, dest, post_method,"},{"line_number":4026,"context_line":"                        recover_method, block_migration\u003dFalse,"},{"line_number":4027,"context_line":"                        migrate_data\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATH%2F%2FZ8I%3D","line":4024,"updated":"2013-10-16 15:57:21.000000000","message":"Indeed, this is quite hard to read.","commit_id":"19f478069bc4c813d1f4000a399e414d981ca202"}]}
