)]}'
{"nova/network/linux_net.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0eb09f3430554b263dbce743a21c11193441a5c4","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"                utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027delete\u0027, dev1_name,"},{"line_number":1008,"context_line":"                              run_as_root\u003dTrue, check_exit_code\u003d[0, 2, 254])"},{"line_number":1009,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":1010,"context_line":"                LOG.exception(\"Error clearing stale veth %s\" % dev)"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027add\u0027, dev1_name, \u0027type\u0027, \u0027veth\u0027, \u0027peer\u0027,"},{"line_number":1013,"context_line":"                  \u0027name\u0027, dev2_name, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fj9E%3D","line":1010,"updated":"2012-08-31 00:04:50.000000000","message":"Minor nit (can be ignored): we actually don\u0027t know the interface which failed to delete is a veth","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"fcaa05a8c8c039e307c77a909bfd331bcf940c46","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"                utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027delete\u0027, dev1_name,"},{"line_number":1008,"context_line":"                              run_as_root\u003dTrue, check_exit_code\u003d[0, 2, 254])"},{"line_number":1009,"context_line":"            except exception.ProcessExecutionError:"},{"line_number":1010,"context_line":"                LOG.exception(\"Error clearing stale veth %s\" % dev)"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"    utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027add\u0027, dev1_name, \u0027type\u0027, \u0027veth\u0027, \u0027peer\u0027,"},{"line_number":1013,"context_line":"                  \u0027name\u0027, dev2_name, run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fjz4%3D","line":1010,"in_reply_to":"AAAALH%2F%2Fj9E%3D","updated":"2012-08-31 04:55:10.000000000","message":"true, though given our funky naming convention, seems highly likely.","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"}],"nova/network/quantumv2/api.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"ec0ef3a1f622ea1d4b26f0c641fc4ec6dec1d305","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return [{\u0027instance_uuid\u0027: port[\u0027device_id\u0027]} for port in ports"},{"line_number":227,"context_line":"                if port[\u0027device_id\u0027]]"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def trigger_security_group_members_refresh(self, instance_ref):"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # used to avoid circular import"},{"line_number":232,"context_line":"        if not self.security_group_api:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FktM%3D","line":229,"updated":"2012-08-30 05:08:32.000000000","message":"should pass original context. You can use context.elevated() if you need an admin context. Otherwise you will lose the request_id for this stuff.","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2b3ee7157947bf23068b83731f48bfd4bd1ac842","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return [{\u0027instance_uuid\u0027: port[\u0027device_id\u0027]} for port in ports"},{"line_number":227,"context_line":"                if port[\u0027device_id\u0027]]"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    def trigger_security_group_members_refresh(self, instance_ref):"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # used to avoid circular import"},{"line_number":232,"context_line":"        if not self.security_group_api:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fksc%3D","line":229,"in_reply_to":"AAAALH%2F%2FktM%3D","updated":"2012-08-30 05:37:01.000000000","message":"Done","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"3201a4c3a83812a646f84e49985dde1cb954917e","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        # used to avoid circular import"},{"line_number":232,"context_line":"        if not self.security_group_api:"},{"line_number":233,"context_line":"            from nova.compute import api as compute_api"},{"line_number":234,"context_line":"            self.security_group_api \u003d compute_api.SecurityGroupAPI()"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        admin_context \u003d context.get_admin_context()"},{"line_number":237,"context_line":"        group_ids \u003d [group[\u0027id\u0027] for group in instance_ref[\u0027security_groups\u0027]]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fkt0%3D","line":234,"updated":"2012-08-30 04:42:59.000000000","message":"In java, I have to synchronize it in possible competing executing env. What is the behaviour in python if we have multiple threads competing for this if branch?","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2b3ee7157947bf23068b83731f48bfd4bd1ac842","unresolved":false,"context_lines":[{"line_number":231,"context_line":"        # used to avoid circular import"},{"line_number":232,"context_line":"        if not self.security_group_api:"},{"line_number":233,"context_line":"            from nova.compute import api as compute_api"},{"line_number":234,"context_line":"            self.security_group_api \u003d compute_api.SecurityGroupAPI()"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        admin_context \u003d context.get_admin_context()"},{"line_number":237,"context_line":"        group_ids \u003d [group[\u0027id\u0027] for group in instance_ref[\u0027security_groups\u0027]]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fksk%3D","line":234,"in_reply_to":"AAAALH%2F%2Fkt0%3D","updated":"2012-08-30 05:37:01.000000000","message":"I\u0027m happy for suggestion on how to change this, as in general I thought it was a bit dirty, but couldn\u0027t think of a better way.\n\nis there true concurrency here?  also, is there a negative effect to the race, other than creating the object twice?","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e6557bdf1b91c0936904f17a2af25cf61becb13","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    def trigger_security_group_members_refresh(self, context, instance_ref):"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        # used to avoid circular import"},{"line_number":231,"context_line":"        if not self.security_group_api:"},{"line_number":232,"context_line":"            from nova.compute import api as compute_api"},{"line_number":233,"context_line":"            self.security_group_api \u003d compute_api.SecurityGroupAPI()"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fi3c%3D","line":231,"updated":"2012-08-31 23:43:46.000000000","message":"(Suggestion only) Consider encapsulating instantiation of the attribute using a lazily-loaded property:\n\n@property\ndef security_group_api(self):\n  if not hasattr(self, \u0027_security_group_api\u0027):\n    from nova.compute import api as compute_api\n    self._security_group_api \u003d compute_api.SecurityGroupAPI()\n  return self._security_group_api\n\nSuch a change suggests removing line 59.","commit_id":"5a470f89b6a508d578b89a1687d327efbc834346"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e6557bdf1b91c0936904f17a2af25cf61becb13","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        data \u003d quantumv2.get_client(context).list_subnets(**search_opts)"},{"line_number":361,"context_line":"        ipam_subnets \u003d data.get(\u0027subnets\u0027, [])"},{"line_number":362,"context_line":"        subnets \u003d []"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"        for subnet in ipam_subnets:"},{"line_number":365,"context_line":"            subnet_dict \u003d {\u0027cidr\u0027: subnet[\u0027cidr\u0027],"},{"line_number":366,"context_line":"                           \u0027gateway\u0027: network_model.IP("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fi3Y%3D","line":363,"updated":"2012-08-31 23:43:46.000000000","message":"(Suggestion only) Unrelated whitespace change.","commit_id":"5a470f89b6a508d578b89a1687d327efbc834346"}],"nova/virt/libvirt/vif.py":[{"author":{"_account_id":67,"name":"Vish Ishaya","email":"vishvananda@gmail.com","username":"vishvananda"},"change_message_id":"ec0ef3a1f622ea1d4b26f0c641fc4ec6dec1d305","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    is to be able to use OVS-based Quantum plugins while at the same"},{"line_number":189,"context_line":"    time using iptables-based filtering, which requires that vifs be"},{"line_number":190,"context_line":"    plugged into a linux bridge, not OVS.  IPtables filtering is useful for"},{"line_number":191,"context_line":"    in particular for Nova security groups.\"\"\""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def get_br_name(self, iface_id):"},{"line_number":194,"context_line":"        return \"br-\" + iface_id[0:11]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FktQ%3D","line":191,"updated":"2012-08-30 05:08:32.000000000","message":"minor point but none of these docstrings follow hacking. Should be:\n  \"\"\"One line summarry\n  \n  Detailed ...\n  \"\"\"","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"2b3ee7157947bf23068b83731f48bfd4bd1ac842","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    is to be able to use OVS-based Quantum plugins while at the same"},{"line_number":189,"context_line":"    time using iptables-based filtering, which requires that vifs be"},{"line_number":190,"context_line":"    plugged into a linux bridge, not OVS.  IPtables filtering is useful for"},{"line_number":191,"context_line":"    in particular for Nova security groups.\"\"\""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def get_br_name(self, iface_id):"},{"line_number":194,"context_line":"        return \"br-\" + iface_id[0:11]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FksY%3D","line":191,"in_reply_to":"AAAALH%2F%2FktQ%3D","updated":"2012-08-30 05:37:01.000000000","message":"Done","commit_id":"25e23db154cf87301c6b2e88db5d3d2f38c0716e"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0eb09f3430554b263dbce743a21c11193441a5c4","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, dev,"},{"line_number":134,"context_line":"                \"external-ids:attached-mac\u003d%s\" % mac,"},{"line_number":135,"context_line":"                \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, dev,"},{"line_number":136,"context_line":"                \"external-ids:vm-uuid\u003d%s\" % instance_id,"},{"line_number":137,"context_line":"                run_as_root\u003dTrue)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def delete_ovs_vif_port(self, dev):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fj8U%3D","line":136,"updated":"2012-08-31 00:04:50.000000000","message":"Probably the syntax with a single set and comma-separate external-ids setting will work.","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"fcaa05a8c8c039e307c77a909bfd331bcf940c46","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, dev,"},{"line_number":134,"context_line":"                \"external-ids:attached-mac\u003d%s\" % mac,"},{"line_number":135,"context_line":"                \u0027--\u0027, \u0027set\u0027, \u0027Interface\u0027, dev,"},{"line_number":136,"context_line":"                \"external-ids:vm-uuid\u003d%s\" % instance_id,"},{"line_number":137,"context_line":"                run_as_root\u003dTrue)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def delete_ovs_vif_port(self, dev):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fjzg%3D","line":136,"in_reply_to":"AAAALH%2F%2Fj8U%3D","updated":"2012-08-31 04:55:10.000000000","message":"I\u0027m not familiar with using comma separated values here... some basic testing suggests that you can separate them by spaces.  Seems like it cuts out a few lines of code, so I\u0027ll do it.","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0eb09f3430554b263dbce743a21c11193441a5c4","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    \"\"\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def get_br_name(self, iface_id):"},{"line_number":196,"context_line":"        return \"qbr\" + iface_id[0:11]"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def get_veth_pair_names(self, iface_id):"},{"line_number":199,"context_line":"        prefix \u003d iface_id[0:11]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fj8M%3D","line":196,"updated":"2012-08-31 00:04:50.000000000","message":"\"11\" might a constant, e.g.: Q_IFLEN","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0eb09f3430554b263dbce743a21c11193441a5c4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        network, mapping \u003d vif"},{"line_number":212,"context_line":"        iface_id \u003d mapping[\u0027vif_uuid\u0027]"},{"line_number":213,"context_line":"        br_name \u003d self.get_br_name(iface_id)"},{"line_number":214,"context_line":"        v1_name, v2_name \u003d self.get_veth_pair_names(iface_id)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        linux_net._create_veth_pair(v1_name, v2_name)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fj8E%3D","line":214,"updated":"2012-08-31 00:04:50.000000000","message":"Perhaps we can save a call to get_veth_pair_names:\n\nv1_name, v2_name \u003d [\"qv%s%s\" % (x, iface_id) for x in (\u0027b\u0027,\u0027o\u0027)]","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"fcaa05a8c8c039e307c77a909bfd331bcf940c46","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        network, mapping \u003d vif"},{"line_number":212,"context_line":"        iface_id \u003d mapping[\u0027vif_uuid\u0027]"},{"line_number":213,"context_line":"        br_name \u003d self.get_br_name(iface_id)"},{"line_number":214,"context_line":"        v1_name, v2_name \u003d self.get_veth_pair_names(iface_id)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        linux_net._create_veth_pair(v1_name, v2_name)"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fjz0%3D","line":214,"in_reply_to":"AAAALH%2F%2Fj8E%3D","updated":"2012-08-31 04:55:10.000000000","message":"i actually do this b/c the logic is needed twice, both in plug and unplug, so it seemed better to have it just in one place, so it was easy to keep consistent across plug/unplug.","commit_id":"15959e76b1a4a238394c456e090f804a124bd2a8"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e6557bdf1b91c0936904f17a2af25cf61becb13","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def delete_ovs_vif_port(self, dev):"},{"line_number":139,"context_line":"        utils.execute(\u0027ovs-vsctl\u0027, \u0027del-port\u0027, FLAGS.libvirt_ovs_bridge,"},{"line_number":140,"context_line":"                      dev, run_as_root\u003dTrue)"},{"line_number":141,"context_line":"        utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027delete\u0027, dev, run_as_root\u003dTrue)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def plug(self, instance, vif):"},{"line_number":144,"context_line":"        network, mapping \u003d vif"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fi3Q%3D","line":141,"updated":"2012-08-31 23:43:46.000000000","message":"(Suggestion only) Consider deleting the veth pair separately.  The two operations are logically distinct and the method name doesn\u0027t suggest that the veth pair would be deleted.","commit_id":"5a470f89b6a508d578b89a1687d327efbc834346"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"55e9606351a55a866d130ad3957a1128990705ce","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    def delete_ovs_vif_port(self, dev):"},{"line_number":139,"context_line":"        utils.execute(\u0027ovs-vsctl\u0027, \u0027del-port\u0027, FLAGS.libvirt_ovs_bridge,"},{"line_number":140,"context_line":"                      dev, run_as_root\u003dTrue)"},{"line_number":141,"context_line":"        utils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027delete\u0027, dev, run_as_root\u003dTrue)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def plug(self, instance, vif):"},{"line_number":144,"context_line":"        network, mapping \u003d vif"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fgg0%3D","line":141,"in_reply_to":"AAAALH%2F%2Fi3Q%3D","updated":"2012-09-05 15:54:34.000000000","message":"I\u0027d rather we just rename the method to be explicit, personally","commit_id":"5a470f89b6a508d578b89a1687d327efbc834346"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4e6557bdf1b91c0936904f17a2af25cf61becb13","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    Enables the use of OVS-based Quantum plugins while at the same"},{"line_number":189,"context_line":"    time using iptables-based filtering, which requires that vifs be"},{"line_number":190,"context_line":"    plugged into a linux bridge, not OVS.  IPtables filtering is useful for"},{"line_number":191,"context_line":"    in particular for Nova security groups."},{"line_number":192,"context_line":"    \"\"\""},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fi3U%3D","line":190,"updated":"2012-08-31 23:43:46.000000000","message":"(Suggestion only) is useful for in particular \u003d\u003e is useful for implementing support","commit_id":"5a470f89b6a508d578b89a1687d327efbc834346"}]}
