)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"f0455604508d611f5179db1163ead967cb699044","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuanwei \u003cwei.yuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-03-30 14:44:30 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Impliment security group fullstack and ut cases"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I58e37c20a1e46ef64a4dfcf5950073f8b4893543"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba0121b8_a5d69eee","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":47},"updated":"2016-03-31 13:38:41.000000000","message":"Implement security group full stack and unit tests","commit_id":"8b3e57ef292ad0d08b6a97798d9070183fad45ca"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1e8f10ea12ff71be19f55a513254575c675ca44d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuanwei \u003cwei.yuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-04-18 17:50:31 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Impliment security group fullstack and ut cases"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I58e37c20a1e46ef64a4dfcf5950073f8b4893543"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a122d0e_4b59e459","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":5},"updated":"2016-04-25 05:39:29.000000000","message":"nit: %s/Impliment/Implement/g","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuanwei \u003cwei.yuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-04-18 17:50:31 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Impliment security group fullstack and ut cases"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I58e37c20a1e46ef64a4dfcf5950073f8b4893543"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1a122d0e_17a42ba4","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":5},"in_reply_to":"1a122d0e_4b59e459","updated":"2016-04-25 09:29:14.000000000","message":"ok","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"}],"devstack/ovs_setup.sh":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"09f939a2b6f8fc29d380634118d1c112e9e28148","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"function _neutron_ovs_install_ovs_deps_ubuntu {"},{"line_number":79,"context_line":"    sudo apt-get install -y build-essential fakeroot devscripts equivs dkms"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    sudo mk-build-deps -i -t \"/usr/bin/apt-get --no-install-recommends -y\""},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_a3d90186","line":80,"updated":"2016-04-22 06:55:10.000000000","message":"this blank line is not needed.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"function _neutron_ovs_install_ovs_deps_ubuntu {"},{"line_number":79,"context_line":"    sudo apt-get install -y build-essential fakeroot devscripts equivs dkms"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    sudo mk-build-deps -i -t \"/usr/bin/apt-get --no-install-recommends -y\""},{"line_number":82,"context_line":"}"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_3c54ac1f","line":80,"in_reply_to":"1a122d0e_a3d90186","updated":"2016-04-25 09:29:14.000000000","message":"ok","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"09f939a2b6f8fc29d380634118d1c112e9e28148","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_43e8ed16","line":93,"updated":"2016-04-22 06:55:10.000000000","message":"if you wanna load ovs module, you should put it here. loading the module before installation is not right.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"99f5ce2f6faf7e809b0c9c30b9a2f0f39bcefcad","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_68778b3a","line":93,"in_reply_to":"1a122d0e_43e8ed16","updated":"2016-04-24 14:54:50.000000000","message":"\u0027modprobe -r\u0027 removes the module. Is this the intention? (Actually, this may solve issue 1571551. Is this the case?)","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_77291f89","line":93,"in_reply_to":"1a122d0e_43e8ed16","updated":"2016-04-25 09:29:14.000000000","message":"as Omer described, this command removes the module.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_5777c339","line":93,"in_reply_to":"1a122d0e_68778b3a","updated":"2016-04-25 09:29:14.000000000","message":"Yes, this command intend to remove the old openvswith module in kernel. that is because I found after the installation by dpkg --install command, the old openvswitch module in kernel doesn\u0027t be replaced by the new one.\nIssue 1571551 seems a related problem, but I am not sure about that, please check this fix if can solve that issue for real.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"32ff8f5054eb256c12b53cbb581f53501a9b2c1b","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_c4f951ca","line":93,"in_reply_to":"1a122d0e_77291f89","updated":"2016-04-25 19:43:30.000000000","message":"sudo modprobe -r openvswitch || true\n\nif the kernel module is not loaded, will modprobe raises some errors? I\u0027m not sure about it.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"065e39977d6f98f7e9950feb000f4f5a9436bede","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":92,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":93,"context_line":"    sudo pip install python"},{"line_number":94,"context_line":"    popd"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"1a122d0e_4914354c","line":93,"in_reply_to":"1a122d0e_c4f951ca","updated":"2016-04-26 03:02:15.000000000","message":"yes, that may raise some errors. I will use unload_module_if_loaded function instead, after this patch https://review.openstack.org/#/c/298753/ merged.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a1ca6ce9304cc63d3ebc0aa27f9b9f12c21bf481","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":90,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":92,"context_line":"    sudo pip install python"},{"line_number":93,"context_line":"    popd"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-sh","patch_set":14,"id":"1a122d0e_ab9a8f6c","line":92,"updated":"2016-05-01 19:20:57.000000000","message":"(Continuing the discussion from patchet 13)\nYou can rebase this patch on top of 298753, and then use unload_module_if_loaded, without waiting for it to be merged into master.\nIt can also wait until 298753 is merged, and done in a separate patch.","commit_id":"364d2b0b49f2df222de5b05f6a961c42dc780d53"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"e68515042e79f9220e84bf830dfc73fb57bc5e78","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    sudo modprobe -r openvswitch"},{"line_number":90,"context_line":"    sudo dpkg -i ../openvswitch-datapath-dkms*.deb"},{"line_number":91,"context_line":"    sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb"},{"line_number":92,"context_line":"    sudo pip install python"},{"line_number":93,"context_line":"    popd"},{"line_number":94,"context_line":"}"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-sh","patch_set":14,"id":"1a122d0e_e29aa661","line":92,"in_reply_to":"1a122d0e_ab9a8f6c","updated":"2016-05-04 03:12:33.000000000","message":"298753 is merged.","commit_id":"364d2b0b49f2df222de5b05f6a961c42dc780d53"}],"dragonflow/tests/common/app_testing_objects.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2d55ca9188abbc1972f0cf5d6407a85537cab739","unresolved":false,"context_lines":[{"line_number":601,"context_line":"    :type get_ping:     Callable with no arguments."},{"line_number":602,"context_line":"    \"\"\""},{"line_number":603,"context_line":"    def __init__(self, get_ping\u003dNone):"},{"line_number":604,"context_line":"        super(RyuICMPPongFilter, self).__init__()"},{"line_number":605,"context_line":"        self.get_ping \u003d get_ping"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"    def filter_icmp(self, pkt, icmp):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_c59b34c8","line":604,"range":{"start_line":604,"start_character":14,"end_line":604,"end_character":32},"updated":"2016-04-13 11:19:40.000000000","message":"Typo: RyuICMPPingFilter","commit_id":"d2d021cb2a0f76170be0c2264b257b38d9a6452a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"99f5ce2f6faf7e809b0c9c30b9a2f0f39bcefcad","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.fake_default_security_group \u003d \\"},{"line_number":82,"context_line":"            self._get_fake_default_security_group()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_fake_default_security_group(self):"},{"line_number":85,"context_line":"        security_group \u003d objects.SecGroupTestObj(self.neutron, self.nb_api)"},{"line_number":86,"context_line":"        security_group_id \u003d security_group.create("},{"line_number":87,"context_line":"            secgroup\u003d{\u0027name\u0027: \u0027fakedefault\u0027})"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_a8888323","line":84,"updated":"2016-04-24 14:54:50.000000000","message":"Consider renaming to _create_fake_default_security_group.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.fake_default_security_group \u003d \\"},{"line_number":82,"context_line":"            self._get_fake_default_security_group()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _get_fake_default_security_group(self):"},{"line_number":85,"context_line":"        security_group \u003d objects.SecGroupTestObj(self.neutron, self.nb_api)"},{"line_number":86,"context_line":"        security_group_id \u003d security_group.create("},{"line_number":87,"context_line":"            secgroup\u003d{\u0027name\u0027: \u0027fakedefault\u0027})"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_57f3439e","line":84,"in_reply_to":"1a122d0e_a8888323","updated":"2016-04-25 09:29:14.000000000","message":"ok","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"a117c4d58405ca55fb829bb491f45e419d655b95","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.subnets \u003d []"},{"line_number":76,"context_line":"        self.routers \u003d []"},{"line_number":77,"context_line":"        self.network.create()"},{"line_number":78,"context_line":"        # Because that it\u0027s hard to get the default security group in this"},{"line_number":79,"context_line":"        # context, we create a fake one here to act like the default security"},{"line_number":80,"context_line":"        # group when creating a port with no security group specified."},{"line_number":81,"context_line":"        self.fake_default_security_group \u003d \\"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a122d0e_aa2afb7b","line":78,"range":{"start_line":78,"start_character":18,"end_line":78,"end_character":22},"updated":"2016-05-05 12:56:07.000000000","message":"You can remove the word \"that\": \"Because it\u0027s hard\"","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"73fd38a67e2c3e8297d82a1d83c1cc594ad95e89","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.subnets \u003d []"},{"line_number":76,"context_line":"        self.routers \u003d []"},{"line_number":77,"context_line":"        self.network.create()"},{"line_number":78,"context_line":"        # Because that it\u0027s hard to get the default security group in this"},{"line_number":79,"context_line":"        # context, we create a fake one here to act like the default security"},{"line_number":80,"context_line":"        # group when creating a port with no security group specified."},{"line_number":81,"context_line":"        self.fake_default_security_group \u003d \\"}],"source_content_type":"text/x-python","patch_set":16,"id":"dab17558_3c2a182d","line":78,"range":{"start_line":78,"start_character":18,"end_line":78,"end_character":22},"in_reply_to":"1a122d0e_aa2afb7b","updated":"2016-05-09 02:38:50.000000000","message":"ok, I will fix this.","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"a117c4d58405ca55fb829bb491f45e419d655b95","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        self.get_ping \u003d get_ping"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    def filter_icmp(self, pkt, icmp):"},{"line_number":641,"context_line":"        result \u003d icmp.type \u003d\u003d ryu.lib.packet.icmp.ICMP_ECHO_REQUEST"},{"line_number":642,"context_line":"        if result and (self.get_ping is not None):"},{"line_number":643,"context_line":"            ping \u003d self.get_ping()"},{"line_number":644,"context_line":"            result \u003d super(RyuICMPPingFilter, self).is_same_icmp(icmp, ping)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a122d0e_aad79b21","line":641,"updated":"2016-05-05 12:56:07.000000000","message":"I\u0027m not sure if assigning the result of a comparison is good Python style or not. I personally would at least like to see parentheses around the comparison, but don\u0027t change it if you know that this is a generally accepted Python idiom.","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"73fd38a67e2c3e8297d82a1d83c1cc594ad95e89","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        self.get_ping \u003d get_ping"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"    def filter_icmp(self, pkt, icmp):"},{"line_number":641,"context_line":"        result \u003d icmp.type \u003d\u003d ryu.lib.packet.icmp.ICMP_ECHO_REQUEST"},{"line_number":642,"context_line":"        if result and (self.get_ping is not None):"},{"line_number":643,"context_line":"            ping \u003d self.get_ping()"},{"line_number":644,"context_line":"            result \u003d super(RyuICMPPingFilter, self).is_same_icmp(icmp, ping)"}],"source_content_type":"text/x-python","patch_set":16,"id":"dab17558_dc1b0c1a","line":641,"in_reply_to":"1a122d0e_aad79b21","updated":"2016-05-09 02:38:50.000000000","message":"You are right, that expression is not good. I will fix this.","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"}],"dragonflow/tests/common/utils.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c0b73440cd9a17d03483dc059aeaf87702399250","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                continue"},{"line_number":68,"context_line":"            fs \u003d flow.split(\u0027 \u0027)"},{"line_number":69,"context_line":"            res \u003d {}"},{"line_number":70,"context_line":"            res[\u0027table\u0027] \u003d fs[3].split(\u0027\u003d\u0027)[1].replace(\u0027,\u0027, \u0027\u0027)"},{"line_number":71,"context_line":"            res[\u0027match\u0027] \u003d fs[-2]"},{"line_number":72,"context_line":"            res[\u0027actions\u0027] \u003d fs[-1].split(\u0027\u003d\u0027)[1]"},{"line_number":73,"context_line":"            res[\u0027cookie\u0027] \u003d fs[1].split(\u0027\u003d\u0027)[1].replace(\u0027,\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_ff3e7c26","line":70,"updated":"2016-04-14 11:40:45.000000000","message":"Why was this done?","commit_id":"563233b5a282aacfbd5bd28c5b1c938ad90726a7"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d44567693f59334f23721caf99fc028f334124d5","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                continue"},{"line_number":68,"context_line":"            fs \u003d flow.split(\u0027 \u0027)"},{"line_number":69,"context_line":"            res \u003d {}"},{"line_number":70,"context_line":"            res[\u0027table\u0027] \u003d fs[3].split(\u0027\u003d\u0027)[1].replace(\u0027,\u0027, \u0027\u0027)"},{"line_number":71,"context_line":"            res[\u0027match\u0027] \u003d fs[-2]"},{"line_number":72,"context_line":"            res[\u0027actions\u0027] \u003d fs[-1].split(\u0027\u003d\u0027)[1]"},{"line_number":73,"context_line":"            res[\u0027cookie\u0027] \u003d fs[1].split(\u0027\u003d\u0027)[1].replace(\u0027,\u0027, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_f2123356","line":70,"in_reply_to":"5a18252c_ff3e7c26","updated":"2016-04-14 11:48:28.000000000","message":"this modification is not done by my patch, it seems to wipe off the extra comma after the table value.","commit_id":"563233b5a282aacfbd5bd28c5b1c938ad90726a7"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"9eec7abdb7623176373e4fa5fdf310ee45dc7d3e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        return self._parse_ovs_flows(flows)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class OvsDBParser(object):"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _ovsdb_list_intefaces(self, specify_interface\u003dNone):"},{"line_number":93,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \u0027interface\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_52ba6724","line":90,"range":{"start_line":90,"start_character":6,"end_line":90,"end_character":17},"updated":"2016-04-18 02:54:51.000000000","message":"Instead of implementing it from scratch, thinking about using the existing code such as ovsdb_vswitch_impl.py","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e6ae14956f1c56b3a79965c58b13171660177c11","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        return self._parse_ovs_flows(flows)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class OvsDBParser(object):"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _ovsdb_list_intefaces(self, specify_interface\u003dNone):"},{"line_number":93,"context_line":"        full_args \u003d [\"ovs-vsctl\", \"list\", \u0027interface\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_06143142","line":90,"range":{"start_line":90,"start_character":6,"end_line":90,"end_character":17},"in_reply_to":"1a122d0e_52ba6724","updated":"2016-04-18 09:14:32.000000000","message":"I tried, but I found using API provided by class OvsdbSwitchApi needs to modify its codes. That is because we should call initialize method before using its API, but calling initialize method will do some extra processes we don\u0027t expect in a fullstack test.","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"99f5ce2f6faf7e809b0c9c30b9a2f0f39bcefcad","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        flows \u003d self._get_ovs_flows()"},{"line_number":87,"context_line":"        return self._parse_ovs_flows(flows)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def get_raw_flows(self):"},{"line_number":90,"context_line":"        return self._get_ovs_flows()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_e8827bff","line":89,"updated":"2016-04-24 14:54:50.000000000","message":"Consider simply renaming _get_ovs_flows, rather than creating a wrapper method that only calls the internal method.","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"b04974f09c03a55f6e852df894e14bbae1da5828","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        flows \u003d self._get_ovs_flows()"},{"line_number":87,"context_line":"        return self._parse_ovs_flows(flows)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def get_raw_flows(self):"},{"line_number":90,"context_line":"        return self._get_ovs_flows()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a122d0e_777c7feb","line":89,"in_reply_to":"1a122d0e_e8827bff","updated":"2016-04-25 09:29:14.000000000","message":"ok","commit_id":"1cf6bc1d79080df2ab32dc47bfab02dfbd0d7854"}],"dragonflow/tests/fullstack/test_apps.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2d55ca9188abbc1972f0cf5d6407a85537cab739","unresolved":false,"context_lines":[{"line_number":610,"context_line":"            self.port2 \u003d self.subnet.create_port([security_group_id])"},{"line_number":611,"context_line":"            self.port3 \u003d self.subnet.create_port([security_group_id])"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"            port1_ip \u003d self.port1.get_logical_port().get_ip()"},{"line_number":614,"context_line":"            ingress_rule_info \u003d {\u0027ethertype\u0027: \u0027IPv4\u0027,"},{"line_number":615,"context_line":"                                 \u0027direction\u0027: \u0027ingress\u0027,"},{"line_number":616,"context_line":"                                 \u0027protocol\u0027: \u0027icmp\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_85913c9c","line":613,"updated":"2016-04-13 11:19:40.000000000","message":"Need to add reference to internal port member, e.g.:\nself.port1.port.get_logical_port().get_ip().","commit_id":"d2d021cb2a0f76170be0c2264b257b38d9a6452a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"2d55ca9188abbc1972f0cf5d6407a85537cab739","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        rules1 \u003d ["},{"line_number":658,"context_line":"            app_testing_objects.PortPolicyRule("},{"line_number":659,"context_line":"                # Detect pong, end simulation"},{"line_number":660,"context_line":"                app_testing_objects.RyuICMPPongFilter(icmp_request1),"},{"line_number":661,"context_line":"                actions\u003d["},{"line_number":662,"context_line":"                    app_testing_objects.DisableRuleAction(),"},{"line_number":663,"context_line":"                    app_testing_objects.StopSimulationAction(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_25c0287c","line":660,"updated":"2016-04-13 11:19:40.000000000","message":"The parameter to this class needs to be a function, returning an ryu.lib.packet.icmp.icmp object (or an object with similar API).\n\nThis recurs over all initialisations of RyuICMPPongFilter and RyuICMPPingFilter in this class.","commit_id":"d2d021cb2a0f76170be0c2264b257b38d9a6452a"}],"dragonflow/tests/fullstack/test_sg_flows.py":[{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"9eec7abdb7623176373e4fa5fdf310ee45dc7d3e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from dragonflow.tests.common import utils\r"},{"line_number":15,"context_line":"from dragonflow.tests.fullstack import test_base\r"},{"line_number":16,"context_line":"from dragonflow.tests.fullstack import test_objects as objects\r"},{"line_number":17,"context_line":"import time\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"class TestOVSFlowsForSecurityGroup(test_base.DFTestBase):\r"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d2caf7a0","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":11},"updated":"2016-04-18 02:54:51.000000000","message":"Place the third part lib before dragonflow libs.","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e6ae14956f1c56b3a79965c58b13171660177c11","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from dragonflow.tests.common import utils\r"},{"line_number":15,"context_line":"from dragonflow.tests.fullstack import test_base\r"},{"line_number":16,"context_line":"from dragonflow.tests.fullstack import test_objects as objects\r"},{"line_number":17,"context_line":"import time\r"},{"line_number":18,"context_line":"\r"},{"line_number":19,"context_line":"\r"},{"line_number":20,"context_line":"class TestOVSFlowsForSecurityGroup(test_base.DFTestBase):\r"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_b2a49b57","line":17,"range":{"start_line":17,"start_character":7,"end_line":17,"end_character":11},"in_reply_to":"1a122d0e_d2caf7a0","updated":"2016-04-18 09:14:32.000000000","message":"ok","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"9eec7abdb7623176373e4fa5fdf310ee45dc7d3e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                (flow[\u0027actions\u0027] \u003d\u003d (\u0027goto_table:\u0027 + str(goto_table))):\r"},{"line_number":33,"context_line":"            return True\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"        return False\r"},{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"    def _is_default_drop_flow(self, flow, direction):\r"},{"line_number":38,"context_line":"        if direction \u003d\u003d \u0027ingress\u0027:\r"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_d241570d","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":14},"updated":"2016-04-18 02:54:51.000000000","message":"do you need to print some debug info here, for example, the flow?","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"e6ae14956f1c56b3a79965c58b13171660177c11","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                (flow[\u0027actions\u0027] \u003d\u003d (\u0027goto_table:\u0027 + str(goto_table))):\r"},{"line_number":33,"context_line":"            return True\r"},{"line_number":34,"context_line":"\r"},{"line_number":35,"context_line":"        return False\r"},{"line_number":36,"context_line":"\r"},{"line_number":37,"context_line":"    def _is_default_drop_flow(self, flow, direction):\r"},{"line_number":38,"context_line":"        if direction \u003d\u003d \u0027ingress\u0027:\r"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_4b07521c","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":14},"in_reply_to":"1a122d0e_d241570d","updated":"2016-04-18 09:14:32.000000000","message":"ok, I will print flows for debugging, but may not be here, because other but normal flows may pass in this path.","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"9eec7abdb7623176373e4fa5fdf310ee45dc7d3e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        if (flow[\u0027table\u0027] \u003d\u003d str(table)) and \\\r"},{"line_number":44,"context_line":"                (flow[\u0027priority\u0027] \u003d\u003d str(const.PRIORITY_DEFAULT)) and \\\r"},{"line_number":45,"context_line":"                (flow[\u0027actions\u0027] \u003d\u003d \u0027drop\u0027):\r"},{"line_number":46,"context_line":"            return True\r"},{"line_number":47,"context_line":"\r"},{"line_number":48,"context_line":"        return False\r"},{"line_number":49,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a122d0e_b2465b21","line":46,"range":{"start_line":46,"start_character":12,"end_line":46,"end_character":18},"updated":"2016-04-18 02:54:51.000000000","message":"same as above","commit_id":"5e297c8e0c28f0bec6da470f936b9468e9b85f73"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"a117c4d58405ca55fb829bb491f45e419d655b95","unresolved":false,"context_lines":[{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"        return False\r"},{"line_number":95,"context_line":"\r"},{"line_number":96,"context_line":"    def _is_associating_flow(self, flow, direction, of_port, reg7):\r"},{"line_number":97,"context_line":"        if direction \u003d\u003d \u0027ingress\u0027:\r"},{"line_number":98,"context_line":"            match \u003d \u0027reg7\u003d\u0027 + reg7\r"},{"line_number":99,"context_line":"            table \u003d const.INGRESS_SECURITY_GROUP_TABLE\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a122d0e_0afa0f77","line":96,"updated":"2016-05-05 12:56:07.000000000","message":"What is the meaning of the 7 in reg7? I\u0027m new to DragonFlow so maybe this is something obvious, but reading this code I have no idea what this variable name is supposed to represent.","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"73fd38a67e2c3e8297d82a1d83c1cc594ad95e89","unresolved":false,"context_lines":[{"line_number":93,"context_line":"\r"},{"line_number":94,"context_line":"        return False\r"},{"line_number":95,"context_line":"\r"},{"line_number":96,"context_line":"    def _is_associating_flow(self, flow, direction, of_port, reg7):\r"},{"line_number":97,"context_line":"        if direction \u003d\u003d \u0027ingress\u0027:\r"},{"line_number":98,"context_line":"            match \u003d \u0027reg7\u003d\u0027 + reg7\r"},{"line_number":99,"context_line":"            table \u003d const.INGRESS_SECURITY_GROUP_TABLE\r"}],"source_content_type":"text/x-python","patch_set":16,"id":"dab17558_dc04acc1","line":96,"in_reply_to":"1a122d0e_0afa0f77","updated":"2016-05-09 02:38:50.000000000","message":"OK, I will add some comments here by a other patch. Reg7 contains a unique value allocated to the destination VM in DragonFlow.","commit_id":"8c6d7d9b0ef4ac7f7bd6a2923b4c3563c0d72a81"}]}
