)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"b1752c92d0b9ed53afb7cba3fab6919f2a877516","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  * Spec: https://review.openstack.org/#/c/272173"},{"line_number":19,"context_line":"  * QoSDscpMarkingRule resource: https://review.openstack.org/#/c/277567"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Because there are two dependencies I am listing them both as explicit"},{"line_number":22,"context_line":"Depends-On clauses, to make sure they both proceed.  They are:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* RPC Callback rolling upgrades logic (MERGED)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"bae84128_c781be91","line":21,"range":{"start_line":21,"start_character":53,"end_line":21,"end_character":57},"updated":"2016-02-19 15:22:08.000000000","message":"all","commit_id":"b4de0a6eff808b8d8f021acd67aa24e1840b899a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"b1752c92d0b9ed53afb7cba3fab6919f2a877516","unresolved":false,"context_lines":[{"line_number":18,"context_line":"  * Spec: https://review.openstack.org/#/c/272173"},{"line_number":19,"context_line":"  * QoSDscpMarkingRule resource: https://review.openstack.org/#/c/277567"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Because there are two dependencies I am listing them both as explicit"},{"line_number":22,"context_line":"Depends-On clauses, to make sure they both proceed.  They are:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* RPC Callback rolling upgrades logic (MERGED)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"bae84128_8777b6d3","line":21,"range":{"start_line":21,"start_character":18,"end_line":21,"end_character":21},"updated":"2016-02-19 15:22:08.000000000","message":"three","commit_id":"b4de0a6eff808b8d8f021acd67aa24e1840b899a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"b1752c92d0b9ed53afb7cba3fab6919f2a877516","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  * QoSDscpMarkingRule resource: https://review.openstack.org/#/c/277567"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Because there are two dependencies I am listing them both as explicit"},{"line_number":22,"context_line":"Depends-On clauses, to make sure they both proceed.  They are:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"* RPC Callback rolling upgrades logic (MERGED)"},{"line_number":25,"context_line":"    https://review.openstack.org/#/c/265347/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"bae84128_074a8683","line":22,"range":{"start_line":22,"start_character":38,"end_line":22,"end_character":42},"updated":"2016-02-19 15:22:08.000000000","message":"all","commit_id":"b4de0a6eff808b8d8f021acd67aa24e1840b899a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    https://review.openstack.org/#/c/268040/"},{"line_number":28,"context_line":"* l2-agent-extensions-agent-api"},{"line_number":29,"context_line":"    https://review.openstack.org/#/c/267591/"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Co-Authored-By: Nate Johnston \u003cnate_johnston@cable.comcast.com\u003e"},{"line_number":32,"context_line":"Co-Authored-By: Victor Howard \u003cvictor.r.howard@gmail.com\u003e"},{"line_number":33,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9aed3d3a_1f08ad2b","line":30,"updated":"2016-02-28 09:40:38.000000000","message":"This is lacking the following:\n\nAPIImpact - the API now supports this :)\nUpgradeImpact - Will this affect the upgrade and how? How will existing policies behave regarding the DCSP markings?\nDocImpact - you have changed the policy.json file","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    https://review.openstack.org/#/c/268040/"},{"line_number":28,"context_line":"* l2-agent-extensions-agent-api"},{"line_number":29,"context_line":"    https://review.openstack.org/#/c/267591/"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Co-Authored-By: Nate Johnston \u003cnate_johnston@cable.comcast.com\u003e"},{"line_number":32,"context_line":"Co-Authored-By: Victor Howard \u003cvictor.r.howard@gmail.com\u003e"},{"line_number":33,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9aed3d3a_cccdee86","line":30,"in_reply_to":"9aed3d3a_1f08ad2b","updated":"2016-02-29 10:42:38.000000000","message":"I think it has no upgrade impact at all.\n\nExisting policies won\u0027t have DSCP marking rules until administrator does not go and specifically add them.\n\nOld agents should work well once https://review.openstack.org/#/c/268040/ lands. The idea is that old agents will receive the old version of the policies (no DSCP rules), and when they are rebooted to the new version, they will grab the policies with DSCP rules included.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"341fe5fe8291dcf16743ba91fd4ef3d701beee34","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    https://review.openstack.org/#/c/268040/"},{"line_number":28,"context_line":"* l2-agent-extensions-agent-api"},{"line_number":29,"context_line":"    https://review.openstack.org/#/c/267591/"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Co-Authored-By: Nate Johnston \u003cnate_johnston@cable.comcast.com\u003e"},{"line_number":32,"context_line":"Co-Authored-By: Victor Howard \u003cvictor.r.howard@gmail.com\u003e"},{"line_number":33,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"9aed3d3a_749a926f","line":30,"in_reply_to":"9aed3d3a_cccdee86","updated":"2016-02-29 15:38:56.000000000","message":"Also, we don\u0027t need DocImpact to spawn a new documentation bug, because the documentation changes are already ready to go with two +2s each.  See https://review.openstack.org/#/c/273638 and https://review.openstack.org/#/c/275253 as linked to from the commit message.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"* python-neutronclient: https://review.openstack.org/#/c/254280"},{"line_number":14,"context_line":"* openstack-manuals: https://review.openstack.org/#/c/273638"},{"line_number":15,"context_line":"* tempest tests: https://review.openstack.org/#/c/274873"},{"line_number":16,"context_line":"* API Guide: https://review.openstack.org/#/c/275253"},{"line_number":17,"context_line":"* Heat:"},{"line_number":18,"context_line":"  * Spec: https://review.openstack.org/#/c/272173"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":35,"id":"7af24918_4aa62b11","line":15,"updated":"2016-03-02 07:05:38.000000000","message":"I believe this patch depends on that one above ^ for the api-tests.\n(see current API test failure)\nI\u0027d suggest  squashing that patch into this one, if what I\u0027m saying is correct.","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5135c3ef958ad0f4bdad793bd124a6efaec21d74","unresolved":false,"context_lines":[{"line_number":17,"context_line":"  * Spec: https://review.openstack.org/#/c/272173"},{"line_number":18,"context_line":"  * QoSDscpMarkingRule resource: https://review.openstack.org/#/c/277567"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Because there are three dependencies I am listing them all as explicit"},{"line_number":21,"context_line":"Depends-On clauses, to make sure they all proceed.  They are:"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"APIImpact - The API now supports marking traffic egressing from a VM\u0027s"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":40,"id":"7af24918_371cc311","line":20,"updated":"2016-03-02 16:33:34.000000000","message":"remove this dependencies thing :) not anymore","commit_id":"5afde11e74f50cea439f2b5ed8259a4950651e31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Co-Authored-By: James Reeves \u003cjames.reeves5546@gmail.com\u003e"},{"line_number":28,"context_line":"Co-Authored-By: Miguel Angel Ajo \u003cmangelajo@redhat.com\u003e"},{"line_number":29,"context_line":"Co-Authored-By: John Schwarz \u003cjschwarz@redhat.com\u003e"},{"line_number":30,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"},{"line_number":31,"context_line":"Depends-On: I7cb61f30689dff2d7895d444060dedc1532a63ec"},{"line_number":32,"context_line":"Depends-On: I67c1323267aaf7e49f4a359ff50b94e52dba4380"},{"line_number":33,"context_line":"Needed-By: I25ad60c1b9a66e568276a772b8c496987d9f8299"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":56,"id":"1af94dfe_547fb265","line":30,"updated":"2016-03-17 12:33:27.000000000","message":"I suggest we clean up the deps list since now all are fullfilled.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b7a7115ae530fcb9440de5ba5be1815f70a622f5","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Co-Authored-By: Victor Howard \u003cvictor.r.howard@gmail.com\u003e"},{"line_number":26,"context_line":"Co-Authored-By: Margaret Frances \u003cmargaret_frances@cable.comcast.com\u003e"},{"line_number":27,"context_line":"Co-Authored-By: James Reeves \u003cjames.reeves5546@gmail.com\u003e"},{"line_number":28,"context_line":"Co-Authored-By: Miguel Angel Ajo \u003cmangelajo@redhat.com\u003e"},{"line_number":29,"context_line":"Co-Authored-By: John Schwarz \u003cjschwarz@redhat.com\u003e"},{"line_number":30,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"},{"line_number":31,"context_line":"Depends-On: I7cb61f30689dff2d7895d444060dedc1532a63ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":57,"id":"1af94dfe_dde63914","line":28,"updated":"2016-03-17 15:31:14.000000000","message":"While at this, please remove me as Co-Author, my contribution here is just pushing a bit to help with some issues, but I can\u0027t consider myself a moral author of it :) and I think I don\u0027t deserve the credit on form of LOC counts :)","commit_id":"9a6c9037c1b26622a5f245b345fd09519e7222d6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b7a7115ae530fcb9440de5ba5be1815f70a622f5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Co-Authored-By: James Reeves \u003cjames.reeves5546@gmail.com\u003e"},{"line_number":28,"context_line":"Co-Authored-By: Miguel Angel Ajo \u003cmangelajo@redhat.com\u003e"},{"line_number":29,"context_line":"Co-Authored-By: John Schwarz \u003cjschwarz@redhat.com\u003e"},{"line_number":30,"context_line":"Depends-On: I3fb49ae6fe237a926225b508bc8f0286426bf532"},{"line_number":31,"context_line":"Depends-On: I7cb61f30689dff2d7895d444060dedc1532a63ec"},{"line_number":32,"context_line":"Depends-On: I67c1323267aaf7e49f4a359ff50b94e52dba4380"},{"line_number":33,"context_line":"Needed-By: I25ad60c1b9a66e568276a772b8c496987d9f8299"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":57,"id":"1af94dfe_dd7bd926","line":30,"updated":"2016-03-17 15:31:14.000000000","message":"All those depends-on lines can be removed now.","commit_id":"9a6c9037c1b26622a5f245b345fd09519e7222d6"}],"doc/source/devref/quality_of_service.rst":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":311,"context_line":"which we may explore in the future, but which will need to be used in"},{"line_number":312,"context_line":"combination with openflow rules."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"The Open vSwitch DSCP marking implementation relies on the following "},{"line_number":315,"context_line":"ovs-agent functions:"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"* get_dscp_mark_for_port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a8ffd7b_1929469b","line":314,"updated":"2015-12-03 12:36:59.000000000","message":"red thingy","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":311,"context_line":"which we may explore in the future, but which will need to be used in"},{"line_number":312,"context_line":"combination with openflow rules."},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"The Open vSwitch DSCP marking implementation relies on the following "},{"line_number":315,"context_line":"ovs-agent functions:"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"* get_dscp_mark_for_port"}],"source_content_type":"text/x-rst","patch_set":2,"id":"9a8ffd7b_c52e7142","line":314,"in_reply_to":"9a8ffd7b_1929469b","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"06396d6ae68714ba1406f6a2a2a2ded705c94a36","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbps."},{"line_number":162,"context_line":"* QosDscpMarkRule: defines the the DSCP rule type, characterized by an integer"},{"line_number":163,"context_line":"  between 0 and 63 (examples: 0, 8, 10, 12, 14, or 16)."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"9aed3d3a_c347c149","line":161,"range":{"start_line":161,"start_character":32,"end_line":161,"end_character":36},"updated":"2016-02-26 16:50:58.000000000","message":"kbits (as per previous conversations)","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"eb07b46a2ded55da40f22b974cdfe2fd7386581b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbps."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an integer"},{"line_number":163,"context_line":"  between 0 and 63 (examples: 0, 8, 10, 12, 14, or 16)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Those are defined in:"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"5a5ae5dd_7cf82f4a","line":163,"updated":"2016-02-09 05:32:47.000000000","message":"63? I believe we only support 0 and even numbers from 8-56 excluding 50, 52 \u0026 54","commit_id":"2f3d257645a9339478f5abe5b33fe896577f204a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"69e1b4a633c844e129a3a4d9fca60229aae35992","unresolved":false,"context_lines":[{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbps."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an integer"},{"line_number":163,"context_line":"  between 0 and 63 (examples: 0, 8, 10, 12, 14, or 16)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Those are defined in:"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"5a5ae5dd_d2f7b98a","line":163,"in_reply_to":"5a5ae5dd_7cf82f4a","updated":"2016-02-09 13:51:42.000000000","message":"42 and 44 are also not valid.","commit_id":"2f3d257645a9339478f5abe5b33fe896577f204a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"4ccfbbf331918eff181826a631e2b23034371184","unresolved":false,"context_lines":[{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbps."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an integer"},{"line_number":163,"context_line":"  between 0 and 63 (examples: 0, 8, 10, 12, 14, or 16)."},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"Those are defined in:"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"3a57f1b5_ba40ee08","line":163,"in_reply_to":"5a5ae5dd_d2f7b98a","updated":"2016-02-09 21:44:26.000000000","message":"Done","commit_id":"2f3d257645a9339478f5abe5b33fe896577f204a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"For QoS, new neutron objects were implemented:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_1f838d99","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":44},"updated":"2016-02-28 09:40:38.000000000","message":"i was under the impression that this was egress. Is this documented anywhere?","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"For QoS, new neutron objects were implemented:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_63e4a3ab","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":44},"in_reply_to":"9aed3d3a_1f838d99","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":157,"context_line":"For QoS, new neutron objects were implemented:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_22e463aa","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":44},"in_reply_to":"9aed3d3a_1f838d99","updated":"2016-02-29 10:42:38.000000000","message":"egress\n\nThanks Gary, it\u0027s egress from the point of view of the VM, I\u0027d write it as \"instance-egress\" or something like that (you can see it from the POV of the switch too...) :)","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":157,"context_line":"For QoS, new neutron objects were implemented:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the ingress bandwidth limit rule type, characterized"},{"line_number":161,"context_line":"  by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_a3f06b68","line":160,"range":{"start_line":160,"start_character":37,"end_line":160,"end_character":44},"in_reply_to":"9aed3d3a_22e463aa","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"The Open vSwitch DSCP marking implementation relies on the recent addition"},{"line_number":318,"context_line":"of the ovs_agent_extension_api OVSAgentExtensionAPI to request access to the"},{"line_number":319,"context_line":"integration bridge functions:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* add_flow"},{"line_number":322,"context_line":"* mod_flow"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_df5f653f","line":319,"updated":"2016-02-28 09:40:38.000000000","message":"In which version of the OVS is this supported?","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"The Open vSwitch DSCP marking implementation relies on the recent addition"},{"line_number":318,"context_line":"of the ovs_agent_extension_api OVSAgentExtensionAPI to request access to the"},{"line_number":319,"context_line":"integration bridge functions:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* add_flow"},{"line_number":322,"context_line":"* mod_flow"}],"source_content_type":"text/x-rst","patch_set":28,"id":"9aed3d3a_7e0b968e","line":319,"in_reply_to":"9aed3d3a_df5f653f","updated":"2016-02-29 16:54:21.000000000","message":"I believe Open vSwitch always supported openflows.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the instance-egress bandwidth limit rule"},{"line_number":161,"context_line":"  type, characterized by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"},{"line_number":164,"context_line":"  of the IP header, and only certain configurations are valid.  As a result, the list"},{"line_number":165,"context_line":"  of valid DSCP rule types is: 0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-rst","patch_set":31,"id":"7af24918_e5496590","line":162,"range":{"start_line":162,"start_character":30,"end_line":162,"end_character":37},"updated":"2016-03-01 13:37:11.000000000","message":"the the","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the instance-egress bandwidth limit rule"},{"line_number":161,"context_line":"  type, characterized by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"},{"line_number":164,"context_line":"  of the IP header, and only certain configurations are valid.  As a result, the list"},{"line_number":165,"context_line":"  of valid DSCP rule types is: 0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-rst","patch_set":31,"id":"7af24918_7972207e","line":162,"range":{"start_line":162,"start_character":30,"end_line":162,"end_character":37},"in_reply_to":"7af24918_e5496590","updated":"2016-03-01 15:16:14.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a1352198222d45825abb6698eefdde1dfb2a5420","unresolved":false,"context_lines":[{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"},{"line_number":164,"context_line":"  of the IP header, and only certain configurations are valid.  As a result, the list"},{"line_number":165,"context_line":"  of valid DSCP rule types is: 0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"},{"line_number":166,"context_line":"  34, 36, 38, 40, 46, 48, and 56."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Those are defined in:"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":53,"id":"5aef4532_6df4d8f1","line":166,"updated":"2016-03-08 12:12:04.000000000","message":"is that taken from https://www.ietf.org/rfc/rfc2474.txt?","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"3ac77583c20455f12f0d550455f771b5100a631b","unresolved":false,"context_lines":[{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"},{"line_number":164,"context_line":"  of the IP header, and only certain configurations are valid.  As a result, the list"},{"line_number":165,"context_line":"  of valid DSCP rule types is: 0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"},{"line_number":166,"context_line":"  34, 36, 38, 40, 46, 48, and 56."},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Those are defined in:"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-rst","patch_set":53,"id":"5aef4532_68b166e1","line":166,"in_reply_to":"5aef4532_6df4d8f1","updated":"2016-03-08 12:41:48.000000000","message":"The descriptions are split between RFC2474, RFC2597, RFC3246, and RFC5865.  The IANA is the curator of the authoritative list: http://www.iana.org/assignments/dscp-registry/dscp-registry.xhtml","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"e6f1f76d9cf8c269491c268b2963082808d23b73","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* QosPolicy: directly maps to the conceptual policy resource, as defined above."},{"line_number":160,"context_line":"* QosBandwidthLimitRule: defines the instance-egress bandwidth limit rule"},{"line_number":161,"context_line":"  type, characterized by a max kbps and a max burst kbits."},{"line_number":162,"context_line":"* QosDscpMarkingRule: defines the DSCP rule type, characterized by an even integer"},{"line_number":163,"context_line":"  between 0 and 56.  These integers are the result of the bits in the DiffServ section"},{"line_number":164,"context_line":"  of the IP header, and only certain configurations are valid.  As a result, the list"}],"source_content_type":"text/x-rst","patch_set":54,"id":"5aef4532_768c9b7f","line":161,"range":{"start_line":161,"start_character":27,"end_line":161,"end_character":57},"updated":"2016-03-08 18:16:04.000000000","message":"kbps/kbits inconsistency","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"817c9007719b50dd81b3ac54c34bd58d92c40d6e","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def __exit__(self, exc_type, exc_value, exc_tb):"},{"line_number":572,"context_line":"        self.destroy()"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"class DeferredOVSBridge(object):"},{"line_number":576,"context_line":"    \u0027\u0027\u0027Deferred OVSBridge."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_8cecad90","side":"PARENT","line":573,"updated":"2015-12-01 10:07:53.000000000","message":"?","commit_id":"5b804251aceb9db2d226f11c03b8b1ebc2fe7fa7"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec1ec6c2ab884edc268322904b8cef856544374f","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def __exit__(self, exc_type, exc_value, exc_tb):"},{"line_number":572,"context_line":"        self.destroy()"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"class DeferredOVSBridge(object):"},{"line_number":576,"context_line":"    \u0027\u0027\u0027Deferred OVSBridge."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_f4729be2","side":"PARENT","line":573,"in_reply_to":"9a8ffd7b_8cecad90","updated":"2015-12-02 13:27:29.000000000","message":"I removed this by mistake I\u0027ve added it back in.","commit_id":"5b804251aceb9db2d226f11c03b8b1ebc2fe7fa7"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"957fd9fcc2a5053f9091dfe1e1a843ee0b4eee1a","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_02bdcad6","line":574,"updated":"2015-12-01 17:06:14.000000000","message":"Don\u0027t multiply by 4. Instead please use bit shift operator. Also, it is worth mentioning *why* you are doing this - in the ovs-ofctl manpage there is the following:\n\n\n      Matches IP ToS/DSCP or IPv6 traffic class field  tos,  which  is\n      specified  as  a  decimal  number  between 0 and 255, inclusive.\n      Note that the two lower reserved bits are ignored  for  matching\n      purposes.\n\nhttp://manpages.ubuntu.com/manpages/precise/man8/ovs-ofctl.8.html\n\nIt\u0027s worth documenting for those that don\u0027t know.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"817c9007719b50dd81b3ac54c34bd58d92c40d6e","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4cf56581","line":574,"range":{"start_line":574,"start_character":13,"end_line":574,"end_character":21},"updated":"2015-12-01 10:07:53.000000000","message":"openflow logic belongs to ovs-agent [1] rather than ovs_lib\nthese days.\n\n[1] neutron/plugins/ml2/drivers/openvswitch/agent/openflow","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec1ec6c2ab884edc268322904b8cef856544374f","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_37aee598","line":574,"in_reply_to":"9a8ffd7b_02bdcad6","updated":"2015-12-02 13:27:29.000000000","message":"Done","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"720e47e4134cdb7f8ef1d18b9e2934b7b9b81b90","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_37caaa50","line":574,"in_reply_to":"9a8ffd7b_4cf56581","updated":"2015-12-01 10:14:59.000000000","message":"I\u0027ll move the code, I was basing it off where the original QoS bandwidth limit functions were placed.\nThank you :)","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"817c9007719b50dd81b3ac54c34bd58d92c40d6e","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        print(\"DSCP_GET\")"},{"line_number":582,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":583,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":584,"context_line":"        mark_line \u003d self.run_ofctl(\"dump-flows\",[\"cookie\u003d0x042/-1,table\u003d0,in_port\u003d\"+str(port)])"},{"line_number":585,"context_line":"        if mark_line \u003d\u003d None:"},{"line_number":586,"context_line":"            print(\"Mark_line \u003d None\")"},{"line_number":587,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_f74ae254","line":584,"range":{"start_line":584,"start_character":50,"end_line":584,"end_character":56},"updated":"2015-12-01 10:07:53.000000000","message":"cookies are used by ovs-agent for other purpose these days.\n(\"agent_uuid_stamp\")","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"720e47e4134cdb7f8ef1d18b9e2934b7b9b81b90","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        print(\"DSCP_GET\")"},{"line_number":582,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":583,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":584,"context_line":"        mark_line \u003d self.run_ofctl(\"dump-flows\",[\"cookie\u003d0x042/-1,table\u003d0,in_port\u003d\"+str(port)])"},{"line_number":585,"context_line":"        if mark_line \u003d\u003d None:"},{"line_number":586,"context_line":"            print(\"Mark_line \u003d None\")"},{"line_number":587,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_97e11601","line":584,"in_reply_to":"9a8ffd7b_f74ae254","updated":"2015-12-01 10:14:59.000000000","message":"I was using them that way originally but was having difficulty deleting exclusively the Dscp rule. At the time it was just easier to mark it with a constant cookie and use that to search it out and Delete/Get the flow.\nI\u0027ll make the change now.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"7228449190f00cd7907f7891c43aeb1f7d17c0ae","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_7b5d4678","line":617,"updated":"2015-12-02 03:21:34.000000000","message":"I think that the work done in delete_dscp_mark_for_port--where you remove not a flow entry but specifically the mod_nw_tos action in the entry--is the right approach, because it preserves the entry’s other existing actions, including its output action.  \n\nI think (emphasis on think) that we want to carry that approach across the other use cases here: for instance, a request to add a DSCP mark would result in adding a mod_nw_tos action to any flow entry that exists for that in_port—or changing the value of the mod_nw_tos action if that action type already exists in the entry—but in either case leaving all other actions for the entry undisturbed.\n\nRelated to this, I‘ve seen multiple flow entries for a given qvo port that seem legitimate (for instance, ones that resubmit icmp6 traffic to a separate table for further filtering).  Maybe the examples I’ve seen aren’t actually legitimate because my set-up is wrong, but could there be legitimate cases of multiple entries, for a given qvo port, that are already in existence before DSCP marking activity is requested?  I think this is the dilemma that prompted you to use cookie as an effective identifier for a flow entry.  But instead could you fetch the desired entries using dump-flows for the in_port, modify the action set of each returned entry to add/change/delete the mod_nw_tos action as appropriate, and then perform a (strict) mod_flows to get the changed action set in place, using table_id, cookie, and priority, along with the normal match fields, to identify the entry? In the case of an add-mark request, an add_flow would occur only if the in_port doesn’t already have any flow entries.  And in the case of a delete-mark request, I don’t think del-flows would be used at all, because “mod_nw_tos:\u003csomething\u003e,NORMAL” would be changed to “,NORMAL” (under the assumption that it may not have been DSCP-marking activity that produced the “NORMAL”).\n\nI’m not all that confident in what I said because I’m not sure how this is hooked together or how it should behave.  So my questions here really are questions and my “thinks” really are just thinks.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"5e937b2270f9e42692757752f95348372c490a67","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_54403034","line":617,"in_reply_to":"9a8ffd7b_34ea63ad","updated":"2015-12-02 16:17:42.000000000","message":"Excellent.  I’m going to think carefully about what you said and continue to work on this issue.  I’ll let you know if I come up with anything that I think might help us move this problem forward.\n\nMy understanding from the OpenFlow specs is that a switch needs to support a table-miss entry but doesn’t require one, and from the OvS manual (see the section that starts “mod-table switch table_id setting”) that if a table-miss entry is absent the default configuration is to move an uncaught packet to the next table if there is one and to the controller otherwise--though that configured default may be overridden on a table-by-table basis to specify some other behavior.  If I read these things right, then it may be that a DSCP-delete request should cause a flow entry to be removed iff the mod_nw_tos action is the entry’s only non-output action AND the output action matches whatever is the table’s table-miss action (or the table’s default if there’s no table-miss entry).  I don’t know…this seems pretty turgid.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec1ec6c2ab884edc268322904b8cef856544374f","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_34ea63ad","line":617,"in_reply_to":"9a8ffd7b_7b5d4678","updated":"2015-12-02 13:27:29.000000000","message":"You have pretty much nailed what I was going for.\nYou\u0027re right about the multiple flow entries per port, there are flows to separate out the arp and icmp6 requests and send them to other flow tables and drop them (I think).\n\nUnfortunately how it handles the traffic is a catch all with the lowest priority where if it isn\u0027t caught by another flow it will just be sent as normal. \n\nI can\u0027t modify the catch all because all the other traffic would be marked as well so I create a flow just for that port that has a slightly higher priority.\nThe reason why I did it this way is because there will probably be other QoS rules in the future that use flows and I was hoping to just add all the other QoS actions for a port onto one flow rather than multiple flows (which only one can be triggered at a time [the more detail the higher priority it has inside a given priority]).\n\nI set it to delete the \"QoS flow\" if there isn\u0027t another QoS action in that flow so it will be handled like other normal traffic.\n\nHowever I can\u0027t use the cookies anymore and priority can\u0027t be used as a field for searching flows so I\u0027m meeting with someone tomorrow who can hopefully show me a better solution for searching out only the \"QoS flow\".\nI hope I\u0027ve answered your question and look forward to hearing from you on later iterations of my code :)","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def __exit__(self, exc_type, exc_value, exc_tb):"},{"line_number":572,"context_line":"        self.destroy()"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"class DeferredOVSBridge(object):"},{"line_number":576,"context_line":"    \u0027\u0027\u0027Deferred OVSBridge."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_59f7ced2","side":"PARENT","line":573,"updated":"2015-12-03 12:36:59.000000000","message":"unrelated change","commit_id":"5b804251aceb9db2d226f11c03b8b1ebc2fe7fa7"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":570,"context_line":""},{"line_number":571,"context_line":"    def __exit__(self, exc_type, exc_value, exc_tb):"},{"line_number":572,"context_line":"        self.destroy()"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"class DeferredOVSBridge(object):"},{"line_number":576,"context_line":"    \u0027\u0027\u0027Deferred OVSBridge."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_258dfdd2","side":"PARENT","line":573,"in_reply_to":"9a8ffd7b_59f7ced2","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"5b804251aceb9db2d226f11c03b8b1ebc2fe7fa7"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":565,"context_line":"            port_name, 0, 0)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d6f38d71","line":567,"updated":"2015-12-03 12:36:59.000000000","message":"I need to admit that code is ugly. Details below.\n\nAlso the code should get functional test coverage. I actually suggest to split the patch into reviewable pieces (ovslib changes; models; objects; API; ...)","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":564,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":565,"context_line":"            port_name, 0, 0)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_457fe114","line":567,"in_reply_to":"9a8ffd7b_d6f38d71","updated":"2015-12-03 15:24:31.000000000","message":"I have completely redone this part of the code for this exact reason.\nI haven\u0027t move it out of ovs-lib yet so I can upload it before I move the code to the ovs-agent.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            port_name, 0, 0)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f6fa5142","line":568,"updated":"2015-12-03 12:36:59.000000000","message":"please remove all prints. If needed, we may have some debug logs instead.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":565,"context_line":"            port_name, 0, 0)"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_c5919148","line":568,"in_reply_to":"9a8ffd7b_f6fa5142","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_560a3d27","line":571,"updated":"2015-12-03 12:36:59.000000000","message":"Technically, later add_flow may be implemented without using ovs-ofctl, so please remove the reference to the binary.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":568,"context_line":"        print(\"DSCP_SET\")"},{"line_number":569,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_45fb6179","line":571,"in_reply_to":"9a8ffd7b_560a3d27","updated":"2015-12-03 15:24:31.000000000","message":"without the cookie to distinguish the DSCP flow from the others I\u0027ve had to use the --strict option which I can\u0027t use with add_flow.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_b665a91e","line":573,"updated":"2015-12-03 12:36:59.000000000","message":"overwrite (no space); define \u0027tos\u0027","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        print(\"port_num: \"+str(port)+\", mark value: \"+ str(mark))"},{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_2543bdb0","line":573,"in_reply_to":"9a8ffd7b_b665a91e","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":571,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":572,"context_line":"        #mark needs to be multiplied by 4 because it can only be set to a multiple of 4"},{"line_number":573,"context_line":"        #to not over write the lower 2 bits if tos."},{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_99a6960d","line":574,"updated":"2015-12-03 12:36:59.000000000","message":"I believe that hardcoded cookie is the reason why you loose flows on the bridge: agent clean up \u0027stale\u0027 flows, and \u0027stale\u0027 flows are flows that use cookies that are different from agent uuid. Anyway, why this specific hardcoded value?\n\nWe probably need a mechanism for agents to collect additional cookies that it should consider not \u0027stale\u0027.\n\nHow do you select priority here? Why 2? I suspect that\u0027s another thing that should be abstracted into some agent API calls that would manage proper order for flows for you depending on the nature of flows (whether they redirect or just modify packets and pass to the next rule).\n\nAlso, please add spaces after commas, as per PEP8 rules.\n\nPlease also abstract action calculation into some helper function so that we hide ugly + details there, and reuse it in other code that may touch the action.\n\nAlso, please don\u0027t hardcode things like NORMAL, instead use constants for them.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("},{"line_number":578,"context_line":"            port_name, mark)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def get_dscp_mark_for_port(self, port_name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d9bbbec2","line":577,"updated":"2015-12-03 12:36:59.000000000","message":"What\u0027s the reason we introduce thta _set method if it\u0027s used once here only?","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":574,"context_line":"        self.add_flow(cookie\u003d0x042,priority\u003d2,in_port\u003dstr(port),table\u003d0,actions\u003d\"mod_nw_tos:\"+str(mark*4)+\",NORMAL\")"},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":577,"context_line":"        self._set_dscp_mark_for_port("},{"line_number":578,"context_line":"            port_name, mark)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def get_dscp_mark_for_port(self, port_name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_85cf0928","line":577,"in_reply_to":"9a8ffd7b_d9bbbec2","updated":"2015-12-03 15:24:31.000000000","message":"The original code was just a PoC, I\u0027ve updated _set so it can search for a flow that might already have this functionality and update it rather than just creating a new one.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":583,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":584,"context_line":"        mark_line \u003d self.run_ofctl(\"dump-flows\",[\"cookie\u003d0x042/-1,table\u003d0,in_port\u003d\"+str(port)])"},{"line_number":585,"context_line":"        if mark_line \u003d\u003d None:"},{"line_number":586,"context_line":"            print(\"Mark_line \u003d None\")"},{"line_number":587,"context_line":"            return None"},{"line_number":588,"context_line":"        mark \u003d mark_line.partition(\"mod_nw_tos:\")[2].partition(\u0027,\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_194386b0","line":585,"updated":"2015-12-03 12:36:59.000000000","message":"Don\u0027t do \u003d\u003d for None in python. You should use if .. is None since None is singleton in Python.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":585,"context_line":"        if mark_line \u003d\u003d None:"},{"line_number":586,"context_line":"            print(\"Mark_line \u003d None\")"},{"line_number":587,"context_line":"            return None"},{"line_number":588,"context_line":"        mark \u003d mark_line.partition(\"mod_nw_tos:\")[2].partition(\u0027,\u0027)[0]"},{"line_number":589,"context_line":"        print(\"Mark: \"+str(mark))"},{"line_number":590,"context_line":"        return str(int(mark)/4) or None"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_39fbea7a","line":588,"updated":"2015-12-03 12:36:59.000000000","message":"use regexps to parse lines properly.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":587,"context_line":"            return None"},{"line_number":588,"context_line":"        mark \u003d mark_line.partition(\"mod_nw_tos:\")[2].partition(\u0027,\u0027)[0]"},{"line_number":589,"context_line":"        print(\"Mark: \"+str(mark))"},{"line_number":590,"context_line":"        return str(int(mark)/4) or None"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def delete_dscp_mark_for_port(self, port_name):"},{"line_number":593,"context_line":"        print(\"DSCP_DELETE\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_79e5f2d9","line":590,"updated":"2015-12-03 12:36:59.000000000","message":"that /4 would need explanation with comments etc.\n\nAnd when is this \u0027or None\u0027 triggered? You can\u0027t get an empty string from str(int(x)), it\u0027s always some str of len \u003e 0.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        print(\"DSCP_DELETE\")"},{"line_number":594,"context_line":"        port \u003d self._get_port_ofport(port_name)"},{"line_number":595,"context_line":"        #port contains the ovs-ofctl in_port value"},{"line_number":596,"context_line":"        mark_line \u003d self.run_ofctl(\"dump-flows\",[\"cookie\u003d0x042/-1,table\u003d0,in_port\u003d\"+str(port)])"},{"line_number":597,"context_line":"        if mark_line \u003d\u003d None:"},{"line_number":598,"context_line":"            print(\"Mark_line \u003d None\")"},{"line_number":599,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d965fe44","line":596,"updated":"2015-12-03 12:36:59.000000000","message":"you duplicate code here. it\u0027s the same in like 584.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":603,"context_line":"            self.run_ofctl(\"del-flows\",[\"cookie\u003d0x042/-1,table\u003d0,in_port\u003d\"+str(port)])"},{"line_number":604,"context_line":"            print(\"Mark[2] \u003d NORMAL\")"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            action \u003d mark_line.partition(\u0027actions\u003d\u0027)[2]"},{"line_number":607,"context_line":"            actions \u003d action.split(\u0027,\u0027)"},{"line_number":608,"context_line":"            acts \u003d \"\""},{"line_number":609,"context_line":"            for act in actions:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d9a65ec0","line":606,"updated":"2015-12-03 12:36:59.000000000","message":"That\u0027s ugly. Please use regexps to parse lines. And again, hide it behind some helper method interface.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":606,"context_line":"            action \u003d mark_line.partition(\u0027actions\u003d\u0027)[2]"},{"line_number":607,"context_line":"            actions \u003d action.split(\u0027,\u0027)"},{"line_number":608,"context_line":"            acts \u003d \"\""},{"line_number":609,"context_line":"            for act in actions:"},{"line_number":610,"context_line":"                if \"mod_nw_tos\" in act:"},{"line_number":611,"context_line":"                    pass"},{"line_number":612,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_f9fa4242","line":609,"updated":"2015-12-03 12:36:59.000000000","message":"So that code seems to be generic for all cases when we want to remove an action from a flow. So let\u0027s have it put in a separate method and use it from there.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d9d89e55","line":617,"updated":"2015-12-03 12:36:59.000000000","message":"What does /-1 mean here?","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_89ee4320","line":617,"in_reply_to":"9a8ffd7b_d9d89e55","updated":"2015-12-03 15:24:31.000000000","message":"It\u0027s a bit mask, -1 sets all the bits in the mask to 1 and compares cookie to the cookies of the flows, if the cookies are 0x042 after the mask they qualify for the mod. without it, it changes the cookie on all flows to 0x042 instead.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"3643fbdcc28cfe2fb49541269293ae6ab5451d1e","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"},{"line_number":621,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_13f4e358","line":618,"updated":"2015-12-03 00:22:34.000000000","message":"Hi again.  I’ve been working on this problem today with my colleague Charles, who is worried that the mod_nw_tos actions that are put in place in the way I described earlier could get removed by some other plugin (or something).  He thought we should come up with a flow entry that would always get exercised but that wouldn’t affect pipeline processing in any other way.  Here’s a way I think it might work.  Let me know what you think:\n\n```sudo ovs-ofctl add-flow br-int \"hard_timeout\u003d0,idle_timeout\u003d0,priority\u003d65535,in_port\u003d6,reg2\u003d0,actions\u003dload:55-\u003eNXM_NX_REG2[0..5],mod_nw_tos:104,resubmit(,0)”```\n\nTranslation: create a high-priority flow entry for table 0 with a register as one of the match fields.  Since OvS guarantees that all registers of a packet are set to 0 when the packet first enters the switch, everything for in_port 6 will match this entry in the first go-around.  The actions include setting that register to something other than 0, adding the dscp mark, and then re-submitting the packet back into table 0, where now the packet won’t match this entry, and instead \u003cwhatever else is supposed to happen\u003e happens.\n\nIt would be better if the flow entry matched on a tos value of !104, but it looks like you need conjunction to do this sort of thing and my version of OvS doesn’t have that.  Also, I don’t like the idea of reserving a priority in this way, even if it’s configurable—but maybe that’s just using OpenFlow priorities as intended, I don’t know.  I can think of other downsides, too, but think they’re not specific to this idea.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"},{"line_number":621,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_97c98c28","line":618,"in_reply_to":"9a8ffd7b_13f4e358","updated":"2015-12-03 15:24:31.000000000","message":"It sounds like a reasonable Idea, I\u0027m not an expert on OvS myself but I\u0027d just be afraid the register might be used by something else and make it skip the flow.\nOne of the idea\u0027s I was thinking of using was another ovs table for specifically QoS flows.\nI found (entirely by mistake) that when I added flows to table 23 they weren\u0027t being deleted so all we would need to do is modify the low priority NORMAL to a resubmit to table 23 and have a NORMAL at the lowest priority of that table. This might also help with parsing and if we use flows later on for complex traffic shaping having a dedicated ovs table might be ideal if we are modifying multiple flows at once.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            acts.rstrip(\u0027,\u0027)"},{"line_number":616,"context_line":"            print(acts)"},{"line_number":617,"context_line":"            self.mod_flow(cookie\u003d0x042/-1,in_port\u003dstr(port),actions\u003dstr(acts))"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def __enter__(self):"},{"line_number":620,"context_line":"        self.create()"},{"line_number":621,"context_line":"        return self"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_3961aa05","line":618,"in_reply_to":"9a8ffd7b_13f4e358","updated":"2015-12-03 12:36:59.000000000","message":"We need to rethink how we set orders of features in flow tables. That\u0027s something we need to handle generally for all features that may need to tinker with bridge flows, not just dscp.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"0ead75ba5fff9617e901ae2a46c5df9ec8bdeda1","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":567,"context_line":"            port_name, 0, 0)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":570,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":571,"context_line":"            msg \u003d _(\"Please supply a valid DSCP mark\")"},{"line_number":572,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_539f1a50","line":569,"updated":"2015-12-10 20:35:04.000000000","message":"This private method is used just once elsewhere.  Can/should it be wrapped into create_dscp_mark_for_port()?","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"270b588602f953210c0fd6848ca9a3e50f88fbdd","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":567,"context_line":"            port_name, 0, 0)"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _set_dscp_mark_for_port(self, port_name, mark):"},{"line_number":570,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":571,"context_line":"            msg \u003d _(\"Please supply a valid DSCP mark\")"},{"line_number":572,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_8beb9412","line":569,"in_reply_to":"7a740942_539f1a50","updated":"2015-12-14 16:51:44.000000000","message":"Done","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"0ead75ba5fff9617e901ae2a46c5df9ec8bdeda1","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        for flow in flows:"},{"line_number":578,"context_line":"            if \"priority\u003d1 \" in flow:"},{"line_number":579,"context_line":"                actions \u003d flow.partion(\"actions\u003d\")[2]"},{"line_number":580,"context_line":"                acts \u003d actions.split(\u0027,\u0027)"},{"line_number":581,"context_line":"                actions \u003d \"mod_nw_tos:\" + str(mark \u003c\u003c 2) + \",\""},{"line_number":582,"context_line":"                for act in acts:"},{"line_number":583,"context_line":"                    if \"mod_nw_tos:\" in act:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_d37c6aed","line":580,"updated":"2015-12-10 20:35:04.000000000","message":"The behavior in 574-579 is duplicated in 606-612 and in 622-628.  Can/should this functionality be moved to a private method?","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"270b588602f953210c0fd6848ca9a3e50f88fbdd","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        for flow in flows:"},{"line_number":578,"context_line":"            if \"priority\u003d1 \" in flow:"},{"line_number":579,"context_line":"                actions \u003d flow.partion(\"actions\u003d\")[2]"},{"line_number":580,"context_line":"                acts \u003d actions.split(\u0027,\u0027)"},{"line_number":581,"context_line":"                actions \u003d \"mod_nw_tos:\" + str(mark \u003c\u003c 2) + \",\""},{"line_number":582,"context_line":"                for act in acts:"},{"line_number":583,"context_line":"                    if \"mod_nw_tos:\" in act:"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_6b42e810","line":580,"in_reply_to":"7a740942_d37c6aed","updated":"2015-12-14 16:51:44.000000000","message":"I\u0027ve made _set_dscp have generic functionality so it can work for both delete and create","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"0ead75ba5fff9617e901ae2a46c5df9ec8bdeda1","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                        actions +\u003d act + \",\""},{"line_number":587,"context_line":"                actions.rstrip(\",\")"},{"line_number":588,"context_line":"                self.run_ofctl(\"mod-flows\","},{"line_number":589,"context_line":"                        [\"--strict table\u003d0,in_port\u003d\" + str(port) +"},{"line_number":590,"context_line":"                         \",actions\u003d\" + str(actions)])"},{"line_number":591,"context_line":"                return None"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_53363ae8","line":589,"updated":"2015-12-10 20:35:04.000000000","message":"The match fields for any of the returned flow entries in dump-flows may be a proper superset of table\u003d0 and in_port\u003d\u003cport\u003e.  So I would suggest retaining the match fields for each entry and then using that in each of the mod-flows calls.","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"270b588602f953210c0fd6848ca9a3e50f88fbdd","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                        actions +\u003d act + \",\""},{"line_number":587,"context_line":"                actions.rstrip(\",\")"},{"line_number":588,"context_line":"                self.run_ofctl(\"mod-flows\","},{"line_number":589,"context_line":"                        [\"--strict table\u003d0,in_port\u003d\" + str(port) +"},{"line_number":590,"context_line":"                         \",actions\u003d\" + str(actions)])"},{"line_number":591,"context_line":"                return None"},{"line_number":592,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_e17fc914","line":589,"in_reply_to":"7a740942_53363ae8","updated":"2015-12-14 16:51:44.000000000","message":"Dump-flows also leaves a lot of other information in that section, like idle-time, the number of bytes that have gone through and  number of packets. I don\u0027t think it would benefit keeping it at the moment.\nIn the future with more specific QoS rules (that target tcp/udp ports for example) this is a good Idea.","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"0ead75ba5fff9617e901ae2a46c5df9ec8bdeda1","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":596,"context_line":"        self.add_flow(cookie\u003dself.agent_uuid_stamp, priority\u003d1,"},{"line_number":597,"context_line":"                      in_port\u003dstr(port), table\u003d0,"},{"line_number":598,"context_line":"                      actions\u003d\"mod_nw_tos:\" + str(mark \u003c\u003c 2) + \",NORMAL\")"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":601,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_505ab051","line":598,"updated":"2015-12-10 20:35:04.000000000","message":"Because you also perform a \n\n   mark \u003c\u003c 2 \n\non 581, suggest performing the bit shifting once, before the for-loop and providing the comment there.","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"270b588602f953210c0fd6848ca9a3e50f88fbdd","unresolved":false,"context_lines":[{"line_number":595,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":596,"context_line":"        self.add_flow(cookie\u003dself.agent_uuid_stamp, priority\u003d1,"},{"line_number":597,"context_line":"                      in_port\u003dstr(port), table\u003d0,"},{"line_number":598,"context_line":"                      actions\u003d\"mod_nw_tos:\" + str(mark \u003c\u003c 2) + \",NORMAL\")"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def create_dscp_mark_for_port(self, port_name, mark):"},{"line_number":601,"context_line":"        self._set_dscp_mark_for_port("}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_cbe51c38","line":598,"in_reply_to":"7a740942_505ab051","updated":"2015-12-14 16:51:44.000000000","message":"Done","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"90738db1b41f46a90119dc7e113422bf71b7c7ae","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \u0027datapath_types\u0027: [],"},{"line_number":60,"context_line":"    \u0027iface_types\u0027: [],"},{"line_number":61,"context_line":"}"},{"line_number":62,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"},{"line_number":63,"context_line":"                    34, 36, 38, 40, 46, 48, 56]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def _ofport_result_pending(result):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a7b0d38_fb086ddb","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":47},"updated":"2015-12-24 11:53:21.000000000","message":"I am not ovs expert, but according to the documentation\n\"Sets the DSCP bits in the IPv4 ToS/DSCP or  IPv6  traffic\nclass field to tos, which must be a multiple of 4 between\n0 and 255.\"\nso why not do that validation instead of the hard-coded one.","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"55a805ab995ecb9162af76854656de4c267f6b7c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \u0027datapath_types\u0027: [],"},{"line_number":60,"context_line":"    \u0027iface_types\u0027: [],"},{"line_number":61,"context_line":"}"},{"line_number":62,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"},{"line_number":63,"context_line":"                    34, 36, 38, 40, 46, 48, 56]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def _ofport_result_pending(result):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a7b0d38_d270ebde","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":47},"in_reply_to":"1a7b0d38_fb086ddb","updated":"2015-12-24 17:48:42.000000000","message":"Hi Moshe.  The incoming value here is a DSCP (dec) which gets converted (by bit-shifting, below) to the tos value.  But in either case, I\u0027ve wondered also about that sentence in the documentation, given http://bytesolutions.com/Support/Knowledgebase/KB_Viewer/ArticleId/34/DSCP-TOS-CoS-Presidence-conversion-chart.aspx.","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"668af78df564124ddae1784723a7b10ff08fa74d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \u0027datapath_types\u0027: [],"},{"line_number":60,"context_line":"    \u0027iface_types\u0027: [],"},{"line_number":61,"context_line":"}"},{"line_number":62,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"},{"line_number":63,"context_line":"                    34, 36, 38, 40, 46, 48, 56]"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def _ofport_result_pending(result):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_0ec4a03d","line":63,"range":{"start_line":62,"start_character":0,"end_line":63,"end_character":47},"in_reply_to":"1a7b0d38_fb086ddb","updated":"2016-01-06 12:11:58.000000000","message":"This is to check that valid dscp numbers are used. It can be any number between 0-63 but only some of the numbers within that range are considered \"valid\". \nThe multiple of 4 part is in reference to the lower 2 bits of the ToS field being for the ecn bits while the upper 6 are for dscp.","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"}],"neutron/agent/l2/extensions/qos.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"05825a658fbf0933e7f683110a171097a861ce15","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self._handle_update_create_rules(\u0027create\u0027, port, qos_policy)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def consume_api(self, agent_api):"},{"line_number":67,"context_line":"        pass"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def update(self, port, qos_policy):"},{"line_number":70,"context_line":"        \"\"\"Apply QoS rules on port."}],"source_content_type":"text/x-python","patch_set":26,"id":"bae84128_e9337860","line":67,"updated":"2016-02-23 08:15:34.000000000","message":"Plz add the doc-string and remove \u0027pass\u0027","commit_id":"45219f3d09289bccce94a09b98bd0d46bfb44147"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class QosAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":179,"context_line":"    SUPPORTED_RESOURCES \u003d [resources.QOS_POLICY]"},{"line_number":180,"context_line":"    agent_api \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def initialize(self, connection, driver_type):"},{"line_number":183,"context_line":"        \"\"\"Perform Agent Extension initialization."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_0881084b","line":180,"updated":"2016-03-01 13:37:11.000000000","message":"What\u0027s the reason to have it here, especially as a class attribute? consume_api is called before initialize(), so it\u0027s not needed.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class QosAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":179,"context_line":"    SUPPORTED_RESOURCES \u003d [resources.QOS_POLICY]"},{"line_number":180,"context_line":"    agent_api \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def initialize(self, connection, driver_type):"},{"line_number":183,"context_line":"        \"\"\"Perform Agent Extension initialization."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_f9a0f0a7","line":180,"in_reply_to":"7af24918_0881084b","updated":"2016-03-01 15:16:14.000000000","message":"If a test doesn\u0027t call consume_api then self.agent_api is never instantiated.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class QosAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":179,"context_line":"    SUPPORTED_RESOURCES \u003d [resources.QOS_POLICY]"},{"line_number":180,"context_line":"    agent_api \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def initialize(self, connection, driver_type):"},{"line_number":183,"context_line":"        \"\"\"Perform Agent Extension initialization."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_30cfe680","line":180,"in_reply_to":"7af24918_a01740ec","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"class QosAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":179,"context_line":"    SUPPORTED_RESOURCES \u003d [resources.QOS_POLICY]"},{"line_number":180,"context_line":"    agent_api \u003d None"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    def initialize(self, connection, driver_type):"},{"line_number":183,"context_line":"        \"\"\"Perform Agent Extension initialization."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_a01740ec","line":180,"in_reply_to":"7af24918_f9a0f0a7","updated":"2016-03-01 15:30:10.000000000","message":"That\u0027s a test issue. Fix the test.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"}],"neutron/db/migration/alembic_migrations/versions/liberty/expand/48153cb5f051_qos_db_changes.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"649436f55b86bbcf41c4f346c0232d2a14ec3ab0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        sa.Column(\u0027max_kbps\u0027, sa.Integer()),"},{"line_number":69,"context_line":"        sa.Column(\u0027max_burst_kbps\u0027, sa.Integer()))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    op.create_table("},{"line_number":72,"context_line":"        \u0027qos_dscp_mark_rules\u0027,"},{"line_number":73,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":74,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_e64a3555","line":71,"updated":"2015-12-01 10:38:07.000000000","message":"Do not change existing migrations. You need to create a new one.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        sa.Column(\u0027max_kbps\u0027, sa.Integer()),"},{"line_number":69,"context_line":"        sa.Column(\u0027max_burst_kbps\u0027, sa.Integer()))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    op.create_table("},{"line_number":72,"context_line":"        \u0027qos_dscp_mark_rules\u0027,"},{"line_number":73,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":74,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d6cced36","line":71,"updated":"2015-12-03 12:36:59.000000000","message":"No. You need to add a NEW script to add the model.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        sa.Column(\u0027max_kbps\u0027, sa.Integer()),"},{"line_number":69,"context_line":"        sa.Column(\u0027max_burst_kbps\u0027, sa.Integer()))"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    op.create_table("},{"line_number":72,"context_line":"        \u0027qos_dscp_mark_rules\u0027,"},{"line_number":73,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":74,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_b2184c1f","line":71,"in_reply_to":"9a8ffd7b_d6cced36","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"}],"neutron/db/migration/alembic_migrations/versions/mitaka/expand/45f8dd33480b_qos_dscp_db_addition.py":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bcd6e7edfed607816fb511de931b46c7b4d2f45e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027qos_dscp_marking_rules\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"},{"line_number":38,"context_line":"                  sa.ForeignKey(\u0027qos_policies.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, unique\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027dscp_mark\u0027, sa.Integer()))"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_ec3ae997","line":38,"updated":"2016-03-04 23:13:24.000000000","message":"am I right, or this simply means you could have added a column to qos_policies to contain a dscp marking? Do you envision adding more over time?","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"1719ff59c98ca192bf777e34e7a0dfea18bcad90","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027qos_dscp_marking_rules\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"},{"line_number":38,"context_line":"                  sa.ForeignKey(\u0027qos_policies.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, unique\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027dscp_mark\u0027, sa.Integer()))"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_2c18241d","line":38,"in_reply_to":"5aef4532_268357ce","updated":"2016-03-08 05:09:21.000000000","message":"ack","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"3c7f4dd926bc2a20fd556a0f39c7662da019748c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027qos_dscp_marking_rules\u0027,"},{"line_number":36,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), primary_key\u003dTrue),"},{"line_number":37,"context_line":"        sa.Column(\u0027qos_policy_id\u0027, sa.String(length\u003d36),"},{"line_number":38,"context_line":"                  sa.ForeignKey(\u0027qos_policies.id\u0027, ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, unique\u003dTrue),"},{"line_number":40,"context_line":"        sa.Column(\u0027dscp_mark\u0027, sa.Integer()))"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_268357ce","line":38,"in_reply_to":"7af24918_ec3ae997","updated":"2016-03-07 10:27:02.000000000","message":"Good question.\n\nIt\u0027s not done like that for two reasons:\n\n1st) the driver we\u0027re working with could not support DSCP, for example, and in that case, we just don\u0027t list the rule type as available, neither accept the rule at API level.\n\n2nd) We could have other type of rules, like for example DSCP filtering (VM sets the DSCP marks, and hypervisor openflow masks: enforces it\u0027s in the allowed ones, or removes), or DSCP translation (VM uses a subset, and hypervisor OF translates).\n\nThe whole QoS thing is modelled as rules that get added to policies, some rules will be compatible between them, and eventually we\u0027re going to hit incompatible rules which can\u0027t work together, and that will be blocked at API level.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"}],"neutron/db/qos/models.py":[{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    max_kbps \u003d sa.Column(sa.Integer)"},{"line_number":80,"context_line":"    max_burst_kbps \u003d sa.Column(sa.Integer)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class QosDscpMarkRule(models_v2.HasId, model_base.BASEV2):"},{"line_number":83,"context_line":"    __tablename__ \u003d \u0027qos_dscp_mark_rules\u0027"},{"line_number":84,"context_line":"    qos_policy_id \u003d sa.Column(sa.String(36),"},{"line_number":85,"context_line":"                              sa.ForeignKey(\u0027qos_policies.id\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_e25f6673","line":82,"updated":"2015-12-01 17:21:57.000000000","message":"If we\u0027re going against the spec already in review (https://review.openstack.org/#/c/190285/40/specs/mitaka/ml2-qos-with-dscp.rst), this would be QosDSCPMarkingRule","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"}],"neutron/extensions/qos.py":[{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                           **{\u0027mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_4d68e3ba","line":89,"updated":"2015-12-01 17:21:57.000000000","message":"Why the variation from the spec here?","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"ec1ec6c2ab884edc268322904b8cef856544374f","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                           **{\u0027mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_45e96eb6","line":89,"in_reply_to":"9a8ffd7b_4d68e3ba","updated":"2015-12-02 13:27:29.000000000","message":"It\u0027s unintentional, I\u0027ve fixed it and it should be up soon.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"06396d6ae68714ba1406f6a2a2a2ded705c94a36","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                 \u0027is_visible\u0027: True}"},{"line_number":65,"context_line":"    }"},{"line_number":66,"context_line":"}"},{"line_number":67,"context_line":"#TODO Tried using integer for validate type but caused errors"},{"line_number":68,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":69,"context_line":"    \u0027bandwidth_limit_rules\u0027: {"},{"line_number":70,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aed3d3a_23d14d58","line":67,"updated":"2016-02-26 16:50:58.000000000","message":"what do you mean?","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":84,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":85,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"},{"line_number":86,"context_line":"          **{\u0027dscp_mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_5f323511","line":86,"updated":"2016-02-28 09:40:38.000000000","message":"the indentation here is dodgy","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":84,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":85,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"},{"line_number":86,"context_line":"          **{\u0027dscp_mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_5e4852cc","line":86,"in_reply_to":"9aed3d3a_5f323511","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":86,"context_line":"          **{\u0027dscp_mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_5d07c6c9","line":89,"updated":"2016-02-29 10:42:38.000000000","message":"garky: do we have something here to validate a range?, I think values above 63 are invalid here.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @abc.abstractmethod"},{"line_number":242,"context_line":"    def get_policy_dscp_marking_rule(self, context, rule_id,"},{"line_number":243,"context_line":"                                  policy_id, fields\u003dNone):"},{"line_number":244,"context_line":"        pass"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_885238dc","line":243,"updated":"2016-03-01 13:37:11.000000000","message":"indentation here and below is borked.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    @abc.abstractmethod"},{"line_number":242,"context_line":"    def get_policy_dscp_marking_rule(self, context, rule_id,"},{"line_number":243,"context_line":"                                  policy_id, fields\u003dNone):"},{"line_number":244,"context_line":"        pass"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_39e7f8e5","line":243,"in_reply_to":"7af24918_885238dc","updated":"2016-03-01 15:16:14.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c8946a3e126060dc4ed06eae2e2302dd2473fa66","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                           **{\u0027dscp_mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_5c739de7","line":89,"updated":"2016-03-02 06:30:23.000000000","message":"i think that we need a new validate method to check the DSCP value (or even as a piece meal do a  check that this is less than 64)","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                           **{\u0027dscp_mark\u0027: {"},{"line_number":87,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":88,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":89,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":"}"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_ca4cfb72","line":89,"in_reply_to":"7af24918_5c739de7","updated":"2016-03-02 07:05:38.000000000","message":"It\u0027s checked later on the API call at rule creation, because they have a EnumField.\n\nIt\u0027s more complicated because it seems that not all in 0-63 can be used, only a subset.\n\nValidation is now here, triggered from plugin create/update calls: https://review.openstack.org/#/c/251738/35/neutron/objects/qos/rule.py@107","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _dscp_validation_error(data):"},{"line_number":33,"context_line":"    msg \u003d _(\"\u0027%(data)s\u0027 is not a valid dscp mark from: \""},{"line_number":34,"context_line":"            \"%(valid_dscp_marks)s\") % {\u0027data\u0027: data,"},{"line_number":35,"context_line":"                                       \u0027valid_dscp_marks\u0027:"},{"line_number":36,"context_line":"                                       rule.VALID_DSCP_MARKS}"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_bc5a4828","line":33,"range":{"start_line":33,"start_character":39,"end_line":33,"end_character":43},"updated":"2016-03-03 09:01:34.000000000","message":"DSCP","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _dscp_validation_error(data):"},{"line_number":33,"context_line":"    msg \u003d _(\"\u0027%(data)s\u0027 is not a valid dscp mark from: \""},{"line_number":34,"context_line":"            \"%(valid_dscp_marks)s\") % {\u0027data\u0027: data,"},{"line_number":35,"context_line":"                                       \u0027valid_dscp_marks\u0027:"},{"line_number":36,"context_line":"                                       rule.VALID_DSCP_MARKS}"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_d7cf2d27","line":33,"range":{"start_line":33,"start_character":39,"end_line":33,"end_character":43},"in_reply_to":"7af24918_bc5a4828","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bcd6e7edfed607816fb511de931b46c7b4d2f45e","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return _dscp_validation_error(data)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"attr.validators[\u0027type:dscp_mark\u0027] \u003d _validate_dscp_mark"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"QOS_PREFIX \u003d \"/qos\""}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_8c940545","line":53,"updated":"2016-03-04 23:13:24.000000000","message":"You should not modify validators like this, it\u0027s bad practice, if all you need is integer conversion then you have [1]\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L523","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0f2268d9fc3a88b1b5ec5dbb166cafe9440f4730","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return _dscp_validation_error(data)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"attr.validators[\u0027type:dscp_mark\u0027] \u003d _validate_dscp_mark"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"QOS_PREFIX \u003d \"/qos\""}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_2f248dad","line":53,"in_reply_to":"5aef4532_0c96084c","updated":"2016-03-08 09:40:28.000000000","message":"Ahh, wonderful!!!, I didn\u0027t know we were able to accept enums.\n\n   That makes perfect sense. Thanks for the pointers.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"1719ff59c98ca192bf777e34e7a0dfea18bcad90","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return _dscp_validation_error(data)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"attr.validators[\u0027type:dscp_mark\u0027] \u003d _validate_dscp_mark"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"QOS_PREFIX \u003d \"/qos\""}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_0c96084c","line":53,"in_reply_to":"5aef4532_269fd704","updated":"2016-03-08 05:09:21.000000000","message":"What I meant to say is that you can leverage what we have in order to validate an integer in a range, enum etc. It doesn\u0027t have to be specific to QoS.\n\nSorry, I realize I should have spelled this out a little more: to validate an enum of integers you can use [1][2]\n\n[1]https://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L96\n[2]https://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L757","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"21e8c7c0f9c3d82fb553ba476e23b32635b2922c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return _dscp_validation_error(data)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"attr.validators[\u0027type:dscp_mark\u0027] \u003d _validate_dscp_mark"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"QOS_PREFIX \u003d \"/qos\""}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_5e454c6e","line":53,"in_reply_to":"5aef4532_2f248dad","updated":"2016-03-08 10:24:35.000000000","message":"Done","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"3c7f4dd926bc2a20fd556a0f39c7662da019748c","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return _dscp_validation_error(data)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"attr.validators[\u0027type:dscp_mark\u0027] \u003d _validate_dscp_mark"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"QOS_PREFIX \u003d \"/qos\""}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_269fd704","line":53,"in_reply_to":"7af24918_8c940545","updated":"2016-03-07 10:27:02.000000000","message":"Ok,\n\nWe need to determine first: it\u0027s an integer, 2nd: it\u0027s within a set of valid options, \n\nWe had validation at object creation level to make sure it\u0027s within the list of valid integers (that in the end will return an API error), and IMHO it\u0027s good enough with that validation, as long as we translate the exception to \"InvalidInput\" for API.\n\nThe other option could be moving the DSCP mark validator to v2/attributes.py, but, it\u0027s weird to have QoS excention specific bits in the validator.\n\nOpinions here?\n\n\n[1] https://review.openstack.org/#/c/251738/51/neutron/objects/qos/rule.py@117","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bcd6e7edfed607816fb511de931b46c7b4d2f45e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"7af24918_ec92e94a","line":108,"updated":"2016-03-04 23:13:24.000000000","message":"this addition needs a new extension, otherwise it\u0027s not discoverable by clients, which won\u0027t know whether the server does have or does not have dscp support.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"85ea177563466245dfb329186a33c397acb24748","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_6a09902c","line":108,"in_reply_to":"5aef4532_54bb9f72","updated":"2016-03-07 15:24:56.000000000","message":"Side note: we have a TODO for enforcing rule types in the plugin, it just never happened because of how we run api job with mixed ml2 drivers.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"c56fc846fc5cd080c002913ba5f0e63aaf0fc73c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_caeee4eb","line":108,"in_reply_to":"5aef4532_6a09902c","updated":"2016-03-07 15:34:05.000000000","message":"Ok, so I\u0027m adding that for the list of things to handled during Newton. We should revive that discussion and find the best way to accomplish that while keeping in mind different types of backend ports (for ML2 it\u0027s vnic type, but for others it could be different, I guess we could provide an API on the QoS driver side to query that per port/sets of ports).","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"1719ff59c98ca192bf777e34e7a0dfea18bcad90","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_2c2dc4a7","line":108,"in_reply_to":"5aef4532_b47ca321","updated":"2016-03-08 05:09:21.000000000","message":"Ok, I see.\n\nThis is rather problematic because as you mention, if you add the marking rules like this (like you did for bw limit rules), then by contract everyone supporting this map will in turn accept requests for marking rules as well as any other rule associated to this map. Rejecting requests post-facto leads to a pretty defective API experience.\n\nHaving said that, the adopted approach of exposing capabilities like this makes accessing the capability suboptimal because there\u0027s no easy way of determining what the server\u0027s capabilities are. I suppose that\u0027s another example as to why a version based approach for the API would have been better.\n\nBottom line, I imagine you can leave this as is, even though this is pretty prone to the aforementioned issues and puts you into a corner.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"6de218ad080f2e7404ce56d2cc26f546de61455e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_54bb9f72","line":108,"in_reply_to":"5aef4532_b47ca321","updated":"2016-03-07 15:12:30.000000000","message":"There is a gap here, and we need to get to it in next iterations:\n\nEven for the same driver, different technologies won\u0027t support the same subset of rules. We currently report only the minimum subset, but for example if you\u0027re mixing SRIOV and OVS at this moment, you will only get bw-limiting, while, depending on your type of port (vnic type) you will get a different subset of rules. \n\nI think a possible plan here is to not to allow (API level) attaching ports to known-incompatible policies, and not to allow policies with attached ports to be modified in a port-incompatible way for those ports.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"5a37e37407c143f69203a822fbc35c45dd307696","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_c3efefae","line":108,"in_reply_to":"5aef4532_caeee4eb","updated":"2016-03-07 16:19:40.000000000","message":"Sorry, correction, vnic is part of the portbinding extension. Any other plugins could implement it, but, there could be different rule availability based on the plugin+vnic type.","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0ffcf8d85081011f75fcdd5c61fb26e674c5ae50","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: 0,"},{"line_number":106,"context_line":"                                  \u0027validate\u0027: {\u0027type:non_negative\u0027: None}}})"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":"    \u0027dscp_marking_rules\u0027: {"},{"line_number":109,"context_line":"        \u0027parent\u0027: {\u0027collection_name\u0027: \u0027policies\u0027,"},{"line_number":110,"context_line":"                   \u0027member_name\u0027: \u0027policy\u0027},"},{"line_number":111,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"}],"source_content_type":"text/x-python","patch_set":51,"id":"5aef4532_b47ca321","line":108,"in_reply_to":"7af24918_ec92e94a","updated":"2016-03-07 15:00:39.000000000","message":"For that purpose we introduced the rule types API that will provide the list of supported rules in the environment.\n\nhttps://review.openstack.org/#/c/251738/51/neutron/extensions/qos.py@88","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"c1272bdea37d65459bf34c3c992c239dfe26dcd6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \u0027parameters\u0027: dict(QOS_RULE_COMMON_FIELDS,"},{"line_number":88,"context_line":"                           **{\u0027dscp_mark\u0027: {"},{"line_number":89,"context_line":"                                  \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":90,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":91,"context_line":"                                  \u0027validate\u0027: {\u0027type:values\u0027: rule."},{"line_number":92,"context_line":"                                              VALID_DSCP_MARKS}}})"},{"line_number":93,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":52,"id":"5aef4532_57ac0fa0","line":90,"updated":"2016-03-08 11:28:55.000000000","message":"Don\u0027t we want to use here: \n\nhttps://github.com/openstack/neutron/blob/master/neutron/api/v2/attributes.py#L758\n\n?\n\nconvert_to_int ?","commit_id":"45d912e857c1cc71a589339b1ba521f971dd4840"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a1352198222d45825abb6698eefdde1dfb2a5420","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutron.plugins.common import constants"},{"line_number":28,"context_line":"from neutron.services.qos import qos_consts"},{"line_number":29,"context_line":"from neutron.services import service_base"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"QOS_PREFIX \u003d \"/qos\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_ad42603c","line":30,"updated":"2016-03-08 12:12:04.000000000","message":"you can drop this line if you respin","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"96a42188e999d8afa305f314df8d815f4b040728","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutron.plugins.common import constants"},{"line_number":28,"context_line":"from neutron.services.qos import qos_consts"},{"line_number":29,"context_line":"from neutron.services import service_base"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"QOS_PREFIX \u003d \"/qos\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_43e8cce2","line":30,"in_reply_to":"5aef4532_ad42603c","updated":"2016-03-08 15:29:32.000000000","message":"Done","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"658b2016fab943033b450fe5547c70d63d7de4c4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                                  \u0027convert_to\u0027: attr.convert_to_int,"},{"line_number":90,"context_line":"                                  \u0027is_visible\u0027: True, \u0027default\u0027: None,"},{"line_number":91,"context_line":"                                  \u0027validate\u0027: {\u0027type:values\u0027: rule."},{"line_number":92,"context_line":"                                              VALID_DSCP_MARKS}}})"},{"line_number":93,"context_line":"    }"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_9b1eb061","line":92,"updated":"2016-03-08 17:18:20.000000000","message":"(No action required) meh. Wrapping here is a bit unfortunate.","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"}],"neutron/objects/common_types.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f7be93b8444b35de149fd88a26c9163c42ad1877","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        super(IPV6ModeEnumField, self).__init__(**kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class IntegerEnum(obj_fields.Integer):"},{"line_number":35,"context_line":"    def __init__(self, valid_values\u003dNone, **kwargs):"},{"line_number":36,"context_line":"        if not valid_values:"},{"line_number":37,"context_line":"            msg \u003d _(\"No possible values specified\")"}],"source_content_type":"text/x-python","patch_set":61,"id":"1af94dfe_16f05c66","line":34,"updated":"2016-03-18 09:24:09.000000000","message":"nice!!","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f7be93b8444b35de149fd88a26c9163c42ad1877","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            valid_values\u003dconstants.VALID_DSCP_MARKS)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class DscpMarkField(obj_fields.AutoTypedField):"},{"line_number":74,"context_line":"    AUTO_TYPE \u003d DscpMark()"}],"source_content_type":"text/x-python","patch_set":61,"id":"1af94dfe_96dd8ce2","line":73,"updated":"2016-03-18 09:24:09.000000000","message":"wouldn\u0027t it be better to have a generic IntegerEnumField here, and then use that just in the DscpMark rule ? \n\nDscpMarkField doesn\u0027t seem super generic, we could reuse it in some other rules implementation, but I\u0027d guess not outside QoS.","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"33ebf9f917abd4d2661e532ede1a3db286d12d0c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            valid_values\u003dconstants.VALID_DSCP_MARKS)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class DscpMarkField(obj_fields.AutoTypedField):"},{"line_number":74,"context_line":"    AUTO_TYPE \u003d DscpMark()"}],"source_content_type":"text/x-python","patch_set":61,"id":"1af94dfe_aa013c08","line":73,"in_reply_to":"1af94dfe_96dd8ce2","updated":"2016-03-18 09:47:30.000000000","message":"Ok, let\u0027s leave the academic discussion for later, we can move this around and make_obj_compatible as necessary later.","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"}],"neutron/objects/qos/policy.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"871c363852de9b74c935ea929e080173d7997395","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self.VERSION \u003d \u00271.0\u0027"},{"line_number":217,"context_line":"            for rule in self.rules:"},{"line_number":218,"context_line":"                if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:"},{"line_number":219,"context_line":"                    rule.delete()"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_4d03c10f","line":219,"updated":"2016-02-27 07:19:13.000000000","message":"you should not delete the rules:\nhttps://github.com/openstack/neutron/blob/master/neutron/objects/base.py#L176\n\nYou\u0027re removing them from the database.\n\nYou must just remove them from self.rules, and that\u0027s all.\nIn testing you should not need to cal rules_reload in the policy before checking.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self.VERSION \u003d \u00271.0\u0027"},{"line_number":217,"context_line":"            for rule in self.rules:"},{"line_number":218,"context_line":"                if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:"},{"line_number":219,"context_line":"                    rule.delete()"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_3715a73f","line":219,"in_reply_to":"9aed3d3a_4d03c10f","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b9674ab0a29168d88d455d8565d89d783acba328","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        rules \u003d rule_obj_impl.get_rules(self._context, self.id)"},{"line_number":82,"context_line":"        setattr(self, \u0027rules\u0027, rules)"},{"line_number":83,"context_line":"        self.obj_reset_changes([\u0027rules\u0027])"},{"line_number":84,"context_line":"        self.obj_make_compatible(None, self.VERSION)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_rule_by_id(self, rule_id):"},{"line_number":87,"context_line":"        \"\"\"Return rule specified by rule_id."}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_cab81278","line":84,"updated":"2016-02-29 17:30:04.000000000","message":"why do we need this new line here? This should not be done here.","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"8c2a9769e55e850bc7319652a9bd7af98c5dd647","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        rules \u003d rule_obj_impl.get_rules(self._context, self.id)"},{"line_number":82,"context_line":"        setattr(self, \u0027rules\u0027, rules)"},{"line_number":83,"context_line":"        self.obj_reset_changes([\u0027rules\u0027])"},{"line_number":84,"context_line":"        self.obj_make_compatible(None, self.VERSION)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def get_rule_by_id(self, rule_id):"},{"line_number":87,"context_line":"        \"\"\"Return rule specified by rule_id."}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_d9b62af8","line":84,"in_reply_to":"9aed3d3a_cab81278","updated":"2016-02-29 18:29:28.000000000","message":"Done","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b9674ab0a29168d88d455d8565d89d783acba328","unresolved":false,"context_lines":[{"line_number":216,"context_line":"            self.VERSION \u003d \u00271.0\u0027"},{"line_number":217,"context_line":"            for rule in self.rules:"},{"line_number":218,"context_line":"                if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:"},{"line_number":219,"context_line":"                    self.rules.remove(rule)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_0dc3348a","line":219,"updated":"2016-02-29 17:30:04.000000000","message":"that\u0027s it! :)","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"9e18e82ff4a25ffff5b3d08f6b4e0ff4d903a7ae","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            super(QosPolicy, self).obj_make_compatible(primitive,"},{"line_number":213,"context_line":"                                                       target_version)"},{"line_number":214,"context_line":"        if \u00271.0\u0027 in target_version:"},{"line_number":215,"context_line":"            self.VERSION \u003d \u00271.0\u0027"},{"line_number":216,"context_line":"            for rule in self.rules:"},{"line_number":217,"context_line":"                if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:"},{"line_number":218,"context_line":"                    self.rules.remove(rule)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_a56c7d9d","line":215,"updated":"2016-03-01 12:50:30.000000000","message":"you should not modify version here, oslo versioned objects will do for you after this call finishes.\n\nlook what happens at next line when trying to iterate over the rules:\n\n\u003e /opt/stack/neutron/neutron/objects/qos/policy.py(216)obj_make_compatible()\n    215             self.VERSION \u003d \u00271.0\u0027\n--\u003e 216             for rule in self.rules:\n    217                 if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:\n\nipdb\u003e n\n2016-03-01 13:44:40.199 ERROR neutron.api.v2.resource [req-c0a758af-e5f4-497f-9944-06adb741df53 admin 6183e249f10b40389f6171039e732e97] delete failed\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource Traceback (most recent call last):\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/resource.py\", line 83, in resource\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     result \u003d method(request\u003drequest, **args)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/base.py\", line 532, in delete\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     return self._delete(request, id, **kwargs)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_db/api.py\", line 137, in wrapper\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     return f(*args, **kwargs)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 220, in __exit__\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     self.force_reraise()\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_utils/excutils.py\", line 196, in force_reraise\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     six.reraise(self.type_, self.value, self.tb)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_db/api.py\", line 137, in wrapper\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     return f(*args, **kwargs)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/v2/base.py\", line 554, in _delete\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     obj_deleter(request.context, id, **kwargs)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/services/qos/qos_plugin.py\", line 65, in delete_policy\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     self.notification_driver_manager.delete_policy(context, policy)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/services/qos/notification_drivers/manager.py\", line 42, in delete_policy\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     driver.delete_policy(context, qos_policy)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/services/qos/notification_drivers/message_queue.py\", line 59, in delete_policy\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     self.notification_api.push(context, policy, events.DELETED)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_log/helpers.py\", line 46, in wrapper\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     return method(*args, **kwargs)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/opt/stack/neutron/neutron/api/rpc/handlers/resources_rpc.py\", line 200, in push\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     target_version\u003dversion)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource   File \"/usr/lib/python2.7/site-packages/oslo_versionedobjects/base.py\", line 533, in obj_to_primitive\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource     raise exception.InvalidTargetVersion(version\u003dtarget_version)\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource InvalidTargetVersion: Invalid target version 1.1\n2016-03-01 13:44:40.199 TRACE neutron.api.v2.resource","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e7a11ce233867ff3a4eb036997e25a1f21db98e0","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            super(QosPolicy, self).obj_make_compatible(primitive,"},{"line_number":213,"context_line":"                                                       target_version)"},{"line_number":214,"context_line":"        if \u00271.0\u0027 in target_version:"},{"line_number":215,"context_line":"            self.VERSION \u003d \u00271.0\u0027"},{"line_number":216,"context_line":"            for rule in self.rules:"},{"line_number":217,"context_line":"                if qos_consts.RULE_TYPE_BANDWIDTH_LIMIT not in rule.rule_type:"},{"line_number":218,"context_line":"                    self.rules.remove(rule)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_9b20c4f9","line":215,"in_reply_to":"7af24918_a56c7d9d","updated":"2016-03-01 13:20:51.000000000","message":"It fails the test that checks the version was changed without it. Will I remove the tests?","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"}],"neutron/objects/qos/rule.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":91,"context_line":"class QosDscpMarkRule(QosRule):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkRule"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_146b4d86","line":90,"updated":"2015-12-03 12:36:59.000000000","message":"Since we introduce a new rule type, it influences policy.rules field contents. We should bump policy object version and introduce compatibility rules for policies to be able to downgrade the policy object to \u0027before we had dscp mark rules\u0027 aka \u00271.0\u0027.\n\nYou should also add tests for the object type (should be easy since test framework for objects is type agnostic, see neutron/tests/unit/objects/...).","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":91,"context_line":"class QosDscpMarkRule(QosRule):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkRule"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_aef757f4","line":90,"in_reply_to":"9a8ffd7b_146b4d86","updated":"2015-12-03 15:24:31.000000000","message":"Is there an example of this I can use as a reference?","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkRule"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    fields \u003d {"},{"line_number":96,"context_line":"        \u0027mark\u0027: obj_fields.IntegerField(nullable\u003dTrue),"},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_342e918c","line":96,"updated":"2015-12-03 12:36:59.000000000","message":"So what does null value mean?","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"06396d6ae68714ba1406f6a2a2a2ded705c94a36","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"#TODO Introduce Versioned QoS rules"},{"line_number":92,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":93,"context_line":"class QosDscpMarkRule(QosRule):"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aed3d3a_03bec9d3","line":91,"updated":"2016-02-26 16:50:58.000000000","message":"you need to bump the policy version, and add a method to handle downgrades, removing any QosDscpMarkRule\n\nhttps://github.com/openstack/oslo.versionedobjects/blob/e6c275a3fee177afa0ec734e9b52d0e2e637c6dc/oslo_versionedobjects/tests/test_objects.py#L114","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"#TODO(QoS) Introduce Versioned QoS rules"},{"line_number":94,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":95,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":96,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_68952c3f","line":93,"updated":"2016-03-01 13:37:11.000000000","message":"What\u0027s that TODO for?","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"#TODO(QoS) Introduce Versioned QoS rules"},{"line_number":94,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":95,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":96,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_99e28c9e","line":93,"in_reply_to":"7af24918_68952c3f","updated":"2016-03-01 15:16:14.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    fields \u003d {"},{"line_number":102,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":103,"context_line":"    }"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_687c0c21","line":102,"updated":"2016-03-01 13:37:11.000000000","message":"As per devref, only some specific values should be allowed. We should limit the set of possible values here.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    fields \u003d {"},{"line_number":102,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":103,"context_line":"    }"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_79b0608c","line":102,"in_reply_to":"7af24918_687c0c21","updated":"2016-03-01 15:16:14.000000000","message":"Could you clarify what you mean by this please?","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    fields \u003d {"},{"line_number":102,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":103,"context_line":"    }"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_c076cc3d","line":102,"in_reply_to":"7af24918_79b0608c","updated":"2016-03-01 15:30:10.000000000","message":"I mean, the object should not allow any integer value, but only those supported for the mark. You have the list somewhere in devref. I want to see it enforced here.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4154301b9284545071fe1ac7eeb3c747db4364a6","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    fields \u003d {"},{"line_number":102,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":103,"context_line":"    }"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_c11a4e17","line":102,"in_reply_to":"7af24918_c076cc3d","updated":"2016-03-01 15:58:08.000000000","message":"I guess Ihar means you can use the EnumField:\n\nhttps://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/tests/test_fields.py#L256\n\nand use that for validation, capture enumfield exception at api level (instead of checking the list @ API level)","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    fields \u003d {"},{"line_number":102,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":103,"context_line":"    }"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_7077ae3a","line":102,"in_reply_to":"7af24918_c11a4e17","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    fields \u003d {"},{"line_number":104,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_a7c46f92","line":104,"updated":"2016-03-01 17:05:40.000000000","message":"Yes, as Miguel told: we need enum here.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    fields \u003d {"},{"line_number":104,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_3327f013","line":104,"in_reply_to":"7af24918_a7c46f92","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    #NOTE(mangelajo): This will be possible when versioned objects"},{"line_number":110,"context_line":"    #                 can pop objects off list on the parent QoSPolicy"},{"line_number":111,"context_line":"    #                 rule. That\u0027s not supported yet, and we should"},{"line_number":112,"context_line":"    #                 manipulate the primitive in there."}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_670f07e2","line":109,"updated":"2016-03-01 17:05:40.000000000","message":"I suggest we remove the NOTE from here. It does not add much needed details right now.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"67b34ab3c9b337671fb14a0b9a2d1b313ef59adc","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    #NOTE(mangelajo): This will be possible when versioned objects"},{"line_number":110,"context_line":"    #                 can pop objects off list on the parent QoSPolicy"},{"line_number":111,"context_line":"    #                 rule. That\u0027s not supported yet, and we should"},{"line_number":112,"context_line":"    #                 manipulate the primitive in there."}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_c2135b5b","line":109,"in_reply_to":"7af24918_670f07e2","updated":"2016-03-01 21:02:10.000000000","message":"+1 Let\u0027s remove my silly note :) it\u0027s now logged in gerrit for the future!","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    #NOTE(mangelajo): This will be possible when versioned objects"},{"line_number":110,"context_line":"    #                 can pop objects off list on the parent QoSPolicy"},{"line_number":111,"context_line":"    #                 rule. That\u0027s not supported yet, and we should"},{"line_number":112,"context_line":"    #                 manipulate the primitive in there."}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_732178fb","line":109,"in_reply_to":"7af24918_c2135b5b","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ca826989b7daf42418ccf53e7a1a874cd7f5fbca","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    fields \u003d {"},{"line_number":104,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_7c82f553","line":104,"updated":"2016-03-01 19:19:41.000000000","message":"enum still needed","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    fields \u003d {"},{"line_number":104,"context_line":"        \u0027dscp_mark\u0027: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":105,"context_line":"    }"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_f36d8805","line":104,"in_reply_to":"7af24918_7c82f553","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"75c6fa6bc2953181fafd003c6a79ab8b4c797216","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    #def obj_make_compatible(self, primitive, target_version):"},{"line_number":110,"context_line":"    #    if target_version \u003d\u003d \u00271.0\u0027:"},{"line_number":111,"context_line":"    #        # This will get the rule deleted from the top level policy"},{"line_number":112,"context_line":"    #        # primitive if they try to downgrade this rule to \u00271.0\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_5d88d022","line":109,"updated":"2016-03-01 21:03:25.000000000","message":"Please remove this whole comment block, I guess Ihar mean that, not just he \"NOTE\" line :-)\n\n+1 for removing it.","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    #def obj_make_compatible(self, primitive, target_version):"},{"line_number":110,"context_line":"    #    if target_version \u003d\u003d \u00271.0\u0027:"},{"line_number":111,"context_line":"    #        # This will get the rule deleted from the top level policy"},{"line_number":112,"context_line":"    #        # primitive if they try to downgrade this rule to \u00271.0\u0027,"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_d3720ce5","line":109,"in_reply_to":"7af24918_5d88d022","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # Version 1.0: Initial version, only BandwidthLimitRule"},{"line_number":49,"context_line":"    #         1.1: Added DscpMarkingRule"},{"line_number":50,"context_line":"    #"},{"line_number":51,"context_line":"    #NOTE(mangelajo): versions need to be handled from the top QoSRule object"},{"line_number":52,"context_line":"    #                 because it\u0027s the only reference QoSPolicy can make"},{"line_number":53,"context_line":"    #                 to them via obj_relationships version map"},{"line_number":54,"context_line":"    VERSION \u003d \u00271.1\u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_5cb8642a","line":51,"range":{"start_line":51,"start_character":63,"end_line":51,"end_character":70},"updated":"2016-03-03 09:01:34.000000000","message":"QosRule","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    # Version 1.0: Initial version, only BandwidthLimitRule"},{"line_number":49,"context_line":"    #         1.1: Added DscpMarkingRule"},{"line_number":50,"context_line":"    #"},{"line_number":51,"context_line":"    #NOTE(mangelajo): versions need to be handled from the top QoSRule object"},{"line_number":52,"context_line":"    #                 because it\u0027s the only reference QoSPolicy can make"},{"line_number":53,"context_line":"    #                 to them via obj_relationships version map"},{"line_number":54,"context_line":"    VERSION \u003d \u00271.1\u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_979765eb","line":51,"range":{"start_line":51,"start_character":63,"end_line":51,"end_character":70},"in_reply_to":"7af24918_5cb8642a","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    #         1.1: Added DscpMarkingRule"},{"line_number":50,"context_line":"    #"},{"line_number":51,"context_line":"    #NOTE(mangelajo): versions need to be handled from the top QoSRule object"},{"line_number":52,"context_line":"    #                 because it\u0027s the only reference QoSPolicy can make"},{"line_number":53,"context_line":"    #                 to them via obj_relationships version map"},{"line_number":54,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_3cb59830","line":52,"range":{"start_line":52,"start_character":54,"end_line":52,"end_character":63},"updated":"2016-03-03 09:01:34.000000000","message":"QosPolicy","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    #         1.1: Added DscpMarkingRule"},{"line_number":50,"context_line":"    #"},{"line_number":51,"context_line":"    #NOTE(mangelajo): versions need to be handled from the top QoSRule object"},{"line_number":52,"context_line":"    #                 because it\u0027s the only reference QoSPolicy can make"},{"line_number":53,"context_line":"    #                 to them via obj_relationships version map"},{"line_number":54,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_b7a26149","line":52,"range":{"start_line":52,"start_character":54,"end_line":52,"end_character":63},"in_reply_to":"7af24918_3cb59830","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":102,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_f7122956","line":101,"updated":"2016-03-03 09:01:34.000000000","message":"We still miss tests that would target the object. See test_rule.py under neutron/tests/unit/objects/qos and reflect what we have for bwlimit there for dscp.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"5e3c67fe69d3ca3f5837bf0feb0eff2a8c1b6ff5","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_BANDWIDTH_LIMIT"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":102,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_d2372d4b","line":101,"in_reply_to":"7af24918_f7122956","updated":"2016-03-03 13:02:25.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def create(self):"},{"line_number":122,"context_line":"        self._validate_dscp_mark()"},{"line_number":123,"context_line":"        super(QosDscpMarkingRule, self).create()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_fc717077","line":123,"updated":"2016-03-03 09:01:34.000000000","message":"nit: it\u0027s usually wise to return result from super() so that in case we ever change semantics of the call to return something, no change will be needed for the qos rule object.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"},{"line_number":127,"context_line":"        super(QosDscpMarkingRule, self).update()"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_5c6b4485","line":127,"updated":"2016-03-03 09:01:34.000000000","message":"ditto","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"69094b0f4e79e70fd526764dc68a1a3c382118ba","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":102,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_bb2c079a","line":102,"updated":"2016-03-03 11:06:43.000000000","message":"See PS43 comments by Ihar, please\n\nhttps://review.openstack.org/#/c/251738/43..44/neutron/objects/qos/rule.py","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"69094b0f4e79e70fd526764dc68a1a3c382118ba","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def create(self):"},{"line_number":122,"context_line":"        self._validate_dscp_mark()"},{"line_number":123,"context_line":"        super(QosDscpMarkingRule, self).create()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_db4e336e","line":123,"updated":"2016-03-03 11:06:43.000000000","message":"ditto ( https://review.openstack.org/#/c/251738/43..44/neutron/objects/qos/rule.py ) \n\nreturn super(QosDscpMarkingRule, self).create()","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2b0532188919062128b0f16ed5c5a97c00f22afe","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def create(self):"},{"line_number":122,"context_line":"        self._validate_dscp_mark()"},{"line_number":123,"context_line":"        super(QosDscpMarkingRule, self).create()"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_01f668f8","line":123,"in_reply_to":"7af24918_db4e336e","updated":"2016-03-03 13:00:25.000000000","message":"Done","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"69094b0f4e79e70fd526764dc68a1a3c382118ba","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"},{"line_number":127,"context_line":"        super(QosDscpMarkingRule, self).update()"}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_5b434342","line":127,"updated":"2016-03-03 11:06:43.000000000","message":"ditto.\nreturn super(QosDscpMarkingRule, self).update()","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2b0532188919062128b0f16ed5c5a97c00f22afe","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def update(self):"},{"line_number":126,"context_line":"        self._validate_dscp_mark()"},{"line_number":127,"context_line":"        super(QosDscpMarkingRule, self).update()"}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_a1e5f438","line":127,"in_reply_to":"7af24918_5b434342","updated":"2016-03-03 13:00:25.000000000","message":"Done","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a1352198222d45825abb6698eefdde1dfb2a5420","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    def _validate_dscp_mark(self):"},{"line_number":118,"context_line":"        if self.dscp_mark not in VALID_DSCP_MARKS:"},{"line_number":119,"context_line":"            raise ValueError("},{"line_number":120,"context_line":"                \"dscp_mark must be any of %s\" % VALID_DSCP_MARKS)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def create(self):"},{"line_number":123,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_ad69c0c0","line":120,"updated":"2016-03-08 12:12:04.000000000","message":"missing translation","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"96a42188e999d8afa305f314df8d815f4b040728","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    def _validate_dscp_mark(self):"},{"line_number":118,"context_line":"        if self.dscp_mark not in VALID_DSCP_MARKS:"},{"line_number":119,"context_line":"            raise ValueError("},{"line_number":120,"context_line":"                \"dscp_mark must be any of %s\" % VALID_DSCP_MARKS)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def create(self):"},{"line_number":123,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_4978ebc4","line":120,"in_reply_to":"5aef4532_ad69c0c0","updated":"2016-03-08 15:29:32.000000000","message":"Done","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"658b2016fab943033b450fe5547c70d63d7de4c4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def _validate_dscp_mark(self):"},{"line_number":119,"context_line":"        if self.dscp_mark not in VALID_DSCP_MARKS:"},{"line_number":120,"context_line":"            raise ValueError("},{"line_number":121,"context_line":"                _(\u0027dscp_mark must be any of %s\u0027) % VALID_DSCP_MARKS)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create(self):"},{"line_number":124,"context_line":"        self._validate_dscp_mark()"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_db4dd873","line":121,"range":{"start_line":121,"start_character":19,"end_line":121,"end_character":28},"updated":"2016-03-08 17:18:20.000000000","message":"DSCP mark","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"1afc37f412130c4b8334cd25b91a422b302c9775","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                _(\u0027dscp_mark must be any of %s\u0027) % VALID_DSCP_MARKS)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create(self):"},{"line_number":124,"context_line":"        self._validate_dscp_mark()"},{"line_number":125,"context_line":"        return super(QosDscpMarkingRule, self).create()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_1fcc4769","line":124,"updated":"2016-03-08 19:02:05.000000000","message":"This is done already in the API layer. This method has become superfluous and can be dropped.","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"f9b6ec04b989820867c452238580456be814d5e9","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                _(\u0027dscp_mark must be any of %s\u0027) % VALID_DSCP_MARKS)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create(self):"},{"line_number":124,"context_line":"        self._validate_dscp_mark()"},{"line_number":125,"context_line":"        return super(QosDscpMarkingRule, self).create()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_6d6e8196","line":124,"in_reply_to":"5aef4532_1fcc4769","updated":"2016-03-08 19:30:55.000000000","message":"Actually, I don\u0027t believe that should be dropped from here. Since in theory objects may be instantiated from inside neutron, without corresponding API request.","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d7700a37d4bbefcdb8ce01e6b5e6caf1c5a6d40f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                _(\u0027dscp_mark must be any of %s\u0027) % VALID_DSCP_MARKS)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create(self):"},{"line_number":124,"context_line":"        self._validate_dscp_mark()"},{"line_number":125,"context_line":"        return super(QosDscpMarkingRule, self).create()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_9367b024","line":124,"in_reply_to":"5aef4532_6d6e8196","updated":"2016-03-08 20:35:50.000000000","message":"I guess, that\u0027s true, and the extra level won\u0027t hurt a lot, but I wonder how the valueerror gets propagated","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d605e1b7e8603889256cdad076935c9f78ff7292","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                _(\u0027dscp_mark must be any of %s\u0027) % VALID_DSCP_MARKS)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def create(self):"},{"line_number":124,"context_line":"        self._validate_dscp_mark()"},{"line_number":125,"context_line":"        return super(QosDscpMarkingRule, self).create()"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def update(self):"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_3a7ad6f1","line":124,"in_reply_to":"5aef4532_9367b024","updated":"2016-03-09 08:57:54.000000000","message":"The caller may need to capture the ValueError and translate it if used in an API-standalone way.\n\nPlease note that ValueError is the same thing versioned_objects EnumField raises [1] when a wrong error is tried to be set. \n\nWe are not using EnumField because we found it buggy (see note @ L 114). \n\n\n[1] https://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/fields.py#L294","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"1afc37f412130c4b8334cd25b91a422b302c9775","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def update(self):"},{"line_number":128,"context_line":"        if DSCP_MARK in self.obj_get_changes():"},{"line_number":129,"context_line":"            self._validate_dscp_mark()"},{"line_number":130,"context_line":"        return super(QosDscpMarkingRule, self).update()"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_3fc1432f","line":129,"updated":"2016-03-08 19:02:05.000000000","message":"and here","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"1d6c64222d83dd20b5a641935da31773eac8a180","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"@obj_base.VersionedObjectRegistry.register"},{"line_number":104,"context_line":"class QosDscpMarkingRule(QosRule):"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_8d248860","line":104,"range":{"start_line":104,"start_character":0,"end_line":104,"end_character":5},"updated":"2016-03-17 14:24:29.000000000","message":"TODO (ajo, mfranc213): Create a custom type for DSCP.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    fields \u003d {"},{"line_number":109,"context_line":"        DSCP_MARK: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_94c93a5c","line":109,"range":{"start_line":109,"start_character":19,"end_line":109,"end_character":42},"updated":"2016-03-17 12:33:27.000000000","message":"We should have a separate custom type defined for DSCP in neutron/objects/custom_types.py. Then you use it here; that allows you to avoid both create and update below. It also allows to simplify code in objects test (I will expand on that one in the test itself).","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"b3071c8ff822c7a6834099442e0086202d234c5b","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    fields \u003d {"},{"line_number":109,"context_line":"        DSCP_MARK: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_a0a23097","line":109,"range":{"start_line":109,"start_character":19,"end_line":109,"end_character":42},"in_reply_to":"1af94dfe_45bede65","updated":"2016-03-17 13:34:17.000000000","message":"I am fine with doing this, but can we leave a TODO and take care of it in a subsequent patch, as long as we get that done before the summit?","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"453e0a775e251fa0cb98b41715163f87a1dd770a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    db_model \u003d qos_db_model.QosDscpMarkingRule"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    fields \u003d {"},{"line_number":109,"context_line":"        DSCP_MARK: obj_fields.IntegerField(nullable\u003dFalse),"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    rule_type \u003d qos_consts.RULE_TYPE_DSCP_MARK"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_45bede65","line":109,"range":{"start_line":109,"start_character":19,"end_line":109,"end_character":42},"in_reply_to":"1af94dfe_94c93a5c","updated":"2016-03-17 13:26:11.000000000","message":"Will do.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/objects/qos/rule_type.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def get_objects(cls, **kwargs):"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_28fe846b","line":38,"updated":"2016-03-01 13:37:11.000000000","message":"For completeness, shouldn\u0027t we implement obj_make_compatible here too? Also should be covered with a test targeting the conversion.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def get_objects(cls, **kwargs):"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_6ac4fc91","line":38,"in_reply_to":"7af24918_28fe846b","updated":"2016-03-01 15:16:14.000000000","message":"As the rules themselves are not changing between versions I don\u0027t think it\u0027s necessary for the moment.\nI\u0027ll put in a #TODO for the moment.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    fields \u003d {"},{"line_number":36,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":37,"context_line":"    }"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    # we don\u0027t receive context because we don\u0027t need db access at all"},{"line_number":40,"context_line":"    @classmethod"},{"line_number":41,"context_line":"    def get_objects(cls, **kwargs):"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_40e75ce4","line":38,"in_reply_to":"7af24918_6ac4fc91","updated":"2016-03-01 15:30:10.000000000","message":"The definition of the type field changes (you add a new possible value).","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_1cea5cdb","line":35,"updated":"2016-03-03 09:01:34.000000000","message":"I presume we\u0027ll follow up with that in Mitaka.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_d2073b16","line":35,"in_reply_to":"7af24918_1cea5cdb","updated":"2016-03-03 10:01:49.000000000","message":"will ask david","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f9f3e2da6c9071994dd6ac403c30a744ac8d8aa3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_db5f53e3","line":35,"in_reply_to":"7af24918_d2073b16","updated":"2016-03-03 11:06:36.000000000","message":"Yes, we should. I can help him on that.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"6b7f42f4402fcf9712018f6ca4823cf48cb46c62","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_a62d0aaa","line":35,"in_reply_to":"7af24918_db5f53e3","updated":"2016-03-03 11:23:50.000000000","message":"Yes, thanks Miguel.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7e1f6ff8b41d9785eac58420224cd10336da6811","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_e3642623","line":35,"updated":"2016-03-17 21:41:59.000000000","message":"Why do we remove the TODO here? Shouldn\u0027t we cover it, at least in follow up?","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b7a7115ae530fcb9440de5ba5be1815f70a622f5","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":57,"id":"1af94dfe_8da92893","line":35,"updated":"2016-03-17 15:31:14.000000000","message":"I think this TODO is not necessary anymore, it\u0027s in the policy. and there it should be so far.","commit_id":"9a6c9037c1b26622a5f245b345fd09519e7222d6"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"931ae671bba3f8f8e1fb137f2b5a687fd609a47b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":57,"id":"1af94dfe_c3376afd","line":35,"in_reply_to":"1af94dfe_8da92893","updated":"2016-03-17 21:43:12.000000000","message":"This TODO is for RuleType object, we should have backporting rules here too, even though we don\u0027t expose the object anywhere yet.","commit_id":"9a6c9037c1b26622a5f245b345fd09519e7222d6"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f7be93b8444b35de149fd88a26c9163c42ad1877","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":61,"id":"1af94dfe_563944f1","line":35,"updated":"2016-03-18 09:24:09.000000000","message":"why do you think this is still necessary?,\n\nI guess an option could be throwing an exception if you try to downgrade a DscpMarkingRule to \u00271.0\u0027","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"1e650e7401a8e03acc43b9c29822a0421164e06c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":61,"id":"fa0719c6_9dac20ef","line":35,"in_reply_to":"1af94dfe_563944f1","updated":"2016-03-21 15:31:34.000000000","message":"For QoSRuleType would it not make sense to remove qos_consts.RULE_TYPE_DSCP_MARK from the list of rule types rather than raise an exception?","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"97009b9b3313bc4d9b3ac374356c575f5dba6234","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":61,"id":"fa0719c6_eca7684d","line":35,"in_reply_to":"fa0719c6_0ca0dc9e","updated":"2016-03-21 16:53:46.000000000","message":"You can re-initialize The enum in the RuleTypeField object.\n\nif _target_version \u003c (1, 1):\n   self.fields[\u0027type\u0027].AUTO_TYPE \u003d obj_fields.Enum(\n   valid_values\u003d[qos_consts.RULE_TYPE_BANDWIDTH_LIMIT])","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"177e853b37b6bbb1fe3556ffce2118d813b15d0a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    # Version 1.1: Added DscpMarkingRule"},{"line_number":33,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    #TODO(davidsha) add obj_make_compatible and associated tests."},{"line_number":36,"context_line":"    fields \u003d {"},{"line_number":37,"context_line":"        \u0027type\u0027: RuleTypeField(),"},{"line_number":38,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":61,"id":"fa0719c6_0ca0dc9e","line":35,"in_reply_to":"fa0719c6_9dac20ef","updated":"2016-03-21 16:47:03.000000000","message":"Each object here represents a type [not a list of types]. There is no way to represent a DSCP type in old pre-Newton terms.","commit_id":"a9a1943fde253f7da1c10e47baba9e34b4b1401c"}],"neutron/plugins/ml2/drivers/openvswitch/agent/extension_drivers/qos_driver.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        mark \u003d rule.mark"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.br_int.create_dscp_mark_for_port(port_name,"},{"line_number":60,"context_line":"                                                    mark)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def delete_dscp_mark(self, port):"},{"line_number":63,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_d4eb8511","line":60,"updated":"2015-12-03 12:36:59.000000000","message":"please fix indentation. I believe you should squash those two lines into one.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        mark \u003d rule.mark"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        self.br_int.create_dscp_mark_for_port(port_name,"},{"line_number":60,"context_line":"                                                    mark)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def delete_dscp_mark(self, port):"},{"line_number":63,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_7d0ab5d3","line":60,"in_reply_to":"9a8ffd7b_d4eb8511","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fd8cf351f354dbbb7e081a505a77ae2000bdb662","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def delete_dscp_mark(self, port):"},{"line_number":63,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":64,"context_line":"        self.br_int.delete_dscp_mark_for_port(port_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_ec283de4","line":64,"updated":"2015-12-03 13:58:22.000000000","message":"One more thing: I see that you add DSCP marks at br-int level, but then once it\u0027s encapsulated into a tunnel, those marks would not be seen by underlying network that will manage data plane. So your marks will be of no effect while they travel thru the underlying network. I guess you need to set some flows on br-tun to apply the marks from encapsulated frame to encapsulation headers.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def delete_dscp_mark(self, port):"},{"line_number":63,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":64,"context_line":"        self.br_int.delete_dscp_mark_for_port(port_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_12cfd856","line":64,"in_reply_to":"9a8ffd7b_ec283de4","updated":"2015-12-03 15:24:31.000000000","message":"Ok, Thank you for pointing this out. The testing I have been doing so far has been between VMs. I\u0027ll mark a #TODO for myself and when I\u0027ve had more time to look into how to do this in br-tun I\u0027ll add it in.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"06396d6ae68714ba1406f6a2a2a2ded705c94a36","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":50,"context_line":"        self.br_int.delete_egress_bw_limit_for_port(port_name)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"#TODO add br-tun flows to mark dscp field in packets leaving virtual switch"},{"line_number":53,"context_line":"    def create_dscp_mark(self, port, rule):"},{"line_number":54,"context_line":"        self.update_dscp_mark(port, rule)"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9aed3d3a_a340bda6","line":52,"updated":"2016-02-26 16:50:58.000000000","message":"as far as I understood that\u0027s out of scope. We could tweak openvswitch to copy the encapsulated packet DSCP into the VXLAN ip packet, but that\u0027s a follow up.","commit_id":"a2e52b52e9e8f12a6b1b944de26075a43b66f648"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"79ec13c636e35993475ec24afc2c7cf760a60149","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":73,"context_line":"        mark \u003d mark \u003c\u003c 2"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        flows \u003d self.agent_api.dump_br_int_flows(self.cookie, **{\"table\": 0,"},{"line_number":76,"context_line":"                                                 \"in_port\": port, \"reg2\": 0})"},{"line_number":77,"context_line":"        if not flows:"},{"line_number":78,"context_line":"            self.agent_api.add_br_int_flow(self.cookie, **{\"in_port\": port,"},{"line_number":79,"context_line":"                                           \"table\": 0, \"priority\": 65535,"},{"line_number":80,"context_line":"                                           \"reg2\": 0,"},{"line_number":81,"context_line":"                                           \"actions\": \"mod_nw_tos:\" +"},{"line_number":82,"context_line":"                                           str(mark) +"},{"line_number":83,"context_line":"                                           \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":84,"context_line":"                                           \"resubmit(,0)\"})"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            for flow in flows:"},{"line_number":87,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":88,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":89,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":90,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":91,"context_line":"                    for act in acts:"},{"line_number":92,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":93,"context_line":"                            pass"},{"line_number":94,"context_line":"                        else:"},{"line_number":95,"context_line":"                            actions +\u003d act + \",\""},{"line_number":96,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":97,"context_line":"                    self.agent_api.mod_br_int_flows(self.cookie,"},{"line_number":98,"context_line":"                                           **{\"in_port\": port, \"table\": 0,"},{"line_number":99,"context_line":"                                           \"actions\": action})"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def delete_dscp_marking(self, port):"},{"line_number":102,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_646be785","line":99,"range":{"start_line":75,"start_character":1,"end_line":99,"end_character":62},"updated":"2016-01-25 17:13:10.000000000","message":"Since the match fields (ignoring wildcard fields) for this flow entry are table\u003d0,in_port\u003d\u003cx\u003e,priority\u003d65535,reg2\u003d0, then if it can be known that reg2 isn\u0027t being used (can that be stipulated?) for feature flow entries, I believe that lines 89-84 are all that would be needed.","commit_id":"059a575614bc89e4549582f62fd935194fb7838b"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"35cf78eccc929ff53ed36ee01487b59b59fdd2c4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            for flow in flows:"},{"line_number":96,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":97,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":98,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":99,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":100,"context_line":"                    for act in acts:"},{"line_number":101,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":102,"context_line":"                            pass"},{"line_number":103,"context_line":"                        else:"},{"line_number":104,"context_line":"                            actions +\u003d act + \",\""},{"line_number":105,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":106,"context_line":"                    self.agent_api.modify_br_int_flows(self.cookie,"},{"line_number":107,"context_line":"                                           **{\"in_port\": port, \"table\": 0,"},{"line_number":108,"context_line":"                                           \"actions\": action})"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_08443e72","line":105,"range":{"start_line":97,"start_character":20,"end_line":105,"end_character":47},"updated":"2016-02-03 16:22:33.000000000","message":"Hi David.  Could you consider just doing a regex substitution on the existing actions?  So if mod_nw_tos is found, do the sub, and otherwise prepend the mod_nw_tos action?\n\nAs a separate issue, I think the collection of variable names--actions, action, acts, act--is a little difficult to piece together.  This is in part because they are so similarly named.  But also \"actions\" is doing fairly distinct double duty when comparing lines 97 and 99.  And in line 99 \"actions\" is assigned something singular.  In line 105, \"action\" is assigned something (arguably) plural.","commit_id":"12c7933df29193db223acff47f5c2a62b90e65bd"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"490c8475af0381f5db418b127171519152a3dd3c","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            for flow in flows:"},{"line_number":96,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":97,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":98,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":99,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":100,"context_line":"                    for act in acts:"},{"line_number":101,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":102,"context_line":"                            pass"},{"line_number":103,"context_line":"                        else:"},{"line_number":104,"context_line":"                            actions +\u003d act + \",\""},{"line_number":105,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":106,"context_line":"                    self.agent_api.modify_br_int_flows(self.cookie,"},{"line_number":107,"context_line":"                                           **{\"in_port\": port, \"table\": 0,"},{"line_number":108,"context_line":"                                           \"actions\": action})"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_2395393e","line":105,"range":{"start_line":97,"start_character":20,"end_line":105,"end_character":47},"in_reply_to":"5a5ae5dd_08443e72","updated":"2016-02-05 16:46:05.000000000","message":"I\u0027ve changed the names and cleaned it up a bit, but I haven\u0027t implemented the regex substitution. Would it make the code shorter or easier to understand?","commit_id":"12c7933df29193db223acff47f5c2a62b90e65bd"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"b611e5d909354391e288129997476918a7eb4903","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            for flow in flows:"},{"line_number":96,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":97,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":98,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":99,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":100,"context_line":"                    for act in acts:"},{"line_number":101,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":102,"context_line":"                            pass"},{"line_number":103,"context_line":"                        else:"},{"line_number":104,"context_line":"                            actions +\u003d act + \",\""},{"line_number":105,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":106,"context_line":"                    self.agent_api.modify_br_int_flows(self.cookie,"},{"line_number":107,"context_line":"                                           **{\"in_port\": port, \"table\": 0,"},{"line_number":108,"context_line":"                                           \"actions\": action})"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a5ae5dd_adc9015b","line":105,"range":{"start_line":97,"start_character":20,"end_line":105,"end_character":47},"in_reply_to":"5a5ae5dd_2395393e","updated":"2016-02-05 17:14:48.000000000","message":"yes, it would make it shorter i think.  and i think people can ignore the horribleness of the re.sub if they want, since it will be pretty clear what that is doing.  maybe:\n\nif \u0027mod_nw_tos\u0027 in actions:\n    re.sub(a;kdja ;oieuqljef;kaj;ldkfj;alksjdf ignore me)\nelse:\n    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\" + actions\n\nor something along those lines.\n\nand actually in this case i don\u0027t think the regex will be that horrible, a la \"Baked Beans \u0026 Spam\" example in https://docs.python.org/2/library/re.html","commit_id":"12c7933df29193db223acff47f5c2a62b90e65bd"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"eb07b46a2ded55da40f22b974cdfe2fd7386581b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":77,"context_line":"            msg \u003d _(\"Please supply a valid DSCP mark\")"},{"line_number":78,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"},{"line_number":79,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":80,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":22,"id":"5a5ae5dd_7ca6ef54","line":77,"updated":"2016-02-09 05:32:47.000000000","message":"nit: %s/supply/provide/g. In addition to this let\u0027s provide more information saying what\u0027s a valid value.","commit_id":"2f3d257645a9339478f5abe5b33fe896577f204a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"4ccfbbf331918eff181826a631e2b23034371184","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":77,"context_line":"            msg \u003d _(\"Please supply a valid DSCP mark\")"},{"line_number":78,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"},{"line_number":79,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":80,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":22,"id":"3a57f1b5_fa3666b3","line":77,"in_reply_to":"5a5ae5dd_7ca6ef54","updated":"2016-02-09 21:44:26.000000000","message":"I replaced it with:\n\n    msg \u003d _(\"Please provide a valid DSCP mark - an even integer between 0 and 56\")\n\nIf we need to get into more detail than that then I think we need to provide a URL to an article explaining valid DSCP marks instead.  Or do you suggest I interpolate DSCP_VALID_MARKS into the string?  I am not sure what would be the best user experience for this.","commit_id":"2f3d257645a9339478f5abe5b33fe896577f204a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.common import ovs_lib"},{"line_number":20,"context_line":"from neutron.agent.l2.extensions import qos"},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.mech_driver import \\"},{"line_number":22,"context_line":"    mech_openvswitch"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_1f31cd05","line":21,"updated":"2016-02-28 09:40:38.000000000","message":"please do not use the \\","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.common import ovs_lib"},{"line_number":20,"context_line":"from neutron.agent.l2.extensions import qos"},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.mech_driver import \\"},{"line_number":22,"context_line":"    mech_openvswitch"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_9d24ae60","line":21,"in_reply_to":"9aed3d3a_1f31cd05","updated":"2016-02-29 10:42:38.000000000","message":"you can do import (\n        mech_openvswitch)\n\nI think","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.agent.common import ovs_lib"},{"line_number":20,"context_line":"from neutron.agent.l2.extensions import qos"},{"line_number":21,"context_line":"from neutron.plugins.ml2.drivers.openvswitch.mech_driver import \\"},{"line_number":22,"context_line":"    mech_openvswitch"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"DSCP_VALID_MARKS \u003d [0, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_f1b87477","line":21,"in_reply_to":"9aed3d3a_9d24ae60","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":72,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":75,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - \""},{"line_number":76,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\")"},{"line_number":77,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_ff2b4992","line":74,"updated":"2016-02-28 09:40:38.000000000","message":"why is this being validated in the agent and not in the API level?","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":72,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":75,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - \""},{"line_number":76,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\")"},{"line_number":77,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_71a58445","line":74,"in_reply_to":"9aed3d3a_3dc12255","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":72,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if mark not in DSCP_VALID_MARKS:"},{"line_number":75,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - \""},{"line_number":76,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\")"},{"line_number":77,"context_line":"            raise exceptions.InvalidInput(error_message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_3dc12255","line":74,"in_reply_to":"9aed3d3a_ff2b4992","updated":"2016-02-29 10:42:38.000000000","message":"Yes, this validation has to be validated at the API level, not on the agent.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":88,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":89,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":90,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":91,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":92,"context_line":"        else:"},{"line_number":93,"context_line":"            for flow in flows:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_7debaa78","line":90,"updated":"2016-02-29 10:42:38.000000000","message":"I just checked, the new OVS firewall uses REG5, so we\u0027re safe here. [1]\nI wonder if we could allocate OF REGs dynamically in the future for features to use.\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/agent/linux/openvswitch_firewall/firewall.py#L356","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":88,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":89,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":90,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":91,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":92,"context_line":"        else:"},{"line_number":93,"context_line":"            for flow in flows:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_f146b479","line":90,"in_reply_to":"9aed3d3a_7debaa78","updated":"2016-02-29 16:54:21.000000000","message":"That would probably fall under flow management which I\u0027ll look into for newton.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"},{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_8874f8fd","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":26},"updated":"2016-03-01 13:37:11.000000000","message":"I don\u0027t believe the check is needed. We should rely on the agent passing proper API object to us.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"},{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_a04620bd","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":26},"in_reply_to":"7af24918_4af5c081","updated":"2016-03-01 15:30:10.000000000","message":"We should not have code just for easier testing. There is no problem in calling consume_api in tests.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"},{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_4af5c081","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":26},"in_reply_to":"7af24918_8874f8fd","updated":"2016-03-01 15:16:14.000000000","message":"It\u0027s for testing the driver or if the agent_api is not provided.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.agent_api \u003d agent_api"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def initialize(self):"},{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_d0032272","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":26},"in_reply_to":"7af24918_a04620bd","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"},{"line_number":42,"context_line":"            self.br_int \u003d ovs_lib.OVSBridge(self.br_int_name)"},{"line_number":43,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_bandwidth_limit(self, port, rule):"},{"line_number":46,"context_line":"        self.update_bandwidth_limit(port, rule)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_6826cc17","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":52},"updated":"2016-03-01 13:37:11.000000000","message":"What\u0027s the case when we don\u0027t pass agent_api into the driver?.. I suspect that should be removed?..","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        if self.agent_api:"},{"line_number":39,"context_line":"            self.br_int \u003d self.agent_api.request_int_br()"},{"line_number":40,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":41,"context_line":"        else:"},{"line_number":42,"context_line":"            self.br_int \u003d ovs_lib.OVSBridge(self.br_int_name)"},{"line_number":43,"context_line":"            self.cookie \u003d self.br_int.default_cookie"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def create_bandwidth_limit(self, port, rule):"},{"line_number":46,"context_line":"        self.update_bandwidth_limit(port, rule)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_30f9a681","line":43,"range":{"start_line":41,"start_character":8,"end_line":43,"end_character":52},"in_reply_to":"7af24918_6826cc17","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_a8fc543f","line":66,"updated":"2016-03-01 13:37:11.000000000","message":"Shouldn\u0027t you use a public method here instead? [get_port_ofport]","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_10f62a8f","line":66,"in_reply_to":"7af24918_a8fc543f","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."},{"line_number":70,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":71,"context_line":"        mark \u003d mark \u003c\u003c 2"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_08a46855","line":68,"range":{"start_line":68,"start_character":52,"end_line":68,"end_character":62},"updated":"2016-03-01 13:37:11.000000000","message":"overwrite","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not over write the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."},{"line_number":70,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":71,"context_line":"        mark \u003d mark \u003c\u003c 2"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_70f32e9f","line":68,"range":{"start_line":68,"start_character":52,"end_line":68,"end_character":62},"in_reply_to":"7af24918_08a46855","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_bb514011","line":75,"range":{"start_line":75,"start_character":47,"end_line":75,"end_character":51},"updated":"2016-03-01 13:37:11.000000000","message":"What\u0027s reg2 for? Should be described in a comment.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"},{"line_number":71,"context_line":"        mark \u003d mark \u003c\u003c 2"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_48add030","line":75,"range":{"start_line":73,"start_character":43,"end_line":75,"end_character":56},"updated":"2016-03-01 13:37:11.000000000","message":"cookie\u003d..., table\u003d..., in_port\u003d..., reg2\u003d...","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_aa2f24a0","line":75,"range":{"start_line":75,"start_character":47,"end_line":75,"end_character":51},"in_reply_to":"7af24918_bb514011","updated":"2016-03-01 15:16:14.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":79,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":80,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_68252cc1","line":77,"range":{"start_line":77,"start_character":37,"end_line":77,"end_character":43},"updated":"2016-03-01 13:37:11.000000000","message":"I believe the returned bridge already sets the proper cookie for you, no need to pass it here.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":79,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":80,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_e862dc15","line":77,"updated":"2016-03-01 13:37:11.000000000","message":"ditto","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":75,"context_line":"                                              \"reg2\": 0})"},{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":79,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":80,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_90307a58","line":77,"in_reply_to":"7af24918_e862dc15","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":79,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":80,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_1b20349b","line":81,"range":{"start_line":79,"start_character":47,"end_line":81,"end_character":50},"updated":"2016-03-01 13:37:11.000000000","message":"Please calculate the value in a separate line, for readability. Please also add a comment describing the flow rule (f.e. what\u0027s 55?).","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        if not flows:"},{"line_number":77,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":78,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":79,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":80,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_504712bb","line":81,"range":{"start_line":79,"start_character":47,"end_line":81,"end_character":50},"in_reply_to":"7af24918_1b20349b","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_7b0058ab","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":45},"updated":"2016-03-01 13:37:11.000000000","message":"What\u0027s that check for? Isn\u0027t cookie enough to distinguish the flows?","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_f00c5e96","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":45},"in_reply_to":"7af24918_40d11ccd","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_8c6885bc","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":45},"in_reply_to":"7af24918_7b0058ab","updated":"2016-03-01 15:16:14.000000000","message":"At the moment it is only for future proofing, if more QoS flows are introduced this allows us to find which one we should be modifying the actions for.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                                    \"resubmit(,0)\"})"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            for flow in flows:"},{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_40d11ccd","line":84,"range":{"start_line":84,"start_character":16,"end_line":84,"end_character":45},"in_reply_to":"7af24918_8c6885bc","updated":"2016-03-01 15:30:10.000000000","message":"Then you will be able to use a different cookie for those flows. There is no need to overload priority with the cookie role.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a1b9186af274a1fb6625d426ea1706e758b5b41b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":88,"context_line":"                    for act in acts:"},{"line_number":89,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":90,"context_line":"                            pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_99ef2cb0","line":87,"range":{"start_line":87,"start_character":30,"end_line":87,"end_character":43},"updated":"2016-03-01 13:45:44.000000000","message":"It could be useful to describe somewhere what mod_nw_tos means.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                if \"priority\u003d65535,\" in flow:"},{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":88,"context_line":"                    for act in acts:"},{"line_number":89,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":90,"context_line":"                            pass"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_10246a0b","line":87,"range":{"start_line":87,"start_character":30,"end_line":87,"end_character":43},"in_reply_to":"7af24918_99ef2cb0","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":88,"context_line":"                    for act in acts:"},{"line_number":89,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":90,"context_line":"                            pass"},{"line_number":91,"context_line":"                        else:"},{"line_number":92,"context_line":"                            actions +\u003d act + \",\""},{"line_number":93,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":94,"context_line":"                    self.br_int.mod_flows(**{\"cookie\": self.cookie, \"reg2\": 0,"},{"line_number":95,"context_line":"                                             \"in_port\": port, \"table\": 0,"},{"line_number":96,"context_line":"                                             \"actions\": action})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_5b20fc49","line":93,"range":{"start_line":88,"start_character":20,"end_line":93,"end_character":47},"updated":"2016-03-01 13:37:11.000000000","message":"actions +\u003d \u0027,\u0027.join([act for act in acts if \"mod_nw_tos:\" not in act])\n\nThere are probably even more ways to make the code cleaner.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                    actions \u003d str(flow).partition(\"actions\u003d\")[2]"},{"line_number":86,"context_line":"                    acts \u003d actions.split(\u0027,\u0027)"},{"line_number":87,"context_line":"                    actions \u003d \"mod_nw_tos:\" + str(mark) + \",\""},{"line_number":88,"context_line":"                    for act in acts:"},{"line_number":89,"context_line":"                        if \"mod_nw_tos:\" in act:"},{"line_number":90,"context_line":"                            pass"},{"line_number":91,"context_line":"                        else:"},{"line_number":92,"context_line":"                            actions +\u003d act + \",\""},{"line_number":93,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":94,"context_line":"                    self.br_int.mod_flows(**{\"cookie\": self.cookie, \"reg2\": 0,"},{"line_number":95,"context_line":"                                             \"in_port\": port, \"table\": 0,"},{"line_number":96,"context_line":"                                             \"actions\": action})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_b07936ff","line":93,"range":{"start_line":88,"start_character":20,"end_line":93,"end_character":47},"in_reply_to":"7af24918_5b20fc49","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                        else:"},{"line_number":92,"context_line":"                            actions +\u003d act + \",\""},{"line_number":93,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":94,"context_line":"                    self.br_int.mod_flows(**{\"cookie\": self.cookie, \"reg2\": 0,"},{"line_number":95,"context_line":"                                             \"in_port\": port, \"table\": 0,"},{"line_number":96,"context_line":"                                             \"actions\": action})"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_dbd24c34","line":94,"range":{"start_line":94,"start_character":45,"end_line":94,"end_character":66},"updated":"2016-03-01 13:37:11.000000000","message":"ditto: cookie should already be enforced by the bridge itself.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                        else:"},{"line_number":92,"context_line":"                            actions +\u003d act + \",\""},{"line_number":93,"context_line":"                    action \u003d actions.strip(\",\")"},{"line_number":94,"context_line":"                    self.br_int.mod_flows(**{\"cookie\": self.cookie, \"reg2\": 0,"},{"line_number":95,"context_line":"                                             \"in_port\": port, \"table\": 0,"},{"line_number":96,"context_line":"                                             \"actions\": action})"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_f083beca","line":94,"range":{"start_line":94,"start_character":45,"end_line":94,"end_character":66},"in_reply_to":"7af24918_dbd24c34","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def delete_dscp_marking(self, port):"},{"line_number":99,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":100,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.br_int.delete_flows(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":103,"context_line":"                                 \"table\": 0, \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_9bc8c476","line":100,"updated":"2016-03-01 13:37:11.000000000","message":"ditto on using public API","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def delete_dscp_marking(self, port):"},{"line_number":99,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":100,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.br_int.delete_flows(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":103,"context_line":"                                 \"table\": 0, \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_d08842ea","line":100,"in_reply_to":"7af24918_9bc8c476","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":100,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.br_int.delete_flows(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":103,"context_line":"                                 \"table\": 0, \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_5be75c12","line":102,"range":{"start_line":102,"start_character":37,"end_line":102,"end_character":57},"updated":"2016-03-01 13:37:11.000000000","message":"ditto","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":100,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.br_int.delete_flows(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":103,"context_line":"                                 \"table\": 0, \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_306ec62f","line":102,"range":{"start_line":102,"start_character":37,"end_line":102,"end_character":57},"in_reply_to":"7af24918_5be75c12","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not overwrite the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_07d8c352","line":66,"updated":"2016-03-01 17:05:40.000000000","message":"private method still used.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":65,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":66,"context_line":"        port \u003d self.br_int._get_port_ofport(port_name)"},{"line_number":67,"context_line":"        mark \u003d rule.dscp_mark"},{"line_number":68,"context_line":"        #mark needs to be bit shifted 2 left to not overwrite the"},{"line_number":69,"context_line":"        #lower 2 bits of terms of service packet header."}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_734fb8bd","line":66,"in_reply_to":"7af24918_07d8c352","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # reg2 is a metadata field that does not alter packets."},{"line_number":74,"context_line":"        # By loading a value into this field and checking if the value is"},{"line_number":75,"context_line":"        # altered it allows the packet to be resubmitted and go through"},{"line_number":76,"context_line":"        # the flow table again to be identiied by other flows."},{"line_number":77,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_a7ce2f81","line":76,"range":{"start_line":76,"start_character":37,"end_line":76,"end_character":46},"updated":"2016-03-01 17:05:40.000000000","message":"identified","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # reg2 is a metadata field that does not alter packets."},{"line_number":74,"context_line":"        # By loading a value into this field and checking if the value is"},{"line_number":75,"context_line":"        # altered it allows the packet to be resubmitted and go through"},{"line_number":76,"context_line":"        # the flow table again to be identiied by other flows."},{"line_number":77,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_534c3cc7","line":76,"range":{"start_line":76,"start_character":37,"end_line":76,"end_character":46},"in_reply_to":"7af24918_a7ce2f81","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # By loading a value into this field and checking if the value is"},{"line_number":75,"context_line":"        # altered it allows the packet to be resubmitted and go through"},{"line_number":76,"context_line":"        # the flow table again to be identiied by other flows."},{"line_number":77,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"},{"line_number":80,"context_line":"        if not flows:"},{"line_number":81,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":82,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_27885f22","line":79,"range":{"start_line":77,"start_character":43,"end_line":79,"end_character":56},"updated":"2016-03-01 17:05:40.000000000","message":"You still should switch to passing arguments directly instead of first constructing a dict. Here and in other places.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # By loading a value into this field and checking if the value is"},{"line_number":75,"context_line":"        # altered it allows the packet to be resubmitted and go through"},{"line_number":76,"context_line":"        # the flow table again to be identiied by other flows."},{"line_number":77,"context_line":"        flows \u003d self.br_int.dump_flows_for(**{\"cookie\": self.cookie,"},{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"},{"line_number":80,"context_line":"        if not flows:"},{"line_number":81,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":82,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_93cc0437","line":79,"range":{"start_line":77,"start_character":43,"end_line":79,"end_character":56},"in_reply_to":"7af24918_27885f22","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"},{"line_number":80,"context_line":"        if not flows:"},{"line_number":81,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":82,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":83,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":84,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_27b69fdc","line":81,"updated":"2016-03-01 17:05:40.000000000","message":"cookie should not be passed, bridge will handle it for you.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":78,"context_line":"                                              \"table\": 0, \"in_port\": port,"},{"line_number":79,"context_line":"                                              \"reg2\": 0})"},{"line_number":80,"context_line":"        if not flows:"},{"line_number":81,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":82,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":83,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":84,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_f3d108cf","line":81,"in_reply_to":"7af24918_27b69fdc","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                                              \"reg2\": 0})"},{"line_number":80,"context_line":"        if not flows:"},{"line_number":81,"context_line":"            self.br_int.add_flow(**{\"cookie\": self.cookie, \"in_port\": port,"},{"line_number":82,"context_line":"                                    \"table\": 0, \"priority\": 65535, \"reg2\": 0,"},{"line_number":83,"context_line":"                                    \"actions\": \"mod_nw_tos:\" + str(mark) +"},{"line_number":84,"context_line":"                                    \",load:55-\u003eNXM_NX_REG2[0..5],\" +"},{"line_number":85,"context_line":"                                    \"resubmit(,0)\"})"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_47ec8bc7","line":82,"updated":"2016-03-01 17:05:40.000000000","message":"Here, I stop reviewing the file, since I see that a lot of previous comments are not handled in any way.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":60,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":61,"context_line":"        port \u003d self.br_int.get_port_ofport(port_name)"},{"line_number":62,"context_line":"        mark \u003d int(rule.dscp_mark)"},{"line_number":63,"context_line":"        #mark needs to be bit shifted 2 left to not overwrite the"},{"line_number":64,"context_line":"        #lower 2 bits of terms of service packet header."},{"line_number":65,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_fccdf085","line":62,"range":{"start_line":62,"start_character":15,"end_line":62,"end_character":19},"updated":"2016-03-03 09:01:34.000000000","message":"The field type is already integer.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"21c895f4822e90cdd3a330fe78a684d9cd9b2bb3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":60,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":61,"context_line":"        port \u003d self.br_int.get_port_ofport(port_name)"},{"line_number":62,"context_line":"        mark \u003d int(rule.dscp_mark)"},{"line_number":63,"context_line":"        #mark needs to be bit shifted 2 left to not overwrite the"},{"line_number":64,"context_line":"        #lower 2 bits of terms of service packet header."},{"line_number":65,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_17ea35db","line":62,"range":{"start_line":62,"start_character":15,"end_line":62,"end_character":19},"in_reply_to":"7af24918_fccdf085","updated":"2016-03-03 09:50:18.000000000","message":"Correct, it\u0027s an integer now. EnumField was missbehaving on this returning an unicode string.\n\nint can go away now.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    def update_dscp_marking(self, port, rule):"},{"line_number":60,"context_line":"        port_name \u003d port[\u0027vif_port\u0027].port_name"},{"line_number":61,"context_line":"        port \u003d self.br_int.get_port_ofport(port_name)"},{"line_number":62,"context_line":"        mark \u003d int(rule.dscp_mark)"},{"line_number":63,"context_line":"        #mark needs to be bit shifted 2 left to not overwrite the"},{"line_number":64,"context_line":"        #lower 2 bits of terms of service packet header."},{"line_number":65,"context_line":"        #source: man ovs-ofctl (/mod_nw_tos)"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_325e5f12","line":62,"range":{"start_line":62,"start_character":15,"end_line":62,"end_character":19},"in_reply_to":"7af24918_fccdf085","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                # DSCP makes up the upper 6 bits of this header field."},{"line_number":86,"context_line":"                actions \u003d \"mod_nw_tos:\" + mark + \",\""},{"line_number":87,"context_line":"                actions +\u003d \u0027,\u0027.join([act for act in acts"},{"line_number":88,"context_line":"                                     if \"mod_nw_tos:\" not in act])"},{"line_number":89,"context_line":"                self.br_int.mod_flows(reg2\u003d0, in_port\u003dport, table\u003d0,"},{"line_number":90,"context_line":"                                      actions\u003dactions)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_dc975438","line":88,"updated":"2016-03-03 09:01:34.000000000","message":"In theory, you can end up here with trailing comma from line 86 if nothing matches here.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"6b7f42f4402fcf9712018f6ca4823cf48cb46c62","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                # DSCP makes up the upper 6 bits of this header field."},{"line_number":86,"context_line":"                actions \u003d \"mod_nw_tos:\" + mark + \",\""},{"line_number":87,"context_line":"                actions +\u003d \u0027,\u0027.join([act for act in acts"},{"line_number":88,"context_line":"                                     if \"mod_nw_tos:\" not in act])"},{"line_number":89,"context_line":"                self.br_int.mod_flows(reg2\u003d0, in_port\u003dport, table\u003d0,"},{"line_number":90,"context_line":"                                      actions\u003dactions)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_667942c8","line":88,"in_reply_to":"7af24918_371c91c0","updated":"2016-03-03 11:23:50.000000000","message":"The flow it\u0027s modifying will always mark the reg2 meta-field and have a resubmit so there will never be a situation where mod_nw_tos will be on it\u0027s own (or even the last field as there is a command priority for flow actions with NORMAL/resubmit being at the bottom).","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"21c895f4822e90cdd3a330fe78a684d9cd9b2bb3","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                # DSCP makes up the upper 6 bits of this header field."},{"line_number":86,"context_line":"                actions \u003d \"mod_nw_tos:\" + mark + \",\""},{"line_number":87,"context_line":"                actions +\u003d \u0027,\u0027.join([act for act in acts"},{"line_number":88,"context_line":"                                     if \"mod_nw_tos:\" not in act])"},{"line_number":89,"context_line":"                self.br_int.mod_flows(reg2\u003d0, in_port\u003dport, table\u003d0,"},{"line_number":90,"context_line":"                                      actions\u003dactions)"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_371c91c0","line":88,"in_reply_to":"7af24918_dc975438","updated":"2016-03-03 09:50:18.000000000","message":"AFAIK there is no rule without actions, as it\u0027s the purpose of a rule.\n\nBut we could rewrite this as:\nactions \u003d \u0027,\u0027.join([\"mod_nw_tos:\" + mark ] + act)\n\nIn fact you may not need to even break the actions, just do:\n\nactions \u003d str(flow).partition(\"actions\u003d\")[2]\nnew_actions \u003d \u0027,\u0027.join([\"mod_nw_tos:\" + mark, actions]","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a1352198222d45825abb6698eefdde1dfb2a5420","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        flows \u003d self.br_int.dump_flows_for(cookie\u003dself.cookie, table\u003d0,"},{"line_number":73,"context_line":"                                           in_port\u003dport, reg2\u003d0)"},{"line_number":74,"context_line":"        if not flows:"},{"line_number":75,"context_line":"            actions \u003d \"mod_nw_tos:\" + mark + \",load:55-\u003eNXM_NX_REG2[0..5],\" + \\"},{"line_number":76,"context_line":"                        \"resubmit(,0)\""},{"line_number":77,"context_line":"            self.br_int.add_flow(in_port\u003dport, table\u003d0, priority\u003d65535,"},{"line_number":78,"context_line":"                                 reg2\u003d0, actions\u003dactions)"}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_6d21789f","line":75,"updated":"2016-03-08 12:12:04.000000000","message":"please use () and then you can drop the \\","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"96a42188e999d8afa305f314df8d815f4b040728","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        flows \u003d self.br_int.dump_flows_for(cookie\u003dself.cookie, table\u003d0,"},{"line_number":73,"context_line":"                                           in_port\u003dport, reg2\u003d0)"},{"line_number":74,"context_line":"        if not flows:"},{"line_number":75,"context_line":"            actions \u003d \"mod_nw_tos:\" + mark + \",load:55-\u003eNXM_NX_REG2[0..5],\" + \\"},{"line_number":76,"context_line":"                        \"resubmit(,0)\""},{"line_number":77,"context_line":"            self.br_int.add_flow(in_port\u003dport, table\u003d0, priority\u003d65535,"},{"line_number":78,"context_line":"                                 reg2\u003d0, actions\u003dactions)"}],"source_content_type":"text/x-python","patch_set":53,"id":"5aef4532_e3ae3897","line":75,"in_reply_to":"5aef4532_6d21789f","updated":"2016-03-08 15:29:32.000000000","message":"Done","commit_id":"5b9567d55b1b6eb9df465eca90b6d58d7fb8bbb1"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/ovs_ofctl/ofswitch.py":[{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"84c5975550671471a7c91ccf190fa52cdeaf23ab","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            if not fl_cookie:"},{"line_number":95,"context_line":"                continue"},{"line_number":96,"context_line":"            fl_cookie \u003d fl_cookie.group(1)"},{"line_number":97,"context_line":"            if int(fl_cookie, 16) !\u003d self.agent_uuid_stamp or int(fl_cookie, 16) \u003d\u003d 0x042 :"},{"line_number":98,"context_line":"                fl_table \u003d table_re.search(flow)"},{"line_number":99,"context_line":"                if not fl_table:"},{"line_number":100,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_4d77d9d4","line":97,"updated":"2015-12-14 17:32:54.000000000","message":"Only here for the purpose of testing the code","commit_id":"4719bf57df33710a43aaada1e60b540a31068f20"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"4f6d950da59aa331649d3dfdce9e2c72d7142759","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                continue"},{"line_number":96,"context_line":"            fl_cookie \u003d fl_cookie.group(1)"},{"line_number":97,"context_line":"            if int(fl_cookie, 16) !\u003d self.agent_uuid_stamp or"},{"line_number":98,"context_line":"               int(fl_cookie, 16) \u003d\u003d 0x042:"},{"line_number":99,"context_line":"                fl_table \u003d table_re.search(flow)"},{"line_number":100,"context_line":"                if not fl_table:"},{"line_number":101,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_c0001469","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":42},"updated":"2016-01-08 09:23:15.000000000","message":"I have written code that gives extensions a UUID and adds it to a list to be compared here, do you think it might be better to put that in instead of this as a work around?","commit_id":"c19a88f658f3c9a23b05fe9814359f50032211dd"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4c4b418a55237f19ba5285b937094fae47836ea8","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                continue"},{"line_number":96,"context_line":"            fl_cookie \u003d fl_cookie.group(1)"},{"line_number":97,"context_line":"            if int(fl_cookie, 16) !\u003d self.agent_uuid_stamp or"},{"line_number":98,"context_line":"               int(fl_cookie, 16) \u003d\u003d 0x042:"},{"line_number":99,"context_line":"                fl_table \u003d table_re.search(flow)"},{"line_number":100,"context_line":"                if not fl_table:"},{"line_number":101,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_ff1247b3","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":42},"in_reply_to":"fa69d971_716bfcb9","updated":"2016-01-11 11:42:08.000000000","message":"The workaround won\u0027t belong to the patch, so I don\u0027t mind how you patch it for now until we provide a better way.","commit_id":"c19a88f658f3c9a23b05fe9814359f50032211dd"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"6d26ff326331da74fc1104ee69003a612ea12bdb","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                continue"},{"line_number":96,"context_line":"            fl_cookie \u003d fl_cookie.group(1)"},{"line_number":97,"context_line":"            if int(fl_cookie, 16) !\u003d self.agent_uuid_stamp or"},{"line_number":98,"context_line":"               int(fl_cookie, 16) \u003d\u003d 0x042:"},{"line_number":99,"context_line":"                fl_table \u003d table_re.search(flow)"},{"line_number":100,"context_line":"                if not fl_table:"},{"line_number":101,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa69d971_716bfcb9","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":42},"in_reply_to":"fa69d971_c0001469","updated":"2016-01-11 02:10:54.000000000","message":"I have to defer to @ihrachys on that.","commit_id":"c19a88f658f3c9a23b05fe9814359f50032211dd"}],"neutron/plugins/ml2/drivers/openvswitch/mech_driver/mech_openvswitch.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    network."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    supported_qos_rule_types \u003d [qos_consts.RULE_TYPE_BANDWIDTH_LIMIT,qos_consts.RULE_TYPE_DSCP_MARK]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self):"},{"line_number":46,"context_line":"        sg_enabled \u003d securitygroups_rpc.is_firewall_enabled()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_74dbb97c","line":43,"updated":"2015-12-03 12:36:59.000000000","message":"it won\u0027t pass pep8. please split into two lines.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    network."},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    supported_qos_rule_types \u003d [qos_consts.RULE_TYPE_BANDWIDTH_LIMIT,qos_consts.RULE_TYPE_DSCP_MARK]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self):"},{"line_number":46,"context_line":"        sg_enabled \u003d securitygroups_rpc.is_firewall_enabled()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_290dd7e7","line":43,"in_reply_to":"9a8ffd7b_74dbb97c","updated":"2015-12-03 15:24:31.000000000","message":"Done","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"}],"neutron/plugins/ml2/managers.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            rule_types \u003d []"},{"line_number":365,"context_line":"        LOG.debug(\"Supported QoS rule types \""},{"line_number":366,"context_line":"                  \"(common subset for all mech drivers): %s\", rule_types)"},{"line_number":367,"context_line":"        return sorted(rule_types)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def initialize(self):"},{"line_number":370,"context_line":"        for driver in self.ordered_mech_drivers:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_7da28a4c","line":367,"updated":"2016-02-29 10:42:38.000000000","message":"why do you need the rules to be sorted?\n\nIf the reason is testing, sort at tests.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            rule_types \u003d []"},{"line_number":365,"context_line":"        LOG.debug(\"Supported QoS rule types \""},{"line_number":366,"context_line":"                  \"(common subset for all mech drivers): %s\", rule_types)"},{"line_number":367,"context_line":"        return sorted(rule_types)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    def initialize(self):"},{"line_number":370,"context_line":"        for driver in self.ordered_mech_drivers:"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_d7227ba2","line":367,"in_reply_to":"9aed3d3a_7da28a4c","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"}],"neutron/services/qos/qos_consts.py":[{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"e6f1f76d9cf8c269491c268b2963082808d23b73","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"RULE_TYPE_BANDWIDTH_LIMIT \u003d \u0027bandwidth_limit\u0027"},{"line_number":17,"context_line":"RULE_TYPE_DSCP_MARK \u003d \u0027dscp_marking\u0027"},{"line_number":18,"context_line":"VALID_RULE_TYPES \u003d [RULE_TYPE_BANDWIDTH_LIMIT, RULE_TYPE_DSCP_MARK]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"QOS_POLICY_ID \u003d \u0027qos_policy_id\u0027"}],"source_content_type":"text/x-python","patch_set":54,"id":"5aef4532_91ae9183","line":17,"range":{"start_line":17,"start_character":23,"end_line":17,"end_character":35},"updated":"2016-03-08 18:16:04.000000000","message":"dscp_marking or dscp_mark for consistency?","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"}],"neutron/services/qos/qos_plugin.py":[{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"c7ff0f490023f4698782aabfe82721d9627cc827","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":159,"context_line":"                                                                 **filters)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":162,"context_line":"    def create_policy_dscp_mark_rule(self, context, policy_id,"},{"line_number":163,"context_line":"                                           dscp_mark_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_c25ca27f","line":161,"updated":"2015-12-01 17:09:23.000000000","message":"Does this code work for you in practice?  When we wrote the original RFE we were thinking that there might be a way to configure DSCP in flows using OVSDB, but we subsequently were told that flows are not stored in OVSDB.  To we\u0027ve been looking at an implementation that uses add_flow/mod_flow etc.  Have you been able to validate using tcpdump that OVSDB transactions like this correctly configure working DSCP marking?","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"f9f5b97019399346303d95727f56052ddc5bb0d4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":159,"context_line":"                                                                 **filters)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":162,"context_line":"    def create_policy_dscp_mark_rule(self, context, policy_id,"},{"line_number":163,"context_line":"                                           dscp_mark_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_ed28b787","line":161,"in_reply_to":"9a8ffd7b_c25ca27f","updated":"2015-12-01 17:13:01.000000000","message":"Never mind, I was reading things too quickly, I see you\u0027re putting in the database persistence layer in the neutron DB for this.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":166,"context_line":"            # first, validate that we have access to the policy"},{"line_number":167,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":168,"context_line":"            rule \u003d rule_object.QosDscpMarkRule("},{"line_number":169,"context_line":"                context, qos_policy_id\u003dpolicy_id,"},{"line_number":170,"context_line":"                **dscp_mark_rule[\u0027dscp_mark_rule\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_adb2afe3","line":167,"updated":"2015-12-01 17:21:57.000000000","message":"Where is there error handling for this if you don\u0027t have access to the policy?","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"0a64b4d8bff6d7540b9e4478b21db0b39546f606","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":166,"context_line":"            # first, validate that we have access to the policy"},{"line_number":167,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":168,"context_line":"            rule \u003d rule_object.QosDscpMarkRule("},{"line_number":169,"context_line":"                context, qos_policy_id\u003dpolicy_id,"},{"line_number":170,"context_line":"                **dscp_mark_rule[\u0027dscp_mark_rule\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_2acbf354","line":167,"in_reply_to":"9a8ffd7b_adb2afe3","updated":"2015-12-10 19:22:12.000000000","message":"I am not sure why the code would not have access to the policy, but looking in _get_policy_obj I believe a QosPolicyNotFound exception would be raised.  That exception wouldn\u0027t be handled at this level, it would be handled higher up the call stack.","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":180,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":181,"context_line":"            # first, validate that we have access to the policy"},{"line_number":182,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":183,"context_line":"            # check if the rule belong to the policy"},{"line_number":184,"context_line":"            policy.get_rule_by_id(rule_id)"},{"line_number":185,"context_line":"            rule \u003d rule_object.QosDscpMarkRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_ade94fb9","line":182,"updated":"2015-12-01 17:21:57.000000000","message":"Same as above","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":195,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":196,"context_line":"            # first, validate that we have access to the policy"},{"line_number":197,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":198,"context_line":"            rule \u003d policy.get_rule_by_id(rule_id)"},{"line_number":199,"context_line":"            rule.delete()"},{"line_number":200,"context_line":"            policy.reload_rules()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_cd2a93e7","line":197,"updated":"2015-12-01 17:21:57.000000000","message":"And again","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":14033,"name":"James Reeves","email":"james.reeves5546@gmail.com","username":"trombongod"},"change_message_id":"3717e81a2bc03c9e4688994b14ddba8f25274084","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        # make sure we have access to the policy when fetching rules"},{"line_number":224,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":225,"context_line":"            # first, validate that we have access to the policy"},{"line_number":226,"context_line":"            self._get_policy_obj(context, policy_id)"},{"line_number":227,"context_line":"            filters \u003d filters or dict()"},{"line_number":228,"context_line":"            filters[qos_consts.QOS_POLICY_ID] \u003d policy_id"},{"line_number":229,"context_line":"            return rule_object.QosDscpMarkRule.get_objects(context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a8ffd7b_cd5ff373","line":226,"updated":"2015-12-01 17:21:57.000000000","message":"Here too","commit_id":"1827e3b636b9b5828b43fc0808ded070df6ae079"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":159,"context_line":"                                                                 **filters)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":162,"context_line":"    def create_policy_dscp_mark_rule(self, context, policy_id,"},{"line_number":163,"context_line":"                                           dscp_mark_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_14b82d29","line":161,"updated":"2015-12-03 12:36:59.000000000","message":"Really, all this code is a duplicated version of what we have for bw limits. We need to avoid copy paste by generating those functions for each type we know about.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"0223988b470b43a36659deaa696c65b8c2cd6205","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":159,"context_line":"                                                                 **filters)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":162,"context_line":"    def create_policy_dscp_mark_rule(self, context, policy_id,"},{"line_number":163,"context_line":"                                           dscp_mark_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a740942_8edcdb47","line":161,"in_reply_to":"9a8ffd7b_14b82d29","updated":"2015-12-03 15:24:31.000000000","message":"I\u0027ll add a #TODO for this and the comments for the previous patch.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"127804d13df98a8dc1ad94ebc4fc47ec419dbe22","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            filters[qos_consts.QOS_POLICY_ID] \u003d policy_id"},{"line_number":229,"context_line":"            return rule_object.QosDscpMarkRule.get_objects(context,"},{"line_number":230,"context_line":"                                                                 **filters)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    # TODO(QoS): enforce rule types when accessing rule objects"},{"line_number":233,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":234,"context_line":"    @db_base_plugin_common.convert_result_to_dict"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a8ffd7b_54ea35dc","line":231,"updated":"2015-12-03 12:36:59.000000000","message":"API tests should be added for the new rule type.","commit_id":"192ccdb595ffcecd802d31798ad95a51bffe85ac"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"127beb7c171051bf3447c101d1574457a598c96d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":169,"context_line":"            rule \u003d rule_object.QosDscpMarkRule("},{"line_number":170,"context_line":"                context, qos_policy_id\u003dpolicy_id,"},{"line_number":171,"context_line":"                **dscp_mark_rule[\u0027dscp_mark_rule\u0027])"},{"line_number":172,"context_line":"            rule.create()"},{"line_number":173,"context_line":"            policy.reload_rules()"},{"line_number":174,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_78c75898","line":171,"updated":"2015-12-11 19:49:25.000000000","message":"Do we really need to have something as complex as \"**dscp_mark_rule[\u0027dscp_mark_rule\u0027]\" here?  The bandwidth limiting data is complex, having to store both max_kbps and max_burst_kbps.  But since the DSCP mark data is just a single integer, could we perhaps make this a little less complex of a data structure?","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"270b588602f953210c0fd6848ca9a3e50f88fbdd","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":169,"context_line":"            rule \u003d rule_object.QosDscpMarkRule("},{"line_number":170,"context_line":"                context, qos_policy_id\u003dpolicy_id,"},{"line_number":171,"context_line":"                **dscp_mark_rule[\u0027dscp_mark_rule\u0027])"},{"line_number":172,"context_line":"            rule.create()"},{"line_number":173,"context_line":"            policy.reload_rules()"},{"line_number":174,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a740942_95a64dbf","line":171,"in_reply_to":"7a740942_78c75898","updated":"2015-12-14 16:51:44.000000000","message":"I\u0027ll make this change now, if I don\u0027t get it done in the next hour I\u0027ll put up the work I have so far.\n\nI\u0027ve made some name changes to the functions to bring it closer to the spec and cli (I think). I changed around functionality in ovs-lib. I\u0027ve also made a change to the ovs-agent so it won\u0027t delete flows with a cookie of 0x042 (Ajo asked for this at the IRC meeting).","commit_id":"aa6fc507c00d6f677aea60b81002007553be478a"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"b027cae851850ad82af15381d113a380a5de2cba","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                **dscp_marking_rule[\u0027dscp_marking_rule\u0027])"},{"line_number":172,"context_line":"            rule.create()"},{"line_number":173,"context_line":"            policy.reload_rules()"},{"line_number":174,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"},{"line_number":175,"context_line":"        return rule"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @db_base_plugin_common.convert_result_to_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_623adccf","line":174,"updated":"2015-12-14 19:29:20.000000000","message":"Should this be \u0027create_policy\u0027?  What if there is no QoS policy that exists at this point?","commit_id":"4719bf57df33710a43aaada1e60b540a31068f20"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e448594603184abee27c37335042806e0ff30762","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                **dscp_marking_rule[\u0027dscp_marking_rule\u0027])"},{"line_number":172,"context_line":"            rule.create()"},{"line_number":173,"context_line":"            policy.reload_rules()"},{"line_number":174,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"},{"line_number":175,"context_line":"        return rule"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @db_base_plugin_common.convert_result_to_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_ffe4fe0d","line":174,"in_reply_to":"5a710552_623adccf","updated":"2015-12-15 11:55:39.000000000","message":"From what I\u0027ve read in the QosAgentExtension I think the only event type it interprets is update.\n\nneutron/agent/l2/extensions/qos.py line 200","commit_id":"4719bf57df33710a43aaada1e60b540a31068f20"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"b027cae851850ad82af15381d113a380a5de2cba","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            rule \u003d policy.get_rule_by_id(rule_id)"},{"line_number":200,"context_line":"            rule.delete()"},{"line_number":201,"context_line":"            policy.reload_rules()"},{"line_number":202,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":205,"context_line":"    @db_base_plugin_common.convert_result_to_dict"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_823ee8b6","line":202,"updated":"2015-12-14 19:29:20.000000000","message":"Should this be \u0027delete_policy\u0027?  What if there will be no QoS policies that exist after this removal occurs?","commit_id":"4719bf57df33710a43aaada1e60b540a31068f20"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":154,"context_line":"                                                                 **filters)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"#TODO(DSCP)Add API tests, Add error handling for invalid"},{"line_number":157,"context_line":"#          access to policy for dscp"},{"line_number":158,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":159,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_5d4ce69d","line":156,"updated":"2016-02-29 10:42:38.000000000","message":"You already have API tests.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            return rule_object.QosBandwidthLimitRule.get_objects(context,"},{"line_number":154,"context_line":"                                                                 **filters)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"#TODO(DSCP)Add API tests, Add error handling for invalid"},{"line_number":157,"context_line":"#          access to policy for dscp"},{"line_number":158,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":159,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_5104c048","line":156,"in_reply_to":"9aed3d3a_5d4ce69d","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":159,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"},{"line_number":160,"context_line":"                                     dscp_marking_rule):"},{"line_number":161,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":162,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":163,"context_line":"            # first, validate that we have access to the policy"},{"line_number":164,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_fd533a37","line":161,"updated":"2016-02-29 10:42:38.000000000","message":"you should check the validity of dscp_mark field here and not into the agent.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":159,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"},{"line_number":160,"context_line":"                                     dscp_marking_rule):"},{"line_number":161,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":162,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":163,"context_line":"            # first, validate that we have access to the policy"},{"line_number":164,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_f1ea3473","line":161,"in_reply_to":"9aed3d3a_fd533a37","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"73f0c93dcfa7ef0e96df3cf6db4f36823ce78699","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":175,"context_line":"                                     dscp_marking_rule):"},{"line_number":176,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":177,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":178,"context_line":"            # first, validate that we have access to the policy"},{"line_number":179,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":180,"context_line":"            # check if the rule belong to the policy"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_410244b5","line":177,"updated":"2016-02-29 10:42:38.000000000","message":"ditto, same check.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":175,"context_line":"                                     dscp_marking_rule):"},{"line_number":176,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":177,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":178,"context_line":"            # first, validate that we have access to the policy"},{"line_number":179,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":180,"context_line":"            # check if the rule belong to the policy"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_91fac841","line":177,"in_reply_to":"9aed3d3a_410244b5","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_dbdc0c1b","line":166,"range":{"start_line":166,"start_character":11,"end_line":166,"end_character":20},"updated":"2016-03-01 13:37:11.000000000","message":"What if int() fails? Will you raise ValueError to the API caller?..","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_808964cd","line":166,"range":{"start_line":166,"start_character":11,"end_line":166,"end_character":20},"in_reply_to":"7af24918_6f6feb92","updated":"2016-03-01 15:30:10.000000000","message":"Yeah, but what\u0027s the guarantee the caller passes a string that is representable as an integer.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d8e67666b5a152e81fe6c61c23d9af515c02ea82","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_dd41803b","line":166,"range":{"start_line":166,"start_character":11,"end_line":166,"end_character":20},"in_reply_to":"7af24918_808964cd","updated":"2016-03-01 21:01:49.000000000","message":"I think there\u0027s validation at the extension level to make sure it\u0027s a positive integer.\n\nAnyway, we can validate this via EnumField.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_6f6feb92","line":166,"range":{"start_line":166,"start_character":11,"end_line":166,"end_character":20},"in_reply_to":"7af24918_dbdc0c1b","updated":"2016-03-01 15:16:14.000000000","message":"the value is stored as an unsigned int, it just needed to be cast as an int for the comparison.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_1052aa67","line":166,"range":{"start_line":166,"start_character":11,"end_line":166,"end_character":20},"in_reply_to":"7af24918_dd41803b","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_9b49e4d3","line":167,"updated":"2016-03-01 13:37:11.000000000","message":"The message itself is not clear: better: \"Wrong DSCP mark value passed. Possible values: ...\" Note that the list of possible values should be maintained in code somewhere and not in the message.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d8e67666b5a152e81fe6c61c23d9af515c02ea82","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_5d74509b","line":167,"in_reply_to":"7af24918_0063941b","updated":"2016-03-01 21:01:49.000000000","message":"Agreed, \n\nIf you can\u0027t handle it now, please add a TODO and I will help doing that in a follow up.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_1338f4d2","line":167,"in_reply_to":"7af24918_5d74509b","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_af9c536a","line":167,"in_reply_to":"7af24918_9b49e4d3","updated":"2016-03-01 15:16:14.000000000","message":"I\u0027ll clarify the message now, I\u0027ll just use DSCP_VALID_MARKS for the list of valid values.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_0063941b","line":167,"in_reply_to":"7af24918_af9c536a","updated":"2016-03-01 15:30:10.000000000","message":"I believe that instead of that you should have the validation in the new rule object itself.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_fb9d885a","line":169,"range":{"start_line":166,"start_character":8,"end_line":169,"end_character":42},"updated":"2016-03-01 13:37:11.000000000","message":"This validation probably belongs to the object itself.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_3b6a501b","line":169,"range":{"start_line":169,"start_character":29,"end_line":169,"end_character":39},"updated":"2016-03-01 13:37:11.000000000","message":"Using the exception, you will probably get ServerFault on the API side. Which is always wrong. Instead, you should use something like exceptions.BadRequest.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                     dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Please provide a valid DSCP mark - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_70e68eb5","line":169,"range":{"start_line":166,"start_character":8,"end_line":169,"end_character":42},"in_reply_to":"7af24918_fb9d885a","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"},{"line_number":173,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":174,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_fbd588b9","line":171,"updated":"2016-03-01 13:37:11.000000000","message":"There\u0027s a huge code duplication here. I don\u0027t think it\u0027s the approach here. We should make sure that the code for bwlimit is reused, not copy-pasted here.\n\nWe should really fix it by handling comment in line 86.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"},{"line_number":173,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":174,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_7335f8d8","line":171,"in_reply_to":"7af24918_bdc11483","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d8e67666b5a152e81fe6c61c23d9af515c02ea82","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.Exception(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"},{"line_number":173,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":174,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_bdc11483","line":171,"in_reply_to":"7af24918_fbd588b9","updated":"2016-03-01 21:01:49.000000000","message":"Please, change the TODO at line 86, and add me as a holder TODO(mangelajo), change the \"Consider\" for an imperative.\n\nhttps://review.openstack.org/#/c/251738/31..34/neutron/services/qos/qos_plugin.py@86","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":183,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":184,"context_line":"                                     dscp_marking_rule):"},{"line_number":185,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":186,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":187,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_bb678024","line":184,"updated":"2016-03-01 13:37:11.000000000","message":"indentation here and in other places borked.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":183,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":184,"context_line":"                                     dscp_marking_rule):"},{"line_number":185,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":186,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":187,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_70fdee39","line":184,"in_reply_to":"7af24918_bb678024","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":216,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":217,"context_line":"    def get_policy_dscp_marking_rule(self, context, rule_id,"},{"line_number":218,"context_line":"                                  policy_id, fields\u003dNone):"},{"line_number":219,"context_line":"        # make sure we have access to the policy when fetching the rule"},{"line_number":220,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":221,"context_line":"            # first, validate that we have access to the policy"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_5bb0fc8b","line":218,"updated":"2016-03-01 13:37:11.000000000","message":"indentation borked","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    @db_base_plugin_common.filter_fields"},{"line_number":216,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":217,"context_line":"    def get_policy_dscp_marking_rule(self, context, rule_id,"},{"line_number":218,"context_line":"                                  policy_id, fields\u003dNone):"},{"line_number":219,"context_line":"        # make sure we have access to the policy when fetching the rule"},{"line_number":220,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":221,"context_line":"            # first, validate that we have access to the policy"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_b095b6e5","line":218,"in_reply_to":"7af24918_5bb0fc8b","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                        dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Invalid DSCP mark provided - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_67354745","line":166,"updated":"2016-03-01 17:05:40.000000000","message":"that check belongs to the object.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                        dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Invalid DSCP mark provided - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_33dc10e4","line":166,"in_reply_to":"7af24918_67354745","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02158c5c8b19a04c192dac81dee5b6906ca9ef84","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                        dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Invalid DSCP mark provided - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_1d63e8dd","line":166,"updated":"2016-03-01 21:01:35.000000000","message":"please try to use the EnumField validation, or add a TODO to handle this on a follow-up. I volunteer to help.","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                                        dscp_marking_rule):"},{"line_number":164,"context_line":"        # make sure we will have a policy object to push resource update"},{"line_number":165,"context_line":"        mark \u003d dscp_marking_rule[\u0027dscp_marking_rule\u0027][\u0027dscp_mark\u0027]"},{"line_number":166,"context_line":"        if int(mark) not in DSCP_VALID_MARKS:"},{"line_number":167,"context_line":"            msg \u003d _(\"Invalid DSCP mark provided - %s \""},{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_934fe491","line":166,"in_reply_to":"7af24918_1d63e8dd","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02158c5c8b19a04c192dac81dee5b6906ca9ef84","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"},{"line_number":173,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":174,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_5d0570c0","line":171,"updated":"2016-03-01 21:01:35.000000000","message":"please handle Ihar\u0027s comment from PS31 here,\n\nOr if you\u0027re time-tight, please:\n\nchange the TODO at line 86, and add me as a holder TODO(mangelajo), change the \"Consider\" for an imperative.\nhttps://review.openstack.org/#/c/251738/31..34/neutron/services/qos/qos_plugin.py@86\n\nI will be happy to do some refactor in that regard. I will do it right away.","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                    \"an even integer between 8 and 40, 46, 48 and 56.\") % mark"},{"line_number":169,"context_line":"            raise exceptions.BadRequest(msg)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":172,"context_line":"            # first, validate that we have access to the policy"},{"line_number":173,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":174,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_335ff042","line":171,"in_reply_to":"7af24918_5d0570c0","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c8946a3e126060dc4ed06eae2e2302dd2473fa66","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":157,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"},{"line_number":158,"context_line":"                                        dscp_marking_rule):"},{"line_number":159,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":160,"context_line":"            # first, validate that we have access to the policy"},{"line_number":161,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_dc632d40","line":158,"updated":"2016-03-02 06:30:23.000000000","message":"should we not be checking the validity of the rule here?","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":157,"context_line":"    def create_policy_dscp_marking_rule(self, context, policy_id,"},{"line_number":158,"context_line":"                                        dscp_marking_rule):"},{"line_number":159,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":160,"context_line":"            # first, validate that we have access to the policy"},{"line_number":161,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_aa47ef49","line":158,"in_reply_to":"7af24918_dc632d40","updated":"2016-03-02 07:05:38.000000000","message":"https://review.openstack.org/#/c/251738/35/neutron/objects/qos/rule.py@107\n\nIt\u0027s there already","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":160,"context_line":"            # first, validate that we have access to the policy"},{"line_number":161,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"},{"line_number":162,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("},{"line_number":163,"context_line":"                context, qos_policy_id\u003dpolicy_id,"},{"line_number":164,"context_line":"                **dscp_marking_rule[\u0027dscp_marking_rule\u0027])"},{"line_number":165,"context_line":"            rule.create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_2a72bfad","line":162,"updated":"2016-03-02 07:05:38.000000000","message":"will be triggered here.\n\n\nI will check now if the ValueError is enough, or if that exception needs to be translated.","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c8946a3e126060dc4ed06eae2e2302dd2473fa66","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":171,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":172,"context_line":"                                        dscp_marking_rule):"},{"line_number":173,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":174,"context_line":"            # first, validate that we have access to the policy"},{"line_number":175,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_9c4a45ab","line":172,"updated":"2016-03-02 06:30:23.000000000","message":"ditto","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @db_base_plugin_common.convert_result_to_dict"},{"line_number":171,"context_line":"    def update_policy_dscp_marking_rule(self, context, rule_id, policy_id,"},{"line_number":172,"context_line":"                                        dscp_marking_rule):"},{"line_number":173,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":174,"context_line":"            # first, validate that we have access to the policy"},{"line_number":175,"context_line":"            policy \u003d self._get_policy_obj(context, policy_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_6a64c7e4","line":172,"in_reply_to":"7af24918_9c4a45ab","updated":"2016-03-02 07:05:38.000000000","message":"ditto","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c8946a3e126060dc4ed06eae2e2302dd2473fa66","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        with db_api.autonested_transaction(context.session):"},{"line_number":218,"context_line":"            # first, validate that we have access to the policy"},{"line_number":219,"context_line":"            self._get_policy_obj(context, policy_id)"},{"line_number":220,"context_line":"            filters \u003d filters or dict()"},{"line_number":221,"context_line":"            filters[qos_consts.QOS_POLICY_ID] \u003d policy_id"},{"line_number":222,"context_line":"            return rule_object.QosDscpMarkingRule.get_objects(context,"},{"line_number":223,"context_line":"                                                              **filters)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_dcf16d6c","line":220,"updated":"2016-03-02 06:30:23.000000000","message":"nit dict() \u003d\u003e {}","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            policy.get_rule_by_id(rule_id)"},{"line_number":178,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("},{"line_number":179,"context_line":"                context, **dscp_marking_rule[\u0027dscp_marking_rule\u0027])"},{"line_number":180,"context_line":"            rule.id \u003d rule_id"},{"line_number":181,"context_line":"            rule.update()"},{"line_number":182,"context_line":"            policy.reload_rules()"},{"line_number":183,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_548692db","line":180,"updated":"2016-03-17 12:33:27.000000000","message":"I believe with https://review.openstack.org/#/c/292488 landed, you will need changes here in how you initialize the rule object, similar to https://review.openstack.org/#/c/292488/15/neutron/services/qos/qos_plugin.py","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"453e0a775e251fa0cb98b41715163f87a1dd770a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            policy.get_rule_by_id(rule_id)"},{"line_number":178,"context_line":"            rule \u003d rule_object.QosDscpMarkingRule("},{"line_number":179,"context_line":"                context, **dscp_marking_rule[\u0027dscp_marking_rule\u0027])"},{"line_number":180,"context_line":"            rule.id \u003d rule_id"},{"line_number":181,"context_line":"            rule.update()"},{"line_number":182,"context_line":"            policy.reload_rules()"},{"line_number":183,"context_line":"        self.notification_driver_manager.update_policy(context, policy)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_600ca83b","line":180,"in_reply_to":"1af94dfe_548692db","updated":"2016-03-17 13:26:11.000000000","message":"Will do.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/tests/api/test_qos.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":708,"context_line":""},{"line_number":709,"context_line":"class QosDscpMarkingRuleTestJSON(base.BaseAdminNetworkTest):"},{"line_number":710,"context_line":"    @classmethod"},{"line_number":711,"context_line":"    def resource_setup(cls):"},{"line_number":712,"context_line":"        super(QosDscpMarkingRuleTestJSON, cls).resource_setup()"},{"line_number":713,"context_line":"        if not test.is_extension_enabled(\u0027qos\u0027, \u0027network\u0027):"},{"line_number":714,"context_line":"            msg \u003d \"qos extension not enabled.\""}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_de251aaf","line":711,"updated":"2016-03-01 13:37:11.000000000","message":"(No action required) that resource_setup is identical in all test classes in the file. It would be better to have a single base class with the method implemented, and inherit from it.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":817,"context_line":"        self.assertRaises("},{"line_number":818,"context_line":"            exceptions.Forbidden,"},{"line_number":819,"context_line":"            self.client.create_dscp_marking_rule,"},{"line_number":820,"context_line":"            \u0027policy\u0027, 1)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":823,"context_line":"    @test.idempotent_id(\u0027ce0bd0c2-54d9-4e29-85f1-cfb36ac3ebe2\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_3e651ee1","line":820,"updated":"2016-03-01 13:37:11.000000000","message":"I don\u0027t see any tests to validate that incorrect values for the mark are not allowed.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"}],"neutron/tests/fullstack/resources/client.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"faf5237d0af08eebe13ae43fe2aacb790918eddc","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            rule[\u0027dscp_mark\u0027] \u003d dscp_mark"},{"line_number":141,"context_line":"        rule \u003d self.client.create_dscp_marking("},{"line_number":142,"context_line":"            policy\u003dqos_policy_id,"},{"line_number":143,"context_line":"            body\u003d{\u0027dscp_mark\u0027: rule})"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.addCleanup(_safe_method(self.client.delete_dscp_marking),"},{"line_number":146,"context_line":"                        rule[\u0027dscp_marking_rule\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":46,"id":"7af24918_ead98258","line":143,"range":{"start_line":143,"start_character":19,"end_line":143,"end_character":28},"updated":"2016-03-03 15:54:07.000000000","message":"This should read \u0027dscp_marking_rule\u0027 IMO.","commit_id":"c89cc2dfc55d56d9ce30d607a8a93176e9d4ecc0"}],"neutron/tests/fullstack/resources/environment.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    Does the setup, as a whole, support tunneling? How about l2pop?"},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":"    def __init__(self, network_type\u003d\u0027vxlan\u0027, l2_pop\u003dTrue, qos\u003dFalse,"},{"line_number":39,"context_line":"                 mech_drivers\u003d\u0027openvswitch,linuxbridge\u0027):"},{"line_number":40,"context_line":"        self.network_type \u003d network_type"},{"line_number":41,"context_line":"        self.l2_pop \u003d l2_pop"},{"line_number":42,"context_line":"        self.qos \u003d qos"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_346026a5","line":39,"updated":"2016-03-17 12:33:27.000000000","message":"nit: I suggest that to be a list, not a string, for easier manipulation.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/tests/fullstack/test_qos.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return vm, qos_policy"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_qos_policy_rule_lifecycle(self):"},{"line_number":86,"context_line":"        new_limit \u003d BANDWIDTH_LIMIT + 100"},{"line_number":87,"context_line":"        new_burst \u003d BANDWIDTH_BURST + 50"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_882ad77c","line":85,"updated":"2016-02-27 07:28:48.000000000","message":"this was for bandwidth limit, you may need to refactor this and do the same (while refactoring common parts) for dscp marks.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"7a9b9070d5fcb657788d572b356978ce7a68fab8","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        return vm, qos_policy"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_qos_policy_rule_lifecycle(self):"},{"line_number":86,"context_line":"        new_limit \u003d BANDWIDTH_LIMIT + 100"},{"line_number":87,"context_line":"        new_burst \u003d BANDWIDTH_BURST + 50"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_8f62a63c","line":85,"in_reply_to":"9aed3d3a_882ad77c","updated":"2016-02-29 14:49:58.000000000","message":"OK, notes about this, (and the next comments), I believe this buys us the check that RPC passing of the policy + specific rules work, and are effective.\n\nI\u0027m ok if we bifurcate the test in BW limit / DSCP as a follow up.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        _wait_for_rule_removed(vm)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        # Create new rule"},{"line_number":112,"context_line":"        new_rule \u003d self.safe_client.create_bandwidth_limit_rule("},{"line_number":113,"context_line":"            self.tenant_id, qos_policy_id, new_limit, new_burst)"},{"line_number":114,"context_line":"        _wait_for_rule_applied(vm, new_limit, new_burst)"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_e821e3a0","line":112,"updated":"2016-02-27 07:28:48.000000000","message":"and in the new function you will need to create a dscp rule...","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        # Create new rule"},{"line_number":112,"context_line":"        new_rule \u003d self.safe_client.create_bandwidth_limit_rule("},{"line_number":113,"context_line":"            self.tenant_id, qos_policy_id, new_limit, new_burst)"},{"line_number":114,"context_line":"        _wait_for_rule_applied(vm, new_limit, new_burst)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # Update qos policy rule id"},{"line_number":117,"context_line":"        self.client.update_bandwidth_limit_rule("}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_683673e7","line":114,"updated":"2016-02-27 07:28:48.000000000","message":"make sure the rule is applied (may need a new _wait_for_rule_applied dscp-specific).","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        _wait_for_rule_applied(vm, new_limit, new_burst)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # Update qos policy rule id"},{"line_number":117,"context_line":"        self.client.update_bandwidth_limit_rule("},{"line_number":118,"context_line":"            new_rule[\u0027id\u0027], qos_policy_id,"},{"line_number":119,"context_line":"            body\u003d{\u0027bandwidth_limit_rule\u0027: {\u0027max_kbps\u0027: BANDWIDTH_LIMIT,"},{"line_number":120,"context_line":"                                           \u0027max_burst_kbps\u0027: BANDWIDTH_BURST}})"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_a84ebb6c","line":117,"updated":"2016-02-27 07:28:48.000000000","message":"ditto.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            new_rule[\u0027id\u0027], qos_policy_id,"},{"line_number":119,"context_line":"            body\u003d{\u0027bandwidth_limit_rule\u0027: {\u0027max_kbps\u0027: BANDWIDTH_LIMIT,"},{"line_number":120,"context_line":"                                           \u0027max_burst_kbps\u0027: BANDWIDTH_BURST}})"},{"line_number":121,"context_line":"        _wait_for_rule_applied(vm, BANDWIDTH_LIMIT, BANDWIDTH_BURST)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # Remove qos policy from port"},{"line_number":124,"context_line":"        self.client.update_port("}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_e858c334","line":121,"updated":"2016-02-27 07:28:48.000000000","message":"ditto.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"0653c9bd00233d369ca98085e52830d779be2f8a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        self.client.update_port("},{"line_number":125,"context_line":"            vm.neutron_port[\u0027id\u0027],"},{"line_number":126,"context_line":"            body\u003d{\u0027port\u0027: {\u0027qos_policy_id\u0027: None}})"},{"line_number":127,"context_line":"        _wait_for_rule_removed(vm)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class TestQoSWithL2Population(base.BaseFullStackTestCase):"}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_c85b3f2d","line":127,"updated":"2016-02-27 07:28:48.000000000","message":"ditto.","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"b28d12d408f43e3bc156ae8c34a05a8f9cce4c74","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    _wait_for_rule_applied(vm, None, None)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# TODO(njohnston): Bifurcate this into a DSCP class as well"},{"line_number":44,"context_line":"# as a bandwidth-limiting class."},{"line_number":45,"context_line":"class TestQoSWithOvsAgent(base.BaseFullStackTestCase):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"9aed3d3a_39047648","line":44,"range":{"start_line":43,"start_character":0,"end_line":44,"end_character":32},"updated":"2016-02-29 18:32:55.000000000","message":"Added this per discussion with @ajo.","commit_id":"37329589039f1c4e8fe02d82cd54a56e375049bf"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"ca826989b7daf42418ccf53e7a1a874cd7f5fbca","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        (\"ovs\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_OVS}),"},{"line_number":78,"context_line":"        (\"linuxbridge\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_LINUXBRIDGE})"},{"line_number":79,"context_line":"    ]"},{"line_number":80,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":81,"context_line":"# TODO(njohnston): Bifurcate this into a DSCP class as well"},{"line_number":82,"context_line":"# as a bandwidth-limiting class."},{"line_number":83,"context_line":"class TestQoSWithOvsAgent(base.BaseFullStackTestCase):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_fcaf25e1","line":80,"updated":"2016-03-01 19:19:41.000000000","message":"??","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        (\"ovs\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_OVS}),"},{"line_number":78,"context_line":"        (\"linuxbridge\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_LINUXBRIDGE})"},{"line_number":79,"context_line":"    ]"},{"line_number":80,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":81,"context_line":"# TODO(njohnston): Bifurcate this into a DSCP class as well"},{"line_number":82,"context_line":"# as a bandwidth-limiting class."},{"line_number":83,"context_line":"class TestQoSWithOvsAgent(base.BaseFullStackTestCase):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_9336c401","line":80,"in_reply_to":"7af24918_22303f56","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02158c5c8b19a04c192dac81dee5b6906ca9ef84","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        (\"ovs\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_OVS}),"},{"line_number":78,"context_line":"        (\"linuxbridge\", {\u0027l2_agent_type\u0027: constants.AGENT_TYPE_LINUXBRIDGE})"},{"line_number":79,"context_line":"    ]"},{"line_number":80,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":81,"context_line":"# TODO(njohnston): Bifurcate this into a DSCP class as well"},{"line_number":82,"context_line":"# as a bandwidth-limiting class."},{"line_number":83,"context_line":"class TestQoSWithOvsAgent(base.BaseFullStackTestCase):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_22303f56","line":80,"in_reply_to":"7af24918_fcaf25e1","updated":"2016-03-01 21:01:35.000000000","message":"I Guess it\u0027s the result of a hall-fixed merge conflict with the just-merged linux-bridge qos tests, please remove :)","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8d698ffb42542c3bc8412e5f30267066250fe09c","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        env \u003d environment.Environment(env_desc, host_desc)"},{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    "},{"line_number":182,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":183,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":184,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"}],"source_content_type":"text/x-python","patch_set":39,"id":"7af24918_975b172e","line":181,"updated":"2016-03-02 16:31:05.000000000","message":"unnecessary extra white line, please add TODO(mangelajo): reenable this, after adding capacity to disable linuxbridge mechdriver on EnvironmentDescription.","commit_id":"6acd7b2613b176067ef723a8f9be70903599799e"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"4a1e931d3cd6ca4fdaad723f2635014733804456","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    "},{"line_number":182,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":183,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":184,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":185,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":39,"id":"7af24918_0f925157","line":182,"updated":"2016-03-02 16:07:35.000000000","message":"Disabled temporarily, we need to (L176) support lb_mech_driver\u003dFalse to make sure the expected rules are not cut down, since linuxbridge mechanism driver is configured by default and it does not support DSCP.","commit_id":"6acd7b2613b176067ef723a8f9be70903599799e"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"77515075eb136aebc5a4eea9b2c6e165f9cc902f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    "},{"line_number":182,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":183,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":184,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":185,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":39,"id":"7af24918_9713170d","line":182,"in_reply_to":"7af24918_0f925157","updated":"2016-03-02 16:32:20.000000000","message":"According to [1], ovs is the default so I\u0027m not sure what\u0027s going on...\nI can have a look at this tomorrow if needed.\n\n[1]: https://github.com/openstack/neutron/blob/f94ad5abbe9a526036f432c5324884e31f3e65af/neutron/tests/fullstack/resources/environment.py#L55","commit_id":"6acd7b2613b176067ef723a8f9be70903599799e"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"449969c228b6c4230be78c1523438e47cb1e174a","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        env \u003d environment.Environment(env_desc, host_desc)"},{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":182,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":183,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":184,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":40,"id":"7af24918_775f6be5","line":181,"updated":"2016-03-02 16:32:01.000000000","message":"please add TODO(mangelajo): reenable this, after adding capacity to disable linuxbridge mechdriver on EnvironmentDescription.","commit_id":"5afde11e74f50cea439f2b5ed8259a4950651e31"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        env \u003d environment.Environment(env_desc, host_desc)"},{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":182,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":183,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":184,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_fc25f008","line":181,"updated":"2016-03-03 09:01:34.000000000","message":"We disable the test here?..","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"8c295155d6cfd86725abb3dc9bfdcb0e76c326a1","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        env \u003d environment.Environment(env_desc, host_desc)"},{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":182,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":183,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":184,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_1556aacd","line":181,"in_reply_to":"7af24918_7267474d","updated":"2016-03-03 10:22:19.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"21c895f4822e90cdd3a330fe78a684d9cd9b2bb3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        env \u003d environment.Environment(env_desc, host_desc)"},{"line_number":179,"context_line":"        super(TestQoSWithL2Population, self).setUp(env)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":182,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":183,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":184,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_7267474d","line":181,"in_reply_to":"7af24918_fc25f008","updated":"2016-03-03 09:50:18.000000000","message":"please add TODO(mangelajo): reenable this, after adding capacity to disable linuxbridge mechdriver on EnvironmentDescription.\n\nLogs indicate that for some reason linuxbridge mech driver is being loaded, and that means the rule type get\u0027s filtered because it\u0027s not LB-supported yet.\n\nI had the same issue locally when testing via neutron-client.\nWe should add a note here, John is looking at it, but we should probably add a flag to EnvironmentDescription to setup which mechanism drivers we want to test with","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04aec4e0f8da2439549919c3985cad3707f35f9a","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    #TODO(mangelajo): reenable this, after adding capacity to disable"},{"line_number":172,"context_line":"    #                 linuxbridge mechdriver on EnvironmentDescription"},{"line_number":173,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":174,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":175,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":176,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_7d225e53","line":173,"updated":"2016-03-03 16:08:27.000000000","message":"I don\u0027t think it\u0027s a great idea. What\u0027s the plan to reenable it in Mitaka?","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"569193dcfd51b1b0b4cf7023d89029f9e350689a","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    #TODO(mangelajo): reenable this, after adding capacity to disable"},{"line_number":172,"context_line":"    #                 linuxbridge mechdriver on EnvironmentDescription"},{"line_number":173,"context_line":"    def _test_supported_qos_rule_types(self):"},{"line_number":174,"context_line":"        res \u003d self.client.list_qos_rule_types()"},{"line_number":175,"context_line":"        rule_types \u003d {t[\u0027type\u0027] for t in res[\u0027rule_types\u0027]}"},{"line_number":176,"context_line":"        expected_rules \u003d ("}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_76c6fb9a","line":173,"in_reply_to":"7af24918_7d225e53","updated":"2016-03-03 17:27:47.000000000","message":"yes, absolutely. All my TODO\u0027s here are for within-mitaka, and I will actionate on them now.","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"}],"neutron/tests/functional/agent/l2/extensions/test_ovs_agent_qos_extension.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from neutron.tests.functional.agent.l2 import base"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"TEST_POLICY_ID1 \u003d \"a2d72369-4246-4f19-bd3c-af51ec8d70cd\""},{"line_number":31,"context_line":"TEST_POLICY_ID2 \u003d \"46ebaec0-0570-43ac-82f6-60d2b03168c5\""},{"line_number":32,"context_line":"TEST_DSCP_MARK_1 \u003d 14"},{"line_number":33,"context_line":"TEST_DSCP_MARK_2 \u003d 30"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_2af75ff6","line":30,"updated":"2016-03-02 07:05:38.000000000","message":"check functional tests, there was a failure somewhere.","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"}],"neutron/tests/unit/agent/l2/extensions/test_qos.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":148,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":149,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":150,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":151,"context_line":"        self.qos_ext.initialize("},{"line_number":152,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_5ce4e4aa","line":150,"updated":"2016-03-03 09:01:34.000000000","message":"Since you dup it in three tests, apparently that could live in base class; as well as .initialize() call I guess.","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"8c295155d6cfd86725abb3dc9bfdcb0e76c326a1","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":148,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":149,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":150,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":151,"context_line":"        self.qos_ext.initialize("},{"line_number":152,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_d5d44221","line":150,"in_reply_to":"7af24918_0d9984c4","updated":"2016-03-03 10:22:19.000000000","message":"backed this out, my change was causing some issues.  David can you take a look?","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":148,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":149,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":150,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":151,"context_line":"        self.qos_ext.initialize("},{"line_number":152,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_0d9984c4","line":150,"in_reply_to":"7af24918_5ce4e4aa","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"f9f3e2da6c9071994dd6ac403c30a744ac8d8aa3","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":148,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":149,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":150,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":151,"context_line":"        self.qos_ext.initialize("},{"line_number":152,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_06231ea8","line":150,"in_reply_to":"7af24918_d5d44221","updated":"2016-03-03 11:06:36.000000000","message":"@davidsha, are you looking at this for next PS ?","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"69094b0f4e79e70fd526764dc68a1a3c382118ba","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.agent_api \u003d ovs_ext_api.OVSAgentExtensionAPI("},{"line_number":148,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-int\u0027),"},{"line_number":149,"context_line":"                         ovs_bridge.OVSAgentBridge(\u0027br-tun\u0027))"},{"line_number":150,"context_line":"        self.qos_ext.consume_api(self.agent_api)"},{"line_number":151,"context_line":"        self.qos_ext.initialize("},{"line_number":152,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":44,"id":"7af24918_065afe29","line":150,"updated":"2016-03-03 11:06:43.000000000","message":"see comments in PS43, please\nhttps://review.openstack.org/#/c/251738/43/neutron/tests/unit/agent/l2/extensions/test_qos.py","commit_id":"86f642f31a12617dc300dd0200ff293a1fa1dbdb"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04aec4e0f8da2439549919c3985cad3707f35f9a","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        super(QosExtensionRpcTestCase, self).setUp()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.qos_ext.initialize("},{"line_number":153,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_7dd09e1f","line":151,"updated":"2016-03-03 16:08:27.000000000","message":"unneeded change","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"569193dcfd51b1b0b4cf7023d89029f9e350689a","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def setUp(self):"},{"line_number":150,"context_line":"        super(QosExtensionRpcTestCase, self).setUp()"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self.qos_ext.initialize("},{"line_number":153,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_11ea21ac","line":151,"in_reply_to":"7af24918_7dd09e1f","updated":"2016-03-03 17:27:47.000000000","message":"Done","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04aec4e0f8da2439549919c3985cad3707f35f9a","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def setUp(self):"},{"line_number":308,"context_line":"        super(QosExtensionReflushRulesTestCase, self).setUp()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        self.qos_ext.initialize("},{"line_number":311,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_5dcde283","line":309,"updated":"2016-03-03 16:08:27.000000000","message":"ditto","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"569193dcfd51b1b0b4cf7023d89029f9e350689a","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def setUp(self):"},{"line_number":308,"context_line":"        super(QosExtensionReflushRulesTestCase, self).setUp()"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        self.qos_ext.initialize("},{"line_number":311,"context_line":"            self.connection, constants.EXTENSION_DRIVER_TYPE)"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_51d029f6","line":309,"in_reply_to":"7af24918_5dcde283","updated":"2016-03-03 17:27:47.000000000","message":"Done","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"}],"neutron/tests/unit/objects/qos/test_policy.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b9674ab0a29168d88d455d8565d89d783acba328","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        rule_obj_dscp.create()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        policy_obj.obj_make_compatible(None, \u00271.1\u0027)"},{"line_number":302,"context_line":"        policy_obj.reload_rules()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        self.assertIn(rule_obj_band, policy_obj.rules)"},{"line_number":305,"context_line":"        self.assertIn(rule_obj_dscp, policy_obj.rules)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_4d441cb6","line":302,"updated":"2016-02-29 17:30:04.000000000","message":"reload rules should be before  make compatible.","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"8c2a9769e55e850bc7319652a9bd7af98c5dd647","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        rule_obj_dscp.create()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        policy_obj.obj_make_compatible(None, \u00271.1\u0027)"},{"line_number":302,"context_line":"        policy_obj.reload_rules()"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        self.assertIn(rule_obj_band, policy_obj.rules)"},{"line_number":305,"context_line":"        self.assertIn(rule_obj_dscp, policy_obj.rules)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_59c33a57","line":302,"in_reply_to":"9aed3d3a_4d441cb6","updated":"2016-02-29 18:29:28.000000000","message":"Done","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b9674ab0a29168d88d455d8565d89d783acba328","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        rule_obj_dscp.create()"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        policy_obj.obj_make_compatible(None, \u00271.0\u0027)"},{"line_number":319,"context_line":"        policy_obj.reload_rules()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        self.assertIn(rule_obj_band, policy_obj.rules)"},{"line_number":322,"context_line":"        self.assertNotIn(rule_obj_dscp, policy_obj.rules)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_6de3e0a4","line":319,"updated":"2016-02-29 17:30:04.000000000","message":"ditto.","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":13995,"name":"Nate Johnston","email":"nate.johnston@redhat.com","username":"natejohnston"},"change_message_id":"8c2a9769e55e850bc7319652a9bd7af98c5dd647","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        rule_obj_dscp.create()"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        policy_obj.obj_make_compatible(None, \u00271.0\u0027)"},{"line_number":319,"context_line":"        policy_obj.reload_rules()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        self.assertIn(rule_obj_band, policy_obj.rules)"},{"line_number":322,"context_line":"        self.assertNotIn(rule_obj_dscp, policy_obj.rules)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9aed3d3a_d9ad8a9c","line":319,"in_reply_to":"9aed3d3a_6de3e0a4","updated":"2016-02-29 18:29:28.000000000","message":"Done","commit_id":"d0f6b51437fa3f2fa630d807284cbc1afe1d80f8"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        self.assertIn(rule_obj_dscp, policy_obj.rules)"},{"line_number":306,"context_line":"        self.assertEqual(policy_obj.VERSION, \u00271.1\u0027)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def test_object_version_regression(self):"},{"line_number":309,"context_line":"        policy_obj, rule_obj_band \u003d self._create_test_policy_with_rule()"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        rule_fields \u003d self.get_random_fields("}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_fee1f6ff","line":308,"range":{"start_line":308,"start_character":28,"end_line":308,"end_character":38},"updated":"2016-03-01 13:37:11.000000000","message":"degradation you mean? I also suggest we include the version numbers we target conversion for in the test case name, like test_object_version_degradation_1_1_to_1_0","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"caf77b9fbd7e456f710f2a7d1efaf4d0f5e99705","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        self.assertIn(rule_obj_dscp, policy_obj.rules)"},{"line_number":306,"context_line":"        self.assertEqual(policy_obj.VERSION, \u00271.1\u0027)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    def test_object_version_regression(self):"},{"line_number":309,"context_line":"        policy_obj, rule_obj_band \u003d self._create_test_policy_with_rule()"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        rule_fields \u003d self.get_random_fields("}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_33cb7055","line":308,"range":{"start_line":308,"start_character":28,"end_line":308,"end_character":38},"in_reply_to":"7af24918_fee1f6ff","updated":"2016-03-01 22:46:30.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        self.assertIn(rule_obj_band, policy_obj.rules)"},{"line_number":322,"context_line":"        self.assertNotIn(rule_obj_dscp, policy_obj.rules)"},{"line_number":323,"context_line":"        self.assertEqual(policy_obj.VERSION, \u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_5e6d8a31","line":323,"updated":"2016-03-01 13:37:11.000000000","message":"For completeness, you could have a case for upgrade from 1.0 to 1.1.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"7af24918_5e958a3e","line":324,"updated":"2016-03-01 13:37:11.000000000","message":"I don\u0027t see any tests that target the rule object specifically. See neutron/tests/unit/objects/qos/test_rule.py","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"7af24918_b25f9a0d","line":324,"in_reply_to":"7af24918_5e958a3e","updated":"2016-03-01 15:16:14.000000000","message":"The rules have not been modified since their initial version so we can\u0027t test object versioning on them yet.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a05bc50e01e56a14f4ae2fa89b6eb01d9cba89ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"7af24918_2017b052","line":324,"in_reply_to":"7af24918_b25f9a0d","updated":"2016-03-01 15:30:10.000000000","message":"What do you mean? There should be a set of unit tests for the new DSCP rule object. Same as we have for bwlimit.\n\nThe tests should cover CRUD operations, object interface guarantees etc. Please see the file I pointed to for more details.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        rule_obj_dscp \u003d rule.QosDscpMarkingRule(self.context, **rule_fields)"},{"line_number":299,"context_line":"        rule_obj_dscp.create()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        primitive \u003d {}"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        policy_obj.reload_rules()"},{"line_number":304,"context_line":"        policy_obj.obj_make_compatible(primitive, \u00271.1\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_47d64bc6","line":301,"updated":"2016-03-01 17:05:40.000000000","message":"nit: could pass it directly as an argument in line 304.","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        rule_obj_dscp \u003d rule.QosDscpMarkingRule(self.context, **rule_fields)"},{"line_number":299,"context_line":"        rule_obj_dscp.create()"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        primitive \u003d {}"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"        policy_obj.reload_rules()"},{"line_number":304,"context_line":"        policy_obj.obj_make_compatible(primitive, \u00271.1\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_b395c0e5","line":301,"in_reply_to":"7af24918_47d64bc6","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"64d3e5e3246b6fada08a63a787c16f3b75cec8d7","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        rule_obj_dscp \u003d rule.QosDscpMarkingRule(self.context, **rule_fields)"},{"line_number":319,"context_line":"        rule_obj_dscp.create()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        primitive \u003d {}"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        policy_obj.reload_rules()"},{"line_number":324,"context_line":"        policy_obj.obj_make_compatible(primitive, \u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_a7dbcfec","line":321,"updated":"2016-03-01 17:05:40.000000000","message":"ditto","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"b5a14561cc006058f008470656b6bc315414a015","unresolved":false,"context_lines":[{"line_number":318,"context_line":"        rule_obj_dscp \u003d rule.QosDscpMarkingRule(self.context, **rule_fields)"},{"line_number":319,"context_line":"        rule_obj_dscp.create()"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        primitive \u003d {}"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        policy_obj.reload_rules()"},{"line_number":324,"context_line":"        policy_obj.obj_make_compatible(primitive, \u00271.0\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7af24918_939a4413","line":321,"in_reply_to":"7af24918_a7dbcfec","updated":"2016-03-01 22:48:51.000000000","message":"Done","commit_id":"1fb98c4e303d8c85f1405a4175bf03e31c9391db"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02158c5c8b19a04c192dac81dee5b6906ca9ef84","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        self.assertIn(rule_obj_band, policy_obj_v1_0.rules)"},{"line_number":327,"context_line":"        self.assertNotIn(rule_obj_dscp, policy_obj_v1_0.rules)"},{"line_number":328,"context_line":"        #NOTE(mangelajo): we should not check .VERSION, since that\u0027s the"},{"line_number":329,"context_line":"        #                 local version on the class definition"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_c2899bcc","line":329,"updated":"2016-03-01 21:01:35.000000000","message":"Please see PS31 comments from Ihar (testing the dscp rule objects)\n\nI don\u0027t see how to check version incrementation now, in policy we wouldn\u0027t re-add any field. May be in the future it could be different and we may need to default some fields, etc..","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        self.assertIn(rule_obj_band, policy_obj_v1_0.rules)"},{"line_number":327,"context_line":"        self.assertNotIn(rule_obj_dscp, policy_obj_v1_0.rules)"},{"line_number":328,"context_line":"        #NOTE(mangelajo): we should not check .VERSION, since that\u0027s the"},{"line_number":329,"context_line":"        #                 local version on the class definition"}],"source_content_type":"text/x-python","patch_set":34,"id":"7af24918_d946ad22","line":329,"in_reply_to":"7af24918_c2899bcc","updated":"2016-03-01 23:19:46.000000000","message":"ack.","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cead0b7dcc07d757f993b95336f5f19c12984870","unresolved":false,"context_lines":[{"line_number":32,"context_line":"            for _ in range(3)]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        self.db_qos_dscp_rules \u003d ["},{"line_number":35,"context_line":"            self.get_random_fields(rule.QosDscpMarkingRule)"},{"line_number":36,"context_line":"            for _ in range(3)]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        self.model_map \u003d {"}],"source_content_type":"text/x-python","patch_set":35,"id":"7af24918_8a97938f","line":35,"updated":"2016-03-02 07:05:38.000000000","message":"we now need get_random_fields to handle the EnumField to take a choice from the available options.","commit_id":"cde4c0fd15c9c6fb61d41d7c0bce7f0004df292d"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":326,"context_line":"        self.assertIn(rule_obj_dscp, policy_obj_v1_1.rules)"},{"line_number":327,"context_line":"        self.assertEqual(policy_obj.VERSION, \u00271.1\u0027)"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    #TODO(davidsha) add testing for object version incrementation"},{"line_number":330,"context_line":"    def test_object_version_degradation_1_1_to_1_0(self):"},{"line_number":331,"context_line":"        policy_obj, rule_obj_band, rule_obj_dscp \u003d ("},{"line_number":332,"context_line":"            self._create_test_policy_with_bw_and_dscp())"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_349786ed","line":329,"updated":"2016-03-17 12:33:27.000000000","message":"Can we add it here?","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/tests/unit/objects/qos/test_rule.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"38c357d17e9ee35828258b79f97318f73eaf7255","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def setUp(self):"},{"line_number":99,"context_line":"        super(QosDscpMarkingRuleObjectTestCase, self).setUp()"},{"line_number":100,"context_line":"        for _ in range(3):"},{"line_number":101,"context_line":"            self.db_objs[_][\u0027dscp_mark\u0027] \u003d random.choice("},{"line_number":102,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_5e2fa687","line":100,"updated":"2016-03-03 13:56:26.000000000","message":"_ index is only used as a \"do not care\" variable.\n\nIf you really want to iterate over rules you should give it a real name.\n\nyou could also do:\n\n   for db_obj in db_objs:\n       db_obj[\u0027dscp_mark\u0027]\u003d ...\n\nplease add a note like # dscp_mark field is not nullable","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"57fe93bbe0fddda80c3304ecc9528312c5d2d3de","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def setUp(self):"},{"line_number":99,"context_line":"        super(QosDscpMarkingRuleObjectTestCase, self).setUp()"},{"line_number":100,"context_line":"        for _ in range(3):"},{"line_number":101,"context_line":"            self.db_objs[_][\u0027dscp_mark\u0027] \u003d random.choice("},{"line_number":102,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_2039d4a4","line":100,"in_reply_to":"7af24918_5e2fa687","updated":"2016-03-03 14:12:01.000000000","message":"Done","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"38c357d17e9ee35828258b79f97318f73eaf7255","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @mock.patch.object(db_api, \u0027update_object\u0027)"},{"line_number":105,"context_line":"    def test_update_no_changes(self, update_mock):"},{"line_number":106,"context_line":"        with mock.patch.object(base.NeutronDbObject,"},{"line_number":107,"context_line":"                               \u0027_get_changed_persistent_fields\u0027,"},{"line_number":108,"context_line":"                               return_value\u003d{}):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_bed4ea1f","line":105,"updated":"2016-03-03 13:56:26.000000000","message":"(no action required) why do we need this specific test?","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"9b2d1b657f398b085d87ca15ab45d59b5c85b0ee","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @mock.patch.object(db_api, \u0027update_object\u0027)"},{"line_number":105,"context_line":"    def test_update_no_changes(self, update_mock):"},{"line_number":106,"context_line":"        with mock.patch.object(base.NeutronDbObject,"},{"line_number":107,"context_line":"                               \u0027_get_changed_persistent_fields\u0027,"},{"line_number":108,"context_line":"                               return_value\u003d{}):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_a374ce67","line":105,"in_reply_to":"7af24918_a06a04b1","updated":"2016-03-03 14:25:58.000000000","message":"Hmm, because BandwidthLimit fields were nullable, but dscp_mark is not.\n\nHmm, may be we should limit the update() check to when the field actually changed.  And we avoid this.\n\nIt doesn\u0027t make sense to call update for a DSCP rule without a change in the mark, is the only field, but.. let me sort that out.","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"57fe93bbe0fddda80c3304ecc9528312c5d2d3de","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @mock.patch.object(db_api, \u0027update_object\u0027)"},{"line_number":105,"context_line":"    def test_update_no_changes(self, update_mock):"},{"line_number":106,"context_line":"        with mock.patch.object(base.NeutronDbObject,"},{"line_number":107,"context_line":"                               \u0027_get_changed_persistent_fields\u0027,"},{"line_number":108,"context_line":"                               return_value\u003d{}):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_a06a04b1","line":105,"in_reply_to":"7af24918_bed4ea1f","updated":"2016-03-03 14:12:01.000000000","message":"If you don\u0027t overload this test it won\u0027t add \"dscp_mark\u003d0\" (at line 109) and fail _validate_dscp_mark() in obj.update(). I\u0027ll add a note over the test to explain.","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"38c357d17e9ee35828258b79f97318f73eaf7255","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def setUp(self):"},{"line_number":120,"context_line":"        super(QosDscpMarkingRuleDbObjectTestCase, self).setUp()"},{"line_number":121,"context_line":"        for _ in range(3):"},{"line_number":122,"context_line":"            self.db_objs[_][\u0027dscp_mark\u0027] \u003d random.choice("},{"line_number":123,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_1ee6be14","line":121,"updated":"2016-03-03 13:56:26.000000000","message":"ditto.","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"57fe93bbe0fddda80c3304ecc9528312c5d2d3de","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def setUp(self):"},{"line_number":120,"context_line":"        super(QosDscpMarkingRuleDbObjectTestCase, self).setUp()"},{"line_number":121,"context_line":"        for _ in range(3):"},{"line_number":122,"context_line":"            self.db_objs[_][\u0027dscp_mark\u0027] \u003d random.choice("},{"line_number":123,"context_line":"                                           rule.VALID_DSCP_MARKS)"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"7af24918_003e588b","line":121,"in_reply_to":"7af24918_1ee6be14","updated":"2016-03-03 14:12:01.000000000","message":"Done","commit_id":"8e880fba0d2c8eac508bb9f2fc989636f55e7505"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04aec4e0f8da2439549919c3985cad3707f35f9a","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def setUp(self):"},{"line_number":108,"context_line":"        super(QosDscpMarkingRuleDbObjectTestCase, self).setUp()"},{"line_number":109,"context_line":"        # fill dscp_mark for QosDscpMarkingRules, as it\u0027s not nullable"},{"line_number":110,"context_line":"        for db_obj in self.db_objs:"},{"line_number":111,"context_line":"            db_obj[rule.DSCP_MARK] \u003d random.choice(rule.VALID_DSCP_MARKS)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_3d97363b","line":109,"updated":"2016-03-03 16:08:27.000000000","message":"that duplication could be avoided if you would have a mixin for that.","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"569193dcfd51b1b0b4cf7023d89029f9e350689a","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def setUp(self):"},{"line_number":108,"context_line":"        super(QosDscpMarkingRuleDbObjectTestCase, self).setUp()"},{"line_number":109,"context_line":"        # fill dscp_mark for QosDscpMarkingRules, as it\u0027s not nullable"},{"line_number":110,"context_line":"        for db_obj in self.db_objs:"},{"line_number":111,"context_line":"            db_obj[rule.DSCP_MARK] \u003d random.choice(rule.VALID_DSCP_MARKS)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_46322aa8","line":109,"in_reply_to":"7af24918_3d97363b","updated":"2016-03-03 17:27:47.000000000","message":"Done","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"04aec4e0f8da2439549919c3985cad3707f35f9a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for db_obj in self.db_objs:"},{"line_number":111,"context_line":"            db_obj[rule.DSCP_MARK] \u003d random.choice(rule.VALID_DSCP_MARKS)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # Prepare policy to be able to insert a rule"},{"line_number":114,"context_line":"        generated_qos_policy_id \u003d self.db_obj[\u0027qos_policy_id\u0027]"},{"line_number":115,"context_line":"        policy_obj \u003d policy.QosPolicy(self.context,"},{"line_number":116,"context_line":"                                      id\u003dgenerated_qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_fd902e45","line":113,"updated":"2016-03-03 16:08:27.000000000","message":"That could be moved into a common mixin for both rule types.","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"569193dcfd51b1b0b4cf7023d89029f9e350689a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        for db_obj in self.db_objs:"},{"line_number":111,"context_line":"            db_obj[rule.DSCP_MARK] \u003d random.choice(rule.VALID_DSCP_MARKS)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        # Prepare policy to be able to insert a rule"},{"line_number":114,"context_line":"        generated_qos_policy_id \u003d self.db_obj[\u0027qos_policy_id\u0027]"},{"line_number":115,"context_line":"        policy_obj \u003d policy.QosPolicy(self.context,"},{"line_number":116,"context_line":"                                      id\u003dgenerated_qos_policy_id)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7af24918_a625ee5c","line":113,"in_reply_to":"7af24918_fd902e45","updated":"2016-03-03 17:27:47.000000000","message":"Done","commit_id":"7a62525d7bcf5900b3b42d01eefc4ae5eda46fa0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"eb6e430aa35dd591bc90ac5b9c393e141cb4b235","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        policy_obj.create()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class QosDscpMarkingRulesDbObjInitMixin:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _init_dscp_marks(self):"},{"line_number":94,"context_line":"        \"\"\"Fill dscp_mark for QosDscpMarkingRules, as it\u0027s not nullable.\"\"\""}],"source_content_type":"text/x-python","patch_set":48,"id":"7af24918_06edc2b6","line":91,"updated":"2016-03-03 17:31:37.000000000","message":"it should be (object)","commit_id":"727859a2b916842cc24f176f43599466f56fa47f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class QosDscpMarkingRulesDbObjInitMixin(object):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _init_dscp_marks(self):"},{"line_number":94,"context_line":"        \"\"\"Fill dscp_mark for QosDscpMarkingRules, as it\u0027s not nullable.\"\"\""},{"line_number":95,"context_line":"        for i, db_obj in enumerate(self.db_objs):"},{"line_number":96,"context_line":"            dscp_mark \u003d random.choice(rule.VALID_DSCP_MARKS)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_945dba49","line":93,"updated":"2016-03-17 12:33:27.000000000","message":"If you use a DSCP specific field in your object, you could then update FIELD_TYPE_VALUE_GENERATOR_MAP in test_base.py to generate valid values for you. That will allow you to clean up most of the code below.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"453e0a775e251fa0cb98b41715163f87a1dd770a","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"class QosDscpMarkingRulesDbObjInitMixin(object):"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _init_dscp_marks(self):"},{"line_number":94,"context_line":"        \"\"\"Fill dscp_mark for QosDscpMarkingRules, as it\u0027s not nullable.\"\"\""},{"line_number":95,"context_line":"        for i, db_obj in enumerate(self.db_objs):"},{"line_number":96,"context_line":"            dscp_mark \u003d random.choice(rule.VALID_DSCP_MARKS)"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_20d7404c","line":93,"in_reply_to":"1af94dfe_945dba49","updated":"2016-03-17 13:26:11.000000000","message":"Will do.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"60f62f2749be7ac3cab74f3e0ab2a1076b74d39d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        fields \u003d {}"},{"line_number":147,"context_line":"        for field, field_obj in obj_cls.fields.items():"},{"line_number":148,"context_line":"            if field in (fixed_fields or {}):"},{"line_number":149,"context_line":"                #TODO(mangelajo): remove this once [1] merges, and we can"},{"line_number":150,"context_line":"                #                 use EnumFields"},{"line_number":151,"context_line":"                #                 [1] https://review.openstack.org/#/c/287106/"},{"line_number":152,"context_line":"                fields[field] \u003d fixed_fields[field]"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_ff1b3771","line":149,"updated":"2016-03-17 12:33:27.000000000","message":"You won\u0027t need it if you just use your own custom field type for DSCP field.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"453e0a775e251fa0cb98b41715163f87a1dd770a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        fields \u003d {}"},{"line_number":147,"context_line":"        for field, field_obj in obj_cls.fields.items():"},{"line_number":148,"context_line":"            if field in (fixed_fields or {}):"},{"line_number":149,"context_line":"                #TODO(mangelajo): remove this once [1] merges, and we can"},{"line_number":150,"context_line":"                #                 use EnumFields"},{"line_number":151,"context_line":"                #                 [1] https://review.openstack.org/#/c/287106/"},{"line_number":152,"context_line":"                fields[field] \u003d fixed_fields[field]"}],"source_content_type":"text/x-python","patch_set":56,"id":"1af94dfe_4039aca3","line":149,"in_reply_to":"1af94dfe_ff1b3771","updated":"2016-03-17 13:26:11.000000000","message":"Ack.","commit_id":"87d712ae53a802c03a201c7f0a760dd422990154"}],"neutron/tests/unit/objects/test_objects.py":[{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"e13cfec4c872f79773fdc575a0fb8fbef5b6e12c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests import base as test_base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# NOTE: The hashes in this list should only be changed if they come with a"},{"line_number":25,"context_line":"# corresponding version bump in the affected objects."},{"line_number":26,"context_line":"object_data \u003d {"},{"line_number":27,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":28,"context_line":"    \u0027QosDscpMarkingRule\u0027: \u00271.0-5913ea5c884bbea972c1c8b8dc421885\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_64e711e5","line":25,"range":{"start_line":24,"start_character":8,"end_line":25,"end_character":53},"updated":"2016-02-10 15:48:57.000000000","message":"Suggest a rephrasing, something like: \"A hash value in this dictionary would be changed only if there is a version bump in the versioned object specified by the value\u0027s key.\"","commit_id":"fb476c9f9ba05e0e67f07de063be580bc7d81312"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"fa9d2d4ad3dbfa60d9c3e440a6b8ed04c1fd13b5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests import base as test_base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# NOTE: The hashes in this list should only be changed if they come with a"},{"line_number":25,"context_line":"# corresponding version bump in the affected objects."},{"line_number":26,"context_line":"object_data \u003d {"},{"line_number":27,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":28,"context_line":"    \u0027QosDscpMarkingRule\u0027: \u00271.0-5913ea5c884bbea972c1c8b8dc421885\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a57f1b5_6d9c5f0f","line":25,"range":{"start_line":24,"start_character":8,"end_line":25,"end_character":53},"in_reply_to":"3a57f1b5_64e711e5","updated":"2016-02-12 13:51:44.000000000","message":"I think it\u0027s a little more explicit in the current version. This is more of a note to developers who may make a change and try to change the hash without bumping up the version. If others feel a change is appropriate I\u0027m not opposed to it.","commit_id":"fb476c9f9ba05e0e67f07de063be580bc7d81312"},{"author":{"_account_id":17711,"name":"Margaret Frances","email":"margaret_frances@cable.comcast.com","username":"margaret-frances"},"change_message_id":"431d334b7da818c65925f513046adef09dc088d5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.tests import base as test_base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# NOTE: The hashes in this list should only be changed if they come with a"},{"line_number":25,"context_line":"# corresponding version bump in the affected objects."},{"line_number":26,"context_line":"object_data \u003d {"},{"line_number":27,"context_line":"    \u0027QosBandwidthLimitRule\u0027: \u00271.0-4e44a8f5c2895ab1278399f87b40a13d\u0027,"},{"line_number":28,"context_line":"    \u0027QosDscpMarkingRule\u0027: \u00271.0-5913ea5c884bbea972c1c8b8dc421885\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"dae33548_dcf09769","line":25,"range":{"start_line":24,"start_character":8,"end_line":25,"end_character":53},"in_reply_to":"3a57f1b5_6d9c5f0f","updated":"2016-02-18 18:01:54.000000000","message":"Yeah, upon consideration I think you\u0027re right.","commit_id":"fb476c9f9ba05e0e67f07de063be580bc7d81312"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            mock_.return_value \u003d qos_consts.VALID_RULE_TYPES"},{"line_number":175,"context_line":"        for rule in qos_consts.VALID_RULE_TYPES:"},{"line_number":176,"context_line":"            self.assertIn(rule,"},{"line_number":177,"context_line":"                    self.driver.mechanism_manager.supported_qos_rule_types)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @mock.patch.object(mech_test.TestMechanismDriver,"},{"line_number":180,"context_line":"                       \u0027supported_qos_rule_types\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_5c80648b","line":177,"updated":"2016-03-03 09:01:34.000000000","message":"indentation is a bit weird here","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            mock_.return_value \u003d qos_consts.VALID_RULE_TYPES"},{"line_number":175,"context_line":"        for rule in qos_consts.VALID_RULE_TYPES:"},{"line_number":176,"context_line":"            self.assertIn(rule,"},{"line_number":177,"context_line":"                    self.driver.mechanism_manager.supported_qos_rule_types)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @mock.patch.object(mech_test.TestMechanismDriver,"},{"line_number":180,"context_line":"                       \u0027supported_qos_rule_types\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_edc9b85a","line":177,"in_reply_to":"7af24918_5c80648b","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                                    *mocks):"},{"line_number":190,"context_line":"        for rule in qos_consts.VALID_RULE_TYPES:"},{"line_number":191,"context_line":"            self.assertIn(rule,"},{"line_number":192,"context_line":"                    self.driver.mechanism_manager.supported_qos_rule_types)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class TestMl2BasicGet(test_plugin.TestBasicGet,"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_3c7d98b1","line":192,"updated":"2016-03-03 09:01:34.000000000","message":"ditto","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":189,"context_line":"                                                                    *mocks):"},{"line_number":190,"context_line":"        for rule in qos_consts.VALID_RULE_TYPES:"},{"line_number":191,"context_line":"            self.assertIn(rule,"},{"line_number":192,"context_line":"                    self.driver.mechanism_manager.supported_qos_rule_types)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"class TestMl2BasicGet(test_plugin.TestBasicGet,"}],"source_content_type":"text/x-python","patch_set":43,"id":"7af24918_adb330e8","line":192,"in_reply_to":"7af24918_3c7d98b1","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"}],"neutron/tests/unit/services/qos/test_qos_plugin.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"186edc160d62651c86f2945e52a7b8f41abc3c4f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            \u0027bandwidth_limit_rule\u0027: {\u0027id\u0027: policy_id,"},{"line_number":63,"context_line":"                                     \u0027max_kbps\u0027: 100,"},{"line_number":64,"context_line":"                                     \u0027max_burst_kbps\u0027: 150},"},{"line_number":65,"context_line":"            \u0027dscp_marking_rule\u0027: {\u0027id\u0027: 8888888,"},{"line_number":66,"context_line":"                               \u0027dscp_marking_rule\u0027: 16}}"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.policy \u003d policy_object.QosPolicy("}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_3f1c9176","line":65,"updated":"2016-02-28 09:40:38.000000000","message":"identation","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"03a26b8f1abdaefd4f3a4739cf1c2d9300aac2a6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            \u0027bandwidth_limit_rule\u0027: {\u0027id\u0027: policy_id,"},{"line_number":63,"context_line":"                                     \u0027max_kbps\u0027: 100,"},{"line_number":64,"context_line":"                                     \u0027max_burst_kbps\u0027: 150},"},{"line_number":65,"context_line":"            \u0027dscp_marking_rule\u0027: {\u0027id\u0027: 8888888,"},{"line_number":66,"context_line":"                               \u0027dscp_marking_rule\u0027: 16}}"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.policy \u003d policy_object.QosPolicy("}],"source_content_type":"text/x-python","patch_set":28,"id":"9aed3d3a_fec9665a","line":65,"in_reply_to":"9aed3d3a_3f1c9176","updated":"2016-02-29 16:54:21.000000000","message":"Done","commit_id":"619d220d5bf71017116d270fd35a0038e7bf57b8"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"caac7a7c2184aa066a2b8a3f9108a4af6e0305c6","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.ctxt \u003d context.Context(\u0027fake_user\u0027, \u0027fake_tenant\u0027)"},{"line_number":53,"context_line":"        self.policy_data \u003d {"},{"line_number":54,"context_line":"            \u0027policy\u0027: {\u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":55,"context_line":"                       \u0027tenant_id\u0027: uuidutils.generate_uuid(),"},{"line_number":56,"context_line":"                       \u0027name\u0027: \u0027test-policy\u0027,"},{"line_number":57,"context_line":"                       \u0027description\u0027: \u0027Test policy description\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_bebbf974","line":54,"updated":"2016-03-01 10:49:52.000000000","message":"why was this changed?\n\npolicy_id should be the same across this and L61 \u0026 L64 rules, otherwise the rules won\u0027t be attached to the policy.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02c7e2c91cf143bdd3bff7f3fb438d12f1006646","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        self.ctxt \u003d context.Context(\u0027fake_user\u0027, \u0027fake_tenant\u0027)"},{"line_number":53,"context_line":"        self.policy_data \u003d {"},{"line_number":54,"context_line":"            \u0027policy\u0027: {\u0027id\u0027: uuidutils.generate_uuid(),"},{"line_number":55,"context_line":"                       \u0027tenant_id\u0027: uuidutils.generate_uuid(),"},{"line_number":56,"context_line":"                       \u0027name\u0027: \u0027test-policy\u0027,"},{"line_number":57,"context_line":"                       \u0027description\u0027: \u0027Test policy description\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7af24918_61aa7072","line":54,"in_reply_to":"7af24918_bebbf974","updated":"2016-03-01 11:03:02.000000000","message":"Sorry, this comment is right, down @ lines 61 and 64, the ID is for the rules themselves, not referencing the policy ID. Here you\u0027re just creating objects. That association is done later.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"}],"releasenotes/notes/dscp-qos-77ea9b27d3762e48.yaml":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"4267ab1a36e8c4a60b058241c1e0a7628fce684e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    DSCP tagging of network traffic is supported when using"},{"line_number":4,"context_line":"    the ML2 plugin, OVS extension."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Neutron can configure Open vSwitch to DSCP tag network traffic"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7af24918_3e5b5e56","line":3,"updated":"2016-03-01 13:37:11.000000000","message":"There are two separate changes here that should be mentioned. First, a new rule type is added on API level. Second, OVS QoS driver now supports the new rule type.\n\nYes, ml2 is the only plugin in tree that supports the new rule so far; but other out-of-tree plugins may also implement the new rule; so release notes should use wording that would not suggest that only ml2 plugin + ovs driver could support the new rule.","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"e1853cf8bec42abcee98cd176fa346fe9659ddba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    DSCP tagging of network traffic is supported when using"},{"line_number":4,"context_line":"    the ML2 plugin, OVS extension."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Neutron can configure Open vSwitch to DSCP tag network traffic"}],"source_content_type":"text/x-yaml","patch_set":31,"id":"7af24918_75a05c91","line":3,"in_reply_to":"7af24918_3e5b5e56","updated":"2016-03-01 15:16:14.000000000","message":"Done","commit_id":"5c212abaa8fc9e4c31619c9cf2153f0472885c97"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"02158c5c8b19a04c192dac81dee5b6906ca9ef84","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can configure Open vSwitch to DSCP tag network traffic"},{"line_number":8,"context_line":"    on a per-port basis."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"7af24918_5dff3001","line":7,"updated":"2016-03-01 21:01:35.000000000","message":"I\u0027d split the features here too\n1) for the api\n2) for the OVS support.\n\n:-)","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"2c548e516c1b8ef78c295d4d3f30122bee4ff67d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can configure Open vSwitch to DSCP tag network traffic"},{"line_number":8,"context_line":"    on a per-port basis."}],"source_content_type":"text/x-yaml","patch_set":34,"id":"7af24918_f9ca89a0","line":7,"in_reply_to":"7af24918_5dff3001","updated":"2016-03-01 23:19:46.000000000","message":"Done","commit_id":"26314132985dadc5d8740ae28eb53380ed7eb86b"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    A new rule has been added to the API that allows for tagging"},{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_bc47e875","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":7},"updated":"2016-03-03 09:01:34.000000000","message":"Open vSwitch","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    A new rule has been added to the API that allows for tagging"},{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_2d1c40c0","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":7},"in_reply_to":"7af24918_bc47e875","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":"  - The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":10,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_7c1f206c","line":7,"range":{"start_line":7,"start_character":2,"end_line":7,"end_character":4},"updated":"2016-03-03 09:01:34.000000000","message":"Do we really need those dashes?","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"841329b5c096800b2b8d96c7c3cf1bf0cbc67de3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":"  - The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":10,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_1c289c99","line":7,"range":{"start_line":7,"start_character":40,"end_line":7,"end_character":48},"updated":"2016-03-03 09:01:34.000000000","message":"remove","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":"  - The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":10,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_2d73a016","line":7,"range":{"start_line":7,"start_character":40,"end_line":7,"end_character":48},"in_reply_to":"7af24918_1c289c99","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":7244,"name":"Victor Howard","email":"victor.r.howard@gmail.com","username":"vichoward"},"change_message_id":"6a286935d9ac10ffd90b48fe2df933a0e015ff31","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    OVS QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can now apply a QoS rule to neutron ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":"  - The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":10,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":43,"id":"7af24918_4d4d4cc3","line":7,"range":{"start_line":7,"start_character":2,"end_line":7,"end_character":4},"in_reply_to":"7af24918_7c1f206c","updated":"2016-03-03 10:01:49.000000000","message":"Done","commit_id":"a23aed3d1c4c9a899bccc19fa46a4362e3828874"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"34d9602c417860ffef75dcf327084057eef2999b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    Open vSwitch QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"    Neutron can now apply a QoS rule to ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The Open vSwitch Neutron agent has been extended to mark packets"}],"source_content_type":"text/x-yaml","patch_set":51,"id":"7af24918_09060e20","line":7,"updated":"2016-03-06 14:52:38.000000000","message":"this should be:\n  - Neutron can ...","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"21e8c7c0f9c3d82fb553ba476e23b32635b2922c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    traffic with DSCP values. This is currently supported by the"},{"line_number":5,"context_line":"    Open vSwitch QoS driver."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"    Neutron can now apply a QoS rule to ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The Open vSwitch Neutron agent has been extended to mark packets"}],"source_content_type":"text/x-yaml","patch_set":51,"id":"5aef4532_5e842cd3","line":7,"in_reply_to":"7af24918_09060e20","updated":"2016-03-08 10:24:35.000000000","message":"Done","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"34d9602c417860ffef75dcf327084057eef2999b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"    Neutron can now apply a QoS rule to ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":11,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":51,"id":"7af24918_e902c20a","line":9,"updated":"2016-03-06 14:52:38.000000000","message":"please remove the new line here. that causes havoc","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":18051,"name":"David Shaughnessy","email":"david.shaughnessy@intel.com","username":"davidsha"},"change_message_id":"21e8c7c0f9c3d82fb553ba476e23b32635b2922c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"    Neutron can now apply a QoS rule to ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s terms of service packet header."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    The Open vSwitch Neutron agent has been extended to mark packets"},{"line_number":11,"context_line":"    egressing from the VM."}],"source_content_type":"text/x-yaml","patch_set":51,"id":"5aef4532_3e87a0d8","line":9,"in_reply_to":"7af24918_e902c20a","updated":"2016-03-08 10:24:35.000000000","message":"Done","commit_id":"c32b6e1c23b298368aad2f2bc75b6ed64d028db6"},{"author":{"_account_id":9396,"name":"igordcard","email":"igordcard@gmail.com","username":"igordcard"},"change_message_id":"e6f1f76d9cf8c269491c268b2963082808d23b73","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Neutron can apply a QoS rule to ports that mark outgoing"},{"line_number":8,"context_line":"    traffic\u0027s type of service packet header field."},{"line_number":9,"context_line":"  - The Open vSwitch Neutron agent has been extended to mark the type of"},{"line_number":10,"context_line":"    service packet header field of packets egressing from the VM when the"},{"line_number":11,"context_line":"    QoS rule has been applied."}],"source_content_type":"text/x-yaml","patch_set":54,"id":"5aef4532_1998e7bf","line":10,"range":{"start_line":9,"start_character":65,"end_line":10,"end_character":25},"updated":"2016-03-08 18:16:04.000000000","message":"Since this is for release notes, \"Type of Service IP header field of packets egressing...\" would look more formal.","commit_id":"5412f1fccf8f843dbe4c49a41125e60f913e272d"}]}
