)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"00448bbee1f5410cd1cdda6786aa60fce17df22e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"firewall group resources."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Nguyen Phuong An \u003cAnNP@vn.fujitsu.com\u003e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I1cb170de1dbb7ac5380d386d850241f3c4a2f225"},{"line_number":16,"context_line":"Partial-Bug: #1720727"},{"line_number":17,"context_line":"Change-Id: I4e529273fe978d52e8948b844880a48f342fbd8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5f7c97a3_c6010cb7","line":14,"updated":"2018-08-01 15:20:21.000000000","message":"Unnecessary blank.","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"93fb7c9cc30b99eaaefb7d5d25a810f4a2cdbd98","unresolved":false,"context_lines":[{"line_number":11,"context_line":"firewall group resources."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Nguyen Phuong An \u003cAnNP@vn.fujitsu.com\u003e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Depends-On: I1cb170de1dbb7ac5380d386d850241f3c4a2f225"},{"line_number":16,"context_line":"Partial-Bug: #1720727"},{"line_number":17,"context_line":"Change-Id: I4e529273fe978d52e8948b844880a48f342fbd8c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5f7c97a3_3ceebe1f","line":14,"in_reply_to":"5f7c97a3_c6010cb7","updated":"2018-08-02 11:43:32.000000000","message":"Done","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"}],"neutron_fwaas/services/logapi/common/fw_callback.py":[{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"fba7214f79b9c6bd8ac1a786eff4048e34bd3a95","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            if log_resources:"},{"line_number":40,"context_line":"                for log_resource in log_resources:"},{"line_number":41,"context_line":"                    self.resource_push_api("},{"line_number":42,"context_line":"                        log_const.UPDATE_LOG, context, log_resource)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9efedc02","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":44},"updated":"2018-07-11 04:18:15.000000000","message":"Please use RESOURCE_UPDATE that allows us push a list of log_resource to agent side.","commit_id":"09ed4b2c186e1af7c635646c291df93da0076aae"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"872848d517864d2b25480f744b50e005720e8438","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            if log_resources:"},{"line_number":40,"context_line":"                for log_resource in log_resources:"},{"line_number":41,"context_line":"                    self.resource_push_api("},{"line_number":42,"context_line":"                        log_const.UPDATE_LOG, context, log_resource)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9430fd08","line":42,"range":{"start_line":42,"start_character":34,"end_line":42,"end_character":44},"in_reply_to":"5f7c97a3_9efedc02","updated":"2018-07-11 07:32:04.000000000","message":"Done. Thanks for your comment","commit_id":"09ed4b2c186e1af7c635646c291df93da0076aae"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"fa4d7020ebda2be7d15a4373868e9a1c443ac0bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Fujitsu Limited"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_878cf680","line":1,"updated":"2018-07-26 04:11:44.000000000","message":"I think this file name should be \u0027fwg_callback.py\u0027.","commit_id":"a7cda7701b585ee0575eb867af35612d323b1e15"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"7aac8ac80f26a6d47d270c4fa464274d4d6579b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2018 Fujitsu Limited"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_27b402f1","line":1,"in_reply_to":"5f7c97a3_878cf680","updated":"2018-07-26 04:51:34.000000000","message":"Done","commit_id":"a7cda7701b585ee0575eb867af35612d323b1e15"}],"neutron_fwaas/services/logapi/common/fwg_callback.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5d904ad6bbbf880282ed127c9672ee6136252bcc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            old_ports \u003d payload.states[0][\u0027ports\u0027]"},{"line_number":37,"context_line":"            new_ports \u003d payload.states[1][\u0027ports\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            # Check whether port is updated from firewall group or not"},{"line_number":40,"context_line":"            ports_delta \u003d \\"},{"line_number":41,"context_line":"                set(new_ports).symmetric_difference(set(old_ports))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        for port_id in ports_delta:"},{"line_number":44,"context_line":"            if self.is_router_port(context, port_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_9c1912d3","line":41,"range":{"start_line":39,"start_character":8,"end_line":41,"end_character":67},"updated":"2018-08-02 20:40:49.000000000","message":"ports_delta \u003d set(new_ports).symmetric_difference(set(old_ports))","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"4d72933cbe5bcfd35deb4e7ad5dbb03ce2ed4b6b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            old_ports \u003d payload.states[0][\u0027ports\u0027]"},{"line_number":37,"context_line":"            new_ports \u003d payload.states[1][\u0027ports\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            # Check whether port is updated from firewall group or not"},{"line_number":40,"context_line":"            ports_delta \u003d \\"},{"line_number":41,"context_line":"                set(new_ports).symmetric_difference(set(old_ports))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        for port_id in ports_delta:"},{"line_number":44,"context_line":"            if self.is_router_port(context, port_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_ecb71d22","line":41,"range":{"start_line":39,"start_character":8,"end_line":41,"end_character":67},"in_reply_to":"5f7c97a3_9c1912d3","updated":"2018-08-03 05:06:33.000000000","message":"Done","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"00448bbee1f5410cd1cdda6786aa60fce17df22e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def is_router_port(self, context, port_id):"},{"line_number":55,"context_line":"        port \u003d port_objects.Port.get_object(context, id\u003dport_id)"},{"line_number":56,"context_line":"        device_owner \u003d port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":57,"context_line":"        if device_owner.startswith(nl_const.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":58,"context_line":"            return False"},{"line_number":59,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_26bd60d0","line":57,"updated":"2018-08-01 15:20:21.000000000","message":"In this logic, DHCP port will pass.  Should it be ROUTER_INTERFACE_OWNERS like\n\nreturn device_owner in nl_const.ROUTER_INTERFACE_OWNERS\n\nhttps://github.com/openstack/neutron-lib/blob/master/neutron_lib/constants.py#L70","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"93fb7c9cc30b99eaaefb7d5d25a810f4a2cdbd98","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def is_router_port(self, context, port_id):"},{"line_number":55,"context_line":"        port \u003d port_objects.Port.get_object(context, id\u003dport_id)"},{"line_number":56,"context_line":"        device_owner \u003d port.get(\u0027device_owner\u0027, \u0027\u0027)"},{"line_number":57,"context_line":"        if device_owner.startswith(nl_const.DEVICE_OWNER_COMPUTE_PREFIX):"},{"line_number":58,"context_line":"            return False"},{"line_number":59,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_5c337ac4","line":57,"in_reply_to":"5f7c97a3_26bd60d0","updated":"2018-08-02 11:43:32.000000000","message":"Done","commit_id":"e85f90f5404581a5198df69fa5057734e10eeb86"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5d904ad6bbbf880282ed127c9672ee6136252bcc","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FirewallGroupCallBack(manager.ResourceCallBackBase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def handle_event(self, resource, event, trigger, **kwargs):"},{"line_number":28,"context_line":"        payload \u003d kwargs.get(\u0027payload\u0027)"},{"line_number":29,"context_line":"        context \u003d payload.context"},{"line_number":30,"context_line":"        ports_delta \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_4d4f3469","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":20},"updated":"2018-08-02 20:40:49.000000000","message":"I\u0027ve tested it and realized that this method wasn\u0027t called after \"update\" event like\n\nopenstack network log set fwg-log --disable","commit_id":"7146e2113bd82d77ceac979396b2b5f97df5071e"},{"author":{"_account_id":28174,"name":"Kim Bao Long","email":"longkb@vn.fujitsu.com","username":"longkb.fvl"},"change_message_id":"4d72933cbe5bcfd35deb4e7ad5dbb03ce2ed4b6b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class FirewallGroupCallBack(manager.ResourceCallBackBase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def handle_event(self, resource, event, trigger, **kwargs):"},{"line_number":28,"context_line":"        payload \u003d kwargs.get(\u0027payload\u0027)"},{"line_number":29,"context_line":"        context \u003d payload.context"},{"line_number":30,"context_line":"        ports_delta \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ec963d4b","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":20},"in_reply_to":"5f7c97a3_4d4f3469","updated":"2018-08-03 05:06:33.000000000","message":"Hmm, you might misunderstand here. \nThis handle_event overrides method in ResourceCallBackBase (https://github.com/openstack/neutron/blob/00b923ddf37de2176168f5a525b4190dd4e04c4d/neutron/services/logapi/drivers/manager.py#L60)\nIt will be triggered when firewall-related event in [AFTER_CREATE, AFTER_UPDATE, AFTER_DELETE] is published by callback system.\n\nSo log-related update events does not concern to this patch.","commit_id":"7146e2113bd82d77ceac979396b2b5f97df5071e"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2b0cb7f64fb8132a0bf8d1cd6acfc6aca2fad1da","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            ports_delta \u003d payload.latest_state[\u0027ports\u0027]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        elif event \u003d\u003d events.AFTER_UPDATE:"},{"line_number":36,"context_line":"            old_ports \u003d payload.states[0][\u0027ports\u0027]"},{"line_number":37,"context_line":"            new_ports \u003d payload.states[1][\u0027ports\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            # Check whether port is updated from firewall group or not"},{"line_number":40,"context_line":"            ports_delta \u003d \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_d165e646","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":50},"updated":"2018-08-08 07:56:06.000000000","message":"Do we need to check payload.states are empty or not?","commit_id":"7e68a5f95763b6be673b5a8537b66f2251295809"},{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"2b0cb7f64fb8132a0bf8d1cd6acfc6aca2fad1da","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            new_ports \u003d payload.states[1][\u0027ports\u0027]"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"            # Check whether port is updated from firewall group or not"},{"line_number":40,"context_line":"            ports_delta \u003d \\"},{"line_number":41,"context_line":"                set(new_ports).symmetric_difference(set(old_ports))"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        if self.need_to_notify(context, ports_delta):"},{"line_number":44,"context_line":"            self.trigger_logging(context, payload.resource_id, ports_delta)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3f79a3b5_b114eaa1","line":41,"range":{"start_line":40,"start_character":12,"end_line":41,"end_character":67},"updated":"2018-08-08 07:56:06.000000000","message":"You can write it a line.","commit_id":"7e68a5f95763b6be673b5a8537b66f2251295809"}],"neutron_fwaas/tests/unit/services/logapi/common/test_fwg_callback.py":[{"author":{"_account_id":13702,"name":"yushiro","username":"yushiro","inactive":true},"change_message_id":"5d904ad6bbbf880282ed127c9672ee6136252bcc","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                        fwg_callback.FirewallGroupCallBack)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class TestFirewallGroupRuleCallback(base.BaseTestCase):"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def setUp(self):"},{"line_number":53,"context_line":"        super(TestFirewallGroupRuleCallback, self).setUp()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0da7fc0c","line":50,"range":{"start_line":50,"start_character":6,"end_line":50,"end_character":35},"updated":"2018-08-02 20:40:49.000000000","message":"You don\u0027t test trigger_logging and is_router_port.  Please add these tests as well.","commit_id":"7146e2113bd82d77ceac979396b2b5f97df5071e"}]}
