)]}'
{"nova/network/quantumv2/api.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"96bb1e78d2fd1eda8082a95b8e09cdd80fa7886a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import re"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from nova.db import base"},{"line_number":22,"context_line":"from nova import exception"},{"line_number":23,"context_line":"from nova import flags"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FQBo%3D","line":20,"updated":"2012-09-28 18:17:26.000000000","message":"you can remove this, see below","commit_id":"dd3cb5f23c25218a99b4bc1066104b432370ae5d"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"96bb1e78d2fd1eda8082a95b8e09cdd80fa7886a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from nova.network import quantumv2"},{"line_number":27,"context_line":"from nova.openstack.common import cfg"},{"line_number":28,"context_line":"from nova.openstack.common import excutils"},{"line_number":29,"context_line":"from nova.openstack.common import log as logging"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"quantum_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FQBk%3D","line":29,"updated":"2012-09-28 18:17:26.000000000","message":"from nova import utils","commit_id":"dd3cb5f23c25218a99b4bc1066104b432370ae5d"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"96bb1e78d2fd1eda8082a95b8e09cdd80fa7886a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"HEX_ELEM \u003d \u0027[0-9A-Fa-f]\u0027"},{"line_number":61,"context_line":"UUID_PATTERN \u003d \u0027-\u0027.join([HEX_ELEM + \u0027{8}\u0027, HEX_ELEM + \u0027{4}\u0027,"},{"line_number":62,"context_line":"                         HEX_ELEM + \u0027{4}\u0027, HEX_ELEM + \u0027{4}\u0027,"},{"line_number":63,"context_line":"                         HEX_ELEM + \u0027{12}\u0027])"},{"line_number":64,"context_line":"NET_EXTERNAL \u003d \u0027router:external\u0027"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FQBs%3D","line":63,"updated":"2012-09-28 18:17:26.000000000","message":"you can remove this, see below","commit_id":"dd3cb5f23c25218a99b4bc1066104b432370ae5d"},{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"96bb1e78d2fd1eda8082a95b8e09cdd80fa7886a","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    def _get_floating_ip_pool_id_by_name_or_id(self, client, name_or_id):"},{"line_number":432,"context_line":"        search_opts \u003d {NET_EXTERNAL: True, \u0027fields\u0027: \u0027id\u0027}"},{"line_number":433,"context_line":"        if re.match(UUID_PATTERN, name_or_id):"},{"line_number":434,"context_line":"            search_opts.update({\u0027id\u0027: name_or_id})"},{"line_number":435,"context_line":"        else:"},{"line_number":436,"context_line":"            search_opts.update({\u0027name\u0027: name_or_id})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FQBw%3D","line":433,"updated":"2012-09-28 18:17:26.000000000","message":"rather than doing a custom match:\n\nif utils.is_uuid_like(name_or_id):","commit_id":"dd3cb5f23c25218a99b4bc1066104b432370ae5d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"7a156ef6cfce86c17b6da0621c815f3a22261ddb","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def _setup_ports_dict(self, client, project_id\u003dNone):"},{"line_number":347,"context_line":"        search_opts \u003d {\u0027tenant_id\u0027: project_id} if project_id else None"},{"line_number":348,"context_line":"        ports \u003d client.list_ports(**search_opts)[\u0027ports\u0027]"},{"line_number":349,"context_line":"        return dict([(p[\u0027id\u0027], p) for p in ports])"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def get_floating_ip(self, context, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FNdM%3D","line":348,"updated":"2012-10-04 17:32:48.000000000","message":"If project_id is not given when calling this method, then search_opts will be set to None.  When it is then passed to list_ports, an error will be raised.  I suggest either dropping the \"\u003dNone\" from the argument and the ternary from the \"search_opts \u003d\" line or changing the \"else\" clause of the ternary to \"{}\".","commit_id":"b08acdce327712b8600a7d7f3f5f1cc57f7046a2"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"a8281ad04629e6b0f34a2046228238c68ef90966","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _get_port_id_by_fixed_address(self, client,"},{"line_number":270,"context_line":"                                      instance, address):"},{"line_number":271,"context_line":"        # Search a target port from fixed_address and instance"},{"line_number":272,"context_line":"        zone \u003d \u0027compute:%s\u0027 % FLAGS.node_availability_zone"},{"line_number":273,"context_line":"        search_opts \u003d {\u0027device_id\u0027: instance[\u0027uuid\u0027],"},{"line_number":274,"context_line":"                       \u0027device_owner\u0027: zone}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLhw%3D","line":271,"updated":"2012-10-08 22:12:06.000000000","message":"This comment isn\u0027t really all that useful","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3b570e8beb3b9c9014850d2c2f13ce67c46bf348","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _get_port_id_by_fixed_address(self, client,"},{"line_number":270,"context_line":"                                      instance, address):"},{"line_number":271,"context_line":"        # Search a target port from fixed_address and instance"},{"line_number":272,"context_line":"        zone \u003d \u0027compute:%s\u0027 % FLAGS.node_availability_zone"},{"line_number":273,"context_line":"        search_opts \u003d {\u0027device_id\u0027: instance[\u0027uuid\u0027],"},{"line_number":274,"context_line":"                       \u0027device_owner\u0027: zone}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLU0%3D","line":271,"in_reply_to":"AAAALH%2F%2FLhw%3D","updated":"2012-10-09 10:25:33.000000000","message":"Removed.","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"a8281ad04629e6b0f34a2046228238c68ef90966","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":276,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":277,"context_line":"        port_id \u003d None"},{"line_number":278,"context_line":"        for p in ports:"},{"line_number":279,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":280,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":281,"context_line":"                    port_id \u003d p[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLiY%3D","line":278,"updated":"2012-10-08 22:12:06.000000000","message":"This seems like it has the potential to be a supremely expensive call","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3b570e8beb3b9c9014850d2c2f13ce67c46bf348","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        data \u003d client.list_ports(**search_opts)"},{"line_number":276,"context_line":"        ports \u003d data[\u0027ports\u0027]"},{"line_number":277,"context_line":"        port_id \u003d None"},{"line_number":278,"context_line":"        for p in ports:"},{"line_number":279,"context_line":"            for ip in p[\u0027fixed_ips\u0027]:"},{"line_number":280,"context_line":"                if ip[\u0027ip_address\u0027] \u003d\u003d address:"},{"line_number":281,"context_line":"                    port_id \u003d p[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLTk%3D","line":278,"in_reply_to":"AAAALH%2F%2FLiY%3D","updated":"2012-10-09 10:25:33.000000000","message":"Hmm...The theoretical maximum loop count is (# of ports of the instance) * (# of subnets associated with the network).\n# of ports for a tenant is limited by quantum quota.\nIt comes from the fact nova identifies a VIF with an IP address.","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"a8281ad04629e6b0f34a2046228238c68ef90966","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        # In Quantum v2 API fixed_ip_address and instance uuid"},{"line_number":381,"context_line":"        # (\u003d device_id) are known here, so pass it as a result."},{"line_number":382,"context_line":"        result[\u0027fixed_ip\u0027] \u003d {\u0027address\u0027: fip[\u0027fixed_ip_address\u0027]}"},{"line_number":383,"context_line":"        # \u0027intance_uuid\u0027 is stored in device_id attribute of port object."},{"line_number":384,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":385,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":386,"context_line":"            result[\u0027instance\u0027] \u003d {\u0027uuid\u0027: instance_uuid}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLh4%3D","line":383,"updated":"2012-10-08 22:12:06.000000000","message":"Typo \"intance_uuid,\" and also I feel comfortable saying the code following the comment is fairly self-explanatory","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3b570e8beb3b9c9014850d2c2f13ce67c46bf348","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        # In Quantum v2 API fixed_ip_address and instance uuid"},{"line_number":381,"context_line":"        # (\u003d device_id) are known here, so pass it as a result."},{"line_number":382,"context_line":"        result[\u0027fixed_ip\u0027] \u003d {\u0027address\u0027: fip[\u0027fixed_ip_address\u0027]}"},{"line_number":383,"context_line":"        # \u0027intance_uuid\u0027 is stored in device_id attribute of port object."},{"line_number":384,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":385,"context_line":"            instance_uuid \u003d port_dict[fip[\u0027port_id\u0027]][\u0027device_id\u0027]"},{"line_number":386,"context_line":"            result[\u0027instance\u0027] \u003d {\u0027uuid\u0027: instance_uuid}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLT4%3D","line":383,"in_reply_to":"AAAALH%2F%2FLh4%3D","updated":"2012-10-09 10:25:33.000000000","message":"This comment is not so helpful and I removed in the next patch.","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"a8281ad04629e6b0f34a2046228238c68ef90966","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        \"\"\"Add a floating ip to a project from a pool.\"\"\""},{"line_number":446,"context_line":"        client \u003d quantumv2.get_client(context)"},{"line_number":447,"context_line":"        # FLAGS.default_floating_pool must be either name or id"},{"line_number":448,"context_line":"        # of a network for a floating IP pool."},{"line_number":449,"context_line":"        pool \u003d pool or FLAGS.default_floating_pool"},{"line_number":450,"context_line":"        pool_id \u003d self._get_floating_ip_pool_id_by_name_or_id(client, pool)"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLh8%3D","line":448,"updated":"2012-10-08 22:12:06.000000000","message":"Comments like this aren\u0027t all too helpful. The name of the method being called explains that well enough.","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3b570e8beb3b9c9014850d2c2f13ce67c46bf348","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        \"\"\"Add a floating ip to a project from a pool.\"\"\""},{"line_number":446,"context_line":"        client \u003d quantumv2.get_client(context)"},{"line_number":447,"context_line":"        # FLAGS.default_floating_pool must be either name or id"},{"line_number":448,"context_line":"        # of a network for a floating IP pool."},{"line_number":449,"context_line":"        pool \u003d pool or FLAGS.default_floating_pool"},{"line_number":450,"context_line":"        pool_id \u003d self._get_floating_ip_pool_id_by_name_or_id(client, pool)"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALH%2F%2FLT8%3D","line":448,"in_reply_to":"AAAALH%2F%2FLh8%3D","updated":"2012-10-09 10:25:33.000000000","message":"Agreed. I removed it in the next patch.","commit_id":"10aa8d6effe246a146be7323203c8e33045dec25"}]}
