)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Migrate Neutron QoS extension definitions to neutron-lib"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the first patch to migrate the QoS API definitions from"},{"line_number":10,"context_line":"Neutron to neutron-lib. Once is merged, all projects using QoS"},{"line_number":11,"context_line":"extension will be migrated to use this library."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id4517bc9947845390eec23c591b6fbcede7850b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfeb2761_74c60d4b","line":10,"range":{"start_line":10,"start_character":24,"end_line":10,"end_character":38},"updated":"2017-04-03 20:26:42.000000000","message":"\u0027Once it is merged\u0027 or \u0027Once merged\u0027","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Migrate Neutron QoS extension definitions to neutron-lib"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the first patch to migrate the QoS API definitions from"},{"line_number":10,"context_line":"Neutron to neutron-lib. Once is merged, all projects using QoS"},{"line_number":11,"context_line":"extension will be migrated to use this library."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id4517bc9947845390eec23c591b6fbcede7850b1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfeb2761_c2abc986","line":10,"range":{"start_line":10,"start_character":24,"end_line":10,"end_character":38},"in_reply_to":"dfeb2761_74c60d4b","updated":"2017-04-04 09:29:00.000000000","message":"Thanks!","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"}],"neutron_lib/api/definitions/constants.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7b8acd38a2c45c78d576d2280a420a35dacc51fb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# General constants."},{"line_number":15,"context_line":"INGRESS_DIRECTION \u003d \u0027ingress\u0027"},{"line_number":16,"context_line":"EGRESS_DIRECTION \u003d \u0027egress\u0027"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_594f9533","line":14,"updated":"2017-04-04 21:40:13.000000000","message":"I\u0027m wondering if all of these are more appropriate for neutron_lib.constants.py ??","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd636c77aebaa1a8cdd8725c763975715b160cd3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# General constants."},{"line_number":15,"context_line":"INGRESS_DIRECTION \u003d \u0027ingress\u0027"},{"line_number":16,"context_line":"EGRESS_DIRECTION \u003d \u0027egress\u0027"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_e679ba2f","line":14,"in_reply_to":"bff0334d_e323ec04","updated":"2017-04-05 13:47:42.000000000","message":"I agree. I\u0027ll move those constants to neutron-lib/constants","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"96cdf875c5518934fa5f1320fb1c226a2ca5515e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# General constants."},{"line_number":15,"context_line":"INGRESS_DIRECTION \u003d \u0027ingress\u0027"},{"line_number":16,"context_line":"EGRESS_DIRECTION \u003d \u0027egress\u0027"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_b3447448","line":14,"in_reply_to":"dfeb2761_594f9533","updated":"2017-04-05 08:02:13.000000000","message":"Traffic direction is used in other extensions. For example Neutron firewall [1], fwaas [2] or networking-sfc [3]\n\n[1] http://git.openstack.org/cgit/openstack/neutron/tree/neutron/agent/linux/ip_conntrack.py\n[2] http://git.openstack.org/cgit/openstack/neutron-fwaas/tree/neutron_fwaas/services/firewall/drivers/linux/iptables_fwaas.py\n[3] http://git.openstack.org/cgit/openstack/networking-sfc/tree/networking_sfc/cli/port_pair.py\n\n\nDSCP will be use by common classfier and could be used, for example, in ECN feature.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0e1e803663f372505734973bf1baa1119c8ae552","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"# General constants."},{"line_number":15,"context_line":"INGRESS_DIRECTION \u003d \u0027ingress\u0027"},{"line_number":16,"context_line":"EGRESS_DIRECTION \u003d \u0027egress\u0027"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_e323ec04","line":14,"in_reply_to":"dfeb2761_b3447448","updated":"2017-04-05 13:28:56.000000000","message":"These 3 constants seem to be used all over the place and not limited to use within extensions. For example [1] and [2]. Also we have a number of such constants already in neutron_lib.constants.py.\n\n\nWith that in mind, why do you think they best belong as api def specific constants?\n\n\n[1] http://codesearch.openstack.org/?q\u003dINGRESS_DIRECTION\n[2] http://codesearch.openstack.org/?q\u003dVALID_DSCP_MARKS","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"}],"neutron_lib/api/definitions/qos.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The name of the extension."},{"line_number":37,"context_line":"NAME \u003d \u0027QoS Extension\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The description of the extension."},{"line_number":40,"context_line":"DESCRIPTION \u003d \"Provides QoS support for ports and networks\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_c13f5923","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":21},"updated":"2017-04-03 20:26:42.000000000","message":"You are changing the name of the extension: https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L141. Is this what we want?","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The name of the extension."},{"line_number":37,"context_line":"NAME \u003d \u0027QoS Extension\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The description of the extension."},{"line_number":40,"context_line":"DESCRIPTION \u003d \"Provides QoS support for ports and networks\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_82a3819e","line":37,"range":{"start_line":37,"start_character":8,"end_line":37,"end_character":21},"in_reply_to":"dfeb2761_c13f5923","updated":"2017-04-04 09:29:00.000000000","message":"You are right. We should be consistent","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"NAME \u003d \u0027QoS Extension\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The description of the extension."},{"line_number":40,"context_line":"DESCRIPTION \u003d \"Provides QoS support for ports and networks\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":43,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-04-01T10:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_010f8189","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":58},"updated":"2017-04-03 20:26:42.000000000","message":"You are changing the description: https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L149. Is this what we want?","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"NAME \u003d \u0027QoS Extension\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# The description of the extension."},{"line_number":40,"context_line":"DESCRIPTION \u003d \"Provides QoS support for ports and networks\""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":43,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-04-01T10:00:00-00:00\""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_629e3d55","line":40,"range":{"start_line":40,"start_character":15,"end_line":40,"end_character":58},"in_reply_to":"dfeb2761_010f8189","updated":"2017-04-04 09:29:00.000000000","message":"Done","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":43,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-04-01T10:00:00-00:00\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"QOS_PREFIX \u003d \"/qos\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# The specific resources and/or attributes for the extension (optional)."},{"line_number":48,"context_line":"RULE_TYPE_BANDWIDTH_LIMIT \u003d \u0027bandwidth_limit\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_e1bb7d6f","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":10},"updated":"2017-04-03 20:26:42.000000000","message":"I think the intent is for this to extension definitions to be as standard as possible. So I think this should be API_PREFIX","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":43,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-04-01T10:00:00-00:00\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"QOS_PREFIX \u003d \"/qos\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"# The specific resources and/or attributes for the extension (optional)."},{"line_number":48,"context_line":"RULE_TYPE_BANDWIDTH_LIMIT \u003d \u0027bandwidth_limit\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_02de5110","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":10},"in_reply_to":"dfeb2761_e1bb7d6f","updated":"2017-04-04 09:29:00.000000000","message":"Actually the extension is not using the prefix. I should remove it.","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                    RULE_TYPE_MINIMUM_BANDWIDTH,"},{"line_number":54,"context_line":"                    ]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"POLICY \u003d \u0027policy\u0027"},{"line_number":57,"context_line":"POLICIES \u003d \u0027policies\u0027"},{"line_number":58,"context_line":"RULE_TYPES \u003d \u0027rule_types\u0027"},{"line_number":59,"context_line":"BANDWIDTH_LIMIT_RULES \u003d RULE_TYPE_BANDWIDTH_LIMIT + \u0027_rules\u0027"},{"line_number":60,"context_line":"DSCP_MARKING_RULES \u003d RULE_TYPE_DSCP_MARKING + \u0027_rules\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b4f935c9","line":57,"range":{"start_line":56,"start_character":0,"end_line":57,"end_character":21},"updated":"2017-04-03 20:26:42.000000000","message":"Again, following on the standardized definitions, I think maybe this should be:\n\nRESOURCE_NAME \u003d \u0027policy\u0027\nCOLLECTION_NAME \u003d \u0027policies\u0027","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                    RULE_TYPE_MINIMUM_BANDWIDTH,"},{"line_number":54,"context_line":"                    ]"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"POLICY \u003d \u0027policy\u0027"},{"line_number":57,"context_line":"POLICIES \u003d \u0027policies\u0027"},{"line_number":58,"context_line":"RULE_TYPES \u003d \u0027rule_types\u0027"},{"line_number":59,"context_line":"BANDWIDTH_LIMIT_RULES \u003d RULE_TYPE_BANDWIDTH_LIMIT + \u0027_rules\u0027"},{"line_number":60,"context_line":"DSCP_MARKING_RULES \u003d RULE_TYPE_DSCP_MARKING + \u0027_rules\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_a2ea05a9","line":57,"range":{"start_line":56,"start_character":0,"end_line":57,"end_character":21},"in_reply_to":"dfeb2761_b4f935c9","updated":"2017-04-04 09:29:00.000000000","message":"Done","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":82,"context_line":"    POLICIES: {"},{"line_number":83,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":84,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":85,"context_line":"               \u0027is_visible\u0027: True, \u0027primary_key\u0027: True},"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b4225551","line":82,"updated":"2017-04-03 20:26:42.000000000","message":"Please see comment to line 57","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":82,"context_line":"    POLICIES: {"},{"line_number":83,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":84,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":85,"context_line":"               \u0027is_visible\u0027: True, \u0027primary_key\u0027: True},"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_e2092d95","line":82,"in_reply_to":"dfeb2761_b4225551","updated":"2017-04-04 09:29:00.000000000","message":"Done","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":111,"context_line":"    BANDWIDTH_LIMIT_RULES: {"},{"line_number":112,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":113,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":114,"context_line":"        \u0027parameters\u0027:"},{"line_number":115,"context_line":"            dict(QOS_RULE_COMMON_FIELDS, **{"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_01ac219e","line":112,"range":{"start_line":112,"start_character":38,"end_line":112,"end_character":48},"updated":"2017-04-03 20:26:42.000000000","message":"POLICIES or COLLECTION_NAME","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":111,"context_line":"    BANDWIDTH_LIMIT_RULES: {"},{"line_number":112,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":113,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":114,"context_line":"        \u0027parameters\u0027:"},{"line_number":115,"context_line":"            dict(QOS_RULE_COMMON_FIELDS, **{"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_c2350948","line":112,"range":{"start_line":112,"start_character":38,"end_line":112,"end_character":48},"in_reply_to":"dfeb2761_01ac219e","updated":"2017-04-04 09:29:00.000000000","message":"Done","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"4550d31b1a052a17609bae82871fbd26e6d2a1a3","unresolved":false,"context_lines":[{"line_number":110,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":111,"context_line":"    BANDWIDTH_LIMIT_RULES: {"},{"line_number":112,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":113,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":114,"context_line":"        \u0027parameters\u0027:"},{"line_number":115,"context_line":"            dict(QOS_RULE_COMMON_FIELDS, **{"},{"line_number":116,"context_line":"                \u0027max_kbps\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_218e052e","line":113,"range":{"start_line":113,"start_character":34,"end_line":113,"end_character":42},"updated":"2017-04-03 20:26:42.000000000","message":"POLICY or RESOURCE_NAME","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c6c2bce58a46b4fce926bb7e8eac93039352009b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":111,"context_line":"    BANDWIDTH_LIMIT_RULES: {"},{"line_number":112,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":113,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":114,"context_line":"        \u0027parameters\u0027:"},{"line_number":115,"context_line":"            dict(QOS_RULE_COMMON_FIELDS, **{"},{"line_number":116,"context_line":"                \u0027max_kbps\u0027: {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_a238c53c","line":113,"range":{"start_line":113,"start_character":34,"end_line":113,"end_character":42},"in_reply_to":"dfeb2761_218e052e","updated":"2017-04-04 09:29:00.000000000","message":"Done","commit_id":"35c35c666f3d78cf50a3ff9c114a5af7832dbe73"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ff7554e4c06a2cec576c8596dfecb58a1ed098e5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# If this is True, the alias for the extension should be prefixed with"},{"line_number":33,"context_line":"# \u0027standard-attr-\u0027."},{"line_number":34,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The name of the extension."},{"line_number":37,"context_line":"NAME \u003d \u0027Quality of Service\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_db8df431","line":35,"updated":"2017-04-04 10:39:15.000000000","message":"Shouldn\u0027t we also have the API_PREFIX?","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c69e3c0bb676fc8b5126a7b6ab83eea7c43a65ce","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# If this is True, the alias for the extension should be prefixed with"},{"line_number":33,"context_line":"# \u0027standard-attr-\u0027."},{"line_number":34,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"# The name of the extension."},{"line_number":37,"context_line":"NAME \u003d \u0027Quality of Service\u0027"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_90c73d97","line":35,"in_reply_to":"dfeb2761_db8df431","updated":"2017-04-04 15:55:57.000000000","message":"You are right.","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":17776,"name":"Reedip","email":"reedip.banerjee@gmail.com","username":"Reedip"},"change_message_id":"f8a484325199a552d8c1a7761d479cc54c3d87da","unresolved":false,"context_lines":[{"line_number":58,"context_line":"DSCP_MARKING_RULES \u003d RULE_TYPE_DSCP_MARKING + \u0027_rules\u0027"},{"line_number":59,"context_line":"MINIMUM_BANDWIDTH_RULES \u003d RULE_TYPE_MINIMUM_BANDWIDTH + \u0027_rules\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"VALID_DSCP_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34,"},{"line_number":62,"context_line":"                    36, 38, 40, 46, 48, 56]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_b609272d","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":43},"updated":"2017-04-04 10:59:07.000000000","message":"this can be in the definitions/constants.py","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c69e3c0bb676fc8b5126a7b6ab83eea7c43a65ce","unresolved":false,"context_lines":[{"line_number":58,"context_line":"DSCP_MARKING_RULES \u003d RULE_TYPE_DSCP_MARKING + \u0027_rules\u0027"},{"line_number":59,"context_line":"MINIMUM_BANDWIDTH_RULES \u003d RULE_TYPE_MINIMUM_BANDWIDTH + \u0027_rules\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"VALID_DSCP_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34,"},{"line_number":62,"context_line":"                    36, 38, 40, 46, 48, 56]"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_90de1d6b","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":43},"in_reply_to":"dfeb2761_b609272d","updated":"2017-04-04 15:55:57.000000000","message":"You are right, those are generic constants.","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ff7554e4c06a2cec576c8596dfecb58a1ed098e5","unresolved":false,"context_lines":[{"line_number":176,"context_line":"}"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"# The list of required extensions."},{"line_number":179,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"# The list of optional extensions."},{"line_number":182,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_db92944b","line":179,"updated":"2017-04-04 10:39:15.000000000","message":"No required extensions; not even the L3 router extn?","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c69e3c0bb676fc8b5126a7b6ab83eea7c43a65ce","unresolved":false,"context_lines":[{"line_number":176,"context_line":"}"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"# The list of required extensions."},{"line_number":179,"context_line":"REQUIRED_EXTENSIONS \u003d []"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"# The list of optional extensions."},{"line_number":182,"context_line":"OPTIONAL_EXTENSIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_f069e9f8","line":179,"in_reply_to":"dfeb2761_db92944b","updated":"2017-04-04 15:55:57.000000000","message":"QoS is a L2 extension and doesn\u0027t need any L3 extension.\n\nJust to be sure (I\u0027m very forgetful): QoS extension in Neutron [1]\ndoesn\u0027t overwrite the base class method \"get_required_extensions\". For QoS, the function returns [] (in [2]).\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L136\n[2] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/extensions.py#L120","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7b8acd38a2c45c78d576d2280a420a35dacc51fb","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# A prefix for API resources. An empty prefix means that the API is going"},{"line_number":40,"context_line":"# to be exposed at the v2/ level as any other core resource."},{"line_number":41,"context_line":"API_PREFIX \u003d \u0027\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# The description of the extension."},{"line_number":44,"context_line":"DESCRIPTION \u003d \"The Quality of Service extension\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_790019ac","line":41,"updated":"2017-04-04 21:40:13.000000000","message":"Shouldn\u0027t this be /qos as per: https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L35","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"bd636c77aebaa1a8cdd8725c763975715b160cd3","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# A prefix for API resources. An empty prefix means that the API is going"},{"line_number":40,"context_line":"# to be exposed at the v2/ level as any other core resource."},{"line_number":41,"context_line":"API_PREFIX \u003d \u0027\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# The description of the extension."},{"line_number":44,"context_line":"DESCRIPTION \u003d \"The Quality of Service extension\""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_26b682db","line":41,"in_reply_to":"bff0334d_63035c0f","updated":"2017-04-05 13:47:42.000000000","message":"You are right.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0e1e803663f372505734973bf1baa1119c8ae552","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# A prefix for API resources. An empty prefix means that the API is going"},{"line_number":40,"context_line":"# to be exposed at the v2/ level as any other core resource."},{"line_number":41,"context_line":"API_PREFIX \u003d \u0027\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# The description of the extension."},{"line_number":44,"context_line":"DESCRIPTION \u003d \"The Quality of Service extension\""}],"source_content_type":"text/x-python","patch_set":4,"id":"bff0334d_63035c0f","line":41,"in_reply_to":"dfeb2761_1399e0c2","updated":"2017-04-05 13:28:56.000000000","message":"Just to clarify: I\u0027m not asking to change it if we don\u0027t need to; I\u0027m trying to talk through if it\u0027s in fact needed or not.\n\n\nWhen I look at the qos ext today I see it defines the \u0027/qos\u0027 prefix [1] and then uses it to build resources [2]. This leads me to believe it\u0027s in fact needed. If it\u0027s not needed I\u0027m trying to understand why given [1] and [2].\n\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L35\n[2] https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L191","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"96cdf875c5518934fa5f1320fb1c226a2ca5515e","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# A prefix for API resources. An empty prefix means that the API is going"},{"line_number":40,"context_line":"# to be exposed at the v2/ level as any other core resource."},{"line_number":41,"context_line":"API_PREFIX \u003d \u0027\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# The description of the extension."},{"line_number":44,"context_line":"DESCRIPTION \u003d \"The Quality of Service extension\""}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_1399e0c2","line":41,"in_reply_to":"dfeb2761_790019ac","updated":"2017-04-05 08:02:13.000000000","message":"QoS should be exposed at v2/ level, like other core resource. Most of the extensions migrated to neutron-lib don\u0027t have any prefix.\n\nI\u0027ll change it but I don\u0027t agree with this change.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"616946fcc011ad394531cb817d3a34e903874216","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"QOS_PLUGIN \u003d \u0027qos_plugin\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# Attribute Map"},{"line_number":69,"context_line":"QOS_RULE_COMMON_FIELDS \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_fb726111","line":66,"updated":"2017-04-05 20:06:48.000000000","message":"Is this really an API def specific constant? Seems like this should be in neutron_lib.constants.py or neutron_lib.plugins.constants.py","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dd6693f80a397fe460038f6dd85288836fa14454","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"QOS_PLUGIN \u003d \u0027qos_plugin\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"# Attribute Map"},{"line_number":69,"context_line":"QOS_RULE_COMMON_FIELDS \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_d63f60d4","line":66,"in_reply_to":"bff0334d_fb726111","updated":"2017-04-06 09:37:01.000000000","message":"IMO, this variable should be here. Is used by Neutron service to register the name of the plugin.","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"616946fcc011ad394531cb817d3a34e903874216","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                  \u0027is_visible\u0027: True},"},{"line_number":77,"context_line":"}"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":80,"context_line":"    COLLECTION_NAME: {"},{"line_number":81,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":82,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_db89dd26","line":79,"updated":"2017-04-05 20:06:48.000000000","message":"Unless I\u0027m missing something, this patch doesn\u0027t rehome the EXTENDED_ATTRIBUTES_2_0 from the neutron qos extension [1]. I think those can be add directly to the RESOURCE_ATTRIBUTE_MAP here in the API def.\n\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/extensions/qos.py#L121","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dd6693f80a397fe460038f6dd85288836fa14454","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                  \u0027is_visible\u0027: True},"},{"line_number":77,"context_line":"}"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":80,"context_line":"    COLLECTION_NAME: {"},{"line_number":81,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":82,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_a6394b42","line":79,"in_reply_to":"bff0334d_db89dd26","updated":"2017-04-06 09:37:01.000000000","message":"I\u0027m not rehoming the EXTENDED_ATTRIBUTES_2_0 because those are extensions for existing resources in Neutron, not new ones.\n\nDo you really know how to migrate those attributes? I\u0027ll try to bring this question to IRC.","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"}],"neutron_lib/db/constants.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"ff7554e4c06a2cec576c8596dfecb58a1ed098e5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Maximum value integer can take in MySQL and PostgreSQL"},{"line_number":32,"context_line":"# In SQLite integer can be stored in 1, 2, 3, 4, 6, or 8 bytes,"},{"line_number":33,"context_line":"# but here it will be limited by this value for consistency."},{"line_number":34,"context_line":"DB_INTEGER_MAX_VALUE \u003d 2 ** 31 - 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_bbdd9043","line":34,"updated":"2017-04-04 10:39:15.000000000","message":"Does this belong in neutron_lib.db.constants.py ??","commit_id":"876613015e80d19e262c0e885adca20b8387d992"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c69e3c0bb676fc8b5126a7b6ab83eea7c43a65ce","unresolved":false,"context_lines":[{"line_number":31,"context_line":"# Maximum value integer can take in MySQL and PostgreSQL"},{"line_number":32,"context_line":"# In SQLite integer can be stored in 1, 2, 3, 4, 6, or 8 bytes,"},{"line_number":33,"context_line":"# but here it will be limited by this value for consistency."},{"line_number":34,"context_line":"DB_INTEGER_MAX_VALUE \u003d 2 ** 31 - 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_10332d16","line":34,"in_reply_to":"dfeb2761_bbdd9043","updated":"2017-04-04 15:55:57.000000000","message":"This is the DB integer max value. It\u0027s a backend limitation and should be here, in the DB constants.","commit_id":"876613015e80d19e262c0e885adca20b8387d992"}],"neutron_lib/tests/unit/api/definitions/test_qos.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7b8acd38a2c45c78d576d2280a420a35dacc51fb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"class QosDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d qos"},{"line_number":19,"context_line":"    extension_resources \u003d (qos.COLLECTION_NAME, qos.RULE_TYPES)"},{"line_number":20,"context_line":"    extension_attributes \u003d (\u0027id\u0027, \u0027tenant_id\u0027, \u0027name\u0027, \u0027description\u0027, \u0027shared\u0027,"},{"line_number":21,"context_line":"                            \u0027rules\u0027, \u0027type\u0027, \u0027parent\u0027, \u0027direction\u0027, \u0027max_kbps\u0027,"},{"line_number":22,"context_line":"                            \u0027max_burst_kbps\u0027, \u0027min_kbps\u0027, \u0027dscp_mark\u0027)"},{"line_number":23,"context_line":"    extension_subresources \u003d (qos.BANDWIDTH_LIMIT_RULES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_b97fc113","line":20,"range":{"start_line":20,"start_character":28,"end_line":20,"end_character":79},"updated":"2017-04-04 21:40:13.000000000","message":"Those that are already known [1] shouldn\u0027t be needed to be listed here.\n\n\n[1] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/base.py#L13","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"96cdf875c5518934fa5f1320fb1c226a2ca5515e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"class QosDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d qos"},{"line_number":19,"context_line":"    extension_resources \u003d (qos.COLLECTION_NAME, qos.RULE_TYPES)"},{"line_number":20,"context_line":"    extension_attributes \u003d (\u0027id\u0027, \u0027tenant_id\u0027, \u0027name\u0027, \u0027description\u0027, \u0027shared\u0027,"},{"line_number":21,"context_line":"                            \u0027rules\u0027, \u0027type\u0027, \u0027parent\u0027, \u0027direction\u0027, \u0027max_kbps\u0027,"},{"line_number":22,"context_line":"                            \u0027max_burst_kbps\u0027, \u0027min_kbps\u0027, \u0027dscp_mark\u0027)"},{"line_number":23,"context_line":"    extension_subresources \u003d (qos.BANDWIDTH_LIMIT_RULES,"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfeb2761_f3c31c88","line":20,"range":{"start_line":20,"start_character":28,"end_line":20,"end_character":79},"in_reply_to":"dfeb2761_b97fc113","updated":"2017-04-05 08:02:13.000000000","message":"You are right! Thanks.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"}],"releasenotes/notes/qos-api-definition-666c9b77e69eef00.yaml":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"7b8acd38a2c45c78d576d2280a420a35dacc51fb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API reference and definition for QoS extension."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"dfeb2761_39d5f11c","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":17},"updated":"2017-04-04 21:40:13.000000000","message":"IMO this is a bit misleading. Typically the \"API reference\" goes under /neutron-lib/api-ref/** and that\u0027s not part of this patch.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"96cdf875c5518934fa5f1320fb1c226a2ca5515e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API reference and definition for QoS extension."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"dfeb2761_b3b91416","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":17},"in_reply_to":"dfeb2761_39d5f11c","updated":"2017-04-05 08:02:13.000000000","message":"You are right.","commit_id":"744fe752870498bdfce2c120ab5ac6c7565e3a12"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"616946fcc011ad394531cb817d3a34e903874216","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API definition for QoS extension."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"bff0334d_db943deb","line":4,"updated":"2017-04-05 20:06:48.000000000","message":"It might also be worth noting the constants from qos_consts.py that are also included herein.","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"dd6693f80a397fe460038f6dd85288836fa14454","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    API definition for QoS extension."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"bff0334d_161948d6","line":4,"in_reply_to":"bff0334d_db943deb","updated":"2017-04-06 09:37:01.000000000","message":"Done","commit_id":"39e7518c92fc35f018b43fc0c728308138201eab"}]}
