)]}'
{"nova/api/openstack/compute/server_migrations.py":[{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"b94f79b97d13f737340ee4f1f69e6b7460a8b05e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.compute_api \u003d compute.API(skip_policy_check\u003dTrue)"},{"line_number":35,"context_line":"        super(ServerMigrationsController, self).__init__()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @wsgi.Controller.api_version(\"2.22\")"},{"line_number":38,"context_line":"    @wsgi.response(202)"},{"line_number":39,"context_line":"    @extensions.expected_errors((400, 403, 404, 409))"},{"line_number":40,"context_line":"    @wsgi.action(\u0027force_complete\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_d9bc29de","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":38},"updated":"2016-02-24 14:40:23.000000000","message":"Should I bump microversion?","commit_id":"b9f2f472e9bd3b2bb3b793d817f2aaefe2d2f7a5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"b94f79b97d13f737340ee4f1f69e6b7460a8b05e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":50,"context_line":"                exception.MigrationNotFoundForInstance) as e:"},{"line_number":51,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":52,"context_line":"        except exception.InvalidMigrationState as e:"},{"line_number":53,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":55,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_f9b5adec","line":52,"range":{"start_line":52,"start_character":25,"end_line":52,"end_character":46},"updated":"2016-02-24 14:40:23.000000000","message":"Should this be reported as conflict?","commit_id":"b9f2f472e9bd3b2bb3b793d817f2aaefe2d2f7a5"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"32aafc41a127695f23f90e6696198635f8c31094","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.compute_api.live_migrate_force_complete(context, instance, id)"},{"line_number":49,"context_line":"        except exception.InstanceNotFound as e:"},{"line_number":50,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":51,"context_line":"        except (exception.MigrationNotFoundByStatus,"},{"line_number":52,"context_line":"                exception.InvalidMigrationState,"},{"line_number":53,"context_line":"                exception.MigrationNotFoundForInstance) as e:"},{"line_number":54,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_8af081ca","side":"PARENT","line":51,"range":{"start_line":51,"start_character":26,"end_line":51,"end_character":51},"updated":"2016-02-24 15:11:41.000000000","message":"This exception is not raised anywhere, so I removed it","commit_id":"fd8185d22871ae85e965f6d19bc6ef900ba6a823"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"125cccbaa169c5554174473f40c5c2aa370e05c1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.compute_api \u003d compute.API(skip_policy_check\u003dTrue)"},{"line_number":35,"context_line":"        super(ServerMigrationsController, self).__init__()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @wsgi.Controller.api_version(\"2.22\")"},{"line_number":38,"context_line":"    @wsgi.response(202)"},{"line_number":39,"context_line":"    @extensions.expected_errors((400, 403, 404, 409))"},{"line_number":40,"context_line":"    @wsgi.action(\u0027force_complete\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_c5d55a1c","line":37,"updated":"2016-02-24 15:22:38.000000000","message":"No. From the API WG guidance on Evaluating API Changes:\n\n\"The following types of changes are generally considered acceptable:\n\n    The change is the only way to fix a security bug.\n    Fixing a bug so that a request which resulted in an error response before is now successful.\n    Adding a new response header.\n    Changing an error response code to be more accurate.\"","commit_id":"50ed7bd3cbc785fff95017e4a29caff9272ea19a"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"32aafc41a127695f23f90e6696198635f8c31094","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        self.compute_api \u003d compute.API(skip_policy_check\u003dTrue)"},{"line_number":35,"context_line":"        super(ServerMigrationsController, self).__init__()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @wsgi.Controller.api_version(\"2.22\")"},{"line_number":38,"context_line":"    @wsgi.response(202)"},{"line_number":39,"context_line":"    @extensions.expected_errors((400, 403, 404, 409))"},{"line_number":40,"context_line":"    @wsgi.action(\u0027force_complete\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_4afcb9b7","line":37,"range":{"start_line":37,"start_character":34,"end_line":37,"end_character":38},"updated":"2016-02-24 15:11:41.000000000","message":"Should I bump microversion?","commit_id":"50ed7bd3cbc785fff95017e4a29caff9272ea19a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"125cccbaa169c5554174473f40c5c2aa370e05c1","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":50,"context_line":"                exception.MigrationNotFoundForInstance) as e:"},{"line_number":51,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":52,"context_line":"        except exception.InvalidMigrationState as e:"},{"line_number":53,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":55,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_a5d81654","line":52,"updated":"2016-02-24 15:22:38.000000000","message":"I believe this should be HTTPConflict, yes, because the guidance from the API WG is the following:\n\n\"If a request is made which attempts to perform an action on a resource which is already performing that action and therefore the request cannot be fulfilled (for example, snapshotting an instance which is already in the process of snapshotting), the return code should be 409 Conflict.\"\n\nSeems like this is precisely the case for a 409 Conflict.","commit_id":"50ed7bd3cbc785fff95017e4a29caff9272ea19a"},{"author":{"_account_id":12299,"name":"Paweł Koniszewski","email":"pawel.koniszewski@gmail.com","username":"pawel.koniszewski"},"change_message_id":"32aafc41a127695f23f90e6696198635f8c31094","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":50,"context_line":"                exception.MigrationNotFoundForInstance) as e:"},{"line_number":51,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":52,"context_line":"        except exception.InvalidMigrationState as e:"},{"line_number":53,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":55,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_aad8e553","line":52,"range":{"start_line":52,"start_character":25,"end_line":52,"end_character":46},"updated":"2016-02-24 15:11:41.000000000","message":"Should this return HTTPConflict instead of HTTPBadRequest?","commit_id":"50ed7bd3cbc785fff95017e4a29caff9272ea19a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f083c849bf952f139a0b1a6a56382a67eb7ff390","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except (exception.InstanceNotFound,"},{"line_number":50,"context_line":"                exception.MigrationNotFoundForInstance) as e:"},{"line_number":51,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":52,"context_line":"        except exception.InvalidMigrationState as e:"},{"line_number":53,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":54,"context_line":"        except exception.InstanceIsLocked as e:"},{"line_number":55,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_36d99b22","line":52,"in_reply_to":"bae84128_a5d81654","updated":"2016-02-26 12:42:45.000000000","message":"But we do say:\n\nIf a request contains a reference to a nonexistent resource in the body (not URI), the code should be 400 Bad Request. Do not use 404 NotFound because RFC 7231 (section 6.5.4) mentions the origin server did not find a current representation for the target resource for 404 and representation for the target resource means a URI.\n\nAnd MigrationNorFoundForInstance means the URL is currently not around.\n\nBy which I mean GET on the same URL will give you 404.\n\nInfact, if the migration is not running, you also get 404.\n\nSo maybe we want 404 for GET and post to be consistent?\n\nHonestly, I see arguments in both directions.","commit_id":"50ed7bd3cbc785fff95017e4a29caff9272ea19a"}]}
