)]}'
{"neutron/plugins/ofagent/README":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, the most functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_96008404","line":10,"updated":"2014-08-11 12:32:15.000000000","message":"*most functionalities","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6e6a9543ce2a52da78e88a46da458ded445bee9d","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, the most functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_445636ce","line":10,"in_reply_to":"baada198_39e5ebda","updated":"2014-08-12 09:04:43.000000000","message":"IMO, \n\n\"After Icehouse, most functionalities have been ...\" or\n\n\"After Icehouse, most of the functionalities have been ...\"\n\nsounds better than:\n\n\"After Icehouse, the most functionalities have been...\"","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"e3009ad8182aee4f4a297740ae7c58a5370c38f7","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, the most functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_62e84716","line":10,"in_reply_to":"baada198_445636ce","updated":"2014-08-12 22:01:06.000000000","message":"Done","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, the most functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":4,"id":"baada198_39e5ebda","line":10,"in_reply_to":"baada198_96008404","updated":"2014-08-11 12:51:01.000000000","message":"can you explain?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7f7929f2d73b3473733ae482b50d7db3b32e5430","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, most of the functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":13,"id":"fa98f980_adedd68d","line":10,"updated":"2014-08-31 18:22:15.000000000","message":"Nit: s/functionalities/functionality/","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"55263f0dd669094ff4a955d24d79e0aab0ce1b3d","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# -- Notes for updating from Icehouce"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"After Icehouce, most of the functionalities have been folded into"},{"line_number":11,"context_line":"a single bridge, the integration bridge.  (aka. br-int)"},{"line_number":12,"context_line":"The integration bridge is the only bridge which would have an"},{"line_number":13,"context_line":"OpenFlow connection to the embedded controller in ofagent now."}],"source_content_type":"application/octet-stream","patch_set":13,"id":"fa98f980_9e175a51","line":10,"in_reply_to":"fa98f980_adedd68d","updated":"2014-09-01 00:02:20.000000000","message":"Done","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"}],"neutron/plugins/ofagent/agent/arp_lib.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f82fdb46340712331bfb2d09ef6b918f0a76745","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            return"},{"line_number":145,"context_line":"        ofp \u003d datapath.ofproto"},{"line_number":146,"context_line":"        port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":147,"context_line":"        metadata \u003d msg.match.get(\u0027metadata\u0027)"},{"line_number":148,"context_line":"        pkt \u003d packet.Packet(msg.data)"},{"line_number":149,"context_line":"        LOG.info(_(\"packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s\"),"},{"line_number":150,"context_line":"                 {\u0027dpid\u0027: dpid_lib.dpid_to_str(datapath.id),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_7d149de8","line":147,"updated":"2014-08-22 09:35:12.000000000","message":"\"metadata\" is a little bit confusing. Normally, I would expect metadata to be a dict, in this case, it is an int.\n\nquestion: is metadata introduced in this patch? If so, can\u0027t it be renamed to something less confusing? If not, I guess there\u0027s nothing to do about it. :)","commit_id":"e0f462dd52e806323a3933527009201759176fa7"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"25228ef29800bfe2f568a248e9e9cafc6aa29620","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            return"},{"line_number":145,"context_line":"        ofp \u003d datapath.ofproto"},{"line_number":146,"context_line":"        port \u003d msg.match[\u0027in_port\u0027]"},{"line_number":147,"context_line":"        metadata \u003d msg.match.get(\u0027metadata\u0027)"},{"line_number":148,"context_line":"        pkt \u003d packet.Packet(msg.data)"},{"line_number":149,"context_line":"        LOG.info(_(\"packet-in dpid %(dpid)s in_port %(port)s pkt %(pkt)s\"),"},{"line_number":150,"context_line":"                 {\u0027dpid\u0027: dpid_lib.dpid_to_str(datapath.id),"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_7909f82b","line":147,"in_reply_to":"1abeadc6_7d149de8","updated":"2014-08-31 10:57:53.000000000","message":"\"metadata\" is an openflow term.\nit\u0027s spec-wise 64-bit integer.","commit_id":"e0f462dd52e806323a3933527009201759176fa7"}],"neutron/plugins/ofagent/agent/flows.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def provision_tenant_physnet(self, network_type, network,"},{"line_number":250,"context_line":"                                 segmentation_id, phys_port):"},{"line_number":251,"context_line":"        \"\"\"for vlan and flat.\"\"\""},{"line_number":252,"context_line":"        assert(network_type in [p_const.TYPE_VLAN, p_const.TYPE_FLAT])"},{"line_number":253,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        # inbound"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_967b24be","line":252,"updated":"2014-08-11 12:32:15.000000000","message":"are there any chances that network_type is a GRE and also, why assert? Can\u0027t it be something less dangerous?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    def provision_tenant_physnet(self, network_type, network,"},{"line_number":250,"context_line":"                                 segmentation_id, phys_port):"},{"line_number":251,"context_line":"        \"\"\"for vlan and flat.\"\"\""},{"line_number":252,"context_line":"        assert(network_type in [p_const.TYPE_VLAN, p_const.TYPE_FLAT])"},{"line_number":253,"context_line":"        (dp, ofp, ofpp) \u003d self._get_dp()"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        # inbound"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d9022f71","line":252,"in_reply_to":"baada198_967b24be","updated":"2014-08-11 12:51:01.000000000","message":"this method is intended to be called for VLAN or FLAT.  no GRE.\nthe assertion is to make it clear.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7f7929f2d73b3473733ae482b50d7db3b32e5430","unresolved":false,"context_lines":[{"line_number":31,"context_line":" uuu: unicast l2 address"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* tables (in order)"},{"line_number":34,"context_line":"    CHECK_IN_PORT"},{"line_number":35,"context_line":"    TUNNEL_IN+N"},{"line_number":36,"context_line":"    PHYS_IN"},{"line_number":37,"context_line":"    LOCAL_IN"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_6d9a0e16","line":34,"updated":"2014-08-31 18:22:15.000000000","message":"Minor nit: It would be helpful to have tunnel numbers here, even though I suspect they are defined somewhere else.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7054feeaed1e6d9488a8240e80f608ca609d955f","unresolved":false,"context_lines":[{"line_number":31,"context_line":" uuu: unicast l2 address"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* tables (in order)"},{"line_number":34,"context_line":"    CHECK_IN_PORT"},{"line_number":35,"context_line":"    TUNNEL_IN+N"},{"line_number":36,"context_line":"    PHYS_IN"},{"line_number":37,"context_line":"    LOCAL_IN"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_2f4633c0","line":34,"in_reply_to":"fa98f980_1e036a10","updated":"2014-09-01 05:00:16.000000000","message":"Got it.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"55263f0dd669094ff4a955d24d79e0aab0ce1b3d","unresolved":false,"context_lines":[{"line_number":31,"context_line":" uuu: unicast l2 address"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"* tables (in order)"},{"line_number":34,"context_line":"    CHECK_IN_PORT"},{"line_number":35,"context_line":"    TUNNEL_IN+N"},{"line_number":36,"context_line":"    PHYS_IN"},{"line_number":37,"context_line":"    LOCAL_IN"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_1e036a10","line":34,"in_reply_to":"fa98f980_6d9a0e16","updated":"2014-09-01 00:02:20.000000000","message":"what do you mean by tunnel numbers?\n\nif you mean table ids, they are defined in tables.py.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7f7929f2d73b3473733ae482b50d7db3b32e5430","unresolved":false,"context_lines":[{"line_number":144,"context_line":"   default drop"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* references"},{"line_number":147,"context_line":"** OVS agent https://wiki.openstack.org/wiki/Ovs-flow-logic"},{"line_number":148,"context_line":"*** we use metadata instead of \"internal\" VLANs"},{"line_number":149,"context_line":"*** we don\u0027t want to use NX learn action"},{"line_number":150,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_ada4f657","line":147,"updated":"2014-08-31 18:22:15.000000000","message":"The above was super helpful when looking at this code, thanks for that!","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"}],"neutron/plugins/ofagent/agent/ofa_neutron_agent.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class LocalVLANMapping:"},{"line_number":61,"context_line":"    def __init__(self, vlan, network_type, physical_network, segmentation_id,"},{"line_number":62,"context_line":"                 vif_ports\u003dNone):"},{"line_number":63,"context_line":"        assert(isinstance(vlan, (int, long)))"},{"line_number":64,"context_line":"        if vif_ports is None:"},{"line_number":65,"context_line":"            vif_ports \u003d {}"},{"line_number":66,"context_line":"        self.vlan \u003d vlan"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f61380b4","line":63,"updated":"2014-08-11 12:32:15.000000000","message":"isn\u0027t assert dangerous? And also, what if vlan can be converted to an int or long?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"class LocalVLANMapping:"},{"line_number":61,"context_line":"    def __init__(self, vlan, network_type, physical_network, segmentation_id,"},{"line_number":62,"context_line":"                 vif_ports\u003dNone):"},{"line_number":63,"context_line":"        assert(isinstance(vlan, (int, long)))"},{"line_number":64,"context_line":"        if vif_ports is None:"},{"line_number":65,"context_line":"            vif_ports \u003d {}"},{"line_number":66,"context_line":"        self.vlan \u003d vlan"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f990d343","line":63,"in_reply_to":"baada198_f61380b4","updated":"2014-08-11 12:51:01.000000000","message":"i consider keep running after meeting an unexpected condition rather dangerous.\n\nit\u0027s the callers\u0027 responsibility to convert it to an integer.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(1, 4095))"},{"line_number":223,"context_line":"        self.tunnel_types \u003d tunnel_types or []"},{"line_number":224,"context_line":"        self.agent_state \u003d {"},{"line_number":225,"context_line":"            \u0027binary\u0027: \u0027neutron-ofa-agent\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b6158896","line":222,"updated":"2014-08-11 12:32:15.000000000","message":"why remove the constants?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(1, 4095))"},{"line_number":223,"context_line":"        self.tunnel_types \u003d tunnel_types or []"},{"line_number":224,"context_line":"        self.agent_state \u003d {"},{"line_number":225,"context_line":"            \u0027binary\u0027: \u0027neutron-ofa-agent\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_fc9996d0","line":222,"in_reply_to":"baada198_390a4b78","updated":"2014-08-11 17:35:08.000000000","message":"Done","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(1, 4095))"},{"line_number":223,"context_line":"        self.tunnel_types \u003d tunnel_types or []"},{"line_number":224,"context_line":"        self.agent_state \u003d {"},{"line_number":225,"context_line":"            \u0027binary\u0027: \u0027neutron-ofa-agent\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_390a4b78","line":222,"in_reply_to":"baada198_b6158896","updated":"2014-08-11 12:51:01.000000000","message":"because it\u0027s no longer tied to VLAN.\nwe can introduce another constant if desirable.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f82fdb46340712331bfb2d09ef6b918f0a76745","unresolved":false,"context_lines":[{"line_number":513,"context_line":"                                lvm.vif_ports.values()))"},{"line_number":514,"context_line":"        ofports \u003d (vp.ofport for vp in lvm.vif_ports.values())"},{"line_number":515,"context_line":"        self.int_br.local_flood_update(lvm.vlan, ofports, flood_unicast)"},{"line_number":516,"context_line":"        if port.vif_mac is None:"},{"line_number":517,"context_line":"            return"},{"line_number":518,"context_line":"        self.int_br.local_out_add_port(lvm.vlan, port.ofport, port.vif_mac)"},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_fd226da1","line":516,"updated":"2014-08-22 09:35:12.000000000","message":"why not if not port.vif_mac:?","commit_id":"e0f462dd52e806323a3933527009201759176fa7"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"25228ef29800bfe2f568a248e9e9cafc6aa29620","unresolved":false,"context_lines":[{"line_number":513,"context_line":"                                lvm.vif_ports.values()))"},{"line_number":514,"context_line":"        ofports \u003d (vp.ofport for vp in lvm.vif_ports.values())"},{"line_number":515,"context_line":"        self.int_br.local_flood_update(lvm.vlan, ofports, flood_unicast)"},{"line_number":516,"context_line":"        if port.vif_mac is None:"},{"line_number":517,"context_line":"            return"},{"line_number":518,"context_line":"        self.int_br.local_out_add_port(lvm.vlan, port.ofport, port.vif_mac)"},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_a70b382a","line":516,"in_reply_to":"1abeadc6_fd226da1","updated":"2014-08-31 10:57:53.000000000","message":"because what i want to test here is if the value is available or not.\nbool(port.vif_mac) is not interesting.","commit_id":"e0f462dd52e806323a3933527009201759176fa7"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f82fdb46340712331bfb2d09ef6b918f0a76745","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        self.int_br.check_in_port_delete_port(port.ofport)"},{"line_number":540,"context_line":"        if not lvm.vif_ports:"},{"line_number":541,"context_line":"            self.reclaim_local_vlan(net_uuid)"},{"line_number":542,"context_line":"        if port.vif_mac is None:"},{"line_number":543,"context_line":"            return"},{"line_number":544,"context_line":"        self.int_br.local_out_delete_port(lvm.vlan, port.vif_mac)"},{"line_number":545,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_3d3f85b5","line":542,"updated":"2014-08-22 09:35:12.000000000","message":"ditto","commit_id":"e0f462dd52e806323a3933527009201759176fa7"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"25228ef29800bfe2f568a248e9e9cafc6aa29620","unresolved":false,"context_lines":[{"line_number":539,"context_line":"        self.int_br.check_in_port_delete_port(port.ofport)"},{"line_number":540,"context_line":"        if not lvm.vif_ports:"},{"line_number":541,"context_line":"            self.reclaim_local_vlan(net_uuid)"},{"line_number":542,"context_line":"        if port.vif_mac is None:"},{"line_number":543,"context_line":"            return"},{"line_number":544,"context_line":"        self.int_br.local_out_delete_port(lvm.vlan, port.vif_mac)"},{"line_number":545,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_c7083c30","line":542,"in_reply_to":"1abeadc6_3d3f85b5","updated":"2014-08-31 10:57:53.000000000","message":"ditto","commit_id":"e0f462dd52e806323a3933527009201759176fa7"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7f7929f2d73b3473733ae482b50d7db3b32e5430","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(ofa_const.LOCAL_VLAN_MIN,"},{"line_number":223,"context_line":"                                                ofa_const.LOCAL_VLAN_MAX))"},{"line_number":224,"context_line":"        self.tunnel_types \u003d tunnel_types or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_2d9006ec","line":221,"updated":"2014-08-31 18:22:15.000000000","message":"Just curious: Why is this still needed here, or can it be removed as part of this patch?","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7054feeaed1e6d9488a8240e80f608ca609d955f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(ofa_const.LOCAL_VLAN_MIN,"},{"line_number":223,"context_line":"                                                ofa_const.LOCAL_VLAN_MAX))"},{"line_number":224,"context_line":"        self.tunnel_types \u003d tunnel_types or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_0f208ff6","line":221,"in_reply_to":"fa98f980_00ace4ec","updated":"2014-09-01 05:00:16.000000000","message":"Makes sense.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"55263f0dd669094ff4a955d24d79e0aab0ce1b3d","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.ryuapp \u003d ryuapp"},{"line_number":219,"context_line":"        self.veth_mtu \u003d veth_mtu"},{"line_number":220,"context_line":"        self.root_helper \u003d root_helper"},{"line_number":221,"context_line":"        # TODO(yamamoto): Remove this VLAN leftover"},{"line_number":222,"context_line":"        self.available_local_vlans \u003d set(xrange(ofa_const.LOCAL_VLAN_MIN,"},{"line_number":223,"context_line":"                                                ofa_const.LOCAL_VLAN_MAX))"},{"line_number":224,"context_line":"        self.tunnel_types \u003d tunnel_types or []"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_00ace4ec","line":221,"in_reply_to":"fa98f980_2d9006ec","updated":"2014-09-01 00:02:20.000000000","message":"probably it can be.\nbut i don\u0027t want to keep this patch small as far as possible.\nit\u0027s already too large.\n\nsimply bumping the max value is not desirable because it would waste memory while the practical benefit is questionable.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"}],"neutron/plugins/ofagent/agent/tables.py":[{"author":{"_account_id":105,"name":"Kyle Mestery","email":"mestery@mestery.com","username":"mestery"},"change_message_id":"7f7929f2d73b3473733ae482b50d7db3b32e5430","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"TUNNEL_TYPE_IDX \u003d dict((t, TUNNEL_TYPES.index(t)) for t in TUNNEL_TYPES)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CHECK_IN_PORT \u003d _table_id()"},{"line_number":40,"context_line":"TUNNEL_IN \u003d {}"},{"line_number":41,"context_line":"for t in TUNNEL_TYPES:"},{"line_number":42,"context_line":"    TUNNEL_IN[t] \u003d _table_id()"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_2da72651","line":39,"updated":"2014-08-31 18:22:15.000000000","message":"This is some fancy table ID assignment logic right here. :)","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"55263f0dd669094ff4a955d24d79e0aab0ce1b3d","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"TUNNEL_TYPE_IDX \u003d dict((t, TUNNEL_TYPES.index(t)) for t in TUNNEL_TYPES)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"CHECK_IN_PORT \u003d _table_id()"},{"line_number":40,"context_line":"TUNNEL_IN \u003d {}"},{"line_number":41,"context_line":"for t in TUNNEL_TYPES:"},{"line_number":42,"context_line":"    TUNNEL_IN[t] \u003d _table_id()"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa98f980_e0dc4077","line":39,"in_reply_to":"fa98f980_2da72651","updated":"2014-09-01 00:02:20.000000000","message":"i wrote this way because i don\u0027t want to manually reassign numbers eg. when adding new tunnel types.\ni added some comments.","commit_id":"202d27d7875f94a3c396e8debc6175b227c8267a"}],"neutron/tests/unit/ofagent/test_ofa_flows.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_delete_tunnel_output(self):"},{"line_number":132,"context_line":"        br \u003d self.br"},{"line_number":133,"context_line":"        with mock.patch.object(br, \u0027_send_msg\u0027) as sendmsg:"},{"line_number":134,"context_line":"            br.delete_tunnel_output(table_id\u003d110, network\u003d111)"},{"line_number":135,"context_line":"        (dp, ofp, ofpp) \u003d br._get_dp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_96b3244d","line":132,"updated":"2014-08-11 12:32:15.000000000","message":"why? I assume for consistency between tests.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_delete_tunnel_output(self):"},{"line_number":132,"context_line":"        br \u003d self.br"},{"line_number":133,"context_line":"        with mock.patch.object(br, \u0027_send_msg\u0027) as sendmsg:"},{"line_number":134,"context_line":"            br.delete_tunnel_output(table_id\u003d110, network\u003d111)"},{"line_number":135,"context_line":"        (dp, ofp, ofpp) \u003d br._get_dp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_197e67e3","line":132,"in_reply_to":"baada198_96b3244d","updated":"2014-08-11 12:51:01.000000000","message":"i\u0027m not sure if i understand your question here.\ncan you explain?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                 out_group\u003dofp.OFPG_ANY,"},{"line_number":142,"context_line":"                 out_port\u003dofp.OFPP_ANY, priority\u003d0, table_id\u003d110))"},{"line_number":143,"context_line":"        ]"},{"line_number":144,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_provision_tenant_tunnel(self):"},{"line_number":147,"context_line":"        br \u003d self.br"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_367a5876","line":144,"updated":"2014-08-11 12:32:15.000000000","message":"since sendmsg has only one call, why not assert_called_once_with? Or you\u0027re trying to keep a consistency between tests?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                 out_group\u003dofp.OFPG_ANY,"},{"line_number":142,"context_line":"                 out_port\u003dofp.OFPP_ANY, priority\u003d0, table_id\u003d110))"},{"line_number":143,"context_line":"        ]"},{"line_number":144,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_provision_tenant_tunnel(self):"},{"line_number":147,"context_line":"        br \u003d self.br"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_9948b7b5","line":144,"in_reply_to":"baada198_367a5876","updated":"2014-08-11 12:51:01.000000000","message":"no strong reasons.\nsure, i prefer to make tests similar each other.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                 out_group\u003dofp.OFPG_ANY,"},{"line_number":142,"context_line":"                 out_port\u003dofp.OFPP_ANY, priority\u003d0, table_id\u003d110))"},{"line_number":143,"context_line":"        ]"},{"line_number":144,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_provision_tenant_tunnel(self):"},{"line_number":147,"context_line":"        br \u003d self.br"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1c600aa3","line":144,"in_reply_to":"baada198_9948b7b5","updated":"2014-08-11 17:35:08.000000000","message":"i didn\u0027t changed this because i want to keep this file look mechanical as far as possible.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"}],"neutron/tests/unit/ofagent/test_ofa_neutron_agent.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_33426a67","line":566,"updated":"2014-08-11 12:32:15.000000000","message":"instead of\n\nself.assertEqual(0, ... x.call_count)\n\nhow about:\n\nself.assertFalse(x.called)","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6e6a9543ce2a52da78e88a46da458ded445bee9d","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0406fe84","line":566,"in_reply_to":"baada198_190d8740","updated":"2014-08-12 09:04:43.000000000","message":"It is. This was pointed out in many patches, including my own. :)","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1c656a1c","line":566,"in_reply_to":"baada198_190d8740","updated":"2014-08-11 17:35:08.000000000","message":"i didn\u0027t change this here as it will be changed by the following commit.\nhttps://review.openstack.org/#/c/113160/","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_190d8740","line":566,"in_reply_to":"baada198_33426a67","updated":"2014-08-11 12:51:01.000000000","message":"is it a preferable form?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        ) as (add_tun_fn, install_fn, delete_fn):"},{"line_number":582,"context_line":"            add_tun_fn.return_value \u003d 2"},{"line_number":583,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":584,"context_line":"            self.assertEqual(2, install_fn.call_count)"},{"line_number":585,"context_line":"            self.assertEqual(0, delete_fn.call_count)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_fdb_del_flows(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d3168e57","line":584,"updated":"2014-08-11 12:32:15.000000000","message":"hmm, maybe:\n\ninstall_fn.assert_has_calls(..)","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        ) as (add_tun_fn, install_fn, delete_fn):"},{"line_number":582,"context_line":"            add_tun_fn.return_value \u003d 2"},{"line_number":583,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":584,"context_line":"            self.assertEqual(2, install_fn.call_count)"},{"line_number":585,"context_line":"            self.assertEqual(0, delete_fn.call_count)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_fdb_del_flows(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_bcec7ebd","line":584,"in_reply_to":"baada198_b9fbbb14","updated":"2014-08-11 17:35:08.000000000","message":"Done","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"f03057d4d7ee04f27e4c4048c5c78c62a8e4af3a","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        ) as (add_tun_fn, install_fn, delete_fn):"},{"line_number":582,"context_line":"            add_tun_fn.return_value \u003d 2"},{"line_number":583,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":584,"context_line":"            self.assertEqual(2, install_fn.call_count)"},{"line_number":585,"context_line":"            self.assertEqual(0, delete_fn.call_count)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_fdb_del_flows(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b9fbbb14","line":584,"in_reply_to":"baada198_d3168e57","updated":"2014-08-11 12:51:01.000000000","message":"do you mean i should check arguments?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":582,"context_line":"            add_tun_fn.return_value \u003d 2"},{"line_number":583,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":584,"context_line":"            self.assertEqual(2, install_fn.call_count)"},{"line_number":585,"context_line":"            self.assertEqual(0, delete_fn.call_count)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_fdb_del_flows(self):"},{"line_number":588,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f332b20d","line":585,"updated":"2014-08-11 12:32:15.000000000","message":"ditto - assertFalse(delete_fn.called)","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":582,"context_line":"            add_tun_fn.return_value \u003d 2"},{"line_number":583,"context_line":"            self.agent.fdb_add(None, fdb_entry)"},{"line_number":584,"context_line":"            self.assertEqual(2, install_fn.call_count)"},{"line_number":585,"context_line":"            self.assertEqual(0, delete_fn.call_count)"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def test_fdb_del_flows(self):"},{"line_number":588,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5ca9a28d","line":585,"in_reply_to":"baada198_f332b20d","updated":"2014-08-11 17:35:08.000000000","message":"Done","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":599,"context_line":"        ) as (install_fn, delete_fn):"},{"line_number":600,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":601,"context_line":"            self.assertEqual(1, install_fn.call_count)"},{"line_number":602,"context_line":"            self.assertEqual(1, delete_fn.call_count)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def test_fdb_add_port(self):"},{"line_number":605,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3607b818","line":602,"updated":"2014-08-11 12:32:15.000000000","message":"assert_called_once_with(...)?","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":599,"context_line":"        ) as (install_fn, delete_fn):"},{"line_number":600,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":601,"context_line":"            self.assertEqual(1, install_fn.call_count)"},{"line_number":602,"context_line":"            self.assertEqual(1, delete_fn.call_count)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def test_fdb_add_port(self):"},{"line_number":605,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3c55ce51","line":602,"in_reply_to":"baada198_3607b818","updated":"2014-08-11 17:35:08.000000000","message":"Done","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"d3ef75bc5b274358f55290d18d77bde2c39f3ac3","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_0e279f65","line":566,"updated":"2014-08-14 15:11:51.000000000","message":"this was not addressed the last time I commented, or at least, not here. (but on L590 it was)\n\ninstead of\n\nself.assertEqual(0, ... x.call_count)\n\nhow about:\n\nself.assertFalse(x.called)","commit_id":"2c65f571c8ebb7dc2aab4ec49eda08be3c12958e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"449bf41318609e669d6fa3d769bd6dc3395588e5","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":564,"context_line":"            self.agent.fdb_remove(None, fdb_entry)"},{"line_number":565,"context_line":"            self.assertEqual(0, add_fn.call_count)"},{"line_number":566,"context_line":"            self.assertEqual(0, del_fn.call_count)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    def test_fdb_add_flows(self):"},{"line_number":569,"context_line":"        self._prepare_l2_pop_ofports()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7ac7a964_97601f37","line":566,"in_reply_to":"7ac7a964_0e279f65","updated":"2014-08-14 17:00:17.000000000","message":"Done","commit_id":"2c65f571c8ebb7dc2aab4ec49eda08be3c12958e"}],"neutron/tests/unit/ofagent/test_ofswitch.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.br.set_dp(self._mk_test_dp(\"dp\"))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_flows(self):"},{"line_number":36,"context_line":"        br \u003d self.br"},{"line_number":37,"context_line":"        with mock.patch.object(br, \u0027_send_msg\u0027) as sendmsg:"},{"line_number":38,"context_line":"            br.delete_flows()"},{"line_number":39,"context_line":"        (dp, ofp, ofpp) \u003d br._get_dp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f39632ee","line":36,"updated":"2014-08-11 12:32:15.000000000","message":"why? Ditto tests bellow.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"04ad419bd00351193f2011894862c6b77c764b1c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.br.set_dp(self._mk_test_dp(\"dp\"))"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def test_delete_flows(self):"},{"line_number":36,"context_line":"        br \u003d self.br"},{"line_number":37,"context_line":"        with mock.patch.object(br, \u0027_send_msg\u0027) as sendmsg:"},{"line_number":38,"context_line":"            br.delete_flows()"},{"line_number":39,"context_line":"        (dp, ofp, ofpp) \u003d br._get_dp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_bcf63e5c","line":36,"in_reply_to":"baada198_f39632ee","updated":"2014-08-11 17:35:08.000000000","message":"for the same reason as test_ofa_flows.py, i want to keep these style here.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                 match\u003dofpp.OFPMatch(), out_group\u003dofp.OFPG_ANY,"},{"line_number":44,"context_line":"                 out_port\u003dofp.OFPP_ANY, priority\u003d0, table_id\u003dofp.OFPTT_ALL)),"},{"line_number":45,"context_line":"        ]"},{"line_number":46,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_install_default_drop(self):"},{"line_number":49,"context_line":"        br \u003d self.br"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f3c8f222","line":46,"updated":"2014-08-11 12:32:15.000000000","message":"Since you only have one call, why not use assert_called_once_with? Ditto all the other test cases below.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c51226fd25682785cf089b50533fcd3675ff64a1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        sendmsg.assert_has_calls(expected_calls)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_install_default_goto(self):"},{"line_number":60,"context_line":"        br \u003d self.br"},{"line_number":61,"context_line":"        with mock.patch.object(br, \u0027_send_msg\u0027) as sendmsg:"},{"line_number":62,"context_line":"            br.install_default_goto(table_id\u003d98, dest_table_id\u003d150)"},{"line_number":63,"context_line":"        (dp, ofp, ofpp) \u003d br._get_dp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d3612e12","line":60,"updated":"2014-08-11 12:32:15.000000000","message":"here is a bit more understandable, it\u0027s useful for line 62, but it would also be ok to have the args list on line 62 on 2 lines.","commit_id":"87d74a9dabe94464ca4c30ab0cfb67a8458404a3"}]}
