)]}'
{"neutron_lib/api/definitions/base.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e08336759427d56c0eb8a8ccb1a20d590d5d428","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    \u0027project-id\u0027,"},{"line_number":115,"context_line":"    \u0027provider\u0027,"},{"line_number":116,"context_line":"    \u0027qos\u0027,"},{"line_number":117,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":118,"context_line":"    \u0027qos-gateway-ip\u0027,"},{"line_number":119,"context_line":"    \u0027qos-rules-alias\u0027,"},{"line_number":120,"context_line":"    \u0027quotas\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_dbd160cc","line":117,"range":{"start_line":117,"start_character":5,"end_line":117,"end_character":28},"updated":"2018-10-10 08:25:05.000000000","message":"Why do we have this extension defined here?","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"19f5cdf673064555b55cb1ed7d8c5b3200d1ec98","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    \u0027project-id\u0027,"},{"line_number":115,"context_line":"    \u0027provider\u0027,"},{"line_number":116,"context_line":"    \u0027qos\u0027,"},{"line_number":117,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":118,"context_line":"    \u0027qos-gateway-ip\u0027,"},{"line_number":119,"context_line":"    \u0027qos-rules-alias\u0027,"},{"line_number":120,"context_line":"    \u0027quotas\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_26eee28a","line":117,"range":{"start_line":117,"start_character":5,"end_line":117,"end_character":28},"in_reply_to":"3f79a3b5_71bb8b0e","updated":"2018-10-15 00:38:20.000000000","message":"qos-bw-limit-direction is a required extension for the work I am doing here: https://review.openstack.org/#/c/608473/3/neutron_lib/api/definitions/qos_rules_alias.py@118. If I don\u0027t add it here, I get the following unit tests error:\n\nneutron_lib.tests.unit.api.definitions.test_qos_rules_alias.QoSRulesAliasDefinitionTestCase.test_required_extensions\n--------------------------------------------------------------------------------------------------------------------\n\nCaptured traceback:\n~~~~~~~~~~~~~~~~~~~\n    Traceback (most recent call last):\n      File \"neutron_lib/tests/unit/api/definitions/base.py\", line 196, in test_required_extensions\n        \u0027Required extension is unknown, check for typos.\u0027)\n      File \"/home/miguel/neutron-lib/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 417, in assertIn\n        self.assertThat(haystack, Contains(needle), message)\n      File \"/home/miguel/neutron-lib/.tox/py27/local/lib/python2.7/site-packages/testtools/testcase.py\", line 498, in assertThat\n        raise mismatch_error\n    testtools.matchers._impl.MismatchError: \u0027qos-bw-limit-direction\u0027 not in (\u0027address-scope\u0027, \u0027agent\u0027, \u0027allowed-address-pairs\u0027, \u0027auto-allocated-topology\u0027, \u0027availability_zone\u0027, \u0027binding\u0027, \u0027data-plane-status\u0027, \u0027project-default-networks\u0027, \u0027default-subnetpools\u0027, \u0027dhcp_agent_scheduler\u0027, \u0027dns-domain-ports\u0027, \u0027dns-integration\u0027, \u0027dvr\u0027, \u0027empty-string-filtering\u0027, \u0027expose-port-forwarding-in-fip\u0027, \u0027ext-gw-mode\u0027, \u0027external-net\u0027, \u0027extra_dhcp_opt\u0027, \u0027extraroute\u0027, \u0027filter-validation\u0027, \u0027fip-port-details\u0027, \u0027flavors\u0027, \u0027floating-ip-port-forwarding\u0027, \u0027floatingip-pools\u0027, \u0027ip-substring-filtering\u0027, \u0027l3-ha\u0027, \u0027l3_agent_scheduler\u0027, \u0027logging\u0027, \u0027metering\u0027, \u0027multi-provider\u0027, \u0027net-mtu\u0027, \u0027network-ip-availability\u0027, \u0027network_availability_zone\u0027, \u0027pagination\u0027, \u0027port-resource-request\u0027, \u0027port-security\u0027, \u0027project-id\u0027, \u0027provider\u0027, \u0027qos\u0027, \u0027qos-gateway-ip\u0027, \u0027qos-rules-alias\u0027, \u0027quotas\u0027, \u0027rbac-policies\u0027, \u0027router\u0027, \u0027router_availability_zone\u0027, \u0027security-group\u0027, \u0027segment\u0027, \u0027service-type\u0027, \u0027sort-key-validation\u0027, \u0027sorting\u0027, \u0027standard-attr-description\u0027, \u0027standard-attr-revisions\u0027, \u0027standard-attr-segment\u0027, \u0027standard-attr-timestamp\u0027, \u0027subnet_allocation\u0027, \u0027subnet_onboard\u0027, \u0027subnet-segmentid-enforce\u0027, \u0027subnet-segmentid-writable\u0027, \u0027tag\u0027, \u0027trunk\u0027, \u0027trunk-details\u0027, \u0027fwaas\u0027, \u0027fwaasrouterinsertion\u0027, \u0027fwaas_v2\u0027, \u0027bgpvpn\u0027, \u0027bgpvpn-routes-control\u0027, \u0027bgpvpn-vni\u0027, \u0027vpnaas\u0027, \u0027vpn-endpoint-groups\u0027, \u0027vpn-flavors\u0027, \u0027flow_classifier\u0027, \u0027sfc\u0027): Required extension is unknown, check for typos.\n\n\nWhen qos-bw-limit-direction was rehomed to neutron-lib (https://review.openstack.org/#/c/522317/4) we forgot to add it here","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b7461b8a18f966332f87920a6ff6eb8f5b470368","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    \u0027project-id\u0027,"},{"line_number":115,"context_line":"    \u0027provider\u0027,"},{"line_number":116,"context_line":"    \u0027qos\u0027,"},{"line_number":117,"context_line":"    \u0027qos-bw-limit-direction\u0027,"},{"line_number":118,"context_line":"    \u0027qos-gateway-ip\u0027,"},{"line_number":119,"context_line":"    \u0027qos-rules-alias\u0027,"},{"line_number":120,"context_line":"    \u0027quotas\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_71bb8b0e","line":117,"range":{"start_line":117,"start_character":5,"end_line":117,"end_character":28},"in_reply_to":"3f79a3b5_dbd160cc","updated":"2018-10-10 09:21:39.000000000","message":"+1\nIt doesn\u0027t seems to be related to this patch","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"}],"neutron_lib/api/definitions/qos_rules_alias.py":[{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"a14f09724739de9197e75eb7d5e3f630f57bbfa0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"            \u0027validate\u0027: {"},{"line_number":58,"context_line":"                \u0027type:range\u0027: [0, db_const.DB_INTEGER_MAX_VALUE]}"},{"line_number":59,"context_line":"        },"},{"line_number":60,"context_line":"            qos_bw_limit_direction.DIRECTION: {"},{"line_number":61,"context_line":"                \u0027allow_post\u0027: False,"},{"line_number":62,"context_line":"                \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_19007966","line":59,"updated":"2018-10-08 08:35:34.000000000","message":"The indentation of this bracket is not correct.","commit_id":"daa8d01c372b0f05733ee72277eef0790d8e60db"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4e7515da42f100ad9f3a0159a336838e0bb36809","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            \u0027is_sort_key\u0027: True,"},{"line_number":57,"context_line":"            \u0027validate\u0027: {"},{"line_number":58,"context_line":"                \u0027type:range\u0027: [0, db_const.DB_INTEGER_MAX_VALUE]}"},{"line_number":59,"context_line":"        },"},{"line_number":60,"context_line":"            qos_bw_limit_direction.DIRECTION: {"},{"line_number":61,"context_line":"                \u0027allow_post\u0027: False,"},{"line_number":62,"context_line":"                \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_56a8ec1f","line":59,"in_reply_to":"3f79a3b5_19007966","updated":"2018-10-08 22:14:12.000000000","message":"I\u0027ll address this comment in PS3","commit_id":"daa8d01c372b0f05733ee72277eef0790d8e60db"},{"author":{"_account_id":26507,"name":"Michel Peterson","email":"michel@redhat.com","username":"mpeterson"},"change_message_id":"a14f09724739de9197e75eb7d5e3f630f57bbfa0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                \u0027is_sort_key\u0027: True,"},{"line_number":76,"context_line":"                \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":77,"context_line":"                \u0027validate\u0027: {"},{"line_number":78,"context_line":"                        \u0027type:range\u0027: [0, db_const.DB_INTEGER_MAX_VALUE]}}}),"},{"line_number":79,"context_line":"    qos.DSCP_MARKING_RULES: dict("},{"line_number":80,"context_line":"        _QOS_RULE_COMMON_FIELDS,"},{"line_number":81,"context_line":"        **{DSCP_MARK: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b9f4e589","line":78,"updated":"2018-10-08 08:35:34.000000000","message":"Similarly the brackets here are all at the end making difficult to understand where the dict of line 49 ends (and all the inbetween dicts for that matter). \n\nThe same comment applies below to the other dicts.","commit_id":"daa8d01c372b0f05733ee72277eef0790d8e60db"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4e7515da42f100ad9f3a0159a336838e0bb36809","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                \u0027is_sort_key\u0027: True,"},{"line_number":76,"context_line":"                \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":77,"context_line":"                \u0027validate\u0027: {"},{"line_number":78,"context_line":"                        \u0027type:range\u0027: [0, db_const.DB_INTEGER_MAX_VALUE]}}}),"},{"line_number":79,"context_line":"    qos.DSCP_MARKING_RULES: dict("},{"line_number":80,"context_line":"        _QOS_RULE_COMMON_FIELDS,"},{"line_number":81,"context_line":"        **{DSCP_MARK: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f6a6d854","line":78,"in_reply_to":"3f79a3b5_b9f4e589","updated":"2018-10-08 22:14:12.000000000","message":"I\u0027ll address this comment in PS3","commit_id":"daa8d01c372b0f05733ee72277eef0790d8e60db"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"b7461b8a18f966332f87920a6ff6eb8f5b470368","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027is_visible\u0027: True"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"MAX_KBPS \u003d \u0027max_kbps\u0027"},{"line_number":36,"context_line":"MAX_BURST_KBPS \u003d \u0027max_burst_kbps\u0027"},{"line_number":37,"context_line":"DSCP_MARK \u003d \u0027dscp_mark\u0027"},{"line_number":38,"context_line":"MIN_KBPS \u003d \u0027min_kbps\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"ALIAS \u003d \u0027qos-rules-alias\u0027"},{"line_number":41,"context_line":"IS_SHIM_EXTENSION \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_310193b6","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":21},"updated":"2018-10-10 09:21:39.000000000","message":"maybe those values should be defined in https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/qos.py and used in both files now?","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"af03af7e5aa42677a9ef1c15ea93d40b21d3c3c4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027is_visible\u0027: True"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"MAX_KBPS \u003d \u0027max_kbps\u0027"},{"line_number":36,"context_line":"MAX_BURST_KBPS \u003d \u0027max_burst_kbps\u0027"},{"line_number":37,"context_line":"DSCP_MARK \u003d \u0027dscp_mark\u0027"},{"line_number":38,"context_line":"MIN_KBPS \u003d \u0027min_kbps\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"ALIAS \u003d \u0027qos-rules-alias\u0027"},{"line_number":41,"context_line":"IS_SHIM_EXTENSION \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_55765bd7","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":21},"in_reply_to":"3f79a3b5_310193b6","updated":"2018-10-11 12:32:50.000000000","message":"Actually these seem to already be defined in https://github.com/openstack/neutron-lib/blob/master/neutron_lib/services/qos/constants.py#L25 \n\n\nShouldn\u0027t we just use them from there?","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"19f5cdf673064555b55cb1ed7d8c5b3200d1ec98","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027is_visible\u0027: True"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"MAX_KBPS \u003d \u0027max_kbps\u0027"},{"line_number":36,"context_line":"MAX_BURST_KBPS \u003d \u0027max_burst_kbps\u0027"},{"line_number":37,"context_line":"DSCP_MARK \u003d \u0027dscp_mark\u0027"},{"line_number":38,"context_line":"MIN_KBPS \u003d \u0027min_kbps\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"ALIAS \u003d \u0027qos-rules-alias\u0027"},{"line_number":41,"context_line":"IS_SHIM_EXTENSION \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0643a66c","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":21},"in_reply_to":"3f79a3b5_310193b6","updated":"2018-10-15 00:38:20.000000000","message":"Since I am removing these definitions from here and re-using the ones indicated by boden, modifying othis API definitions would be out of scope for this patch. I will propose a different patch to re-use those definitions","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"19f5cdf673064555b55cb1ed7d8c5b3200d1ec98","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        \u0027is_visible\u0027: True"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":"MAX_KBPS \u003d \u0027max_kbps\u0027"},{"line_number":36,"context_line":"MAX_BURST_KBPS \u003d \u0027max_burst_kbps\u0027"},{"line_number":37,"context_line":"DSCP_MARK \u003d \u0027dscp_mark\u0027"},{"line_number":38,"context_line":"MIN_KBPS \u003d \u0027min_kbps\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"ALIAS \u003d \u0027qos-rules-alias\u0027"},{"line_number":41,"context_line":"IS_SHIM_EXTENSION \u003d False"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_464d1e97","line":38,"range":{"start_line":35,"start_character":0,"end_line":38,"end_character":21},"in_reply_to":"3f79a3b5_55765bd7","updated":"2018-10-15 00:38:20.000000000","message":"Boden,\n\nYes, we I am using the constants form there. Good catch!","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e08336759427d56c0eb8a8ccb1a20d590d5d428","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                \u0027is_filter\u0027: True,"},{"line_number":110,"context_line":"                \u0027is_sort_key\u0027: True,"},{"line_number":111,"context_line":"                \u0027validate\u0027: {"},{"line_number":112,"context_line":"                    \u0027type:values\u0027: [constants.EGRESS_DIRECTION]"},{"line_number":113,"context_line":"                }"},{"line_number":114,"context_line":"            }})"},{"line_number":115,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_3bbad470","line":112,"range":{"start_line":112,"start_character":36,"end_line":112,"end_character":62},"updated":"2018-10-10 08:25:05.000000000","message":"We have egress and ingress [1] for min BW.\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/qos_bw_minimum_ingress.py","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"19f5cdf673064555b55cb1ed7d8c5b3200d1ec98","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                \u0027is_filter\u0027: True,"},{"line_number":110,"context_line":"                \u0027is_sort_key\u0027: True,"},{"line_number":111,"context_line":"                \u0027validate\u0027: {"},{"line_number":112,"context_line":"                    \u0027type:values\u0027: [constants.EGRESS_DIRECTION]"},{"line_number":113,"context_line":"                }"},{"line_number":114,"context_line":"            }})"},{"line_number":115,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_c6584e58","line":112,"range":{"start_line":112,"start_character":36,"end_line":112,"end_character":62},"in_reply_to":"3f79a3b5_3bbad470","updated":"2018-10-15 00:38:20.000000000","message":"Done","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"}],"neutron_lib/tests/unit/api/definitions/test_qos_rules_alias.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9e08336759427d56c0eb8a8ccb1a20d590d5d428","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    extension_resources \u003d (qos.BANDWIDTH_LIMIT_RULES,"},{"line_number":22,"context_line":"                           qos.DSCP_MARKING_RULES,"},{"line_number":23,"context_line":"                           qos.MIN_BANDWIDTH_RULES)"},{"line_number":24,"context_line":"    extension_attributes \u003d (qos_bw_limit_direction.DIRECTION,"},{"line_number":25,"context_line":"                            qos_rules_alias.MAX_BURST_KBPS,"},{"line_number":26,"context_line":"                            qos_rules_alias.DSCP_MARK,"},{"line_number":27,"context_line":"                            qos_rules_alias.MIN_KBPS,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_3b489488","line":24,"updated":"2018-10-10 08:25:05.000000000","message":"Should we add qos_bw_minimum_ingress?","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"19f5cdf673064555b55cb1ed7d8c5b3200d1ec98","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    extension_resources \u003d (qos.BANDWIDTH_LIMIT_RULES,"},{"line_number":22,"context_line":"                           qos.DSCP_MARKING_RULES,"},{"line_number":23,"context_line":"                           qos.MIN_BANDWIDTH_RULES)"},{"line_number":24,"context_line":"    extension_attributes \u003d (qos_bw_limit_direction.DIRECTION,"},{"line_number":25,"context_line":"                            qos_rules_alias.MAX_BURST_KBPS,"},{"line_number":26,"context_line":"                            qos_rules_alias.DSCP_MARK,"},{"line_number":27,"context_line":"                            qos_rules_alias.MIN_KBPS,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_e6346afc","line":24,"in_reply_to":"3f79a3b5_3b489488","updated":"2018-10-15 00:38:20.000000000","message":"I don\u0027t think so. I have listed all the attributes I am adding to the new extension","commit_id":"793f4a684717efb2cc6b4e17a1cf7ee7d013389b"}]}
