)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1e1cefaf6ce517b0aed2c12b4391794d3f17b185","unresolved":false,"context_lines":[{"line_number":12,"context_line":"This patch adds checks to validate networks so it fails on nova-api and"},{"line_number":13,"context_line":"the user will be able to see why from the response."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note: a patch to fix the neutron port-security-enabled extension will"},{"line_number":16,"context_line":"follow which allows one to boot instances on networks without subnets"},{"line_number":17,"context_line":"and ports without fixedips."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAXH%2F%2FU3w%3D","line":15,"updated":"2014-04-22 13:56:04.000000000","message":"This breaks icehouse since we need https://review.openstack.org/#/c/59578/, which didn\u0027t land.  So all patches in the series should have been merged in icehouse or they should have all been deferred to Juno.","commit_id":"00fca51036ac377f083613c03a25c3e8e5b077db"}],"nova/exception.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"3086962eae5401abf912c34c12fc702ed5f7f6b0","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class NetworkRequiresSubnet(Invalid):"},{"line_number":616,"context_line":"    msg_fmt \u003d _(\"Network %(network_uuid)s requires subnet in order to boot\""},{"line_number":617,"context_line":"                \" instances on.\")"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F66Y%3D","line":616,"updated":"2014-03-12 23:23:29.000000000","message":"nit. \"requires\" -\u003e \"requires a\"","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"40c55d3b82967bf482f6598a6d288e2417f09d7d","unresolved":false,"context_lines":[{"line_number":613,"context_line":""},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"class NetworkRequiresSubnet(Invalid):"},{"line_number":616,"context_line":"    msg_fmt \u003d _(\"Network %(network_uuid)s requires subnet in order to boot\""},{"line_number":617,"context_line":"                \" instances on.\")"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F5HY%3D","line":616,"in_reply_to":"AAAAWH%2F%2F66Y%3D","updated":"2014-03-13 05:09:22.000000000","message":"Done","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"3086962eae5401abf912c34c12fc702ed5f7f6b0","unresolved":false,"context_lines":[{"line_number":626,"context_line":""},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"class PortRequiresFixedIP(Invalid):"},{"line_number":629,"context_line":"    msg_fmt \u003d _(\"Port %(port_id)s requires FixedIP in order to be used.\")"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"class PortNotUsable(Invalid):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F66U%3D","line":629,"updated":"2014-03-12 23:23:29.000000000","message":"nit. \"requires\" -\u003e \"requires a\"","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"40c55d3b82967bf482f6598a6d288e2417f09d7d","unresolved":false,"context_lines":[{"line_number":626,"context_line":""},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"class PortRequiresFixedIP(Invalid):"},{"line_number":629,"context_line":"    msg_fmt \u003d _(\"Port %(port_id)s requires FixedIP in order to be used.\")"},{"line_number":630,"context_line":""},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"class PortNotUsable(Invalid):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F5HU%3D","line":629,"in_reply_to":"AAAAWH%2F%2F66U%3D","updated":"2014-03-13 05:09:22.000000000","message":"Done","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"68ab42f7c190af4a1a9e18283c08e8533db84091","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                    if port.get(\u0027device_id\u0027, None):"},{"line_number":614,"context_line":"                        raise exception.PortInUse(port_id\u003dport_id)"},{"line_number":615,"context_line":"                    if not port.get(\u0027fixed_ips\u0027, None):"},{"line_number":616,"context_line":"                        raise exception.PortRequiresFixedIP(port_id\u003dport_id)"},{"line_number":617,"context_line":"                    net_id \u003d port[\u0027network_id\u0027]"},{"line_number":618,"context_line":"                else:"},{"line_number":619,"context_line":"                    ports_needed_per_instance +\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2B0Is%3D","line":616,"updated":"2014-03-12 00:26:42.000000000","message":"Both this and NetworkRequiresSubnet exceptions need to be caught at the API layer and translated to HTTPBadRequest (most likely). I\u0027m guessing this is probably confined to the v2/v3 api servers create methods","commit_id":"096353526c9468035bc7627e769ff39a7d944793"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"5fec665c5fcacbbc7d983ab39547322374904f01","unresolved":false,"context_lines":[{"line_number":613,"context_line":"                    if port.get(\u0027device_id\u0027, None):"},{"line_number":614,"context_line":"                        raise exception.PortInUse(port_id\u003dport_id)"},{"line_number":615,"context_line":"                    if not port.get(\u0027fixed_ips\u0027, None):"},{"line_number":616,"context_line":"                        raise exception.PortRequiresFixedIP(port_id\u003dport_id)"},{"line_number":617,"context_line":"                    net_id \u003d port[\u0027network_id\u0027]"},{"line_number":618,"context_line":"                else:"},{"line_number":619,"context_line":"                    ports_needed_per_instance +\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2B0Es%3D","line":616,"in_reply_to":"AAAAVn%2F%2B0Is%3D","updated":"2014-03-12 00:34:27.000000000","message":"These errors actually bubble up all the way to the client. I think this is because both of this exceptions derive from Invalid and the server api code excepts on : \n\n                exception.InvalidRequest,\n\n\nI can go a head and add it though as well just in case things change later","commit_id":"096353526c9468035bc7627e769ff39a7d944793"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"3086962eae5401abf912c34c12fc702ed5f7f6b0","unresolved":false,"context_lines":[{"line_number":612,"context_line":"                        raise exception.PortNotFound(port_id\u003dport_id)"},{"line_number":613,"context_line":"                    if port.get(\u0027device_id\u0027, None):"},{"line_number":614,"context_line":"                        raise exception.PortInUse(port_id\u003dport_id)"},{"line_number":615,"context_line":"                    if not port.get(\u0027fixed_ips\u0027, None):"},{"line_number":616,"context_line":"                        raise exception.PortRequiresFixedIP(port_id\u003dport_id)"},{"line_number":617,"context_line":"                    net_id \u003d port[\u0027network_id\u0027]"},{"line_number":618,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F65k%3D","line":615,"updated":"2014-03-12 23:23:29.000000000","message":"nit - don\u0027t need the None here.","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"40c55d3b82967bf482f6598a6d288e2417f09d7d","unresolved":false,"context_lines":[{"line_number":612,"context_line":"                        raise exception.PortNotFound(port_id\u003dport_id)"},{"line_number":613,"context_line":"                    if port.get(\u0027device_id\u0027, None):"},{"line_number":614,"context_line":"                        raise exception.PortInUse(port_id\u003dport_id)"},{"line_number":615,"context_line":"                    if not port.get(\u0027fixed_ips\u0027, None):"},{"line_number":616,"context_line":"                        raise exception.PortRequiresFixedIP(port_id\u003dport_id)"},{"line_number":617,"context_line":"                    net_id \u003d port[\u0027network_id\u0027]"},{"line_number":618,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2F5HQ%3D","line":615,"in_reply_to":"AAAAWH%2F%2F65k%3D","updated":"2014-03-13 05:09:22.000000000","message":"I know I just did it because everywhere else they add None. I\u0027ll remove it.","commit_id":"45e2398f0c01c327db46ce92fb9dda886455db9d"}]}
