)]}'
{"quantum/extensions/nvp_qos.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFvM%3D","line":1,"updated":"2013-02-07 14:23:01.000000000","message":"I tried to kick him out of the room, but pedant me still says \"2013\"","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from quantum.api.v2 import attributes as attr"},{"line_number":20,"context_line":"from quantum.api.v2 import base"},{"line_number":21,"context_line":"from quantum.common import exceptions as qexception"},{"line_number":22,"context_line":"from quantum.api import extensions"},{"line_number":23,"context_line":"from quantum import manager"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFvI%3D","line":22,"updated":"2013-02-07 14:23:01.000000000","message":"more pedantry: import order (invert 22 and 21)","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class QueueUpdateMustBeAdmin(qexception.InvalidInput):"},{"line_number":35,"context_line":"    message \u003d _(\"Need to be admin in order to update queue\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class QueueInvalidDscp(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFtg%3D","line":35,"updated":"2013-02-07 14:23:01.000000000","message":"in the attribute map all the attributes have allow_put\u003dFalse. Looks like updates are not possible at all, then.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class QueueInvalidDscp(qexception.InvalidInput):"},{"line_number":39,"context_line":"    message \u003d _(\"Invalid for dscp %(data)s must be int.\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFvA%3D","line":39,"updated":"2013-02-07 14:23:01.000000000","message":"Probably there\u0027s a missing word in the message above. \u0027Value\u0027?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class QueueInvalidDscp(qexception.InvalidInput):"},{"line_number":39,"context_line":"    message \u003d _(\"Invalid for dscp %(data)s must be int.\")"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BO4%3D","line":39,"in_reply_to":"AAAAM3%2F%2FFvA%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"},{"line_number":43,"context_line":"    message \u003d _(\"Invalid bandwidth rate min greater than max.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFto%3D","line":43,"updated":"2013-02-07 14:23:01.000000000","message":"probably it might be worth a con after \u0027rate\u0027.\nAlso min -\u003e minimum, max -\u003e maximum ( but this is irrelevant)","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"},{"line_number":43,"context_line":"    message \u003d _(\"Invalid bandwidth rate min greater than max.\")"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BOg%3D","line":43,"in_reply_to":"AAAAM3%2F%2FFto%3D","updated":"2013-02-13 22:46:00.000000000","message":"Guessing con \u003d comma? Leaving as min/max since those are the fields names.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"},{"line_number":47,"context_line":"    message \u003d _(\"Invalid bandwidth rate %(data)s must be unsigned int.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class MissingDSCPForTrusted(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFuA%3D","line":47,"updated":"2013-02-07 14:23:01.000000000","message":"colon after \u0027rate\u0027, if you deem it worth doing.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"},{"line_number":47,"context_line":"    message \u003d _(\"Invalid bandwidth rate %(data)s must be unsigned int.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class MissingDSCPForTrusted(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BOY%3D","line":47,"in_reply_to":"AAAAM3%2F%2FFuA%3D","updated":"2013-02-13 22:46:00.000000000","message":"using comma over colon let me know if you object.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class MissingDSCPForTrusted(qexception.InvalidInput):"},{"line_number":51,"context_line":"    message \u003d _(\"No DSCP field needed when QoS workload marked trusted\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class QueueNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFq8%3D","line":51,"updated":"2013-02-07 14:23:01.000000000","message":"The validation logic seems to raise when the DSCP field is unspecified and the QoS is trusted, so probably the error message needs rephrasing.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"class QueueInUseByPort(qexception.InUse):"},{"line_number":59,"context_line":"    message \u003d _(\"Unable to delete queue attached to port.\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class QueuePortBindingNotFound(qexception.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFt8%3D","line":59,"updated":"2013-02-07 14:23:01.000000000","message":"Would it be the case to report the ids in the message? Or are you hiding them on purpose?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class QueuePortBindingNotFound(qexception.NotFound):"},{"line_number":63,"context_line":"    message \u003d _(\"Port is not associated with lqueue\")"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def convert_to_int(val):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFt4%3D","line":63,"updated":"2013-02-07 14:23:01.000000000","message":"same comment about ids.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    message \u003d _(\"Port is not associated with lqueue\")"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def convert_to_int(val):"},{"line_number":67,"context_line":"    if val is None:"},{"line_number":68,"context_line":"        return 0"},{"line_number":69,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFt0%3D","line":66,"updated":"2013-02-07 14:23:01.000000000","message":"this is now in quantum.api.v2.attributes","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    message \u003d _(\"Port is not associated with lqueue\")"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"def convert_to_int(val):"},{"line_number":67,"context_line":"    if val is None:"},{"line_number":68,"context_line":"        return 0"},{"line_number":69,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BOU%3D","line":66,"in_reply_to":"AAAAM3%2F%2FFt0%3D","updated":"2013-02-13 22:46:00.000000000","message":"I wish I could use their\u0027s but theirs don\u0027t allow the case where val can be None. I\u0027ll change the name of this function.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        raise qexception.InvalidInput(error_message\u003dmsg)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"#TODO Fix base.py so we can tell the user which field"},{"line_number":78,"context_line":"# could not be converted correctly.."},{"line_number":79,"context_line":"def _validate_type_unsigned_int(data, exception_to_raise):"},{"line_number":80,"context_line":"    if data is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFtw%3D","line":77,"updated":"2013-02-07 14:23:01.000000000","message":"TODO(arosen).\nBtw this fix does not look easy.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @classmethod"},{"line_number":151,"context_line":"    def get_description(cls):"},{"line_number":152,"context_line":"        return \"The NVP Qos extension.\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @classmethod"},{"line_number":155,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFtc%3D","line":152,"updated":"2013-02-07 14:23:01.000000000","message":"You know who is saying... \u0027there should a capital S in Qos\u0027","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    @classmethod"},{"line_number":151,"context_line":"    def get_description(cls):"},{"line_number":152,"context_line":"        return \"The NVP Qos extension.\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @classmethod"},{"line_number":155,"context_line":"    def get_namespace(cls):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BLM%3D","line":152,"in_reply_to":"AAAAM3%2F%2FFtc%3D","updated":"2013-02-13 22:46:00.000000000","message":"I\u0027m not sure.... who? (adding S)","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":123,"context_line":"    cfg.IntOpt(\u0027quota_qos_queues\u0027,"},{"line_number":124,"context_line":"               default\u003d-1,"},{"line_number":125,"context_line":"               help\u003d_(\"Number of qos_queues allowed per tenant, -1 for \""},{"line_number":126,"context_line":"                      \"unlimited\")),"},{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":"cfg.CONF.register_opts(nvp_qos_queue_opts, \"QUOTAS\")"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7yY%3D","line":126,"updated":"2013-02-13 23:35:47.000000000","message":"if queues are always admin defined, is this needed?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    cfg.IntOpt(\u0027quota_qos_queues\u0027,"},{"line_number":124,"context_line":"               default\u003d-1,"},{"line_number":125,"context_line":"               help\u003d_(\"Number of qos_queues allowed per tenant, -1 for \""},{"line_number":126,"context_line":"                      \"unlimited\")),"},{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":"cfg.CONF.register_opts(nvp_qos_queue_opts, \"QUOTAS\")"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7rc%3D","line":126,"in_reply_to":"AAAAM3%2F%2B7yY%3D","updated":"2013-02-14 04:44:43.000000000","message":"Currently the way this patch works is that anyone can do queues except the admin is the only one who can set the default queue.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class QueueInvalidDscp(qexception.InvalidInput):"},{"line_number":40,"context_line":"    message \u003d _(\"Invalid value for dscp %(data)s must be int.\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5II%3D","line":40,"updated":"2013-02-15 10:28:41.000000000","message":"Consider changing int to integer","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class QueueInvalidDscp(qexception.InvalidInput):"},{"line_number":40,"context_line":"    message \u003d _(\"Invalid value for dscp %(data)s must be int.\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zg%3D","line":40,"in_reply_to":"AAAAM3%2F%2B5II%3D","updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"},{"line_number":44,"context_line":"    message \u003d _(\"Invalid bandwidth rate, min greater than max.\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5H8%3D","line":44,"updated":"2013-02-15 10:28:41.000000000","message":"maybe pass the values.","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class QueueMinGreaterMax(qexception.InvalidInput):"},{"line_number":44,"context_line":"    message \u003d _(\"Invalid bandwidth rate, min greater than max.\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zc%3D","line":44,"in_reply_to":"AAAAM3%2F%2B5H8%3D","updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"},{"line_number":48,"context_line":"    message \u003d _(\"Invalid bandwidth rate, %(data)s must be a non negitive int.\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class MissingDSCPForTrusted(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zY%3D","line":48,"updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class QueueInvalidBandwidth(qexception.InvalidInput):"},{"line_number":48,"context_line":"    message \u003d _(\"Invalid bandwidth rate, %(data)s must be a non negitive int.\")"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class MissingDSCPForTrusted(qexception.InvalidInput):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5IA%3D","line":48,"updated":"2013-02-15 10:28:41.000000000","message":"negitive - typo","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if val \u003c 0:"},{"line_number":73,"context_line":"            raise ValueError"},{"line_number":74,"context_line":"    except (ValueError, TypeError):"},{"line_number":75,"context_line":"        msg \u003d _(\"\u0027%s\u0027 must be a non negitive int.\") % val"},{"line_number":76,"context_line":"        raise qexception.InvalidInput(error_message\u003dmsg)"},{"line_number":77,"context_line":"    return val"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5H0%3D","line":75,"updated":"2013-02-15 10:28:41.000000000","message":"typo","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if val \u003c 0:"},{"line_number":73,"context_line":"            raise ValueError"},{"line_number":74,"context_line":"    except (ValueError, TypeError):"},{"line_number":75,"context_line":"        msg \u003d _(\"\u0027%s\u0027 must be a non negitive int.\") % val"},{"line_number":76,"context_line":"        raise qexception.InvalidInput(error_message\u003dmsg)"},{"line_number":77,"context_line":"    return val"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zQ%3D","line":75,"in_reply_to":"AAAAM3%2F%2B5H0%3D","updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":81,"context_line":"    \u0027qos_queues\u0027: {"},{"line_number":82,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":83,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":84,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":85,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean,"},{"line_number":86,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: False},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5Hk%3D","line":83,"updated":"2013-02-15 10:28:41.000000000","message":"do you need uuid check here?","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":81,"context_line":"    \u0027qos_queues\u0027: {"},{"line_number":82,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":83,"context_line":"               \u0027is_visible\u0027: True},"},{"line_number":84,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":85,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean,"},{"line_number":86,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: False},"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zM%3D","line":83,"in_reply_to":"AAAAM3%2F%2B5Hk%3D","updated":"2013-02-15 21:27:44.000000000","message":"No, because allow_post/put is false.","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":85,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean,"},{"line_number":86,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: False},"},{"line_number":87,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":88,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":89,"context_line":"        \u0027min\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":90,"context_line":"                \u0027is_visible\u0027: True, \u0027default\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5Ho%3D","line":87,"updated":"2013-02-15 10:28:41.000000000","message":"please add checks - \u0027validate\u0027: {\u0027type:string\u0027: None}","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        \u0027default\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":85,"context_line":"                    \u0027convert_to\u0027: attr.convert_to_boolean,"},{"line_number":86,"context_line":"                    \u0027is_visible\u0027: True, \u0027default\u0027: False},"},{"line_number":87,"context_line":"        \u0027name\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":88,"context_line":"                 \u0027is_visible\u0027: True, \u0027default\u0027: \u0027\u0027},"},{"line_number":89,"context_line":"        \u0027min\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":90,"context_line":"                \u0027is_visible\u0027: True, \u0027default\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zE%3D","line":87,"in_reply_to":"AAAAM3%2F%2B5Ho%3D","updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":100,"context_line":"                 \u0027convert_to\u0027: convert_to_unsigned_int_or_none},"},{"line_number":101,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":102,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":103,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":104,"context_line":"    },"},{"line_number":105,"context_line":"}"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B5Hc%3D","line":103,"updated":"2013-02-15 10:28:41.000000000","message":"\u0027validate\u0027: {\u0027type:string\u0027: None}","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                 \u0027convert_to\u0027: convert_to_unsigned_int_or_none},"},{"line_number":101,"context_line":"        \u0027tenant_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":102,"context_line":"                      \u0027required_by_policy\u0027: True,"},{"line_number":103,"context_line":"                      \u0027is_visible\u0027: True},"},{"line_number":104,"context_line":"    },"},{"line_number":105,"context_line":"}"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2B3zA%3D","line":103,"in_reply_to":"AAAAM3%2F%2B5Hc%3D","updated":"2013-02-15 21:27:44.000000000","message":"Done","commit_id":"506058ddca97a05e8b40a3492ed913b9a32d3d79"}],"quantum/plugins/nicira/nicira_nvp_plugin/QuantumPlugin.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                  nvp_sec.NVPSecurityGroups, qos_db.NVPQoSDbMixin):"},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    NvpPluginV2 is a Quantum plugin that provides L2 Virtual Network"},{"line_number":121,"context_line":"    functionality using NVP."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    supported_extension_aliases \u003d [\"provider\", \"quotas\", \"port-security\","}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFtU%3D","line":121,"updated":"2013-02-07 14:23:01.000000000","message":"One day we should go and update this docstring!!!!","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                  nvp_sec.NVPSecurityGroups, qos_db.NVPQoSDbMixin):"},{"line_number":119,"context_line":"    \"\"\""},{"line_number":120,"context_line":"    NvpPluginV2 is a Quantum plugin that provides L2 Virtual Network"},{"line_number":121,"context_line":"    functionality using NVP."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    supported_extension_aliases \u003d [\"provider\", \"quotas\", \"port-security\","}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BPU%3D","line":121,"in_reply_to":"AAAAM3%2F%2FFtU%3D","updated":"2013-02-13 22:46:00.000000000","message":"Not today :P","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            if network[\u0027network\u0027].get(ext_qos.QUEUE):"},{"line_number":390,"context_line":"                new_net[ext_qos.QUEUE] \u003d network[\u0027network\u0027][ext_qos.QUEUE]"},{"line_number":391,"context_line":"                self._process_network_queue_mapping(context, new_net)"},{"line_number":392,"context_line":"                self._extend_network_qos_queue(context, new_net)"},{"line_number":393,"context_line":"            if net_data.get(pnet.NETWORK_TYPE):"},{"line_number":394,"context_line":"                net_binding \u003d nicira_db.add_network_binding("},{"line_number":395,"context_line":"                    context.session, new_net[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFsc%3D","line":392,"updated":"2013-02-07 14:23:01.000000000","message":"You create a binding object at line 391, and reload it at line 392. Perhaps as a performance improvement you might consider having _process_network_queue_mapping to return the binding object, and pass it back to _extend_network_qos_queue (which might have it as optional param: if it\u0027s none, the binding is loaded from the db)","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":389,"context_line":"            if network[\u0027network\u0027].get(ext_qos.QUEUE):"},{"line_number":390,"context_line":"                new_net[ext_qos.QUEUE] \u003d network[\u0027network\u0027][ext_qos.QUEUE]"},{"line_number":391,"context_line":"                self._process_network_queue_mapping(context, new_net)"},{"line_number":392,"context_line":"                self._extend_network_qos_queue(context, new_net)"},{"line_number":393,"context_line":"            if net_data.get(pnet.NETWORK_TYPE):"},{"line_number":394,"context_line":"                net_binding \u003d nicira_db.add_network_binding("},{"line_number":395,"context_line":"                    context.session, new_net[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BPo%3D","line":392,"in_reply_to":"AAAAM3%2F%2FFsc%3D","updated":"2013-02-13 22:46:00.000000000","message":"I agree. This is done unnecessarily in every (i think) create_ method that does an extend in most plugins and ours as well. I decided to do it as well here. We can remove all of these unnecessary extends  in another patch to improve performance.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1253,"context_line":"            super(NvpPluginV2, self).delete_port(context, id)"},{"line_number":1254,"context_line":"            # Delete qos queue if possible"},{"line_number":1255,"context_line":"            if len(queue):"},{"line_number":1256,"context_line":"                self.delete_qos_queue(context, queue[0][\u0027queue_id\u0027], False)"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"    def get_port(self, context, id, fields\u003dNone):"},{"line_number":1259,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7yI%3D","line":1256,"updated":"2013-02-13 23:35:47.000000000","message":"why is the call above plural, if we only ever delete one?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"            super(NvpPluginV2, self).delete_port(context, id)"},{"line_number":1254,"context_line":"            # Delete qos queue if possible"},{"line_number":1255,"context_line":"            if len(queue):"},{"line_number":1256,"context_line":"                self.delete_qos_queue(context, queue[0][\u0027queue_id\u0027], False)"},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"    def get_port(self, context, id, fields\u003dNone):"},{"line_number":1259,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7rU%3D","line":1256,"in_reply_to":"AAAAM3%2F%2B7yI%3D","updated":"2013-02-14 04:44:43.000000000","message":"Because there can be multiple ports associated with the same queue. We don\u0027t want to remove the queue if another port is also using it.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1877,"context_line":"        self._validate_qos_queue(context, q)"},{"line_number":1878,"context_line":"        q[\u0027id\u0027] \u003d nvplib.create_lqueue(self.default_cluster,"},{"line_number":1879,"context_line":"                                       self._nvp_lqueue(q))"},{"line_number":1880,"context_line":"        return super(NvpPluginV2, self).create_qos_queue(context, qos_queue)"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    def delete_qos_queue(self, context, id, raise_in_use\u003dTrue):"},{"line_number":1883,"context_line":"        filters \u003d {\u0027queue_id\u0027: [id]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7x0%3D","line":1880,"updated":"2013-02-13 23:35:47.000000000","message":"i\u0027m confused by this... I would think that the super class knowns nothing about queues, since we added queue intelligence as a mixin","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1877,"context_line":"        self._validate_qos_queue(context, q)"},{"line_number":1878,"context_line":"        q[\u0027id\u0027] \u003d nvplib.create_lqueue(self.default_cluster,"},{"line_number":1879,"context_line":"                                       self._nvp_lqueue(q))"},{"line_number":1880,"context_line":"        return super(NvpPluginV2, self).create_qos_queue(context, qos_queue)"},{"line_number":1881,"context_line":""},{"line_number":1882,"context_line":"    def delete_qos_queue(self, context, id, raise_in_use\u003dTrue):"},{"line_number":1883,"context_line":"        filters \u003d {\u0027queue_id\u0027: [id]}"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7rI%3D","line":1880,"in_reply_to":"AAAAM3%2F%2B7x0%3D","updated":"2013-02-14 04:44:43.000000000","message":"Sorry I\u0027m not quite following.... Are you saying you are confused why there is a create_qos_queue() in this file and why doesn\u0027t all that logic live in the mixin?\n\nIf so, I suppose I could move all of it to the mixin. I didn\u0027t because currently everything that calls out to nvplib in done through this file. I\u0027m happy to make that change though if that\u0027s what you are referring to.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":1886,"context_line":"            if raise_in_use:"},{"line_number":1887,"context_line":"                raise ext_qos.QueueInUseByPort()"},{"line_number":1888,"context_line":"            else:"},{"line_number":1889,"context_line":"                return"},{"line_number":1890,"context_line":"        nvplib.delete_lqueue(self.default_cluster, id)"},{"line_number":1891,"context_line":"        return super(NvpPluginV2, self).delete_qos_queue(context, id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7xo%3D","line":1889,"updated":"2013-02-13 23:35:47.000000000","message":"i\u0027m confused by this... it seems like we\u0027re exiting without deleting anything.  I would have expected that raise_in_use\u003dFalse means that we delete even if it is in use.  It seems however that raise_in_use instead means that we don\u0027t raise and don\u0027t delete, which seems contrary to the method name.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1886,"context_line":"            if raise_in_use:"},{"line_number":1887,"context_line":"                raise ext_qos.QueueInUseByPort()"},{"line_number":1888,"context_line":"            else:"},{"line_number":1889,"context_line":"                return"},{"line_number":1890,"context_line":"        nvplib.delete_lqueue(self.default_cluster, id)"},{"line_number":1891,"context_line":"        return super(NvpPluginV2, self).delete_qos_queue(context, id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7rE%3D","line":1889,"in_reply_to":"AAAAM3%2F%2B7xo%3D","updated":"2013-02-14 04:44:43.000000000","message":"This function is called by delete port. The raise_in_use is used to handle the case when multiple ports share the same queue. In delete_port() we call: self_delete_qos_queue(context, id, False). In this case we don\u0027t want to raise in an error if the queue is in use.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"    qos_queue_create \u003d \"create_qos_queue\""},{"line_number":148,"context_line":"    qos_queue_delete \u003d \"delete_qos_queue\""},{"line_number":149,"context_line":"    qos_queue_get \u003d \"get_qos_queue\""},{"line_number":150,"context_line":"    qos_queue_list \u003d \"get_qos_queues\""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def __init__(self, loglevel\u003dNone):"},{"line_number":153,"context_line":"        if loglevel:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5VM%3D","line":150,"updated":"2013-02-15 05:53:15.000000000","message":"It would be better these variables are defined in the extension file.\nDefinitions in policy.json and these variables are pairs.\n\nIt can be said not only for NVP QoS extension but also for other extensions such as provider_net, but it is a good start point I believe.","commit_id":"570e4c08d31b2a9b88a8b5daf41c5b70631c11e7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        context, quantum_db_port.fixed_ips[0], is_delete\u003dTrue)"},{"line_number":1255,"context_line":"            super(NvpPluginV2, self).delete_port(context, id)"},{"line_number":1256,"context_line":"            # Delete qos queue if possible"},{"line_number":1257,"context_line":"            if len(queue):"},{"line_number":1258,"context_line":"                self.delete_qos_queue(context, queue[0][\u0027queue_id\u0027], False)"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"    def get_port(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Uk%3D","line":1257,"updated":"2013-02-16 02:42:04.000000000","message":"if queue:","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        context, quantum_db_port.fixed_ips[0], is_delete\u003dTrue)"},{"line_number":1255,"context_line":"            super(NvpPluginV2, self).delete_port(context, id)"},{"line_number":1256,"context_line":"            # Delete qos queue if possible"},{"line_number":1257,"context_line":"            if len(queue):"},{"line_number":1258,"context_line":"                self.delete_qos_queue(context, queue[0][\u0027queue_id\u0027], False)"},{"line_number":1259,"context_line":""},{"line_number":1260,"context_line":"    def get_port(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3PM%3D","line":1257,"in_reply_to":"AAAAM3%2F%2B3Uk%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1887,"context_line":"    def delete_qos_queue(self, context, id, raise_in_use\u003dTrue):"},{"line_number":1888,"context_line":"        filters \u003d {\u0027queue_id\u0027: [id]}"},{"line_number":1889,"context_line":"        queues \u003d self._get_port_queue_bindings(context, filters)"},{"line_number":1890,"context_line":"        if len(queues):"},{"line_number":1891,"context_line":"            if raise_in_use:"},{"line_number":1892,"context_line":"                raise ext_qos.QueueInUseByPort()"},{"line_number":1893,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3SU%3D","line":1890,"updated":"2013-02-16 02:42:04.000000000","message":"if queues:","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"    def delete_qos_queue(self, context, id, raise_in_use\u003dTrue):"},{"line_number":1888,"context_line":"        filters \u003d {\u0027queue_id\u0027: [id]}"},{"line_number":1889,"context_line":"        queues \u003d self._get_port_queue_bindings(context, filters)"},{"line_number":1890,"context_line":"        if len(queues):"},{"line_number":1891,"context_line":"            if raise_in_use:"},{"line_number":1892,"context_line":"                raise ext_qos.QueueInUseByPort()"},{"line_number":1893,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3PI%3D","line":1890,"in_reply_to":"AAAAM3%2F%2B3SU%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":"from quantum.plugins.nicira.nicira_nvp_plugin import nvp_cluster"},{"line_number":62,"context_line":"from quantum.plugins.nicira.nicira_nvp_plugin.nvp_plugin_version import ("},{"line_number":63,"context_line":"    PLUGIN_VERSION)"},{"line_number":64,"context_line":"from quantum.plugins.nicira.nicira_nvp_plugin import nicira_qos_db as qos_db"},{"line_number":65,"context_line":"LOG \u003d logging.getLogger(\"QuantumPlugin\")"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B3D0%3D","line":64,"updated":"2013-02-16 09:36:19.000000000","message":"I suspect this should go before line 62 for the lexicographic order requirement","commit_id":"70ba6a1e931523e790f4462af915cdef73b39537"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1899,"context_line":"        if not self._check_view_auth(context, {\u0027qos_queue\u0027: None},"},{"line_number":1900,"context_line":"                                     ext_qos.qos_queue_get):"},{"line_number":1901,"context_line":"            # don\u0027t want the user to find out that they guessed the right id"},{"line_number":1902,"context_line":"            # so  we raise not found if the policy.json file doesn\u0027t allow them"},{"line_number":1903,"context_line":"            raise ext_qos.QueueNotFound(id\u003did)"},{"line_number":1904,"context_line":""},{"line_number":1905,"context_line":"        return super(NvpPluginV2, self).get_qos_queue(context, id, fields)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2B3Dw%3D","line":1902,"updated":"2013-02-16 09:36:19.000000000","message":"Well done - I wonder why this wasn\u0027t being done by the API controller.","commit_id":"70ba6a1e931523e790f4462af915cdef73b39537"}],"quantum/plugins/nicira/nicira_nvp_plugin/nicira_qos_db.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2012 Nicira Networks, Inc.  All rights reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFvw%3D","line":3,"updated":"2013-02-07 14:23:01.000000000","message":"Pedant me says \"2013\"","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2012 Nicira Networks, Inc.  All rights reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BLA%3D","line":3,"in_reply_to":"AAAAM3%2F%2FFvw%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":"#"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import logging"},{"line_number":21,"context_line":"import sqlalchemy as sa"},{"line_number":22,"context_line":"from sqlalchemy.orm import exc"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFwk%3D","line":20,"updated":"2013-02-07 14:23:01.000000000","message":"use quantum.openstack.common.log module","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class QoSQueue(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":34,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":35,"context_line":"    default \u003d sa.Column(sa.Boolean, default\u003dFalse)"},{"line_number":36,"context_line":"    min \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FF0g%3D","line":33,"updated":"2013-02-07 14:23:01.000000000","message":"We need an alembic migration for the DB changes in this module","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class QoSQueue(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":34,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":35,"context_line":"    default \u003d sa.Column(sa.Boolean, default\u003dFalse)"},{"line_number":36,"context_line":"    min \u003d sa.Column(sa.Integer, nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BK8%3D","line":33,"in_reply_to":"AAAAM3%2F%2FF0g%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    min \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    max \u003d sa.Column(sa.Integer, nullable\u003dTrue)"},{"line_number":38,"context_line":"    qos_marking \u003d sa.Column(sa.Enum(\u0027untrusted\u0027, \u0027trusted\u0027,"},{"line_number":39,"context_line":"                                    name\u003d\u0027qosqueues_qos_marking\u0027))"},{"line_number":40,"context_line":"    dscp \u003d sa.Column(sa.Integer)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFwQ%3D","line":39,"updated":"2013-02-07 14:23:01.000000000","message":"I wonder if from an API perspective it wouldn\u0027t be easier to have trusted: {true | false}.\n\nBut as this is specific for the NVP plugin, this is not fundamental.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    min \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    max \u003d sa.Column(sa.Integer, nullable\u003dTrue)"},{"line_number":38,"context_line":"    qos_marking \u003d sa.Column(sa.Enum(\u0027untrusted\u0027, \u0027trusted\u0027,"},{"line_number":39,"context_line":"                                    name\u003d\u0027qosqueues_qos_marking\u0027))"},{"line_number":40,"context_line":"    dscp \u003d sa.Column(sa.Integer)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BK4%3D","line":39,"in_reply_to":"AAAAM3%2F%2FFwQ%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                        primary_key\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    queue_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"qosqueues.id\"),"},{"line_number":49,"context_line":"                         primary_key\u003dTrue)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class NetworkQueueMapping(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFwA%3D","line":49,"updated":"2013-02-07 14:23:01.000000000","message":"Data integrity question: If a row from the referenced table (qosqueues) is deleted, should the record from the referencing table (portqueuemappings), be deleted as well?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                        primary_key\u003dTrue)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    queue_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"qosqueues.id\"),"},{"line_number":49,"context_line":"                         primary_key\u003dTrue)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class NetworkQueueMapping(model_base.BASEV2):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BKQ%3D","line":49,"in_reply_to":"AAAAM3%2F%2FFwA%3D","updated":"2013-02-13 22:46:00.000000000","message":"That shouldn\u0027t matter because it should not be possible to delete a qosqueue.id if something in that table is referencing it.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_qos_queue(self, context, id):"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            qos_queue \u003d self._get_by_id(context, QoSQueue, id)"},{"line_number":85,"context_line":"        except exc.NoResultFound:"},{"line_number":86,"context_line":"            raise ext_qos.QueueNotFound(id\u003did)"},{"line_number":87,"context_line":"        return qos_queue"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFvo%3D","line":84,"updated":"2013-02-07 14:23:01.000000000","message":"possibly remove line 87 and return at line 84","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_qos_queue(self, context, id):"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            qos_queue \u003d self._get_by_id(context, QoSQueue, id)"},{"line_number":85,"context_line":"        except exc.NoResultFound:"},{"line_number":86,"context_line":"            raise ext_qos.QueueNotFound(id\u003did)"},{"line_number":87,"context_line":"        return qos_queue"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BKM%3D","line":84,"in_reply_to":"AAAAM3%2F%2FFvo%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        queue_to_create \u003d None"},{"line_number":214,"context_line":"        # If there is no device_id don\u0027t create a queue. The queue will be"},{"line_number":215,"context_line":"        # created on update port when the device_id is present. Also don\u0027t"},{"line_number":216,"context_line":"        # apply QoS to network ports."},{"line_number":217,"context_line":"        if (port.get(\u0027device_id\u0027) and"},{"line_number":218,"context_line":"            port[\u0027device_owner\u0027].starts_with(\u0027network:\u0027)):"},{"line_number":219,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFrc%3D","line":216,"updated":"2013-02-07 14:23:01.000000000","message":"The condition below will not return if port.get(\u0027device_id\u0027) is None.\n\nIs that your intention?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        queue_to_create \u003d None"},{"line_number":214,"context_line":"        # If there is no device_id don\u0027t create a queue. The queue will be"},{"line_number":215,"context_line":"        # created on update port when the device_id is present. Also don\u0027t"},{"line_number":216,"context_line":"        # apply QoS to network ports."},{"line_number":217,"context_line":"        if (port.get(\u0027device_id\u0027) and"},{"line_number":218,"context_line":"            port[\u0027device_owner\u0027].starts_with(\u0027network:\u0027)):"},{"line_number":219,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BKA%3D","line":216,"in_reply_to":"AAAAM3%2F%2FFrc%3D","updated":"2013-02-13 22:46:00.000000000","message":"oops yup this should be not port.get(\u0027device_id\u0027). This is how it was before some how i messed it up when i changed things around...","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # apply QoS to network ports."},{"line_number":217,"context_line":"        if (port.get(\u0027device_id\u0027) and"},{"line_number":218,"context_line":"            port[\u0027device_owner\u0027].starts_with(\u0027network:\u0027)):"},{"line_number":219,"context_line":"            return None"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        # Check if there is a queue assocated with the network"},{"line_number":222,"context_line":"        filters \u003d {\u0027network_id\u0027: [port[\u0027network_id\u0027]]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFsQ%3D","line":219,"updated":"2013-02-07 14:23:01.000000000","message":"you can drop None","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        # apply QoS to network ports."},{"line_number":217,"context_line":"        if (port.get(\u0027device_id\u0027) and"},{"line_number":218,"context_line":"            port[\u0027device_owner\u0027].starts_with(\u0027network:\u0027)):"},{"line_number":219,"context_line":"            return None"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        # Check if there is a queue assocated with the network"},{"line_number":222,"context_line":"        filters \u003d {\u0027network_id\u0027: [port[\u0027network_id\u0027]]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BJ4%3D","line":219,"in_reply_to":"AAAAM3%2F%2FFsQ%3D","updated":"2013-02-13 22:46:00.000000000","message":"Done","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _validate_qos_queue(self, context, qos_queue):"},{"line_number":275,"context_line":"        if qos_queue.get(\u0027default\u0027) is True and not context.is_admin:"},{"line_number":276,"context_line":"            raise  ext_qos.DefaultQueueCreateNotAdmin()"},{"line_number":277,"context_line":"        elif qos_queue.get(\u0027default\u0027) is True and context.is_admin:"},{"line_number":278,"context_line":"            # Check if there is already a default queue in the system"},{"line_number":279,"context_line":"            filters \u003d {\u0027default\u0027: [True]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFrI%3D","line":276,"updated":"2013-02-07 14:23:01.000000000","message":"I wonder if we should have the default queue in the configuration file. What\u0027s your opinion?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _validate_qos_queue(self, context, qos_queue):"},{"line_number":275,"context_line":"        if qos_queue.get(\u0027default\u0027) is True and not context.is_admin:"},{"line_number":276,"context_line":"            raise  ext_qos.DefaultQueueCreateNotAdmin()"},{"line_number":277,"context_line":"        elif qos_queue.get(\u0027default\u0027) is True and context.is_admin:"},{"line_number":278,"context_line":"            # Check if there is already a default queue in the system"},{"line_number":279,"context_line":"            filters \u003d {\u0027default\u0027: [True]}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BJY%3D","line":276,"in_reply_to":"AAAAM3%2F%2FFrI%3D","updated":"2013-02-13 22:46:00.000000000","message":"I don\u0027t think so. A cloud provider might decide that it wants some networks without any queues. In this case they wouldn\u0027t have a default queue.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise ext_qos.MissingDSCPForTrusted()"},{"line_number":285,"context_line":"        max \u003d qos_queue.get(\u0027max\u0027)"},{"line_number":286,"context_line":"        min \u003d qos_queue.get(\u0027min\u0027)"},{"line_number":287,"context_line":"        if max \u003e\u003d 0 and min \u003e\u003d 0:"},{"line_number":288,"context_line":"            if min \u003e max:"},{"line_number":289,"context_line":"                raise ext_qos.QueueMinGreaterMax()"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFqg%3D","line":287,"updated":"2013-02-07 14:23:01.000000000","message":"The API is ensuring they\u0027re not negative already.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise ext_qos.MissingDSCPForTrusted()"},{"line_number":285,"context_line":"        max \u003d qos_queue.get(\u0027max\u0027)"},{"line_number":286,"context_line":"        min \u003d qos_queue.get(\u0027min\u0027)"},{"line_number":287,"context_line":"        if max \u003e\u003d 0 and min \u003e\u003d 0:"},{"line_number":288,"context_line":"            if min \u003e max:"},{"line_number":289,"context_line":"                raise ext_qos.QueueMinGreaterMax()"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BJM%3D","line":287,"in_reply_to":"AAAAM3%2F%2FFqg%3D","updated":"2013-02-13 22:46:00.000000000","message":"Good catch, thanks.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                  {\u0027min\u0027: \u0027min_bandwidth_rate\u0027},"},{"line_number":297,"context_line":"                  {\u0027max\u0027: \u0027max_bandwidth_rate\u0027},"},{"line_number":298,"context_line":"                  {\u0027dscp\u0027: \u0027dscp\u0027}]"},{"line_number":299,"context_line":"        for param in params:"},{"line_number":300,"context_line":"            for api_name, nvp_name in param.items():"},{"line_number":301,"context_line":"                val \u003d queue.get(api_name)"},{"line_number":302,"context_line":"                # FIXME(arosen) API attribute map should do this."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFrU%3D","line":299,"updated":"2013-02-07 14:23:01.000000000","message":"consider: for (api_name, nvp_name) in params.iteritems()","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"                        val \u003d 0"},{"line_number":306,"context_line":"                        queue[api_name] \u003d 0"},{"line_number":307,"context_line":"                if val or val \u003d\u003d 0:"},{"line_number":308,"context_line":"                    nvp_queue[nvp_name] \u003d val"},{"line_number":309,"context_line":"        return nvp_queue"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFrM%3D","line":308,"updated":"2013-02-07 14:23:01.000000000","message":"Does this need to be indented?\n\nFor instance if \u0027name\u0027 is an empty string, this would not update nvp_queue name - which will then be automatically set to the same value as the queue uuid.\n\nThis is acceptable for me, I just wanted to make sure this is the intended logic.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":55,"context_line":"                           primary_key\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    queue_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"qosqueues.id\","},{"line_number":58,"context_line":"                                                      ondelete\u003d\"CASCADE\"))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class NVPQoSDbMixin(ext_qos.QueuePluginBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7xY%3D","line":58,"updated":"2013-02-13 23:35:47.000000000","message":"I believe the behavior is that if a queue is mapped to a network, that is the queue that the port gets by default, is that correct?  This is not really clear from the naming.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                           primary_key\u003dTrue)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    queue_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\"qosqueues.id\","},{"line_number":58,"context_line":"                                                      ondelete\u003d\"CASCADE\"))"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class NVPQoSDbMixin(ext_qos.QueuePluginBase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7q4%3D","line":58,"in_reply_to":"AAAAM3%2F%2B7xY%3D","updated":"2013-02-14 04:44:43.000000000","message":"If a queue is mapped to a network then when a port is created on that network  a copy of that queue is created with the same min/max,etc values of the queue that is associated with the network. Do you have a different name you\u0027d like to propose?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":153,"context_line":"        queue_id \u003d self._get_port_queue_bindings("},{"line_number":154,"context_line":"            context, filters, fields)"},{"line_number":155,"context_line":"        if queue_id:"},{"line_number":156,"context_line":"            port[ext_qos.QUEUE] \u003d queue_id[0][\u0027queue_id\u0027]"},{"line_number":157,"context_line":"        return port"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _extend_network_qos_queue(self, context, network):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7wc%3D","line":156,"updated":"2013-02-13 23:35:47.000000000","message":"same concern that if its never valid to have more than one queue binding returned, we should make the call singular and enforce that only one value is returned.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        queue_id \u003d self._get_port_queue_bindings("},{"line_number":154,"context_line":"            context, filters, fields)"},{"line_number":155,"context_line":"        if queue_id:"},{"line_number":156,"context_line":"            port[ext_qos.QUEUE] \u003d queue_id[0][\u0027queue_id\u0027]"},{"line_number":157,"context_line":"        return port"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _extend_network_qos_queue(self, context, network):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7qo%3D","line":156,"in_reply_to":"AAAAM3%2F%2B7wc%3D","updated":"2013-02-14 04:44:43.000000000","message":"Nope, you can have multiple ports associated with the same queue. If I added an if len(queue_id) there it would always be 0 or 1 because the filter above is filtering on a specific port_id.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def _check_for_queue_and_create(self, context, port):"},{"line_number":191,"context_line":"        \"\"\"This function determines if a port should be associated with a"},{"line_number":192,"context_line":"        queue. It works by first querying NetworkQueueMapping to determine"},{"line_number":193,"context_line":"        if the network is associated with a queue. If so, then it queries"},{"line_number":194,"context_line":"        NetworkQueueMapping for all the networks that are associated with"},{"line_number":195,"context_line":"        this queue. Next, it queries against all the ports on these networks"},{"line_number":196,"context_line":"        with the port device_id. Finally it queries PortQueueMapping. If that"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7wM%3D","line":193,"updated":"2013-02-13 23:35:47.000000000","message":"which network?  the network that \u0027port \u0027 is on?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    def _check_for_queue_and_create(self, context, port):"},{"line_number":191,"context_line":"        \"\"\"This function determines if a port should be associated with a"},{"line_number":192,"context_line":"        queue. It works by first querying NetworkQueueMapping to determine"},{"line_number":193,"context_line":"        if the network is associated with a queue. If so, then it queries"},{"line_number":194,"context_line":"        NetworkQueueMapping for all the networks that are associated with"},{"line_number":195,"context_line":"        this queue. Next, it queries against all the ports on these networks"},{"line_number":196,"context_line":"        with the port device_id. Finally it queries PortQueueMapping. If that"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7qk%3D","line":193,"in_reply_to":"AAAAM3%2F%2B7wM%3D","updated":"2013-02-14 04:44:43.000000000","message":"If the network you are creating the port on. I\u0027ll reword to made that more clear.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":209,"context_line":"        # TODO(arosen) store each portqueuemapping in the queue that it"},{"line_number":210,"context_line":"        # originated from. This will reduce the number of queries done here"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        queue_to_create \u003d None"},{"line_number":213,"context_line":"        # If there is no device_id don\u0027t create a queue. The queue will be"},{"line_number":214,"context_line":"        # created on update port when the device_id is present. Also don\u0027t"},{"line_number":215,"context_line":"        # apply QoS to network ports."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7vA%3D","line":212,"updated":"2013-02-13 23:35:47.000000000","message":"this is more of a queue template, right?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        # TODO(arosen) store each portqueuemapping in the queue that it"},{"line_number":210,"context_line":"        # originated from. This will reduce the number of queries done here"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        queue_to_create \u003d None"},{"line_number":213,"context_line":"        # If there is no device_id don\u0027t create a queue. The queue will be"},{"line_number":214,"context_line":"        # created on update port when the device_id is present. Also don\u0027t"},{"line_number":215,"context_line":"        # apply QoS to network ports."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7qc%3D","line":212,"in_reply_to":"AAAAM3%2F%2B7vA%3D","updated":"2013-02-14 04:44:43.000000000","message":"correct","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":232,"context_line":"            filters \u003d {\u0027device_id\u0027: [port.get(\u0027device_id\u0027)],"},{"line_number":233,"context_line":"                       \u0027network_id\u0027: [network[\u0027network_id\u0027] for"},{"line_number":234,"context_line":"                                      network in networks_with_same_queue]}"},{"line_number":235,"context_line":"            Port \u003d models_v2.Port"},{"line_number":236,"context_line":"            query \u003d self._model_query(context, Port)"},{"line_number":237,"context_line":"            ports \u003d self._apply_filters_to_query(query, Port, filters).all()"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7v4%3D","line":235,"updated":"2013-02-13 23:35:47.000000000","message":"i\u0027d probably just pass models_v2.Port to both calls.  it makes more sense for this value to \"look\" like a class name than a variable.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            filters \u003d {\u0027device_id\u0027: [port.get(\u0027device_id\u0027)],"},{"line_number":233,"context_line":"                       \u0027network_id\u0027: [network[\u0027network_id\u0027] for"},{"line_number":234,"context_line":"                                      network in networks_with_same_queue]}"},{"line_number":235,"context_line":"            Port \u003d models_v2.Port"},{"line_number":236,"context_line":"            query \u003d self._model_query(context, Port)"},{"line_number":237,"context_line":"            ports \u003d self._apply_filters_to_query(query, Port, filters).all()"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7qU%3D","line":235,"in_reply_to":"AAAAM3%2F%2B7v4%3D","updated":"2013-02-14 04:44:43.000000000","message":"Good idea, I like that better.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":242,"context_line":"                queues \u003d self._get_port_queue_bindings(context, filters,"},{"line_number":243,"context_line":"                                                       [\u0027queue_id\u0027])"},{"line_number":244,"context_line":"                if queues:"},{"line_number":245,"context_line":"                    return queues[0][\u0027queue_id\u0027]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # get the size of the queue we want to create"},{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7vs%3D","line":245,"updated":"2013-02-13 23:35:47.000000000","message":"again, only a single queue is valid from _get_port_queue_bindings().","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                queues \u003d self._get_port_queue_bindings(context, filters,"},{"line_number":243,"context_line":"                                                       [\u0027queue_id\u0027])"},{"line_number":244,"context_line":"                if queues:"},{"line_number":245,"context_line":"                    return queues[0][\u0027queue_id\u0027]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # get the size of the queue we want to create"},{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7qM%3D","line":245,"in_reply_to":"AAAAM3%2F%2B7vs%3D","updated":"2013-02-14 04:44:43.000000000","message":"not true.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # get the size of the queue we want to create"},{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("},{"line_number":249,"context_line":"                context, network_queue_id[0][\u0027queue_id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if not queue_to_create:"},{"line_number":252,"context_line":"            # check for default queue"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7vo%3D","line":249,"updated":"2013-02-13 23:35:47.000000000","message":"is it ever possible that ports is non-None, but queues is none?  technically, that would fall through and result in the creation in a new queue here.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # get the size of the queue we want to create"},{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("},{"line_number":249,"context_line":"                context, network_queue_id[0][\u0027queue_id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if not queue_to_create:"},{"line_number":252,"context_line":"            # check for default queue"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7VY%3D","line":249,"in_reply_to":"AAAAM3%2F%2B7vo%3D","updated":"2013-02-14 04:44:43.000000000","message":"Yup, hopefully if we get to this line that is the condition we are shooting for. If we get here that means there are no other networks sharing this same queue and there are not ports with the same device_id as the one on the port passed in. In this case queue_to_create \u003d will be be a qos_queue_dict() of the network queue that we are going to create.","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("},{"line_number":249,"context_line":"                context, network_queue_id[0][\u0027queue_id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if not queue_to_create:"},{"line_number":252,"context_line":"            # check for default queue"},{"line_number":253,"context_line":"            filters \u003d {\u0027default\u0027: [True]}"},{"line_number":254,"context_line":"            # context is elevated since default queue is owned by admin"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7vY%3D","line":251,"updated":"2013-02-13 23:35:47.000000000","message":"for clarify, would this branch ever be executed if network_queue_id is None?  Otherwise, might be more clearly coded as an \"else\" at the same depth as the \"if network_queue_id\".","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            queue_to_create \u003d self.get_qos_queue("},{"line_number":249,"context_line":"                context, network_queue_id[0][\u0027queue_id\u0027])"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        if not queue_to_create:"},{"line_number":252,"context_line":"            # check for default queue"},{"line_number":253,"context_line":"            filters \u003d {\u0027default\u0027: [True]}"},{"line_number":254,"context_line":"            # context is elevated since default queue is owned by admin"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7VU%3D","line":251,"in_reply_to":"AAAAM3%2F%2B7vY%3D","updated":"2013-02-14 04:44:43.000000000","message":"Good call, I\u0027ll change this to an else","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import sqlalchemy as sa"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2o0%3D","line":19,"updated":"2013-02-16 23:33:09.000000000","message":"logging isn\u0027t used.  I think you can remove it and line 31","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#"},{"line_number":17,"context_line":"# @author: Aaron Rosen, Nicira, Inc"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import logging"},{"line_number":20,"context_line":"import sqlalchemy as sa"},{"line_number":21,"context_line":"from sqlalchemy.orm import exc"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2g8%3D","line":19,"in_reply_to":"AAAAM3%2F%2B2o0%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def create_qos_queue(self, context, qos_queue):"},{"line_number":66,"context_line":"        q \u003d qos_queue[\u0027qos_queue\u0027]"},{"line_number":67,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":68,"context_line":"            qos_queue \u003d QoSQueue(id\u003dq.get(\u0027id\u0027) or utils.str_uuid(),"},{"line_number":69,"context_line":"                                 name\u003dq.get(\u0027name\u0027),"},{"line_number":70,"context_line":"                                 tenant_id\u003dq[\u0027tenant_id\u0027],"},{"line_number":71,"context_line":"                                 default\u003dq.get(\u0027default\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2ow%3D","line":68,"updated":"2013-02-16 23:33:09.000000000","message":"id\u003dq.get(\u0027id\u0027, utils.str_uuid())","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    def create_qos_queue(self, context, qos_queue):"},{"line_number":66,"context_line":"        q \u003d qos_queue[\u0027qos_queue\u0027]"},{"line_number":67,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":68,"context_line":"            qos_queue \u003d QoSQueue(id\u003dq.get(\u0027id\u0027) or utils.str_uuid(),"},{"line_number":69,"context_line":"                                 name\u003dq.get(\u0027name\u0027),"},{"line_number":70,"context_line":"                                 tenant_id\u003dq[\u0027tenant_id\u0027],"},{"line_number":71,"context_line":"                                 default\u003dq.get(\u0027default\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2g4%3D","line":68,"in_reply_to":"AAAAM3%2F%2B2ow%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _delete_network_queue_mapping(self, context, network_id):"},{"line_number":138,"context_line":"        query \u003d self._model_query(context, NetworkQueueMapping)"},{"line_number":139,"context_line":"        try:"},{"line_number":140,"context_line":"            binding \u003d query.filter("},{"line_number":141,"context_line":"                NetworkQueueMapping.network_id \u003d\u003d network_id).one()"},{"line_number":142,"context_line":"        except exc.NoResultFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2oc%3D","line":139,"updated":"2013-02-16 23:33:09.000000000","message":"Consider replacing 139-148 with:\n\nwith context.session.begin(subtransactions\u003dTrue):\n    binding \u003d query.filter_by(network_id\u003dnetwork_id).first()\n    if binding:\n        binding.delete()","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def _delete_network_queue_mapping(self, context, network_id):"},{"line_number":138,"context_line":"        query \u003d self._model_query(context, NetworkQueueMapping)"},{"line_number":139,"context_line":"        try:"},{"line_number":140,"context_line":"            binding \u003d query.filter("},{"line_number":141,"context_line":"                NetworkQueueMapping.network_id \u003d\u003d network_id).one()"},{"line_number":142,"context_line":"        except exc.NoResultFound:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2gw%3D","line":139,"in_reply_to":"AAAAM3%2F%2B2oc%3D","updated":"2013-02-17 01:26:58.000000000","message":"Thanks, I agree that\u0027s better.","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":256,"context_line":"            # context is elevated since default queue is owned by admin"},{"line_number":257,"context_line":"            queue_to_create \u003d self.get_qos_queues(context.elevated(), filters)"},{"line_number":258,"context_line":"            if not queue_to_create:"},{"line_number":259,"context_line":"                return None"},{"line_number":260,"context_line":"            queue_to_create \u003d queue_to_create[0]"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # create the queue"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2oU%3D","line":259,"updated":"2013-02-16 23:33:09.000000000","message":"return","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            # context is elevated since default queue is owned by admin"},{"line_number":257,"context_line":"            queue_to_create \u003d self.get_qos_queues(context.elevated(), filters)"},{"line_number":258,"context_line":"            if not queue_to_create:"},{"line_number":259,"context_line":"                return None"},{"line_number":260,"context_line":"            queue_to_create \u003d queue_to_create[0]"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # create the queue"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2gs%3D","line":259,"in_reply_to":"AAAAM3%2F%2B2oU%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return self.create_qos_queue(context, queue, False)[\u0027id\u0027]"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _validate_qos_queue(self, context, qos_queue):"},{"line_number":276,"context_line":"        if qos_queue.get(\u0027default\u0027) is True and not context.is_admin:"},{"line_number":277,"context_line":"            raise ext_qos.DefaultQueueCreateNotAdmin()"},{"line_number":278,"context_line":"        elif qos_queue.get(\u0027default\u0027) is True and context.is_admin:"},{"line_number":279,"context_line":"            # Check if there is already a default queue in the system"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2oI%3D","line":276,"updated":"2013-02-16 23:33:09.000000000","message":"Consider:\n\nif qos_queue.get(\u0027default\u0027):\n    if context.is_admin:\n        if self.get_qos_queues(context, filters\u003d{\u0027default\u0027: [True]}):\n            raise ext_qos.DefaultQueueAlreadyExists()\n    else:\n        raise ext_qos.DefaultQueueCreateNotAdmin()","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return self.create_qos_queue(context, queue, False)[\u0027id\u0027]"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _validate_qos_queue(self, context, qos_queue):"},{"line_number":276,"context_line":"        if qos_queue.get(\u0027default\u0027) is True and not context.is_admin:"},{"line_number":277,"context_line":"            raise ext_qos.DefaultQueueCreateNotAdmin()"},{"line_number":278,"context_line":"        elif qos_queue.get(\u0027default\u0027) is True and context.is_admin:"},{"line_number":279,"context_line":"            # Check if there is already a default queue in the system"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2gk%3D","line":276,"in_reply_to":"AAAAM3%2F%2B2oI%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":292,"context_line":"    def _nvp_lqueue(self, queue):"},{"line_number":293,"context_line":"        \"\"\"Convert fields to nvp fields.\"\"\""},{"line_number":294,"context_line":"        nvp_queue \u003d {}"},{"line_number":295,"context_line":"        params \u003d [{\u0027name\u0027: \u0027display_name\u0027},"},{"line_number":296,"context_line":"                  {\u0027qos_marking\u0027: \u0027qos_marking\u0027},"},{"line_number":297,"context_line":"                  {\u0027min\u0027: \u0027min_bandwidth_rate\u0027},"},{"line_number":298,"context_line":"                  {\u0027max\u0027: \u0027max_bandwidth_rate\u0027},"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2n4%3D","line":295,"updated":"2013-02-16 23:33:09.000000000","message":"No need to make this a list of one item dicts.  Consider:\n\nparams \u003d {\n    \u0027name\u0027: \u0027display_name\u0027,\n    \u0027qos_marking\u0027: \u0027qos_marking\u0027,\n    \u0027min\u0027: \u0027min_bandwidth_rate\u0027,\n    \u0027max\u0027: \u0027max_bandwidth_rate\u0027,\n    \u0027dscp\u0027: \u0027dscp\u0027\n}\nnvp_queue \u003d dict(\n       (nvp_name, queue.get(api_name)) \n       for api_name, nvp_name in params.iteritems() \n       if attr.is_attr_set(queue.get(api_name))\n   )\n)","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    def _nvp_lqueue(self, queue):"},{"line_number":293,"context_line":"        \"\"\"Convert fields to nvp fields.\"\"\""},{"line_number":294,"context_line":"        nvp_queue \u003d {}"},{"line_number":295,"context_line":"        params \u003d [{\u0027name\u0027: \u0027display_name\u0027},"},{"line_number":296,"context_line":"                  {\u0027qos_marking\u0027: \u0027qos_marking\u0027},"},{"line_number":297,"context_line":"                  {\u0027min\u0027: \u0027min_bandwidth_rate\u0027},"},{"line_number":298,"context_line":"                  {\u0027max\u0027: \u0027max_bandwidth_rate\u0027},"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2gQ%3D","line":295,"in_reply_to":"AAAAM3%2F%2B2n4%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"}],"quantum/plugins/nicira/nicira_nvp_plugin/nvplib.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":707,"context_line":"    uri \u003d _build_uri_path(LQUEUE_RESOURCE)"},{"line_number":708,"context_line":"    lqueue[\u0027tags\u0027] \u003d [{\u0027tag\u0027: VERSION, \u0027scope\u0027: \u0027quantum\u0027}]"},{"line_number":709,"context_line":"    try:"},{"line_number":710,"context_line":"        resp_obj \u003d do_single_request(\"POST\", uri, json.dumps(lqueue),"},{"line_number":711,"context_line":"                                     cluster\u003dcluster)"},{"line_number":712,"context_line":"    except NvpApiClient.NvpApiException as e:"},{"line_number":713,"context_line":"        LOG.error(\"Failed to create logical queue %s\" % str(e))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFpg%3D","line":710,"updated":"2013-02-07 14:23:01.000000000","message":"We have a constants for \u0027POST\u0027 --\u003e HTTP_POST","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":707,"context_line":"    uri \u003d _build_uri_path(LQUEUE_RESOURCE)"},{"line_number":708,"context_line":"    lqueue[\u0027tags\u0027] \u003d [{\u0027tag\u0027: VERSION, \u0027scope\u0027: \u0027quantum\u0027}]"},{"line_number":709,"context_line":"    try:"},{"line_number":710,"context_line":"        resp_obj \u003d do_single_request(\"POST\", uri, json.dumps(lqueue),"},{"line_number":711,"context_line":"                                     cluster\u003dcluster)"},{"line_number":712,"context_line":"    except NvpApiClient.NvpApiException as e:"},{"line_number":713,"context_line":"        LOG.error(\"Failed to create logical queue %s\" % str(e))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BFc%3D","line":710,"in_reply_to":"AAAAM3%2F%2FFpg%3D","updated":"2013-02-13 22:46:00.000000000","message":"But it\u0027s longer :/... Done anyways.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":49,"context_line":"LROUTERNAT_RESOURCE \u003d \"nat-lrouter\""},{"line_number":50,"context_line":"LQUEUE_RESOURCE \u003d \"lqueue\""},{"line_number":51,"context_line":"# Current quantum version"},{"line_number":52,"context_line":"VERSION \u003d \"2013.1\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Constants for NAT rules"},{"line_number":55,"context_line":"MATCH_KEYS \u003d [\"destination_ip_addresses\", \"destination_port_max\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7uw%3D","line":52,"updated":"2013-02-13 23:35:47.000000000","message":"seems unrelated?","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"LROUTERNAT_RESOURCE \u003d \"nat-lrouter\""},{"line_number":50,"context_line":"LQUEUE_RESOURCE \u003d \"lqueue\""},{"line_number":51,"context_line":"# Current quantum version"},{"line_number":52,"context_line":"VERSION \u003d \"2013.1\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Constants for NAT rules"},{"line_number":55,"context_line":"MATCH_KEYS \u003d [\"destination_ip_addresses\", \"destination_port_max\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2B7VQ%3D","line":52,"in_reply_to":"AAAAM3%2F%2B7uw%3D","updated":"2013-02-14 04:44:43.000000000","message":"Done","commit_id":"f08ce53c570c834dee50bc038c7c706ec6de3b20"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":49,"context_line":"LROUTERNAT_RESOURCE \u003d \"nat-lrouter\""},{"line_number":50,"context_line":"LQUEUE_RESOURCE \u003d \"lqueue\""},{"line_number":51,"context_line":"# Current quantum version"},{"line_number":52,"context_line":"VERSION \u003d \"2013.1\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"# Constants for NAT rules"},{"line_number":55,"context_line":"MATCH_KEYS \u003d [\"destination_ip_addresses\", \"destination_port_max\","}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2B5VE%3D","line":52,"updated":"2013-02-15 05:53:15.000000000","message":"QUANTUM_VERSION is better.\n\nNVP cluster needs Quantum version?","commit_id":"570e4c08d31b2a9b88a8b5daf41c5b70631c11e7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        resp_obj \u003d do_single_request(HTTP_POST, uri, json.dumps(lqueue),"},{"line_number":1133,"context_line":"                                     cluster\u003dcluster)"},{"line_number":1134,"context_line":"    except NvpApiClient.NvpApiException as e:"},{"line_number":1135,"context_line":"        LOG.error(\"Failed to create logical queue %s\" % str(e))"},{"line_number":1136,"context_line":"        raise exception.QuantumException()"},{"line_number":1137,"context_line":"    return json.loads(resp_obj)[\u0027uuid\u0027]"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2nw%3D","line":1135,"updated":"2013-02-16 23:33:09.000000000","message":"LOG.exception(_(\"Failed to create logical queue\"))","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        resp_obj \u003d do_single_request(HTTP_POST, uri, json.dumps(lqueue),"},{"line_number":1133,"context_line":"                                     cluster\u003dcluster)"},{"line_number":1134,"context_line":"    except NvpApiClient.NvpApiException as e:"},{"line_number":1135,"context_line":"        LOG.error(\"Failed to create logical queue %s\" % str(e))"},{"line_number":1136,"context_line":"        raise exception.QuantumException()"},{"line_number":1137,"context_line":"    return json.loads(resp_obj)[\u0027uuid\u0027]"},{"line_number":1138,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2f8%3D","line":1135,"in_reply_to":"AAAAM3%2F%2B2nw%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":1144,"context_line":"                                          resource_id\u003did),"},{"line_number":1145,"context_line":"                          cluster\u003dcluster)"},{"line_number":1146,"context_line":"    except Exception as e:"},{"line_number":1147,"context_line":"        LOG.error(\"Failed to delete logical queue %s\" % str(e))"},{"line_number":1148,"context_line":"        raise exception.QuantumException()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2ns%3D","line":1147,"updated":"2013-02-16 23:33:09.000000000","message":"LOG.exception(_(\"Failed to delete logical queue\"))","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"                                          resource_id\u003did),"},{"line_number":1145,"context_line":"                          cluster\u003dcluster)"},{"line_number":1146,"context_line":"    except Exception as e:"},{"line_number":1147,"context_line":"        LOG.error(\"Failed to delete logical queue %s\" % str(e))"},{"line_number":1148,"context_line":"        raise exception.QuantumException()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2f4%3D","line":1147,"in_reply_to":"AAAAM3%2F%2B2ns%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":1141,"context_line":""},{"line_number":1142,"context_line":"def delete_lqueue(cluster, id):"},{"line_number":1143,"context_line":"    try:"},{"line_number":1144,"context_line":"        do_single_request(\"DELETE\","},{"line_number":1145,"context_line":"                          _build_uri_path(LQUEUE_RESOURCE,"},{"line_number":1146,"context_line":"                                          resource_id\u003did),"},{"line_number":1147,"context_line":"                          cluster\u003dcluster)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2B2aE%3D","line":1144,"updated":"2013-02-17 03:52:26.000000000","message":"HTTP_DELETE","commit_id":"96f1aa32c4bcf379d23499d8a13462cadb068d68"}],"quantum/tests/unit/nicira/test_nicira_plugin.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import quantum.common.test_lib as test_lib"},{"line_number":24,"context_line":"from quantum import context"},{"line_number":25,"context_line":"from quantum.extensions import providernet as pnet"},{"line_number":26,"context_line":"from quantum.extensions import nvp_qos"},{"line_number":27,"context_line":"from quantum.extensions import securitygroup as secgrp"},{"line_number":28,"context_line":"from quantum import manager"},{"line_number":29,"context_line":"from quantum.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFqQ%3D","line":26,"updated":"2013-02-07 14:23:01.000000000","message":"import order.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    pass"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"class TestNiciraPortsV2(test_plugin.TestPortsV2, NiciraPluginV2TestCase):"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def test_exhaust_ports_overlay_network(self):"},{"line_number":411,"context_line":"        cfg.CONF.set_override(\u0027max_lp_per_overlay_ls\u0027, 1, group\u003d\u0027NVP\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFqU%3D","line":408,"updated":"2013-02-07 14:23:01.000000000","message":"Aren\u0027t the tests below already merged?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    pass"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"class TestNiciraPortsV2(test_plugin.TestPortsV2, NiciraPluginV2TestCase):"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def test_exhaust_ports_overlay_network(self):"},{"line_number":411,"context_line":"        cfg.CONF.set_override(\u0027max_lp_per_overlay_ls\u0027, 1, group\u003d\u0027NVP\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BEE%3D","line":408,"in_reply_to":"AAAAM3%2F%2FFqU%3D","updated":"2013-02-13 22:46:00.000000000","message":"yup looks like they are.","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":315,"context_line":"        qos_queue \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":316,"context_line":"        if res.status_int \u003e\u003d 400:"},{"line_number":317,"context_line":"            raise webob.exc.HTTPClientError(code\u003dres.status_int)"},{"line_number":318,"context_line":"        yield qos_queue"},{"line_number":319,"context_line":"        if not no_delete:"},{"line_number":320,"context_line":"            self._delete(\u0027qos-queues\u0027,"},{"line_number":321,"context_line":"                         qos_queue[\u0027qos_queue\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3S8%3D","line":318,"updated":"2013-02-16 02:42:04.000000000","message":"Wrap the yeild in a try finally just in case an exception is thrown.  \n\ntry:\n    yeild qos_queue\nfinally:\n    if not no_delete:\n         self._delete(\u0027qos-queues\u0027, qos_queue[\u0027qos_queue\u0027][\u0027id\u0027])","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":323,"context_line":"    def test_create_qos_queue(self):"},{"line_number":324,"context_line":"        with self.qos_queue(name\u003d\u0027fake_lqueue\u0027, min\u003d34, max\u003d44,"},{"line_number":325,"context_line":"                            qos_marking\u003d\u0027untrusted\u0027, default\u003dFalse) as q:"},{"line_number":326,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027name\u0027], \u0027fake_lqueue\u0027)"},{"line_number":327,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027min\u0027], 34)"},{"line_number":328,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027max\u0027], 44)"},{"line_number":329,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027qos_marking\u0027], \u0027untrusted\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3TQ%3D","line":326,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual() for the next 5 lines","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    def test_create_qos_queue(self):"},{"line_number":324,"context_line":"        with self.qos_queue(name\u003d\u0027fake_lqueue\u0027, min\u003d34, max\u003d44,"},{"line_number":325,"context_line":"                            qos_marking\u003d\u0027untrusted\u0027, default\u003dFalse) as q:"},{"line_number":326,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027name\u0027], \u0027fake_lqueue\u0027)"},{"line_number":327,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027min\u0027], 34)"},{"line_number":328,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027max\u0027], 44)"},{"line_number":329,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027qos_marking\u0027], \u0027untrusted\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3PE%3D","line":326,"in_reply_to":"AAAAM3%2F%2B3TQ%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":333,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"},{"line_number":334,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027default\u0027], True)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def test_create_qos_queue_two_default_queues_fail(self):"},{"line_number":337,"context_line":"        with self.qos_queue(default\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Tg%3D","line":334,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":333,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"},{"line_number":334,"context_line":"            self.assertEquals(q[\u0027qos_queue\u0027][\u0027default\u0027], True)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"    def test_create_qos_queue_two_default_queues_fail(self):"},{"line_number":337,"context_line":"        with self.qos_queue(default\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3PA%3D","line":334,"in_reply_to":"AAAAM3%2F%2B3Tg%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":339,"context_line":"                                  \u0027name\u0027: \u0027second_default_queue\u0027,"},{"line_number":340,"context_line":"                                  \u0027default\u0027: True}}"},{"line_number":341,"context_line":"            res \u003d self._create_qos_queue(\u0027json\u0027, body)"},{"line_number":342,"context_line":"            self.assertEquals(res.status_int, 409)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_create_port_with_queue(self):"},{"line_number":345,"context_line":"        with self.qos_queue(default\u003dTrue) as q1:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Tk%3D","line":342,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                                  \u0027name\u0027: \u0027second_default_queue\u0027,"},{"line_number":340,"context_line":"                                  \u0027default\u0027: True}}"},{"line_number":341,"context_line":"            res \u003d self._create_qos_queue(\u0027json\u0027, body)"},{"line_number":342,"context_line":"            self.assertEquals(res.status_int, 409)"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_create_port_with_queue(self):"},{"line_number":345,"context_line":"        with self.qos_queue(default\u003dTrue) as q1:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3O8%3D","line":342,"in_reply_to":"AAAAM3%2F%2B3Tk%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":347,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":348,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":349,"context_line":"            net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":350,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":351,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":352,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":353,"context_line":"            with self.port(device_id\u003ddevice_id, do_delete\u003dFalse) as p:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Ts%3D","line":350,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":348,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":349,"context_line":"            net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":350,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":351,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":352,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":353,"context_line":"            with self.port(device_id\u003ddevice_id, do_delete\u003dFalse) as p:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3O4%3D","line":350,"in_reply_to":"AAAAM3%2F%2B3Ts%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":351,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":352,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":353,"context_line":"            with self.port(device_id\u003ddevice_id, do_delete\u003dFalse) as p:"},{"line_number":354,"context_line":"                self.assertEquals(len(p[\u0027port\u0027][ext_qos.QUEUE]), 36)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_shared_queue_networks(self):"},{"line_number":357,"context_line":"        with self.qos_queue(default\u003dTrue, no_delete\u003dTrue) as q1:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Tw%3D","line":354,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual)","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":352,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":353,"context_line":"            with self.port(device_id\u003ddevice_id, do_delete\u003dFalse) as p:"},{"line_number":354,"context_line":"                self.assertEquals(len(p[\u0027port\u0027][ext_qos.QUEUE]), 36)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    def test_create_shared_queue_networks(self):"},{"line_number":357,"context_line":"        with self.qos_queue(default\u003dTrue, no_delete\u003dTrue) as q1:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3O0%3D","line":354,"in_reply_to":"AAAAM3%2F%2B3Tw%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":359,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":360,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":361,"context_line":"            net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":362,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":363,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":364,"context_line":"            res \u003d self._create_network(\u0027json\u0027, \u0027net2\u0027, True,"},{"line_number":365,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3T0%3D","line":362,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":360,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":361,"context_line":"            net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":362,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":363,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":364,"context_line":"            res \u003d self._create_network(\u0027json\u0027, \u0027net2\u0027, True,"},{"line_number":365,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Ow%3D","line":362,"in_reply_to":"AAAAM3%2F%2B3T0%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":365,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":366,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":367,"context_line":"            net2 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":368,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":369,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":370,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":371,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3TM%3D","line":368,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                                       arg_list\u003d(ext_qos.QUEUE,),"},{"line_number":366,"context_line":"                                       queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":367,"context_line":"            net2 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":368,"context_line":"            self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":369,"context_line":"                              q1[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":370,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":371,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Oo%3D","line":368,"in_reply_to":"AAAAM3%2F%2B3TM%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":374,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net2[\u0027network\u0027][\u0027id\u0027],"},{"line_number":375,"context_line":"                                    device_id\u003ddevice_id)"},{"line_number":376,"context_line":"            port2 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":377,"context_line":"            self.assertEquals(port1[\u0027port\u0027][ext_qos.QUEUE],"},{"line_number":378,"context_line":"                              port2[\u0027port\u0027][ext_qos.QUEUE])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            self._delete(\u0027ports\u0027, port1[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3TI%3D","line":377,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net2[\u0027network\u0027][\u0027id\u0027],"},{"line_number":375,"context_line":"                                    device_id\u003ddevice_id)"},{"line_number":376,"context_line":"            port2 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":377,"context_line":"            self.assertEquals(port1[\u0027port\u0027][ext_qos.QUEUE],"},{"line_number":378,"context_line":"                              port2[\u0027port\u0027][ext_qos.QUEUE])"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"            self._delete(\u0027ports\u0027, port1[\u0027port\u0027][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Os%3D","line":377,"in_reply_to":"AAAAM3%2F%2B3TI%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":404,"context_line":"                                              net1[\u0027network\u0027][\u0027id\u0027])"},{"line_number":405,"context_line":"                res \u003d req.get_response(self.api)"},{"line_number":406,"context_line":"                net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":407,"context_line":"                self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":408,"context_line":"                                  new_q[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def test_update_port_adding_device_id(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3T4%3D","line":407,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                                              net1[\u0027network\u0027][\u0027id\u0027])"},{"line_number":405,"context_line":"                res \u003d req.get_response(self.api)"},{"line_number":406,"context_line":"                net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":407,"context_line":"                self.assertEquals(net1[\u0027network\u0027][ext_qos.QUEUE],"},{"line_number":408,"context_line":"                                  new_q[\u0027qos_queue\u0027][\u0027id\u0027])"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def test_update_port_adding_device_id(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Ok%3D","line":407,"in_reply_to":"AAAAM3%2F%2B3T4%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":416,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":417,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027])"},{"line_number":418,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":419,"context_line":"            self.assertEquals(port[\u0027port\u0027][ext_qos.QUEUE], None)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"            data \u003d {\u0027port\u0027: {\u0027device_id\u0027: device_id}}"},{"line_number":422,"context_line":"            req \u003d self.new_update_request(\u0027ports\u0027, data,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3UA%3D","line":419,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            device_id \u003d \"00fff4d0-e4a8-4a3a-8906-4c4cdafb59f1\""},{"line_number":417,"context_line":"            res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027])"},{"line_number":418,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":419,"context_line":"            self.assertEquals(port[\u0027port\u0027][ext_qos.QUEUE], None)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"            data \u003d {\u0027port\u0027: {\u0027device_id\u0027: device_id}}"},{"line_number":422,"context_line":"            req \u003d self.new_update_request(\u0027ports\u0027, data,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Og%3D","line":419,"in_reply_to":"AAAAM3%2F%2B3UA%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            res \u003d req.get_response(self.api)"},{"line_number":426,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":427,"context_line":"            self.assertEquals(len(port[\u0027port\u0027][ext_qos.QUEUE]), 36)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def test_get_port_with_qos_not_admin(self):"},{"line_number":430,"context_line":"        body \u003d {\u0027qos_queue\u0027: {\u0027tenant_id\u0027: \u0027not_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3UE%3D","line":427,"updated":"2013-02-16 02:42:04.000000000","message":"assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            res \u003d req.get_response(self.api)"},{"line_number":426,"context_line":"            port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":427,"context_line":"            self.assertEquals(len(port[\u0027port\u0027][ext_qos.QUEUE]), 36)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"    def test_get_port_with_qos_not_admin(self):"},{"line_number":430,"context_line":"        body \u003d {\u0027qos_queue\u0027: {\u0027tenant_id\u0027: \u0027not_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3Oc%3D","line":427,"in_reply_to":"AAAAM3%2F%2B3UE%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                   queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027],"},{"line_number":437,"context_line":"                                   tenant_id\u003d\"not_admin\")"},{"line_number":438,"context_line":"        net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":439,"context_line":"        self.assertEquals(len(net1[\u0027network\u0027][ext_qos.QUEUE]), 36)"},{"line_number":440,"context_line":"        res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027],"},{"line_number":441,"context_line":"                                tenant_id\u003d\u0027not_admin\u0027, set_context\u003dTrue)"},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3TE%3D","line":439,"updated":"2013-02-16 02:42:04.000000000","message":"self.assertEqual","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                   queue_id\u003dq1[\u0027qos_queue\u0027][\u0027id\u0027],"},{"line_number":437,"context_line":"                                   tenant_id\u003d\"not_admin\")"},{"line_number":438,"context_line":"        net1 \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":439,"context_line":"        self.assertEquals(len(net1[\u0027network\u0027][ext_qos.QUEUE]), 36)"},{"line_number":440,"context_line":"        res \u003d self._create_port(\u0027json\u0027, net1[\u0027network\u0027][\u0027id\u0027],"},{"line_number":441,"context_line":"                                tenant_id\u003d\u0027not_admin\u0027, set_context\u003dTrue)"},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3OY%3D","line":439,"in_reply_to":"AAAAM3%2F%2B3TE%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":441,"context_line":"                                tenant_id\u003d\u0027not_admin\u0027, set_context\u003dTrue)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":444,"context_line":"        self.assertEquals(ext_qos.QUEUE not in port[\u0027port\u0027], True)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_non_admin_cannot_create_queue(self):"},{"line_number":447,"context_line":"        body \u003d {\u0027qos_queue\u0027: {\u0027tenant_id\u0027: \u0027not_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3UM%3D","line":444,"updated":"2013-02-16 02:42:04.000000000","message":"assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                                tenant_id\u003d\u0027not_admin\u0027, set_context\u003dTrue)"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        port \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":444,"context_line":"        self.assertEquals(ext_qos.QUEUE not in port[\u0027port\u0027], True)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_non_admin_cannot_create_queue(self):"},{"line_number":447,"context_line":"        body \u003d {\u0027qos_queue\u0027: {\u0027tenant_id\u0027: \u0027not_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3OU%3D","line":444,"in_reply_to":"AAAAM3%2F%2B3UM%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                        port[\u0027port\u0027][ext_qos.QUEUE])"},{"line_number":466,"context_line":"            res \u003d req.get_response(self.ext_api)"},{"line_number":467,"context_line":"            queue \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":468,"context_line":"            self.assertEquals(queue[\u0027qos_queue\u0027][\u0027max\u0027], 20)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3UQ%3D","line":468,"updated":"2013-02-16 02:42:04.000000000","message":"assertEqual()","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                                        port[\u0027port\u0027][ext_qos.QUEUE])"},{"line_number":466,"context_line":"            res \u003d req.get_response(self.ext_api)"},{"line_number":467,"context_line":"            queue \u003d self.deserialize(\u0027json\u0027, res)"},{"line_number":468,"context_line":"            self.assertEquals(queue[\u0027qos_queue\u0027][\u0027max\u0027], 20)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2B3OQ%3D","line":468,"in_reply_to":"AAAAM3%2F%2B3UQ%3D","updated":"2013-02-16 03:50:29.000000000","message":"Done","commit_id":"de7d0bbd342fec240ed4bb5f505649440b381a57"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _test_create_bridge_network(self, vlan_id\u003dNone):"},{"line_number":153,"context_line":"        net_type \u003d vlan_id and \u0027vlan\u0027 or \u0027flat\u0027"},{"line_number":154,"context_line":"        name \u003d \u0027bridge_net\u0027"},{"line_number":155,"context_line":"        keys \u003d [(\u0027subnets\u0027, []), (\u0027name\u0027, name), (\u0027admin_state_up\u0027, True),"},{"line_number":156,"context_line":"                (\u0027status\u0027, \u0027ACTIVE\u0027), (\u0027shared\u0027, False),"},{"line_number":157,"context_line":"                (pnet.NETWORK_TYPE, net_type),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2ng%3D","line":154,"updated":"2013-02-16 23:33:09.000000000","message":"expected \u003d","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def _test_create_bridge_network(self, vlan_id\u003dNone):"},{"line_number":153,"context_line":"        net_type \u003d vlan_id and \u0027vlan\u0027 or \u0027flat\u0027"},{"line_number":154,"context_line":"        name \u003d \u0027bridge_net\u0027"},{"line_number":155,"context_line":"        keys \u003d [(\u0027subnets\u0027, []), (\u0027name\u0027, name), (\u0027admin_state_up\u0027, True),"},{"line_number":156,"context_line":"                (\u0027status\u0027, \u0027ACTIVE\u0027), (\u0027shared\u0027, False),"},{"line_number":157,"context_line":"                (pnet.NETWORK_TYPE, net_type),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2fo%3D","line":154,"in_reply_to":"AAAAM3%2F%2B2ng%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":166,"context_line":"                          arg_list\u003d(pnet.NETWORK_TYPE,"},{"line_number":167,"context_line":"                                    pnet.PHYSICAL_NETWORK,"},{"line_number":168,"context_line":"                                    pnet.SEGMENTATION_ID)) as net:"},{"line_number":169,"context_line":"            for k, v in keys:"},{"line_number":170,"context_line":"                self.assertEqual(net[\u0027network\u0027][k], v)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_create_bridge_network(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2nk%3D","line":169,"updated":"2013-02-16 23:33:09.000000000","message":"Could just compare the dicts directly:\n\nself.assertEqual(net, expected)","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":166,"context_line":"                          arg_list\u003d(pnet.NETWORK_TYPE,"},{"line_number":167,"context_line":"                                    pnet.PHYSICAL_NETWORK,"},{"line_number":168,"context_line":"                                    pnet.SEGMENTATION_ID)) as net:"},{"line_number":169,"context_line":"            for k, v in keys:"},{"line_number":170,"context_line":"                self.assertEqual(net[\u0027network\u0027][k], v)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_create_bridge_network(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2cg%3D","line":169,"in_reply_to":"AAAAM3%2F%2B2fk%3D","updated":"2013-02-17 02:15:37.000000000","message":"Ok.. That makes sense.","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                          arg_list\u003d(pnet.NETWORK_TYPE,"},{"line_number":167,"context_line":"                                    pnet.PHYSICAL_NETWORK,"},{"line_number":168,"context_line":"                                    pnet.SEGMENTATION_ID)) as net:"},{"line_number":169,"context_line":"            for k, v in keys:"},{"line_number":170,"context_line":"                self.assertEqual(net[\u0027network\u0027][k], v)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def test_create_bridge_network(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2fk%3D","line":169,"in_reply_to":"AAAAM3%2F%2B2nk%3D","updated":"2013-02-17 01:26:58.000000000","message":"Not quite, I\u0027d have to change the expected structure to be a dict. This is outside of my patch though. Leaving for now.","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":329,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027min\u0027], 34)"},{"line_number":330,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027max\u0027], 44)"},{"line_number":331,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027qos_marking\u0027], \u0027untrusted\u0027)"},{"line_number":332,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027default\u0027], False)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":335,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2nc%3D","line":332,"updated":"2013-02-16 23:33:09.000000000","message":"Sorry I missed the last time.\n\nself.assertFalse(q[\u0027qos_queue\u0027][\u0027default\u0027])","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":329,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027min\u0027], 34)"},{"line_number":330,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027max\u0027], 44)"},{"line_number":331,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027qos_marking\u0027], \u0027untrusted\u0027)"},{"line_number":332,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027default\u0027], False)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":335,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2fg%3D","line":332,"in_reply_to":"AAAAM3%2F%2B2nc%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":335,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"},{"line_number":336,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027default\u0027], True)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_create_qos_queue_two_default_queues_fail(self):"},{"line_number":339,"context_line":"        with self.qos_queue(default\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2nU%3D","line":336,"updated":"2013-02-16 23:33:09.000000000","message":"self.assertTrue(q[\u0027qos_queue\u0027][\u0027default\u0027])","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    def test_create_qos_queue_default(self):"},{"line_number":335,"context_line":"        with self.qos_queue(default\u003dTrue) as q:"},{"line_number":336,"context_line":"            self.assertEqual(q[\u0027qos_queue\u0027][\u0027default\u0027], True)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_create_qos_queue_two_default_queues_fail(self):"},{"line_number":339,"context_line":"        with self.qos_queue(default\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B2fc%3D","line":336,"in_reply_to":"AAAAM3%2F%2B2nU%3D","updated":"2013-02-17 01:26:58.000000000","message":"Done","commit_id":"61967b729f1f93640c91f832f40c4814c9f17466"}],"quantum/tests/unit/test_db_plugin.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"956085995b9f286751aeb4b402f2f59cecc0d86c","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                                              data, port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":879,"context_line":"                res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.api))"},{"line_number":880,"context_line":"                print res"},{"line_number":881,"context_line":"                raise TypeError"},{"line_number":882,"context_line":"                self.assertEqual(res[\u0027port\u0027][\u0027admin_state_up\u0027],"},{"line_number":883,"context_line":"                                 data[\u0027port\u0027][\u0027admin_state_up\u0027])"},{"line_number":884,"context_line":"                self.assertEqual(res[\u0027port\u0027][\u0027fixed_ips\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FFqM%3D","line":881,"updated":"2013-02-07 14:23:01.000000000","message":"you don\u0027t really want these two lines :)","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"e6dc5300bf881281d0986f5dc9612b2cf2e056e6","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                                              data, port[\u0027port\u0027][\u0027id\u0027])"},{"line_number":879,"context_line":"                res \u003d self.deserialize(\u0027json\u0027, req.get_response(self.api))"},{"line_number":880,"context_line":"                print res"},{"line_number":881,"context_line":"                raise TypeError"},{"line_number":882,"context_line":"                self.assertEqual(res[\u0027port\u0027][\u0027admin_state_up\u0027],"},{"line_number":883,"context_line":"                                 data[\u0027port\u0027][\u0027admin_state_up\u0027])"},{"line_number":884,"context_line":"                self.assertEqual(res[\u0027port\u0027][\u0027fixed_ips\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BEg%3D","line":881,"in_reply_to":"AAAAM3%2F%2FFqM%3D","updated":"2013-02-13 22:46:00.000000000","message":"Are you sure?","commit_id":"0faa7ed02c620ebefd170a4fd910cbc1e03efe82"}]}
