)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://goo.gl/7UUjcq"},{"line_number":13,"context_line":"[2] https://goo.gl/cpfnFl"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib8668dd25ee7c5000a6dafcc7db3dbc33ad190be"},{"line_number":16,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3f1d235d_71301de9","line":13,"updated":"2017-07-05 09:09:17.000000000","message":"Please avoid url shortners, which can be volatile.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://goo.gl/7UUjcq"},{"line_number":13,"context_line":"[2] https://goo.gl/cpfnFl"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib8668dd25ee7c5000a6dafcc7db3dbc33ad190be"},{"line_number":16,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3f1d235d_956e3094","line":13,"in_reply_to":"3f1d235d_71301de9","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"60dac13484a7dfb96eb7434885ecfd439a45d5cd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"[2] https://docs.google.com/presentation/d/1fteBesETsmA7CWV6wf1i2QKa7k8EHPpRjytj8Rzeb-A/edit#slide\u003did.p"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib8668dd25ee7c5000a6dafcc7db3dbc33ad190be"},{"line_number":16,"context_line":"Co-Authored-By: IWAMOTO Toshihiro \u003ctoshii@vagw.valinux.co.jp\u003e"},{"line_number":17,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"},{"line_number":18,"context_line":"Partially-implements: blueprint security-group-logging"},{"line_number":19,"context_line":"Related-Bug: #1468366"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"df3967d1_f1145f50","line":16,"updated":"2017-08-02 07:02:56.000000000","message":"Thanks for adding me here.\n\nwrong mail address\n\nit should be iwamoto@valinux.co.jp","commit_id":"5ce4c8cd7622275f7b72759234c7a506035e11de"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"56c9aa7d532f3b2719858d26d8cbca9a33e5b09b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"[2] https://docs.google.com/presentation/d/1fteBesETsmA7CWV6wf1i2QKa7k8EHPpRjytj8Rzeb-A/edit#slide\u003did.p"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib8668dd25ee7c5000a6dafcc7db3dbc33ad190be"},{"line_number":16,"context_line":"Co-Authored-By: IWAMOTO Toshihiro \u003ctoshii@vagw.valinux.co.jp\u003e"},{"line_number":17,"context_line":"Co-Authored-By: Yushiro FURUKAWA \u003cy.furukawa_2@jp.fujitsu.com\u003e"},{"line_number":18,"context_line":"Partially-implements: blueprint security-group-logging"},{"line_number":19,"context_line":"Related-Bug: #1468366"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"df3967d1_93f992c9","line":16,"in_reply_to":"df3967d1_f1145f50","updated":"2017-08-02 10:11:36.000000000","message":"Done","commit_id":"5ce4c8cd7622275f7b72759234c7a506035e11de"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"06ecdfa5752cda52ded908ebf3e878163470b780","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[log] ovs fw logging implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implemented ovs firewall logging driver for security group"},{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://specs.openstack.org/openstack/neutron-specs/specs/pike/logging-API-for-security-group-rules.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f2577a7_959b8816","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":22},"updated":"2017-09-15 23:13:16.000000000","message":"implements","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"4634ba47c499f8177134df29434c3b578aa9d5c3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[log] ovs fw logging implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implemented ovs firewall logging driver for security group"},{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://specs.openstack.org/openstack/neutron-specs/specs/pike/logging-API-for-security-group-rules.html"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"7f515b1d_77f2ec08","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":22},"in_reply_to":"5f2577a7_959b8816","updated":"2017-09-22 07:33:21.000000000","message":"Done","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"06ecdfa5752cda52ded908ebf3e878163470b780","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[log] ovs fw logging implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implemented ovs firewall logging driver for security group"},{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://specs.openstack.org/openstack/neutron-specs/specs/pike/logging-API-for-security-group-rules.html"},{"line_number":13,"context_line":"[2] https://docs.google.com/presentation/d/1fteBesETsmA7CWV6wf1i2QKa7k8EHPpRjytj8Rzeb-A/edit#slide\u003did.p"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f2577a7_75b5bc7d","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":13},"updated":"2017-09-15 23:13:16.000000000","message":"discussed","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"4634ba47c499f8177134df29434c3b578aa9d5c3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[log] ovs fw logging implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implemented ovs firewall logging driver for security group"},{"line_number":10,"context_line":"base discusss on the spec [1] and [2]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"[1] https://specs.openstack.org/openstack/neutron-specs/specs/pike/logging-API-for-security-group-rules.html"},{"line_number":13,"context_line":"[2] https://docs.google.com/presentation/d/1fteBesETsmA7CWV6wf1i2QKa7k8EHPpRjytj8Rzeb-A/edit#slide\u003did.p"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"7f515b1d_57f7f0f6","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":13},"in_reply_to":"5f2577a7_75b5bc7d","updated":"2017-09-22 07:33:21.000000000","message":"Done","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"}],"neutron/agent/common/ovs_lib.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":664,"context_line":"            port_name, 0, 0)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":667,"context_line":"        \"\"\"Set bridge controller_rate_limit."},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_6002960d","line":666,"updated":"2017-06-07 14:39:12.000000000","message":"Both methods do basically the same, maybe it would be easier to have the controller attribute a parameter in a helper function.\n\n def set_controller_field(self, field, value):\n     attr \u003d [field, value)]\n     controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)\n     controllers \u003d [controllers] if isinstance(\n         controllers, uuid.UUID) else controllers\n     with self.ovsdb.transaction(check_error\u003dTrue) as txn:\n         for controller_uuid in controllers:\n             txn.add(self.ovsdb.db_set(\u0027Controller\u0027, controller_uuid, *attr))\n\n def set_controller_rate_limit(self, controller_rate_limit):\n     self.set_controller_field(\u0027controller_rate_limit\u0027, controller_rate_limit)\n\n def set_controller_burst_limit(self, controller_burst_limit):\n     self.set_controller_field(\u0027controller_burst_limit\u0027, controller_burst_limit)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"95400c6d500be93afd1baded9305ca8a9b5d0fc3","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":664,"context_line":"            port_name, 0, 0)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":667,"context_line":"        \"\"\"Set bridge controller_rate_limit."},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_bdd219ff","line":666,"updated":"2017-06-02 07:42:49.000000000","message":"Can these two functions be merged into something like:\n    set_controller_rates(self, rate_limit\u003dNone, burst_limit\u003dNone) ?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":663,"context_line":"        self._set_egress_bw_limit_for_port("},{"line_number":664,"context_line":"            port_name, 0, 0)"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":667,"context_line":"        \"\"\"Set bridge controller_rate_limit."},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_645524c6","line":666,"in_reply_to":"df140735_6002960d","updated":"2017-06-14 07:18:59.000000000","message":"Done. Thank you for your suggestion. :)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"95400c6d500be93afd1baded9305ca8a9b5d0fc3","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        attr \u003d [(\u0027controller_rate_limit\u0027, controller_rate_limit)]"},{"line_number":672,"context_line":"        controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)"},{"line_number":673,"context_line":"        controllers \u003d [controllers] if isinstance("},{"line_number":674,"context_line":"            controllers, uuid.UUID) else controllers"},{"line_number":675,"context_line":"        with self.ovsdb.transaction(check_error\u003dTrue) as txn:"},{"line_number":676,"context_line":"            for controller_uuid in controllers:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_bd40d9a6","line":673,"updated":"2017-06-02 07:42:49.000000000","message":"This function changes all controller settings connected to a bridge. The logging extensions should touch only logging controller, IMO.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        \"\"\""},{"line_number":671,"context_line":"        attr \u003d [(\u0027controller_rate_limit\u0027, controller_rate_limit)]"},{"line_number":672,"context_line":"        controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)"},{"line_number":673,"context_line":"        controllers \u003d [controllers] if isinstance("},{"line_number":674,"context_line":"            controllers, uuid.UUID) else controllers"},{"line_number":675,"context_line":"        with self.ovsdb.transaction(check_error\u003dTrue) as txn:"},{"line_number":676,"context_line":"            for controller_uuid in controllers:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_24060cd0","line":673,"in_reply_to":"df140735_bd40d9a6","updated":"2017-06-14 07:18:59.000000000","message":"will update in next patch-set.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":656,"context_line":""},{"line_number":657,"context_line":"        :param connection_mode: \"out-of-band\" or \"in-band\""},{"line_number":658,"context_line":"        \"\"\""},{"line_number":659,"context_line":"        attr \u003d [(\u0027connection_mode\u0027, connection_mode)]"},{"line_number":660,"context_line":"        controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)"},{"line_number":661,"context_line":"        controllers \u003d [controllers] if isinstance("},{"line_number":662,"context_line":"            controllers, uuid.UUID) else controllers"},{"line_number":663,"context_line":"        with self.ovsdb.transaction(check_error\u003dTrue) as txn:"},{"line_number":664,"context_line":"            for controller_uuid in controllers:"},{"line_number":665,"context_line":"                txn.add(self.ovsdb.db_set(\u0027Controller\u0027,"},{"line_number":666,"context_line":"                                          controller_uuid, *attr))"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"    def _set_egress_bw_limit_for_port(self, port_name, max_kbps,"},{"line_number":669,"context_line":"                                      max_burst_kbps):"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_de9f8c4d","line":666,"range":{"start_line":659,"start_character":0,"end_line":666,"end_character":66},"updated":"2017-12-05 12:09:01.000000000","message":"self.set_controller_field(\u0027connection_mode\u0027, connection_mode)","commit_id":"e07baaed0c53ba33ca7eedbdbef44d634d9df597"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                txn.add(self.ovsdb.db_destroy(\u0027Queue\u0027, queue[\u0027_uuid\u0027]))"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"    def set_controller_field(self, field, value):"},{"line_number":801,"context_line":"        attr \u003d [(field, value)]"},{"line_number":802,"context_line":"        controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)"},{"line_number":803,"context_line":"        controllers \u003d [controllers] if isinstance("},{"line_number":804,"context_line":"            controllers, uuid.UUID) else controllers"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_55e32334","line":801,"updated":"2017-12-04 12:49:27.000000000","message":"this variable is used only in L808, is it really necessary? Can\u0027t You just put \"(field, value)\" there?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                txn.add(self.ovsdb.db_destroy(\u0027Queue\u0027, queue[\u0027_uuid\u0027]))"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"    def set_controller_field(self, field, value):"},{"line_number":801,"context_line":"        attr \u003d [(field, value)]"},{"line_number":802,"context_line":"        controllers \u003d self.db_get_val(\u0027Bridge\u0027, self.br_name, \u0027controller\u0027)"},{"line_number":803,"context_line":"        controllers \u003d [controllers] if isinstance("},{"line_number":804,"context_line":"            controllers, uuid.UUID) else controllers"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_b86048a7","line":801,"in_reply_to":"df87a7cf_55e32334","updated":"2017-12-05 10:32:13.000000000","message":"Actually, we can put (field, value) as your mentioned above. However, I\u0027d like to keep this variable for more readable same as https://github.com/openstack/neutron/blob/master/neutron/agent/common/ovs_lib.py#L659.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                txn.add(self.ovsdb.db_set("},{"line_number":808,"context_line":"                    \u0027Controller\u0027, controller_uuid, *attr))"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_f5d11759","line":810,"updated":"2017-12-04 12:49:27.000000000","message":"nit: I would put \"logging\" (or something like that) in method name as now it can be missleading that it\u0027s related to QoS rate_limit somehow :)","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"6bc5c3e5333ce6be748d8751a303f43921e1951e","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                txn.add(self.ovsdb.db_set("},{"line_number":808,"context_line":"                    \u0027Controller\u0027, controller_uuid, *attr))"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_db93afa2","line":810,"in_reply_to":"df87a7cf_3b6d1232","updated":"2017-12-06 03:36:19.000000000","message":"Actually, rate_limit is a parameter related to maximum packets will be forwarded to controller per second[1]. So I also would like to keep the name to reflect that.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"40f23c297dbb2178d30e97fd8804b0f89ab1215c","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                txn.add(self.ovsdb.db_set("},{"line_number":808,"context_line":"                    \u0027Controller\u0027, controller_uuid, *attr))"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_3b6d1232","line":810,"in_reply_to":"df87a7cf_98b9c4ea","updated":"2017-12-05 11:32:25.000000000","message":"but isn\u0027t this controller rate_limit parameter related to logs speed in OVS?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                txn.add(self.ovsdb.db_set("},{"line_number":808,"context_line":"                    \u0027Controller\u0027, controller_uuid, *attr))"},{"line_number":809,"context_line":""},{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_98b9c4ea","line":810,"in_reply_to":"df87a7cf_f5d11759","updated":"2017-12-05 10:32:13.000000000","message":"IMO, I\u0027d like to keep the name of this function to make it as a helper function. Is that acceptable for you? :)","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":814,"context_line":"        \"\"\""},{"line_number":815,"context_line":"        self.set_controller_field("},{"line_number":816,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_15d7db4d","line":813,"updated":"2017-12-04 12:49:27.000000000","message":"if this value should be at least 100 maybe You should add some checking what value is passed really and raise exception or log some info and change to 100 if it\u0027s lower?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":810,"context_line":"    def set_controller_rate_limit(self, controller_rate_limit):"},{"line_number":811,"context_line":"        \"\"\"Set bridge controller_rate_limit"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":814,"context_line":"        \"\"\""},{"line_number":815,"context_line":"        self.set_controller_field("},{"line_number":816,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_05930dfc","line":813,"in_reply_to":"df87a7cf_15d7db4d","updated":"2017-12-05 10:32:13.000000000","message":"Done","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":815,"context_line":"        self.set_controller_field("},{"line_number":816,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def set_controller_burst_limit(self, controller_burst_limit):"},{"line_number":819,"context_line":"        \"\"\"Set bridge controller_burst_limit"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        :param controller_burst_limit: at least 25"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_b5cb8fa3","line":818,"updated":"2017-12-04 12:49:27.000000000","message":"nit: I would put \"logging\" (or something like that) in method name as now it can be missleading that it\u0027s related to QoS rate_limit somehow :)","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":815,"context_line":"        self.set_controller_field("},{"line_number":816,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"},{"line_number":817,"context_line":""},{"line_number":818,"context_line":"    def set_controller_burst_limit(self, controller_burst_limit):"},{"line_number":819,"context_line":"        \"\"\"Set bridge controller_burst_limit"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        :param controller_burst_limit: at least 25"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_58cb3c71","line":818,"in_reply_to":"df87a7cf_b5cb8fa3","updated":"2017-12-05 10:32:13.000000000","message":"Please see my answer at L810.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":818,"context_line":"    def set_controller_burst_limit(self, controller_burst_limit):"},{"line_number":819,"context_line":"        \"\"\"Set bridge controller_burst_limit"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        :param controller_burst_limit: at least 25"},{"line_number":822,"context_line":"        \"\"\""},{"line_number":823,"context_line":"        self.set_controller_field("},{"line_number":824,"context_line":"            \u0027controller_burst_limit\u0027, controller_burst_limit)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_d5d09353","line":821,"updated":"2017-12-04 12:49:27.000000000","message":"if this value should be at least 25 maybe You should add some checking what value is passed really and raise exception or log some info and change to 100 if it\u0027s lower?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":818,"context_line":"    def set_controller_burst_limit(self, controller_burst_limit):"},{"line_number":819,"context_line":"        \"\"\"Set bridge controller_burst_limit"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        :param controller_burst_limit: at least 25"},{"line_number":822,"context_line":"        \"\"\""},{"line_number":823,"context_line":"        self.set_controller_field("},{"line_number":824,"context_line":"            \u0027controller_burst_limit\u0027, controller_burst_limit)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_258e51d0","line":821,"in_reply_to":"df87a7cf_d5d09353","updated":"2017-12-05 10:32:13.000000000","message":"Done","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":831,"context_line":"        \"\"\""},{"line_number":832,"context_line":"        if controller_rate_limit \u003c 100:"},{"line_number":833,"context_line":"            LOG.warning(\"rate limit\u0027s value must be at least 100\")"},{"line_number":834,"context_line":"            controller_rate_limit \u003d 100"},{"line_number":835,"context_line":"        self.set_controller_field("}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_5146a97e","line":832,"range":{"start_line":832,"start_character":35,"end_line":832,"end_character":38},"updated":"2017-12-26 21:10:15.000000000","message":"nit: I would prefer to define it as constant somewhere and use where it is necessary","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":829,"context_line":""},{"line_number":830,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":831,"context_line":"        \"\"\""},{"line_number":832,"context_line":"        if controller_rate_limit \u003c 100:"},{"line_number":833,"context_line":"            LOG.warning(\"rate limit\u0027s value must be at least 100\")"},{"line_number":834,"context_line":"            controller_rate_limit \u003d 100"},{"line_number":835,"context_line":"        self.set_controller_field("}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_6012f50b","line":832,"range":{"start_line":832,"start_character":35,"end_line":832,"end_character":38},"in_reply_to":"bf8cb3f7_5146a97e","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param controller_burst_limit: at least 25"},{"line_number":842,"context_line":"        \"\"\""},{"line_number":843,"context_line":"        if controller_burst_limit \u003c 25:"},{"line_number":844,"context_line":"            LOG.warning(\"burst limit\u0027s value must be at least 25\")"},{"line_number":845,"context_line":"            controller_burst_limit \u003d 25"},{"line_number":846,"context_line":"        self.set_controller_field("}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_71496d89","line":843,"range":{"start_line":843,"start_character":36,"end_line":843,"end_character":38},"updated":"2017-12-26 21:10:15.000000000","message":"nit: I would prefer to define it as constant somewhere and use where it is necessary","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param controller_burst_limit: at least 25"},{"line_number":842,"context_line":"        \"\"\""},{"line_number":843,"context_line":"        if controller_burst_limit \u003c 25:"},{"line_number":844,"context_line":"            LOG.warning(\"burst limit\u0027s value must be at least 25\")"},{"line_number":845,"context_line":"            controller_burst_limit \u003d 25"},{"line_number":846,"context_line":"        self.set_controller_field("}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_00f9a9c6","line":843,"range":{"start_line":843,"start_character":36,"end_line":843,"end_character":38},"in_reply_to":"bf8cb3f7_71496d89","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":833,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":834,"context_line":"        \"\"\""},{"line_number":835,"context_line":"        if controller_rate_limit \u003c CTRL_RATE_LIMIT_MIN:"},{"line_number":836,"context_line":"            LOG.warning(\"rate limit\u0027s value must be at least 100\")"},{"line_number":837,"context_line":"            controller_rate_limit \u003d CTRL_RATE_LIMIT_MIN"},{"line_number":838,"context_line":"        self.set_controller_field("},{"line_number":839,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_561f9f6b","line":836,"range":{"start_line":836,"start_character":16,"end_line":836,"end_character":23},"updated":"2018-01-03 12:50:25.000000000","message":"Is this a correct logging level, shouldn\u0027t it be just info? What should administrator or developer do in order to eliminate the warning message?","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":833,"context_line":"        :param controller_rate_limit: at least 100"},{"line_number":834,"context_line":"        \"\"\""},{"line_number":835,"context_line":"        if controller_rate_limit \u003c CTRL_RATE_LIMIT_MIN:"},{"line_number":836,"context_line":"            LOG.warning(\"rate limit\u0027s value must be at least 100\")"},{"line_number":837,"context_line":"            controller_rate_limit \u003d CTRL_RATE_LIMIT_MIN"},{"line_number":838,"context_line":"        self.set_controller_field("},{"line_number":839,"context_line":"            \u0027controller_rate_limit\u0027, controller_rate_limit)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_6c767da7","line":836,"range":{"start_line":836,"start_character":16,"end_line":836,"end_character":23},"in_reply_to":"9f91af0f_561f9f6b","updated":"2018-01-04 07:17:11.000000000","message":"Thanks for your teaching. :). LOG.info is better.","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"}],"neutron/agent/linux/openvswitch_firewall/constants.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f2635f4b9302fd54b2ae0cf50fc575e5118171db","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    constants.IP_PROTOCOL_MAP[proto]: proto for proto in"},{"line_number":48,"context_line":"    PROTOCOLS_WITH_PORTS}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"ethertype_to_dl_type_map \u003d {"},{"line_number":52,"context_line":"    constants.IPv4: n_const.ETHERTYPE_IP,"},{"line_number":53,"context_line":"    constants.IPv6: n_const.ETHERTYPE_IPV6,"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f515b1d_b7306409","line":50,"updated":"2017-09-22 08:14:01.000000000","message":"what is the reason for this line?","commit_id":"6bc086ff47063fd4bbb4eb054c182dafb0c70da9"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7396d59f2528037dffad081ad63d1227378af561","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    constants.IP_PROTOCOL_MAP[proto]: proto for proto in"},{"line_number":48,"context_line":"    PROTOCOLS_WITH_PORTS}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"ethertype_to_dl_type_map \u003d {"},{"line_number":52,"context_line":"    constants.IPv4: n_const.ETHERTYPE_IP,"},{"line_number":53,"context_line":"    constants.IPv6: n_const.ETHERTYPE_IPV6,"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f515b1d_baa04ba7","line":50,"in_reply_to":"7f515b1d_b7306409","updated":"2017-09-22 08:28:44.000000000","message":"It should be remove.","commit_id":"6bc086ff47063fd4bbb4eb054c182dafb0c70da9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"REG_PORT \u003d 5"},{"line_number":36,"context_line":"REG_NET \u003d 6"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# for logging remote group rule"},{"line_number":39,"context_line":"REG_REMOTE_GROUP \u003d 7"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_e4c99a5a","line":37,"updated":"2017-12-05 12:09:01.000000000","message":"Nit: Maybe not leaving an empty line to group it to other openflow registries","commit_id":"e07baaed0c53ba33ca7eedbdbef44d634d9df597"}],"neutron/agent/linux/openvswitch_firewall/firewall.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"93b7d67b41645c841614546e705afbdc9164e395","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            actions\u003d\u0027drop\u0027"},{"line_number":707,"context_line":"        )"},{"line_number":708,"context_line":"        # Drop traffic for removed sg rules"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        self._add_flow("},{"line_number":711,"context_line":"            table\u003dovs_consts.RULES_EGRESS_TABLE,"},{"line_number":712,"context_line":"            priority\u003d50,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_ef4bb05c","line":709,"updated":"2017-05-26 07:02:13.000000000","message":"unnecessary white space change.","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"105133cbfa1277064212e570dc865eeae7dfe2c7","unresolved":false,"context_lines":[{"line_number":706,"context_line":"            actions\u003d\u0027drop\u0027"},{"line_number":707,"context_line":"        )"},{"line_number":708,"context_line":"        # Drop traffic for removed sg rules"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        self._add_flow("},{"line_number":711,"context_line":"            table\u003dovs_consts.RULES_EGRESS_TABLE,"},{"line_number":712,"context_line":"            priority\u003d50,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_485bb253","line":709,"in_reply_to":"ff0f0b1f_ef4bb05c","updated":"2017-05-26 09:32:10.000000000","message":"Done","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"93b7d67b41645c841614546e705afbdc9164e395","unresolved":false,"context_lines":[{"line_number":712,"context_line":"            priority\u003d50,"},{"line_number":713,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":714,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":715,"context_line":"            actions\u003d\u0027resubmit(, {:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":716,"context_line":"        )"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        for state in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_afa37800","line":715,"updated":"2017-05-26 07:02:13.000000000","message":"I think you can do something like:\n    actions\u003d(self.logging_driver.logging_enabled() ? \"controller\" : \"drop\")\ninstead. and use a special cookie here.","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"efa6a829431698fa274647cb817083580fc2cf59","unresolved":false,"context_lines":[{"line_number":712,"context_line":"            priority\u003d50,"},{"line_number":713,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":714,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":715,"context_line":"            actions\u003d\u0027resubmit(, {:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":716,"context_line":"        )"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        for state in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_362471c6","line":715,"in_reply_to":"ff0f0b1f_afa37800","updated":"2017-05-29 04:09:33.000000000","message":"Actually, I\u0027d like to separate logging flows and sg_rule flows. So I can delete logging flows are easier when logging objects related these logging flows was deleted. I think these code should be: actions\u003dis_logging_enabled() ? \"resubmit(, {:d})\".format(ovs_consts.LOG_DROP_TABLE): \u0027drop\u0027. Do you think so?","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"105133cbfa1277064212e570dc865eeae7dfe2c7","unresolved":false,"context_lines":[{"line_number":712,"context_line":"            priority\u003d50,"},{"line_number":713,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":714,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":715,"context_line":"            actions\u003d\u0027resubmit(, {:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":716,"context_line":"        )"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        for state in ("}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_2349bf5f","line":715,"in_reply_to":"ff0f0b1f_afa37800","updated":"2017-05-26 09:32:10.000000000","message":"Thank for your suggestion! I just separate patch-set for more easier in review processing. So I\u0027d like to update later. By the way, I have created a google document at https://goo.gl/cpfnFl. It describe my implementation, Could you please take a look at it and give me your idea if any. Thanks in advance.","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"95400c6d500be93afd1baded9305ca8a9b5d0fc3","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            priority\u003d50,"},{"line_number":712,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":713,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":714,"context_line":"            actions\u003d(\u0027resubmit(, {:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":715,"context_line":"                     if rules.is_logging_enabled() else \u0027drop\u0027)"},{"line_number":716,"context_line":"        )"},{"line_number":717,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_404f926a","line":714,"range":{"start_line":714,"start_character":32,"end_line":714,"end_character":33},"updated":"2017-06-02 07:42:49.000000000","message":"please drop this white space.\nfor some reason, white spaces aren\u0027t used in action strings.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            priority\u003d50,"},{"line_number":712,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":713,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":714,"context_line":"            actions\u003d(\u0027resubmit(, {:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":715,"context_line":"                     if rules.is_logging_enabled() else \u0027drop\u0027)"},{"line_number":716,"context_line":"        )"},{"line_number":717,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_0409d0db","line":714,"range":{"start_line":714,"start_character":32,"end_line":714,"end_character":33},"in_reply_to":"df140735_404f926a","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a92cc24843203ac789b5bbf8577c259c6a07f18a","unresolved":false,"context_lines":[{"line_number":724,"context_line":"            priority\u003d50,"},{"line_number":725,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":726,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":727,"context_line":"            actions\u003d(\u0027resubmit(,{:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":728,"context_line":"                     if log_ext.is_logging_enabled() else \u0027drop\u0027)"},{"line_number":729,"context_line":"        )"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        for state in ("}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_34c0b750","line":728,"range":{"start_line":727,"start_character":21,"end_line":728,"end_character":64},"updated":"2017-07-10 16:25:23.000000000","message":"How about creating a default drop rule with low priority in LOG_DROP_TABLE and submit the packets always there. Then if the feature is enabled, it can create flow rules with higher priority than the \u0027drop\u0027. This way you\u0027ll separate logging feature from firewalling. (no need to import log_extension).","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"8f4f709813b2d6902dd1f546d4a52468825f8ae5","unresolved":false,"context_lines":[{"line_number":724,"context_line":"            priority\u003d50,"},{"line_number":725,"context_line":"            reg_port\u003dport.ofport,"},{"line_number":726,"context_line":"            ct_mark\u003dovsfw_consts.CT_MARK_INVALID,"},{"line_number":727,"context_line":"            actions\u003d(\u0027resubmit(,{:d})\u0027.format(ovs_consts.LOG_DROP_TABLE)"},{"line_number":728,"context_line":"                     if log_ext.is_logging_enabled() else \u0027drop\u0027)"},{"line_number":729,"context_line":"        )"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"        for state in ("}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_55f89847","line":728,"range":{"start_line":727,"start_character":21,"end_line":728,"end_character":64},"in_reply_to":"3f1d235d_34c0b750","updated":"2017-07-12 02:38:24.000000000","message":"That\u0027s sound good. I will consider it in next patch-set.","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"939df09b4337ea710452fa6fcd566102343d00e7","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"            # Install actions\u003daccept flows."},{"line_number":1025,"context_line":"            for conj_id in all_conj_ids:"},{"line_number":1026,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1027,"context_line":"                        port, conj_id, sec_group_id, direction, ethertype):"},{"line_number":1028,"context_line":"                    self._add_flow(**flow)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"    def add_flows_from_rules(self, port):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff82abbf_b237d04d","line":1027,"updated":"2017-11-24 05:06:47.000000000","message":"This sec_group_id isn\u0027t reflected in the match part of flows, so IIUC it is possible you get possible multiple flow matches, which problem I solved in https://review.openstack.org/#/c/492404/ .\nI\u0027m afraid you need a better way to handle this.","commit_id":"575a5111a27c655e78b81baee581360c149e69e1"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"4a3229b09eb0598479b790f2fd23e8847baab7f7","unresolved":false,"context_lines":[{"line_number":1024,"context_line":"            # Install actions\u003daccept flows."},{"line_number":1025,"context_line":"            for conj_id in all_conj_ids:"},{"line_number":1026,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1027,"context_line":"                        port, conj_id, sec_group_id, direction, ethertype):"},{"line_number":1028,"context_line":"                    self._add_flow(**flow)"},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"    def add_flows_from_rules(self, port):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff82abbf_757cd21e","line":1027,"in_reply_to":"ff82abbf_b237d04d","updated":"2017-11-24 06:13:46.000000000","message":"Thanks for your notice. Actually, I don\u0027t aware about that. So do you have any suggestion for me?","commit_id":"575a5111a27c655e78b81baee581360c149e69e1"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"5798cedb5db261ec965c671e2a875b6ca18c4b58","unresolved":false,"context_lines":[{"line_number":211,"context_line":"class ConjIdMap(object):"},{"line_number":212,"context_line":"    \"\"\"Handle conjuction ID allocations and deallocations.\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def __new__(cls):"},{"line_number":215,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":216,"context_line":"            cls._instance \u003d super(ConjIdMap, cls).__new__(cls)"},{"line_number":217,"context_line":"        return cls._instance"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_49dd9e40","line":214,"updated":"2017-12-05 20:52:42.000000000","message":"I think you can make another singleton class that maps sg_id to 32bit number, and keep ConjIdMap intact.","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"91e4fe926f9e805b58503a9fd05f89768edc0b2c","unresolved":false,"context_lines":[{"line_number":211,"context_line":"class ConjIdMap(object):"},{"line_number":212,"context_line":"    \"\"\"Handle conjuction ID allocations and deallocations.\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def __new__(cls):"},{"line_number":215,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":216,"context_line":"            cls._instance \u003d super(ConjIdMap, cls).__new__(cls)"},{"line_number":217,"context_line":"        return cls._instance"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_e65a8a28","line":214,"in_reply_to":"df87a7cf_18183d7f","updated":"2017-12-06 14:35:03.000000000","message":"conj_id is just a surrogate of sg_id in the logging code.\nYou can have a singleton SgIdMap instead and pass down sg_id (or 32bit id created by SgIdMap) to create_conj_flows and create_accept_flows.\n\nIn that way, the logging code can be much simpler, afaik.","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"07f04750fae138400170c285c85f46b5d398f7c2","unresolved":false,"context_lines":[{"line_number":211,"context_line":"class ConjIdMap(object):"},{"line_number":212,"context_line":"    \"\"\"Handle conjuction ID allocations and deallocations.\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def __new__(cls):"},{"line_number":215,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":216,"context_line":"            cls._instance \u003d super(ConjIdMap, cls).__new__(cls)"},{"line_number":217,"context_line":"        return cls._instance"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_18183d7f","line":214,"in_reply_to":"df87a7cf_49dd9e40","updated":"2017-12-06 03:23:22.000000000","message":"Can you give me more detail about your idea? I think that making ConjIMap is a simplest way to get conj_id from logging code. Is there any issue with making ConjIdMap as a singletion class?","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ecce32c3040974daf75be8304d43d0062db7832e","unresolved":false,"context_lines":[{"line_number":211,"context_line":"class ConjIdMap(object):"},{"line_number":212,"context_line":"    \"\"\"Handle conjuction ID allocations and deallocations.\"\"\""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def __new__(cls):"},{"line_number":215,"context_line":"        if not hasattr(cls, \u0027_instance\u0027):"},{"line_number":216,"context_line":"            cls._instance \u003d super(ConjIdMap, cls).__new__(cls)"},{"line_number":217,"context_line":"        return cls._instance"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_dab949cc","line":214,"in_reply_to":"df87a7cf_e65a8a28","updated":"2017-12-07 07:25:09.000000000","message":"Actually, if we introduce a SgIdMap, then ovsfw code will be more complicated, right? Moreover, I\u0027d like to avoid modifying in ovsfw as much as possible at the moment. In future if there is a optimizing for flows of sg_rules overlapping, then we can update logging code by SgIdMap as your mention. Is that acceptable for you?","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"                        flows, 2, conj_ids):"},{"line_number":1065,"context_line":"                    self._add_flow(**flow)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"            # Install actions\u003daccept flows."},{"line_number":1068,"context_line":"            for conj_id in all_conj_ids:"},{"line_number":1069,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1070,"context_line":"                        port, conj_id, direction, ethertype):"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_315be554","line":1067,"updated":"2017-12-26 21:10:15.000000000","message":"nit: is this comment still up to date?","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"                        flows, 2, conj_ids):"},{"line_number":1065,"context_line":"                    self._add_flow(**flow)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"            # Install actions\u003daccept flows."},{"line_number":1068,"context_line":"            for conj_id in all_conj_ids:"},{"line_number":1069,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1070,"context_line":"                        port, conj_id, direction, ethertype):"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_e0fda5b1","line":1067,"in_reply_to":"bf8cb3f7_315be554","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1070,"context_line":"                        port, conj_id, direction, ethertype):"},{"line_number":1071,"context_line":"                    flow[\u0027actions\u0027] \u003d \"set_field:{:d}-\u003ereg{:d},{:s}\".format("},{"line_number":1072,"context_line":"                        int(flow[\u0027conj_id\u0027]),"},{"line_number":1073,"context_line":"                        ovsfw_consts.REG_REMOTE_GROUP,"},{"line_number":1074,"context_line":"                        flow[\u0027actions\u0027]"},{"line_number":1075,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_190e2834","line":1072,"range":{"start_line":1072,"start_character":24,"end_line":1072,"end_character":27},"updated":"2018-01-03 12:50:25.000000000","message":"Is it needed? format should convert the value according the string, in this case {:d} which is decimal integer.","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"                for flow in rules.create_conj_flows("},{"line_number":1070,"context_line":"                        port, conj_id, direction, ethertype):"},{"line_number":1071,"context_line":"                    flow[\u0027actions\u0027] \u003d \"set_field:{:d}-\u003ereg{:d},{:s}\".format("},{"line_number":1072,"context_line":"                        int(flow[\u0027conj_id\u0027]),"},{"line_number":1073,"context_line":"                        ovsfw_consts.REG_REMOTE_GROUP,"},{"line_number":1074,"context_line":"                        flow[\u0027actions\u0027]"},{"line_number":1075,"context_line":"                    )"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_2c571505","line":1072,"range":{"start_line":1072,"start_character":24,"end_line":1072,"end_character":27},"in_reply_to":"9f91af0f_190e2834","updated":"2018-01-04 07:17:11.000000000","message":"Indeed, no need it :). Thanks.","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"}],"neutron/agent/linux/openvswitch_firewall/rules.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"93b7d67b41645c841614546e705afbdc9164e395","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                        ovs_consts.LOG_INGRESS_TABLE))"},{"line_number":183,"context_line":"    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":184,"context_line":"        flow[\u0027actions\u0027] \u003d (\u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"            flow[\u0027actions\u0027], ovs_consts.LOG_EGRESS_TABLE))"},{"line_number":186,"context_line":"    result.append(flow)"},{"line_number":187,"context_line":"    return result"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff0f0b1f_0fbb840e","line":185,"updated":"2017-05-26 07:02:13.000000000","message":"ditto","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"77690ec48f0377014214d5329038d21f16a426e5","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                        ovs_consts.LOG_INGRESS_TABLE))"},{"line_number":183,"context_line":"    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":184,"context_line":"        flow[\u0027actions\u0027] \u003d (\u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"            flow[\u0027actions\u0027], ovs_consts.LOG_EGRESS_TABLE))"},{"line_number":186,"context_line":"    result.append(flow)"},{"line_number":187,"context_line":"    return result"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_b1a08ba7","line":185,"in_reply_to":"ff0f0b1f_0fbb840e","updated":"2017-05-29 04:40:37.000000000","message":"From my opinion, If we separate logging flows and sg_rule flows, then we can add/delete logging rules are easier. Moreover, not all sg_rule will be logged, It depends on logging objects was created by operators. So these code would look like:\n\nif flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_INGRESS_TABLE:\n        flow[\u0027actions\u0027] \u003d (\n            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027\\\n                .format(ovsfw_consts.REG_NET, flow[\u0027actions\u0027])\n        if is_logging_enabled:\n            flow[\u0027actions\u0027] \u003d \u0027{:s}, resubmit(,{:d})\u0027.format(flow[\u0027action\u0027], ovs_consts.LOG_INGRESS_TABLE)\n    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:\n        if is_logging_enabled:\n            flow[\u0027actions\u0027] \u003d \u0027{:s}, resubmit(,{:d})\u0027.format(flow[\u0027action\u0027], ovs_consts.LOG_EGRESS_TABLE)\n\nDo you think so?","commit_id":"e2f770df6270c7e1b8e4eb352bd2aac264de6391"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        if is_logging_enabled():"},{"line_number":188,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":189,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":190,"context_line":"    if ((flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE) and"},{"line_number":191,"context_line":"            is_logging_enabled()):"},{"line_number":192,"context_line":"        flow[\u0027actions\u0027] \u003d (\u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":193,"context_line":"            flow[\u0027actions\u0027], ovs_consts.LOG_EGRESS_TABLE))"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0b353b8f","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":9},"updated":"2017-06-07 14:39:12.000000000","message":"Nit: parenthesis not needed here","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        if is_logging_enabled():"},{"line_number":188,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":189,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":190,"context_line":"    if ((flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE) and"},{"line_number":191,"context_line":"            is_logging_enabled()):"},{"line_number":192,"context_line":"        flow[\u0027actions\u0027] \u003d (\u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":193,"context_line":"            flow[\u0027actions\u0027], ovs_consts.LOG_EGRESS_TABLE))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_a4f9fcc8","line":190,"range":{"start_line":190,"start_character":8,"end_line":190,"end_character":9},"in_reply_to":"df140735_0b353b8f","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"15563bad5cf23cefa585c2d4370a69eaa9a9a46d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f1a1f67_b8788c8f","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"updated":"2017-07-19 13:09:27.000000000","message":"why this needs to be conditional?","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f2149bd8d0d07b9fecc4ab255537a92caa357414","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"ff346bd7_5e20c8b0","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"1f1a1f67_b8788c8f","updated":"2017-07-26 10:08:08.000000000","message":"Basically, if logging extension is enabled, \u0027ACCEPT\u0027 packet will be resubmitted to LOG_INGRESS_TABLE/LOG_EGRESS_TABLE for logging. If logging extension isn\u0027t enabled, we no need resubmitted \u0027ACCEPT\u0027 packet to LOG_INGRESS_TABLE/LOG_EGRESS_TABLE. That\u0027s my idea.","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"097afe728a3b70d207818312303299f017bc6471","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"df3967d1_dd872a0f","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"df3967d1_87e27100","updated":"2017-08-02 08:48:24.000000000","message":"Nothing wrong. But if logging extension not enabled, then flows look not pretty and it\u0027s will affect to performance of security group a bit. So we\u0027d like to keep this logic. Do you think so? I won\u0027t hesitate to change it if there is better idea. :)","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"99f965b22f630c372f66d4048d48163646de9a72","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"df3967d1_53a7ab50","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"df3967d1_dd5f2a70","updated":"2017-08-02 09:50:53.000000000","message":"Actually, I haven\u0027t measured it yet. From maintenance perspective, separating logging and SG as much as possible that will give us more easier to debug, IMO.","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"864f10597c0589471e2660f349e9a39364ab8068","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"df3967d1_dd5f2a70","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"df3967d1_dd872a0f","updated":"2017-08-02 08:54:53.000000000","message":"is the performance effect measurable?\notherwise less config knobs are better.","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"a9cb9d016c8039dca179bc81bc16fab604c77681","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":181,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":182,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":183,"context_line":"        if log_ext.is_logging_enabled():"},{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"}],"source_content_type":"text/x-python","patch_set":18,"id":"df3967d1_87e27100","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":40},"in_reply_to":"ff346bd7_5e20c8b0","updated":"2017-08-02 07:53:21.000000000","message":"what\u0027s wrong with always resubmitting?","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"15563bad5cf23cefa585c2d4370a69eaa9a9a46d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":185,"context_line":"                flow[\u0027actions\u0027], ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":186,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":187,"context_line":"            log_ext.is_logging_enabled()):"},{"line_number":188,"context_line":"        flow[\u0027actions\u0027] \u003d (\u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":189,"context_line":"            flow[\u0027actions\u0027], ovs_consts.LOG_EGRESS_TABLE))"},{"line_number":190,"context_line":"    result.append(flow)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1f1a1f67_987b908a","line":187,"range":{"start_line":187,"start_character":0,"end_line":187,"end_character":42},"updated":"2017-07-19 13:09:27.000000000","message":"ditto","commit_id":"8ce7dfb0f7a93d70c4d87fbdb48f86612d12333e"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"60dac13484a7dfb96eb7434885ecfd439a45d5cd","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    # mark this flow as remote rule"},{"line_number":194,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":195,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027. \\"},{"line_number":196,"context_line":"            format(flow[\u0027actions\u0027], ovsfw_consts.REMOTE_GROUP_MARK,"},{"line_number":197,"context_line":"                   ovsfw_consts.REG_REMOTE_GROUP, log_table)"},{"line_number":198,"context_line":"    else:"},{"line_number":199,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("}],"source_content_type":"text/x-python","patch_set":23,"id":"df3967d1_a441f33b","line":196,"range":{"start_line":196,"start_character":37,"end_line":196,"end_character":67},"updated":"2017-08-02 07:02:56.000000000","message":"I\u0027m not sure if we don\u0027t need to distinguish multiple conj_ids here.\n\nAnd please note some flow changes will happen in order to address bug/1708092","commit_id":"5ce4c8cd7622275f7b72759234c7a506035e11de"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"9c513593bd6ec9b1a3ace4bb881b1aa0d91153f9","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"def append_log_actions(flow, log_table):"},{"line_number":208,"context_line":"    # mark this flow as remote rule"},{"line_number":209,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":210,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.\\"},{"line_number":211,"context_line":"            format(flow[\u0027actions\u0027], ovsfw_consts.REMOTE_GROUP_MARK,"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f5c4f37_e4e5133a","line":208,"updated":"2017-09-21 07:01:47.000000000","message":"maybe you can tweak callers so that this function can have a hash of sg_id and put it in a ovs register just before sending the packet into a log_table.","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"cc230c8b84e898ca3efe028a074bcc843b7d4f89","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"def append_log_actions(flow, log_table):"},{"line_number":208,"context_line":"    # mark this flow as remote rule"},{"line_number":209,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":210,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.\\"},{"line_number":211,"context_line":"            format(flow[\u0027actions\u0027], ovsfw_consts.REMOTE_GROUP_MARK,"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f5c4f37_043b8738","line":208,"in_reply_to":"9f5c4f37_e4e5133a","updated":"2017-09-21 07:22:20.000000000","message":"That\u0027s reason i\u0027d like to add \u0027sg_id\u0027 into each \u0027accept conj_flow\u0027. So I asked you about that on https://review.openstack.org/#/c/492404/9/neutron/agent/linux/openvswitch_firewall/firewall.py@1020 :). Is it acceptable?","commit_id":"ed7e03dda264835bcec43949a171b895abd46feb"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    flow_template \u003d {"},{"line_number":250,"context_line":"        \u0027priority\u0027: 70,"},{"line_number":251,"context_line":"        \u0027conj_id\u0027: conj_id,"},{"line_number":252,"context_line":"        # reserve for logging"},{"line_number":253,"context_line":"        \u0027sg_id\u0027: sg_id,"},{"line_number":254,"context_line":"        \u0027dl_type\u0027: ovsfw_consts.ethertype_to_dl_type_map[ethertype],"},{"line_number":255,"context_line":"        # This reg_port matching is for delete_all_port_flows."},{"line_number":256,"context_line":"        # The matching is redundant as it has been done by"}],"source_content_type":"text/x-python","patch_set":38,"id":"3f4b6375_246b32f2","line":253,"range":{"start_line":252,"start_character":0,"end_line":253,"end_character":23},"updated":"2017-12-05 12:09:01.000000000","message":"I don\u0027t like polluting the flow template with something that is not part of openflow. Is there a way to pass directly sg_id to append_log_actions as a parameter instead? It also introduces another unnecessary complexity on L216.\n\nWe could pass it down to create_accept_flows and from there to append_log_actions","commit_id":"e07baaed0c53ba33ca7eedbdbef44d634d9df597"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"},{"line_number":346,"context_line":"        append_log_actions(flow, ovs_consts.LOG_EGRESS_TABLE)"},{"line_number":347,"context_line":"    result.append(flow)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_95d9ab84","line":344,"updated":"2017-12-04 12:49:27.000000000","message":"You can place it inside this above \"if\" and then check \"if_logggig_enabled()\" only once","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"40f23c297dbb2178d30e97fd8804b0f89ab1215c","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"},{"line_number":346,"context_line":"        append_log_actions(flow, ovs_consts.LOG_EGRESS_TABLE)"},{"line_number":347,"context_line":"    result.append(flow)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_bb62823d","line":344,"in_reply_to":"df87a7cf_5879fc2c","updated":"2017-12-05 11:32:25.000000000","message":"Sorry, I made mistake in reading of indentations :) This is just fine for me","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"},{"line_number":346,"context_line":"        append_log_actions(flow, ovs_consts.LOG_EGRESS_TABLE)"},{"line_number":347,"context_line":"    result.append(flow)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_5879fc2c","line":344,"in_reply_to":"df87a7cf_95d9ab84","updated":"2017-12-05 10:32:13.000000000","message":"Sorry, I didn\u0027t get your point here? Can you give me more detail about your idea?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":340,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_5198f7be","line":342,"updated":"2017-12-05 12:09:01.000000000","message":"I don\u0027t like that ovs-firewall code is mixed with logging code. The previous change about sending packets to different table instead of drop is fine. Can we do something similar here? Like having a hook where packets are sent, which would be drop by default and whoever needs to use that table can override it?","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"5798cedb5db261ec965c671e2a875b6ca18c4b58","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":340,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_a63499fc","line":342,"in_reply_to":"df87a7cf_5198f7be","updated":"2017-12-05 20:52:42.000000000","message":"We can get rid of is_logging_enabled() and unconditionally send to those log tables instead. That will also simplify the code a bit.","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"07f04750fae138400170c285c85f46b5d398f7c2","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":340,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_b88911cb","line":342,"in_reply_to":"df87a7cf_a63499fc","updated":"2017-12-06 03:23:22.000000000","message":"Thanks for your suggestion. I agree. That will simplify the code a bit. Now I\u0027m looking forward Jakub\u0027s patch for that :)","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"95b2d23f720b3f931f87c8daa3854d651a7f6074","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        flow[\u0027actions\u0027] \u003d ("},{"line_number":340,"context_line":"            \u0027ct(commit,zone\u003dNXM_NX_REG{:d}[0..15]),{:s}\u0027.format("},{"line_number":341,"context_line":"                ovsfw_consts.REG_NET, flow[\u0027actions\u0027]))"},{"line_number":342,"context_line":"        if is_logging_enabled():"},{"line_number":343,"context_line":"            append_log_actions(flow, ovs_consts.LOG_INGRESS_TABLE)"},{"line_number":344,"context_line":"    if (flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE and"},{"line_number":345,"context_line":"            is_logging_enabled()):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_bdda3a48","line":342,"in_reply_to":"df87a7cf_b88911cb","updated":"2017-12-07 09:36:13.000000000","message":"@Jakub, I just want to confirm with you about:\nDo you mean that we just need to resubmit first accept packet to LOG_EGRESS_TABLE or LOG_INGRESS_TABLE? That means no need to check logging enabled or not, right?","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"5798cedb5db261ec965c671e2a875b6ca18c4b58","unresolved":false,"context_lines":[{"line_number":348,"context_line":"    return result"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"def append_log_actions(flow, log_table):"},{"line_number":352,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":353,"context_line":"        # pass conj_id information to log_table"},{"line_number":354,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.\\"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_4614ad4e","line":351,"updated":"2017-12-05 20:52:42.000000000","message":"This is another example of logging specific stuff in ovsfw.\nI think this is a necessary evil.","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":352,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":353,"context_line":"        # pass conj_id information to log_table"},{"line_number":354,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.\\"},{"line_number":355,"context_line":"            format(flow[\u0027actions\u0027], int(flow[\u0027conj_id\u0027]),"},{"line_number":356,"context_line":"                   ovsfw_consts.REG_REMOTE_GROUP, log_table)"},{"line_number":357,"context_line":"    else:"},{"line_number":358,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_31469351","line":355,"range":{"start_line":355,"start_character":36,"end_line":355,"end_character":40},"updated":"2017-12-05 12:09:01.000000000","message":"The int() conversion is done by format already()","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"18ef984bfe4076b409067a8851089b2addafc073","unresolved":false,"context_lines":[{"line_number":351,"context_line":"def append_log_actions(flow, log_table):"},{"line_number":352,"context_line":"    if \u0027conj_id\u0027 in flow:"},{"line_number":353,"context_line":"        # pass conj_id information to log_table"},{"line_number":354,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.\\"},{"line_number":355,"context_line":"            format(flow[\u0027actions\u0027], int(flow[\u0027conj_id\u0027]),"},{"line_number":356,"context_line":"                   ovsfw_consts.REG_REMOTE_GROUP, log_table)"},{"line_number":357,"context_line":"    else:"},{"line_number":358,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":359,"context_line":"            flow[\u0027actions\u0027], log_table)"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_5141d738","line":356,"range":{"start_line":354,"start_character":0,"end_line":356,"end_character":60},"updated":"2017-12-05 12:09:01.000000000","message":"To keep consistency with existing Neutron code consider:\n flow[\u0027actions\u0027] \u003d (\n     \u0027{:s},set_field:{:d}-\u003ereg{:d},resubmit(,{:d})\u0027.format(\n         flow[\u0027actions\u0027],\n         int(flow[\u0027conj_id\u0027]),\n         ovsfw_consts.REG_REMOTE_GROUP, log_table)","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"5798cedb5db261ec965c671e2a875b6ca18c4b58","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                   ovsfw_consts.REG_REMOTE_GROUP, log_table)"},{"line_number":357,"context_line":"    else:"},{"line_number":358,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027{:s},resubmit(,{:d})\u0027.format("},{"line_number":359,"context_line":"            flow[\u0027actions\u0027], log_table)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"def substitute_conjunction_actions(flows, dimension, conj_ids):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_e602a10b","line":359,"updated":"2017-12-05 20:52:42.000000000","message":"Please consider sending something that teaches sg_id for logging tables. That can remove the complexity of logging tables.","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"}],"neutron/plugins/ml2/drivers/openvswitch/agent/openflow/br_cookie.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a92cc24843203ac789b5bbf8577c259c6a07f18a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return uuid_stamp"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def unset_cookie(self, cookie):"},{"line_number":48,"context_line":"        if cookie in self._reserved_cookies:"},{"line_number":49,"context_line":"            self._reserved_cookies.remove(cookie)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def set_agent_uuid_stamp(self, val):"},{"line_number":52,"context_line":"        self._reserved_cookies.add(val)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_d4f8637d","line":49,"range":{"start_line":48,"start_character":8,"end_line":49,"end_character":49},"updated":"2017-07-10 16:25:23.000000000","message":"self._reserved_cookies.discard(cookie)","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"8f4f709813b2d6902dd1f546d4a52468825f8ae5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        return uuid_stamp"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def unset_cookie(self, cookie):"},{"line_number":48,"context_line":"        if cookie in self._reserved_cookies:"},{"line_number":49,"context_line":"            self._reserved_cookies.remove(cookie)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def set_agent_uuid_stamp(self, val):"},{"line_number":52,"context_line":"        self._reserved_cookies.add(val)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_f59e8405","line":49,"range":{"start_line":48,"start_character":8,"end_line":49,"end_character":49},"in_reply_to":"3f1d235d_d4f8637d","updated":"2017-07-12 02:38:24.000000000","message":"Done","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"}],"neutron/plugins/ml2/drivers/openvswitch/mech_driver/mech_openvswitch.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a92cc24843203ac789b5bbf8577c259c6a07f18a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            portbindings.VIF_TYPE_OVS,"},{"line_number":58,"context_line":"            vif_details)"},{"line_number":59,"context_line":"        ovs_qos_driver.register()"},{"line_number":60,"context_line":"        log_driver.register()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_allowed_network_types(self, agent):"},{"line_number":63,"context_line":"        return (agent[\u0027configurations\u0027].get(\u0027tunnel_types\u0027, []) +"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_d46bc31c","line":60,"updated":"2017-07-10 16:25:23.000000000","message":"Should this be conditional?","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"8f4f709813b2d6902dd1f546d4a52468825f8ae5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            portbindings.VIF_TYPE_OVS,"},{"line_number":58,"context_line":"            vif_details)"},{"line_number":59,"context_line":"        ovs_qos_driver.register()"},{"line_number":60,"context_line":"        log_driver.register()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_allowed_network_types(self, agent):"},{"line_number":63,"context_line":"        return (agent[\u0027configurations\u0027].get(\u0027tunnel_types\u0027, []) +"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_b5880cc6","line":60,"in_reply_to":"3f1d235d_d46bc31c","updated":"2017-07-12 02:38:24.000000000","message":"Done","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"}],"neutron/services/logapi/agent/drivers/base.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        information."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        :param context: current running context information"},{"line_number":84,"context_line":"        :param log_objs: a list log objects being created"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_517be1f3","line":84,"range":{"start_line":84,"start_character":31,"end_line":84,"end_character":32},"updated":"2017-07-05 09:09:17.000000000","message":"of","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        information."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        :param context: current running context information"},{"line_number":84,"context_line":"        :param log_objs: a list log objects being created"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_750274b6","line":84,"range":{"start_line":84,"start_character":31,"end_line":84,"end_character":32},"in_reply_to":"3f1d235d_517be1f3","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        information."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        :param context: current running context information"},{"line_number":96,"context_line":"        :param log_objs: a list log objects being updated"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_b16b551c","line":96,"updated":"2017-07-05 09:09:17.000000000","message":"ditto","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        information."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        :param context: current running context information"},{"line_number":96,"context_line":"        :param log_objs: a list log objects being updated"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        \"\"\""},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_95f3d0e7","line":96,"in_reply_to":"3f1d235d_b16b551c","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        information."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        :param context: current running context information"},{"line_number":108,"context_line":"        :param log_objs: a list log objects being deleted"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_115a0982","line":108,"updated":"2017-07-05 09:09:17.000000000","message":"ditto","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        information."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        :param context: current running context information"},{"line_number":108,"context_line":"        :param log_objs: a list log objects being deleted"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_b5f80cc4","line":108,"in_reply_to":"3f1d235d_115a0982","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"}],"neutron/services/logapi/agent/drivers/openvswitch/log_ryuapp.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":28,"context_line":"    packet_in_handlers \u003d []"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def start(self):"},{"line_number":31,"context_line":"        # Start Ryu event loop thread"},{"line_number":32,"context_line":"        super(OVSLogRyuApp, self).start()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":35,"context_line":"        self.packet_in_handlers.append(caller)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_cbce23b3","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":41},"updated":"2017-06-07 14:39:12.000000000","message":"Is it needed?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":28,"context_line":"    packet_in_handlers \u003d []"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def start(self):"},{"line_number":31,"context_line":"        # Start Ryu event loop thread"},{"line_number":32,"context_line":"        super(OVSLogRyuApp, self).start()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":35,"context_line":"        self.packet_in_handlers.append(caller)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_7f3c91be","line":32,"range":{"start_line":30,"start_character":0,"end_line":32,"end_character":41},"in_reply_to":"df140735_cbce23b3","updated":"2017-06-14 07:18:59.000000000","message":"I\u0027m not sure that\u0027s necessary or not. \n@Iwamoto-san: Do I need to add a handle function to terminate Ryu\u0027s AppManager.run_apps() as [1] worked?\n\n[1] https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/ovs_ryuapp.py#L69 ?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"}],"neutron/services/logapi/agent/drivers/openvswitch/ovs_firewall_log.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron._i18n import _LW"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import handlers"},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_2ba35fb4","line":16,"updated":"2017-06-07 14:39:12.000000000","message":"This should go to L23 - but note that we don\u0027t support i18n [1], so you can remove it completely :)\n\n[1] https://docs.openstack.org/developer/oslo.i18n/guidelines.html#log-translation","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from neutron._i18n import _LW"},{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import handlers"},{"line_number":19,"context_line":"from oslo_log import log as logging"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_44fea8ae","line":16,"in_reply_to":"df140735_2ba35fb4","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import handlers"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ryu.base import app_manager"},{"line_number":22,"context_line":"from ryu.lib.packet import packet"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_eb81e7fc","line":20,"updated":"2017-06-07 14:39:12.000000000","message":"The all 3rd party libs should be in one block [2], remove this empty line.\n\n[2] https://docs.openstack.org/developer/hacking/#imports","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from oslo_config import cfg"},{"line_number":18,"context_line":"from oslo_log import handlers"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from ryu.base import app_manager"},{"line_number":22,"context_line":"from ryu.lib.packet import packet"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_242f2c40","line":20,"in_reply_to":"df140735_eb81e7fc","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"syslog_handler \u003d handlers.OSSysLogHandler()"},{"line_number":34,"context_line":"LOG.logger.addHandler(syslog_handler)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class Cookie(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_6bf15795","line":34,"updated":"2017-06-07 14:39:12.000000000","message":"Should this be done conditionally based on the use_syslog configuration option or it\u0027s the design that it\u0027s gonna always use the syslog.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":33,"context_line":"syslog_handler \u003d handlers.OSSysLogHandler()"},{"line_number":34,"context_line":"LOG.logger.addHandler(syslog_handler)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class Cookie(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_64788429","line":34,"in_reply_to":"df140735_6bf15795","updated":"2017-06-14 07:18:59.000000000","message":"basically, log-data will be output to log-file if option \u0027local_output_log_base\u0027 was specified, otherwise will be output to journal or syslog which depends on configuration option.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class Cookie(object):"},{"line_number":38,"context_line":"    def __init__(self, id, port, action, project):"},{"line_number":39,"context_line":"        self.id \u003d id"},{"line_number":40,"context_line":"        self.port \u003d port"},{"line_number":41,"context_line":"        self.action \u003d action"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0b1bfbcf","line":38,"range":{"start_line":38,"start_character":23,"end_line":38,"end_character":25},"updated":"2017-06-07 14:39:12.000000000","message":"id is a keyword, consider using id_","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class Cookie(object):"},{"line_number":38,"context_line":"    def __init__(self, id, port, action, project):"},{"line_number":39,"context_line":"        self.id \u003d id"},{"line_number":40,"context_line":"        self.port \u003d port"},{"line_number":41,"context_line":"        self.action \u003d action"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_04931051","line":38,"range":{"start_line":38,"start_character":23,"end_line":38,"end_character":25},"in_reply_to":"df140735_0b1bfbcf","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.log_object_refs.add(log_id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def remove_log_obj_ref(self, log_id):"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            self.log_object_refs.remove(log_id)"},{"line_number":51,"context_line":"        except KeyError:"},{"line_number":52,"context_line":"            pass"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def is_empty(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0b809bbf","line":52,"range":{"start_line":49,"start_character":7,"end_line":52,"end_character":16},"updated":"2017-06-07 14:39:12.000000000","message":"self.log_object_refs.discard(log_id)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.log_object_refs.add(log_id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def remove_log_obj_ref(self, log_id):"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            self.log_object_refs.remove(log_id)"},{"line_number":51,"context_line":"        except KeyError:"},{"line_number":52,"context_line":"            pass"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def is_empty(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_e499346e","line":52,"range":{"start_line":49,"start_character":7,"end_line":52,"end_character":16},"in_reply_to":"df140735_0b809bbf","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def is_empty(self):"},{"line_number":56,"context_line":"        return self.log_object_refs \u003d\u003d set()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class OFPortLog(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_eb59e78d","line":56,"range":{"start_line":56,"start_character":15,"end_line":56,"end_character":44},"updated":"2017-06-07 14:39:12.000000000","message":"This always instantiate a new set, consider\n\n return bool(self.log_object_refs)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @property"},{"line_number":55,"context_line":"    def is_empty(self):"},{"line_number":56,"context_line":"        return self.log_object_refs \u003d\u003d set()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class OFPortLog(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_c49cf85e","line":56,"range":{"start_line":56,"start_character":15,"end_line":56,"end_character":44},"in_reply_to":"df140735_eb59e78d","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.int_br \u003d self.agent_api.request_int_br()"},{"line_number":78,"context_line":"        self.int_br_deferred \u003d self.int_br.deferred(full_ordered\u003dTrue)"},{"line_number":79,"context_line":"        self._deferred \u003d False"},{"line_number":80,"context_line":"        self.log_ports \u003d {}"},{"line_number":81,"context_line":"        self.cookie_tables \u003d set([])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # set controller rate limit"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_c9090696","line":80,"range":{"start_line":80,"start_character":25,"end_line":80,"end_character":27},"updated":"2017-06-07 14:39:12.000000000","message":"Should this be a defaultdict? There are cases where you append to log_ports based on log_id but there is no guarantee the log_id is present.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        self.int_br \u003d self.agent_api.request_int_br()"},{"line_number":78,"context_line":"        self.int_br_deferred \u003d self.int_br.deferred(full_ordered\u003dTrue)"},{"line_number":79,"context_line":"        self._deferred \u003d False"},{"line_number":80,"context_line":"        self.log_ports \u003d {}"},{"line_number":81,"context_line":"        self.cookie_tables \u003d set([])"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # set controller rate limit"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_a4a33c9e","line":80,"range":{"start_line":80,"start_character":25,"end_line":80,"end_character":27},"in_reply_to":"df140735_c9090696","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":100,"context_line":"        msg \u003d ev.msg"},{"line_number":101,"context_line":"        cookie \u003d msg.cookie"},{"line_number":102,"context_line":"        pkt \u003d packet.Packet(msg.data)"},{"line_number":103,"context_line":"        cookie_entry \u003d self._get_cookie_by_id(cookie)"},{"line_number":104,"context_line":"        if cookie_entry:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_cbbaa36c","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":14},"updated":"2017-06-07 14:39:12.000000000","message":"Nit: Maybe cookie_id is more precise?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def packet_in_handler(self, ev):"},{"line_number":100,"context_line":"        msg \u003d ev.msg"},{"line_number":101,"context_line":"        cookie \u003d msg.cookie"},{"line_number":102,"context_line":"        pkt \u003d packet.Packet(msg.data)"},{"line_number":103,"context_line":"        cookie_entry \u003d self._get_cookie_by_id(cookie)"},{"line_number":104,"context_line":"        if cookie_entry:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_64ad2487","line":101,"range":{"start_line":101,"start_character":8,"end_line":101,"end_character":14},"in_reply_to":"df140735_cbbaa36c","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        for cookie in self.cookie_tables:"},{"line_number":122,"context_line":"            if cookie.port \u003d\u003d port_id and cookie.action \u003d\u003d action:"},{"line_number":123,"context_line":"                return cookie"},{"line_number":124,"context_line":"        return None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _get_cookie_by_id(self, cookie_id):"},{"line_number":127,"context_line":"        for cookie in self.cookie_tables:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_cba18348","line":124,"range":{"start_line":124,"start_character":0,"end_line":124,"end_character":19},"updated":"2017-06-07 14:39:12.000000000","message":"Nit: this is implicit","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        for cookie in self.cookie_tables:"},{"line_number":122,"context_line":"            if cookie.port \u003d\u003d port_id and cookie.action \u003d\u003d action:"},{"line_number":123,"context_line":"                return cookie"},{"line_number":124,"context_line":"        return None"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _get_cookie_by_id(self, cookie_id):"},{"line_number":127,"context_line":"        for cookie in self.cookie_tables:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_04bc30b9","line":124,"range":{"start_line":124,"start_character":0,"end_line":124,"end_character":19},"in_reply_to":"df140735_cba18348","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        for cookie in self.cookie_tables:"},{"line_number":128,"context_line":"            if str(cookie.id) \u003d\u003d str(cookie_id):"},{"line_number":129,"context_line":"                return cookie"},{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def generate_cookie(self, port_id, action, log_id, project_id):"},{"line_number":133,"context_line":"        cookie \u003d self._get_cookie(port_id, action)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_8b870bb6","line":130,"range":{"start_line":130,"start_character":0,"end_line":130,"end_character":19},"updated":"2017-06-07 14:39:12.000000000","message":"Nti: this is implicit","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        for cookie in self.cookie_tables:"},{"line_number":128,"context_line":"            if str(cookie.id) \u003d\u003d str(cookie_id):"},{"line_number":129,"context_line":"                return cookie"},{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def generate_cookie(self, port_id, action, log_id, project_id):"},{"line_number":133,"context_line":"        cookie \u003d self._get_cookie(port_id, action)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_e4b254e6","line":130,"range":{"start_line":130,"start_character":0,"end_line":130,"end_character":19},"in_reply_to":"df140735_8b870bb6","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def generate_cookie(self, port_id, action, log_id, project_id):"},{"line_number":133,"context_line":"        cookie \u003d self._get_cookie(port_id, action)"},{"line_number":134,"context_line":"        if cookie is not None:"},{"line_number":135,"context_line":"            cookie.add_log_obj_ref(log_id)"},{"line_number":136,"context_line":"            return cookie.id"},{"line_number":137,"context_line":"        cookie_id \u003d ovs_lib.generate_random_cookie()"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0b53fb40","line":134,"range":{"start_line":134,"start_character":11,"end_line":134,"end_character":29},"updated":"2017-06-07 14:39:12.000000000","message":"Given that _get_cookie returns either cookie or None, cookie will always be evaluated as True, so\n\n if cookie:","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def generate_cookie(self, port_id, action, log_id, project_id):"},{"line_number":133,"context_line":"        cookie \u003d self._get_cookie(port_id, action)"},{"line_number":134,"context_line":"        if cookie is not None:"},{"line_number":135,"context_line":"            cookie.add_log_obj_ref(log_id)"},{"line_number":136,"context_line":"            return cookie.id"},{"line_number":137,"context_line":"        cookie_id \u003d ovs_lib.generate_random_cookie()"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_c4b518cf","line":134,"range":{"start_line":134,"start_character":11,"end_line":134,"end_character":29},"in_reply_to":"df140735_0b53fb40","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def _handle_logging(self, action, context, log_resources):"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        for log_resource in self._iterate_log_resources(log_resources):"},{"line_number":155,"context_line":"            handler_name \u003d \"\".join((action, \"_\","},{"line_number":156,"context_line":"                                    log_resource.resource_type,"},{"line_number":157,"context_line":"                                    \"_log\"))"},{"line_number":158,"context_line":"            handler \u003d getattr(self, handler_name)"},{"line_number":159,"context_line":"            handler(context, log_resource)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_8696e292","line":157,"range":{"start_line":155,"start_character":12,"end_line":157,"end_character":44},"updated":"2017-06-07 14:39:12.000000000","message":"handler_name \u003d \"%s_%s_log\" % (action, log_resource.resource_type)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def _handle_logging(self, action, context, log_resources):"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        for log_resource in self._iterate_log_resources(log_resources):"},{"line_number":155,"context_line":"            handler_name \u003d \"\".join((action, \"_\","},{"line_number":156,"context_line":"                                    log_resource.resource_type,"},{"line_number":157,"context_line":"                                    \"_log\"))"},{"line_number":158,"context_line":"            handler \u003d getattr(self, handler_name)"},{"line_number":159,"context_line":"            handler(context, log_resource)"},{"line_number":160,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_a4cc5c6a","line":157,"range":{"start_line":155,"start_character":12,"end_line":157,"end_character":44},"in_reply_to":"df140735_8696e292","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    self.int_br, ovs_port.port_name)"},{"line_number":177,"context_line":"        return port_vlan_id"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _find_deleted_sg_rules(self, old_port, new_ports):"},{"line_number":180,"context_line":"        del_rules \u003d list()"},{"line_number":181,"context_line":"        for port in new_ports:"},{"line_number":182,"context_line":"            if old_port.id \u003d\u003d port.id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4668ca85","line":179,"updated":"2017-06-07 14:39:12.000000000","message":"Nit: this could be a helper function in this module outside of the class.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    self.int_br, ovs_port.port_name)"},{"line_number":177,"context_line":"        return port_vlan_id"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _find_deleted_sg_rules(self, old_port, new_ports):"},{"line_number":180,"context_line":"        del_rules \u003d list()"},{"line_number":181,"context_line":"        for port in new_ports:"},{"line_number":182,"context_line":"            if old_port.id \u003d\u003d port.id:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_e4e7f4e3","line":179,"in_reply_to":"df140735_4668ca85","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _create_security_group_log(self, context, sg_log):"},{"line_number":200,"context_line":"        log_id \u003d sg_log[\u0027id\u0027]"},{"line_number":201,"context_line":"        project_id \u003d sg_log.get(\u0027project_id\u0027, None)"},{"line_number":202,"context_line":"        old_ofport_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":203,"context_line":"        ports \u003d self.resource_rpc.get_sg_log_info(context, log_id)"},{"line_number":204,"context_line":"        self.log_ports[log_id] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_987595cf","line":201,"range":{"start_line":201,"start_character":44,"end_line":201,"end_character":50},"updated":"2017-06-07 14:39:12.000000000","message":"nit: this is implicit","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _create_security_group_log(self, context, sg_log):"},{"line_number":200,"context_line":"        log_id \u003d sg_log[\u0027id\u0027]"},{"line_number":201,"context_line":"        project_id \u003d sg_log.get(\u0027project_id\u0027, None)"},{"line_number":202,"context_line":"        old_ofport_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":203,"context_line":"        ports \u003d self.resource_rpc.get_sg_log_info(context, log_id)"},{"line_number":204,"context_line":"        self.log_ports[log_id] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_84ccc061","line":201,"range":{"start_line":201,"start_character":44,"end_line":201,"end_character":50},"in_reply_to":"df140735_987595cf","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"95400c6d500be93afd1baded9305ca8a9b5d0fc3","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":274,"context_line":"        cookie \u003d self.generate_cookie(port.id, \u0027ACCEPT\u0027, log_id, project_id)"},{"line_number":275,"context_line":"        for rule in rules_generator:"},{"line_number":276,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":277,"context_line":"            for flow in flows:"},{"line_number":278,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":279,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4b457342","line":276,"updated":"2017-06-02 07:42:49.000000000","message":"The log driver should avoid importing ovsfw.rules.\nCan\u0027t you get project_id just from ofport?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":274,"context_line":"        cookie \u003d self.generate_cookie(port.id, \u0027ACCEPT\u0027, log_id, project_id)"},{"line_number":275,"context_line":"        for rule in rules_generator:"},{"line_number":276,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":277,"context_line":"            for flow in flows:"},{"line_number":278,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":279,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_04c2f0e9","line":276,"in_reply_to":"df140735_4b457342","updated":"2017-06-14 07:18:59.000000000","message":"\u003e The log driver should avoid importing ovsfw.rules.\n\nwill consider in next patch-set.\n\n\u003e Can\u0027t you get project_id just from ofport?\n\nI\u0027m afraid we can\u0027t get it. I think It will be quite hard to detect project_id from packet_in message. Do you think so?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":286,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":287,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":290,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0fc01550","line":288,"range":{"start_line":288,"start_character":0,"end_line":288,"end_character":13},"updated":"2017-06-07 14:39:12.000000000","message":"Is there a list of available events? What does it mean if event is neither ACCEPT nor DROP?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":286,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":287,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":290,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_444468b7","line":288,"range":{"start_line":288,"start_character":0,"end_line":288,"end_character":13},"in_reply_to":"df140735_0fc01550","updated":"2017-06-14 07:18:59.000000000","message":"log_event can be ACCEPT or DROP or ALL(both ACCEPT or DROP). So it means that if log_event \u003d\u003d ALL then log_driver will be logged both DROP and ACCEPT events.","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    def delete_all_port_flows_log(self, port, log_id):"},{"line_number":313,"context_line":"        \"\"\"Delete all flows log for given port\"\"\""},{"line_number":314,"context_line":"        event \u003d port.event"},{"line_number":315,"context_line":"        if event \u003d\u003d \u0027ACCEPT\u0027:"},{"line_number":316,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":317,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":318,"context_line":"            self._delete_drop_flows_log(port, log_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4ffe0daf","line":315,"range":{"start_line":315,"start_character":20,"end_line":315,"end_character":28},"updated":"2017-06-07 14:39:12.000000000","message":"Can you make it a constant?","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    def delete_all_port_flows_log(self, port, log_id):"},{"line_number":313,"context_line":"        \"\"\"Delete all flows log for given port\"\"\""},{"line_number":314,"context_line":"        event \u003d port.event"},{"line_number":315,"context_line":"        if event \u003d\u003d \u0027ACCEPT\u0027:"},{"line_number":316,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":317,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":318,"context_line":"            self._delete_drop_flows_log(port, log_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_e40ed48b","line":315,"range":{"start_line":315,"start_character":20,"end_line":315,"end_character":28},"in_reply_to":"df140735_4ffe0daf","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        event \u003d port.event"},{"line_number":315,"context_line":"        if event \u003d\u003d \u0027ACCEPT\u0027:"},{"line_number":316,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":317,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":318,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            self._delete_accept_flows_log(port, log_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_ef260169","line":317,"range":{"start_line":317,"start_character":22,"end_line":317,"end_character":28},"updated":"2017-06-07 14:39:12.000000000","message":"ditto","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        event \u003d port.event"},{"line_number":315,"context_line":"        if event \u003d\u003d \u0027ACCEPT\u0027:"},{"line_number":316,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":317,"context_line":"        elif event \u003d\u003d \u0027DROP\u0027:"},{"line_number":318,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":319,"context_line":"        else:"},{"line_number":320,"context_line":"            self._delete_accept_flows_log(port, log_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_c41198ae","line":317,"range":{"start_line":317,"start_character":22,"end_line":317,"end_character":28},"in_reply_to":"df140735_ef260169","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def _delete_sg_rules_flow_log(self, port, del_rules):"},{"line_number":324,"context_line":"        cookie \u003d self._get_cookie(port.id, \u0027ACCEPT\u0027)"},{"line_number":325,"context_line":"        if cookie:"},{"line_number":326,"context_line":"            for rule in del_rules:"},{"line_number":327,"context_line":"                flows \u003d rules.create_flows_from_rule_and_port(rule, port)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_e45aa881","line":324,"range":{"start_line":324,"start_character":17,"end_line":324,"end_character":33},"updated":"2017-06-07 14:39:12.000000000","message":"As we always need a cookie, consider raising an exception if cookie is not found. And then:\n\n try:\n     cookie \u003d self._get_cookie(port.id, \u0027ACCEPT\u0027)\n except CookieNotFound:\n     return\n\n for rule in del_rules:\n     ...","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def _delete_sg_rules_flow_log(self, port, del_rules):"},{"line_number":324,"context_line":"        cookie \u003d self._get_cookie(port.id, \u0027ACCEPT\u0027)"},{"line_number":325,"context_line":"        if cookie:"},{"line_number":326,"context_line":"            for rule in del_rules:"},{"line_number":327,"context_line":"                flows \u003d rules.create_flows_from_rule_and_port(rule, port)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_6422c402","line":324,"range":{"start_line":324,"start_character":17,"end_line":324,"end_character":33},"in_reply_to":"df140735_e45aa881","updated":"2017-06-14 07:18:59.000000000","message":"Thank you! Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            for rule in del_rules:"},{"line_number":327,"context_line":"                flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":328,"context_line":"                for flow in flows:"},{"line_number":329,"context_line":"                    flow.pop(\u0027priority\u0027)"},{"line_number":330,"context_line":"                    flow.pop(\u0027actions\u0027)"},{"line_number":331,"context_line":"                    flow.pop(\u0027dl_type\u0027)"},{"line_number":332,"context_line":"                    flow.pop(\u0027reg_port\u0027, None)"},{"line_number":333,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":334,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_EGRESS_TABLE"},{"line_number":335,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_INGRESS_TABLE:"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_cff69dfa","line":332,"range":{"start_line":329,"start_character":0,"end_line":332,"end_character":46},"updated":"2017-06-07 14:39:12.000000000","message":"Consider:\non module level:\n\n FIELDS_TO_REMOVE \u003d [\u0027priority\u0027, \u0027actions\u0027, \u0027dl_type\u0027, \u0027reg_port\u0027]\n\nhere:\n\n for kw in FIELDS_TO_REMOVE:\n     flow.pop(kw, None)","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":326,"context_line":"            for rule in del_rules:"},{"line_number":327,"context_line":"                flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":328,"context_line":"                for flow in flows:"},{"line_number":329,"context_line":"                    flow.pop(\u0027priority\u0027)"},{"line_number":330,"context_line":"                    flow.pop(\u0027actions\u0027)"},{"line_number":331,"context_line":"                    flow.pop(\u0027dl_type\u0027)"},{"line_number":332,"context_line":"                    flow.pop(\u0027reg_port\u0027, None)"},{"line_number":333,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":334,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_EGRESS_TABLE"},{"line_number":335,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_INGRESS_TABLE:"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_441d88bb","line":332,"range":{"start_line":329,"start_character":0,"end_line":332,"end_character":46},"in_reply_to":"df140735_cff69dfa","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"0951141df27d4e9695ce94e7296d56788c2a8a43","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                    flow.pop(\u0027actions\u0027)"},{"line_number":331,"context_line":"                    flow.pop(\u0027dl_type\u0027)"},{"line_number":332,"context_line":"                    flow.pop(\u0027reg_port\u0027, None)"},{"line_number":333,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":334,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_EGRESS_TABLE"},{"line_number":335,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_INGRESS_TABLE:"},{"line_number":336,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_INGRESS_TABLE"},{"line_number":337,"context_line":"                    flow[\u0027cookie\u0027] \u003d str(cookie.id) + \u0027/-1\u0027"},{"line_number":338,"context_line":"                    self._delete_flows(**flow)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_8ff425d1","line":336,"range":{"start_line":333,"start_character":0,"end_line":336,"end_character":68},"updated":"2017-06-07 14:39:12.000000000","message":"Consider:\non module level:\n OVS_FW_TO_LOG_TABLES \u003d {\n     ovs_consts.RULES_EGRESS_TABLE: ovs_consts.LOG_EGRESS_TABLE,\n     ovs_consts.RULES_INGRESS_TABLE: ovs_consts.LOG_INGRESS_TABLE,\n }\n\nhere:\n\n flow[\u0027table\u0027] \u003d OVS_FW_TO_LOG_TABLES[flow[\u0027table\u0027]]","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"a1aa8da50bde4df77684d2657e2c5ad74be0b79d","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                    flow.pop(\u0027actions\u0027)"},{"line_number":331,"context_line":"                    flow.pop(\u0027dl_type\u0027)"},{"line_number":332,"context_line":"                    flow.pop(\u0027reg_port\u0027, None)"},{"line_number":333,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_EGRESS_TABLE:"},{"line_number":334,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_EGRESS_TABLE"},{"line_number":335,"context_line":"                    if flow[\u0027table\u0027] \u003d\u003d ovs_consts.RULES_INGRESS_TABLE:"},{"line_number":336,"context_line":"                        flow[\u0027table\u0027] \u003d ovs_consts.LOG_INGRESS_TABLE"},{"line_number":337,"context_line":"                    flow[\u0027cookie\u0027] \u003d str(cookie.id) + \u0027/-1\u0027"},{"line_number":338,"context_line":"                    self._delete_flows(**flow)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_247a8cf0","line":336,"range":{"start_line":333,"start_character":0,"end_line":336,"end_character":68},"in_reply_to":"df140735_8ff425d1","updated":"2017-06-14 07:18:59.000000000","message":"Done","commit_id":"f13611d3aa4207e230d0f33785a1edd349f2fc59"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"609a8f84485a670a61fa4d779ec71cd9581665dd","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @property"},{"line_number":86,"context_line":"    def is_empty(self):"},{"line_number":87,"context_line":"        return not bool(self.log_object_refs)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class OFPortLog(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_d67e6ead","line":87,"range":{"start_line":87,"start_character":19,"end_line":87,"end_character":23},"updated":"2017-07-07 06:58:01.000000000","message":"This bool cast is redundant.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @property"},{"line_number":86,"context_line":"    def is_empty(self):"},{"line_number":87,"context_line":"        return not bool(self.log_object_refs)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"class OFPortLog(object):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_55ebf8da","line":87,"range":{"start_line":87,"start_character":19,"end_line":87,"end_character":23},"in_reply_to":"3f1d235d_d67e6ead","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"609a8f84485a670a61fa4d779ec71cd9581665dd","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.int_br \u003d self.initialize_bridge(initialize_bridge)"},{"line_number":115,"context_line":"        self._deferred \u003d False"},{"line_number":116,"context_line":"        self.log_ports \u003d collections.defaultdict(dict)"},{"line_number":117,"context_line":"        self.cookie_tables \u003d set([])"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def initialize(self, resource_rpc, **kwargs):"},{"line_number":120,"context_line":"        self.resource_rpc \u003d resource_rpc"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_fcab8bd2","line":117,"range":{"start_line":117,"start_character":25,"end_line":117,"end_character":26},"updated":"2017-07-07 06:58:01.000000000","message":"nit; there is only one cookie_table. ;)","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        self.int_br \u003d self.initialize_bridge(initialize_bridge)"},{"line_number":115,"context_line":"        self._deferred \u003d False"},{"line_number":116,"context_line":"        self.log_ports \u003d collections.defaultdict(dict)"},{"line_number":117,"context_line":"        self.cookie_tables \u003d set([])"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def initialize(self, resource_rpc, **kwargs):"},{"line_number":120,"context_line":"        self.resource_rpc \u003d resource_rpc"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_35bcfcda","line":117,"range":{"start_line":117,"start_character":25,"end_line":117,"end_character":26},"in_reply_to":"3f1d235d_fcab8bd2","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            if burst_limit:"},{"line_number":136,"context_line":"                if burst_limit \u003c 25:"},{"line_number":137,"context_line":"                    LOG.warning(\"controller_burst_limit\u0027s value must be at \""},{"line_number":138,"context_line":"                                \"least 50\")"},{"line_number":139,"context_line":"                else:"},{"line_number":140,"context_line":"                    int_br.set_controller_burst_limit(int(burst_limit))"},{"line_number":141,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_e211fd05","line":138,"range":{"start_line":138,"start_character":39,"end_line":138,"end_character":41},"updated":"2017-07-05 09:09:17.000000000","message":"you meant 25?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            if burst_limit:"},{"line_number":136,"context_line":"                if burst_limit \u003c 25:"},{"line_number":137,"context_line":"                    LOG.warning(\"controller_burst_limit\u0027s value must be at \""},{"line_number":138,"context_line":"                                \"least 50\")"},{"line_number":139,"context_line":"                else:"},{"line_number":140,"context_line":"                    int_br.set_controller_burst_limit(int(burst_limit))"},{"line_number":141,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_0829bbe4","line":138,"range":{"start_line":138,"start_character":39,"end_line":138,"end_character":41},"in_reply_to":"3f1d235d_e211fd05","updated":"2017-07-12 02:34:06.000000000","message":"Yes. It\u0027s my mistake.Done.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"609a8f84485a670a61fa4d779ec71cd9581665dd","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _unset_cookie(self, cookie_id):"},{"line_number":189,"context_line":"        if self._deferred:"},{"line_number":190,"context_line":"            self.int_br.unset_cookie(cookie_id)"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            self.int_br.br.unset_cookie(cookie_id)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_f185f4ad","line":190,"updated":"2017-07-07 06:58:01.000000000","message":"If _deferred is True, flows using this cookie is still present at the point of this function call.\nAs eventlet isn\u0027t a preemptive thread implementation, this might not result in a use-after-free bug, but I think you should avoid that.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"d3863861a1532e94db8ac1449a8163704eba5a93","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _unset_cookie(self, cookie_id):"},{"line_number":189,"context_line":"        if self._deferred:"},{"line_number":190,"context_line":"            self.int_br.unset_cookie(cookie_id)"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            self.int_br.br.unset_cookie(cookie_id)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_6aa50804","line":190,"in_reply_to":"1f1a1f67_427eba6b","updated":"2017-07-14 09:49:47.000000000","message":"Thank you for your suggestion. Will consider about that.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"2294f35bd180a9266aa95d9c2ce13ea3724abeac","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _unset_cookie(self, cookie_id):"},{"line_number":189,"context_line":"        if self._deferred:"},{"line_number":190,"context_line":"            self.int_br.unset_cookie(cookie_id)"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            self.int_br.br.unset_cookie(cookie_id)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_427eba6b","line":190,"in_reply_to":"3f1d235d_55c4185f","updated":"2017-07-14 06:40:53.000000000","message":"Maybe you can create a cookie cleanup thread and schedule cookie reclaim later?\nOr, just discard cookies as they are 64 bits wide.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def _unset_cookie(self, cookie_id):"},{"line_number":189,"context_line":"        if self._deferred:"},{"line_number":190,"context_line":"            self.int_br.unset_cookie(cookie_id)"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            self.int_br.br.unset_cookie(cookie_id)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_55c4185f","line":190,"in_reply_to":"3f1d235d_f185f4ad","updated":"2017-07-12 02:34:06.000000000","message":"Thanks for your great review. Actually, I\u0027m not familiar with multiple threads. So could you please give me more guidance for that?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"c2d8e7d98ad2ffcc9d35299df4a80a4d2025eca0","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    def _log_drop_packet(self, port, log_id, project_id):"},{"line_number":303,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.DROP_EVENT,"},{"line_number":304,"context_line":"                                      log_id, project_id)"},{"line_number":305,"context_line":"        # Drop traffic for removed sg rules"},{"line_number":306,"context_line":"        self._add_flow("},{"line_number":307,"context_line":"            cookie\u003dcookie,"},{"line_number":308,"context_line":"            table\u003dovs_consts.LOG_DROP_TABLE,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_624a8dac","line":305,"range":{"start_line":305,"start_character":27,"end_line":305,"end_character":43},"updated":"2017-07-05 09:09:17.000000000","message":"I don\u0027t think it\u0027s specific to removed sg rules.\nIs this comment correct?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    def _log_drop_packet(self, port, log_id, project_id):"},{"line_number":303,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.DROP_EVENT,"},{"line_number":304,"context_line":"                                      log_id, project_id)"},{"line_number":305,"context_line":"        # Drop traffic for removed sg rules"},{"line_number":306,"context_line":"        self._add_flow("},{"line_number":307,"context_line":"            cookie\u003dcookie,"},{"line_number":308,"context_line":"            table\u003dovs_consts.LOG_DROP_TABLE,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_c873c315","line":305,"range":{"start_line":305,"start_character":27,"end_line":305,"end_character":43},"in_reply_to":"3f1d235d_624a8dac","updated":"2017-07-12 02:34:06.000000000","message":"It\u0027s not correct. It\u0027s bad copy and pate. :). It should be removed. Done.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"609a8f84485a670a61fa4d779ec71cd9581665dd","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            yield rule"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _log_accept_packet(self, port, log_id, project_id):"},{"line_number":319,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":320,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":321,"context_line":"                                      log_id, project_id)"},{"line_number":322,"context_line":"        for rule in rules_generator:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_7789d472","line":319,"updated":"2017-07-07 06:58:01.000000000","message":"SG rule matching is already done in the ovsfw tables,\nwhy do we need to do that again here?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"2d5b63939e51915e76aeead570fcba570a03cb4b","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            yield rule"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _log_accept_packet(self, port, log_id, project_id):"},{"line_number":319,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":320,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":321,"context_line":"                                      log_id, project_id)"},{"line_number":322,"context_line":"        for rule in rules_generator:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_895dc416","line":319,"in_reply_to":"1f1a1f67_6fb87a75","updated":"2017-07-18 02:43:24.000000000","message":"Having to duplicate ovsfw flows here is not great IMO, but I understood. Thanks for explaining.","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"d3863861a1532e94db8ac1449a8163704eba5a93","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            yield rule"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _log_accept_packet(self, port, log_id, project_id):"},{"line_number":319,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":320,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":321,"context_line":"                                      log_id, project_id)"},{"line_number":322,"context_line":"        for rule in rules_generator:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_6fb87a75","line":319,"in_reply_to":"1f1a1f67_c759bc5a","updated":"2017-07-14 09:49:47.000000000","message":"Basically, This usecase is mentioned (usecase2) in [1]. For function \u0027create_rules_generator_for_port\u0027, It just iterates securiy_group_rules of a OFPortLog object. So it\u0027s not iterates over all SGs. Regarding your question, I have considered about that at [2], if a sg_rule is deleted/added, then logging plugin will check whether need to update or not. If need update, the plugin will notify to  logging extension to update log_driver.\n\n[1] https://specs.openstack.org/openstack/neutron-specs/specs/pike/logging-API-for-security-group-rules.html#expected-api-behavior.\n[2] https://review.openstack.org/#/c/468265/17/neutron/services/logapi/agent/drivers/manager.py@139","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"2294f35bd180a9266aa95d9c2ce13ea3724abeac","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            yield rule"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _log_accept_packet(self, port, log_id, project_id):"},{"line_number":319,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":320,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":321,"context_line":"                                      log_id, project_id)"},{"line_number":322,"context_line":"        for rule in rules_generator:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f1a1f67_c759bc5a","line":319,"in_reply_to":"3f1d235d_5543f8af","updated":"2017-07-14 06:40:53.000000000","message":"Ok, this can be theoretically useful.\nHowever it\u0027s not in the spec nor the code is written so.\n(The above create_rules_generator_for_port just iterates over all SGs.)\n\nMoreover, have you considered SG rule updates or conjunctive match flows?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            yield rule"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def _log_accept_packet(self, port, log_id, project_id):"},{"line_number":319,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":320,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":321,"context_line":"                                      log_id, project_id)"},{"line_number":322,"context_line":"        for rule in rules_generator:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_5543f8af","line":319,"in_reply_to":"3f1d235d_7789d472","updated":"2017-07-12 02:34:06.000000000","message":"IMO, It\u0027s necessary.Take an example, I assume that we have port_A attached to SG_A(ssh, http), SG_B(icmp). I want to collect log of SG_A not SG_B. So we create a log_object such as {\u0027log\u0027: {\u0027name\u0027: \u0027test\u0027, \u0027resource_id\u0027: SG_A_ID} then I expect logging api will only collect \u0027ACCEPT event\u0027 related to SG_A not SG_B. It\u0027s a use case. Does that make sense to you?","commit_id":"0d1e4922954f2a275e136a742ca1a44382ba0047"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a92cc24843203ac789b5bbf8577c259c6a07f18a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.port \u003d port"},{"line_number":76,"context_line":"        self.action \u003d action"},{"line_number":77,"context_line":"        self.project \u003d project"},{"line_number":78,"context_line":"        self.log_object_refs \u003d set([])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def add_log_obj_ref(self, log_id):"},{"line_number":81,"context_line":"        self.log_object_refs.add(log_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_34ed5725","line":78,"range":{"start_line":78,"start_character":35,"end_line":78,"end_character":37},"updated":"2017-07-10 16:25:23.000000000","message":"set() should do fine","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"8f4f709813b2d6902dd1f546d4a52468825f8ae5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        self.port \u003d port"},{"line_number":76,"context_line":"        self.action \u003d action"},{"line_number":77,"context_line":"        self.project \u003d project"},{"line_number":78,"context_line":"        self.log_object_refs \u003d set([])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def add_log_obj_ref(self, log_id):"},{"line_number":81,"context_line":"        self.log_object_refs.add(log_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_9583d0a9","line":78,"range":{"start_line":78,"start_character":35,"end_line":78,"end_character":37},"in_reply_to":"3f1d235d_34ed5725","updated":"2017-07-12 02:38:24.000000000","message":"Done","commit_id":"cf583f7fd1f2bd5ea322867870549c18dac4c418"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"65df7980e96afded4330ad6c45f905e95c29feb1","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            for of_port_log in of_port_logs:"},{"line_number":278,"context_line":"                self.delete_all_port_flows_log(of_port_log, log_id)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def _accept_flow(self, **flow):"},{"line_number":281,"context_line":"        flow[\u0027table\u0027] \u003d OVS_FW_TO_LOG_TABLES[flow[\u0027table\u0027]]"},{"line_number":282,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027controller\u0027"},{"line_number":283,"context_line":"        self._add_flow(**flow)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1f1a1f67_e28386a8","line":280,"updated":"2017-07-14 07:08:13.000000000","message":"ovsfw has a function with the same name and it\u0027s confusing IMO.\nCould you rename this to something like _log_accept_packet?","commit_id":"9a25e7021e06fca417dc335d37e5d562c9cee976"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"5cadc5b1b87c23b2d1dde86ef54ef7a02a715910","unresolved":false,"context_lines":[{"line_number":277,"context_line":"            for of_port_log in of_port_logs:"},{"line_number":278,"context_line":"                self.delete_all_port_flows_log(of_port_log, log_id)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def _accept_flow(self, **flow):"},{"line_number":281,"context_line":"        flow[\u0027table\u0027] \u003d OVS_FW_TO_LOG_TABLES[flow[\u0027table\u0027]]"},{"line_number":282,"context_line":"        flow[\u0027actions\u0027] \u003d \u0027controller\u0027"},{"line_number":283,"context_line":"        self._add_flow(**flow)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1f1a1f67_002f678e","line":280,"in_reply_to":"1f1a1f67_e28386a8","updated":"2017-07-17 08:44:37.000000000","message":"Done","commit_id":"9a25e7021e06fca417dc335d37e5d562c9cee976"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"85fbd294b0cbcff547407622384532138ad698e8","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def defer_apply_off(self):"},{"line_number":169,"context_line":"        if self._deferred:"},{"line_number":170,"context_line":"            self._cleanup_cookies()"},{"line_number":171,"context_line":"            self.int_br.apply_flows()"},{"line_number":172,"context_line":"            self._deferred \u003d False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_1a3d70dc","line":170,"updated":"2017-07-18 05:55:32.000000000","message":"This line must be swapped with the next line.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"2ece05a755837988c3da24481aab969fcbb4738d","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def defer_apply_off(self):"},{"line_number":169,"context_line":"        if self._deferred:"},{"line_number":170,"context_line":"            self._cleanup_cookies()"},{"line_number":171,"context_line":"            self.int_br.apply_flows()"},{"line_number":172,"context_line":"            self._deferred \u003d False"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_62b03a44","line":170,"in_reply_to":"1f1a1f67_1a3d70dc","updated":"2017-07-18 14:27:16.000000000","message":"Done","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"85fbd294b0cbcff547407622384532138ad698e8","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_9a44e048","line":331,"updated":"2017-07-18 05:55:32.000000000","message":"If a rule has remote_group_id, you will get inaccurate results.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"1076e4e697439aef5aaf586bb69e137376f3b7d1","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_ebf51a58","line":331,"in_reply_to":"1f1a1f67_4772e3ae","updated":"2017-07-19 09:14:18.000000000","message":"I added some devref documentation in commit 192bc5f.\nIt\u0027s a bit complicated stuff.\n\nI think you\u0027ll get inaccurate results if there are two SG rules which differ only in remote_group_id.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"2ece05a755837988c3da24481aab969fcbb4738d","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_4772e3ae","line":331,"in_reply_to":"1f1a1f67_9a44e048","updated":"2017-07-18 14:27:16.000000000","message":"Actually, I\u0027m not sure my understanding about \"how does a remote group rule work?\". So could you give me a sample or document about that, please? However, In my understanding if a packet doesn\u0027t match with any accept flows [1], it never go to LOG_INGRESS_TABLE or LOG_EGRESS_TABLE. So i think this function will work fine in case security group rule has remote_group_id. Is my understanding correct?\n\n[1]https://review.openstack.org/#/c/468281/17/neutron/agent/linux/openvswitch_firewall/rules.py@175","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"e6adaee132db0d043a32cc886b0bb9ab991c0bfe","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_bcd8651e","line":331,"in_reply_to":"1f1a1f67_9cba4908","updated":"2017-07-20 06:42:00.000000000","message":"For the case you mentioned. See [1] for detail VM1 security group updated.\n\n- VM3 ping to VM1 \u003d\u003e All packets Logged with DROP event [2] same as above test case.\n\nSo, There is no ACCEPT logs for SGA in this case.\n\n[1] http://paste.openstack.org/show/615975/\n\n[2] Jul 20 13:30:36 localhost greenthread.py: action\u003dDROP project_id\u003d220b8b217410402183a3fd55cc8199f0 log_resource_ids\u003d[u\u0027e7b8a7ad-0175-409d-af4f-28f6a2eb8e27\u0027] vm_port\u003d85ab04f4-5478-4470-b598-2f5217cd8bae pkt\u003dethernet(dst\u003d\u0027fa:16:3e:10:c1:c6\u0027,ethertype\u003d2048,src\u003d\u0027fa:16:3e:a1:b4:d5\u0027), ipv4(csum\u003d2818,dst\u003d\u0027100.0.0.10\u0027,flags\u003d2,header_length\u003d5,identification\u003d26671,offset\u003d0,option\u003dNone,proto\u003d1,src\u003d\u0027100.100.0.10\u0027,tos\u003d0,total_length\u003d84,ttl\u003d63,version\u003d4), icmp(code\u003d0,csum\u003d6054,data\u003decho(data\u003d\u0027\\xb5z\\xad\\xdb\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\u0027,id\u003d32001,seq\u003d2),type\u003d8)","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"6418813fdf7672141a33be6fbdc648f4acbf2152","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_c1def0d8","line":331,"in_reply_to":"1f1a1f67_a7b3b24d","updated":"2017-07-27 07:44:05.000000000","message":"Sorry for delayed reply.\nOh I forgot that default SG drops ICMP from outside.\n\nTry pinging from VM1 to VM3 or disable SG for VM3.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"54f08abfc390a991595bab23e020a74b248dfe40","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_a7b3b24d","line":331,"in_reply_to":"1f1a1f67_bcd8651e","updated":"2017-07-20 06:59:34.000000000","message":"In addition, In this case VM3 can\u0027t ping to VM1 (has both SGA and SGB). Is that right?\n\nSee default SG info: http://paste.openstack.org/show/615978/","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"dfe17b1d75b9a39a9217d6fad4d6175f92092fdb","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_9cba4908","line":331,"in_reply_to":"1f1a1f67_cfd5c91d","updated":"2017-07-20 06:14:04.000000000","message":"Let the VM1 port have both SGA and SGB and send ping from VM3 to  VM1.\nI think there will be ACCEPT logs for SGA while there shouldn\u0027t be.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"8e1ee9c9ae7b18cb82c90a753ae49029ca01b665","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1f1a1f67_cfd5c91d","line":331,"in_reply_to":"1f1a1f67_ebf51a58","updated":"2017-07-19 10:54:08.000000000","message":"@IWAMOTO:\nI have reproduced topology as show in [1]. In which:\n- VM1 uses SGA which has rule with remote security group SGB\n- VM2 uses SGB which has rule without remote security group.\n- VM3 uses default SG as usual.\n- Enable log for SGA only.\n\nTest cases: \n1. VM3 ping to VM2 \u003d\u003e No log. (Accurate)\n2. VM3 ping to VM1 \u003d\u003e Logged with DROP event [2] (Accurate)\n3. VM2 ping to VM1 \u003d\u003e 1 packet logged with ACCEPT event [3] (Accurate)\n4. VM2 ping to VM3 \u003d\u003e \u003d\u003e No log. (Accurate)\n5. VM1 ping to VM2 \u003d\u003e 1 packet logged with ACCEPT event [4] (Accurate)\n6. VM1 ping to VM3 \u003d\u003e packest logged with ACCEPT event [5] (Accurate)\n\nSo, I don\u0027t any problem with that. Kindly please help to check it.\n\n[1] http://paste.openstack.org/show/615824/\n\n[2] Jul 19 17:43:31 localhost greenthread.py: action\u003dDROP project_id\u003d220b8b217410402183a3fd55cc8199f0 log_resource_ids\u003d[u\u0027e7b8a7ad-0175-409d-af4f-28f6a2eb8e27\u0027] vm_port\u003d85ab04f4-5478-4470-b598-2f5217cd8bae pkt\u003dethernet(dst\u003d\u0027fa:16:3e:10:c1:c6\u0027,ethertype\u003d2048,src\u003d\u0027fa:16:3e:a1:b4:d5\u0027), ipv4(csum\u003d40215,dst\u003d\u0027100.0.0.10\u0027,flags\u003d2,header_length\u003d5,identification\u003d54809,offset\u003d0,option\u003dNone,proto\u003d1,src\u003d\u0027100.100.0.10\u0027,tos\u003d0,total_length\u003d84,ttl\u003d63,version\u003d4), icmp(code\u003d0,csum\u003d22593,data\u003decho(data\u003d\u0027\\xd2vZF\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\u0027,id\u003d29441,seq\u003d0),type\u003d8)\n\n[3] Jul 19 17:45:26 localhost greenthread.py: action\u003dACCEPT project_id\u003d220b8b217410402183a3fd55cc8199f0 log_resource_ids\u003d[u\u0027e7b8a7ad-0175-409d-af4f-28f6a2eb8e27\u0027] vm_port\u003d85ab04f4-5478-4470-b598-2f5217cd8bae pkt\u003dethernet(dst\u003d\u0027fa:16:3e:10:c1:c6\u0027,ethertype\u003d2048,src\u003d\u0027fa:16:3e:a1:b4:d5\u0027), ipv4(csum\u003d64509,dst\u003d\u0027100.0.0.10\u0027,flags\u003d2,header_length\u003d5,identification\u003d30514,offset\u003d0,option\u003dNone,proto\u003d1,src\u003d\u0027100.100.0.11\u0027,tos\u003d0,total_length\u003d84,ttl\u003d63,version\u003d4), icmp(code\u003d0,csum\u003d44176,data\u003decho(data\u003d\u0027\\xda\\xe6\\xfd\\x86\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\u0027,id\u003d29441,seq\u003d0),type\u003d8)\n\n[4] Jul 19 17:46:45 localhost greenthread.py: action\u003dACCEPT project_id\u003d220b8b217410402183a3fd55cc8199f0 log_resource_ids\u003d[u\u0027e7b8a7ad-0175-409d-af4f-28f6a2eb8e27\u0027] vm_port\u003d85ab04f4-5478-4470-b598-2f5217cd8bae pkt\u003dethernet(dst\u003d\u0027fa:16:3e:a1:b4:d5\u0027,ethertype\u003d2048,src\u003d\u0027fa:16:3e:10:c1:c6\u0027), ipv4(csum\u003d64845,dst\u003d\u0027100.100.0.11\u0027,flags\u003d2,header_length\u003d5,identification\u003d29922,offset\u003d0,option\u003dNone,proto\u003d1,src\u003d\u0027100.0.0.10\u0027,tos\u003d0,total_length\u003d84,ttl\u003d64,version\u003d4), icmp(code\u003d0,csum\u003d53700,data\u003decho(data\u003d\u0027\\xc8\\xad\\xe9\\x8b\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\u0027,id\u003d29697,seq\u003d0),type\u003d8)\n\n[5] Jul 19 17:50:50 localhost greenthread.py: action\u003dACCEPT project_id\u003d220b8b217410402183a3fd55cc8199f0 log_resource_ids\u003d[u\u0027e7b8a7ad-0175-409d-af4f-28f6a2eb8e27\u0027] vm_port\u003d85ab04f4-5478-4470-b598-2f5217cd8bae pkt\u003dethernet(dst\u003d\u0027fa:16:3e:a1:b4:d5\u0027,ethertype\u003d2048,src\u003d\u0027fa:16:3e:10:c1:c6\u0027), ipv4(csum\u003d44948,dst\u003d\u0027100.100.0.10\u0027,flags\u003d2,header_length\u003d5,identification\u003d49820,offset\u003d0,option\u003dNone,proto\u003d1,src\u003d\u0027100.0.0.10\u0027,tos\u003d0,total_length\u003d84,ttl\u003d64,version\u003d4), icmp(code\u003d0,csum\u003d14500,data\u003decho(data\u003d\u0027\\xc2\\xbd\\x85\\x9a\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\u0027,id\u003d30465,seq\u003d2),type\u003d8)","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"8a9939f923fddab65b3c32cc9ab8832bcb794c64","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_643a8b99","line":331,"in_reply_to":"ff346bd7_01117104","updated":"2017-07-28 04:44:27.000000000","message":"Thank you for your great suggestion. However, how do we deal with use case: SGA has ICMP rule, SGB has ICMP rule, SGA, and SGB is attached to VM1. Assuming, we create log_object_A for SGA, then we try to ping VM1, and we expect ACCEPT packet will appear for log_object_A, right? now, we try to create log_object_B for SGB, then we try to ping VM1, we also expect ACCEPT packet will appear for log_object_B. I\u0027m afraid it will not appear. So, I\u0027d like keep this implementation and use a register with a special value to mark remote rules. Do you think so?\n\nHere is my local change for this patch-set:\nhttp://paste.openstack.org/show/616811/","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9118490af8bdce8abc8de73237178a6ae38cd48b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_748c80d6","line":331,"in_reply_to":"ff346bd7_7416c04b","updated":"2017-07-28 02:45:07.000000000","message":"I understand your concerning. So Can I use a register with a special value to mark remote rules?","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"85f1c63c3b883ac7671cfa66eb2aef61f2154270","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_01117104","line":331,"in_reply_to":"ff346bd7_748c80d6","updated":"2017-07-28 03:56:19.000000000","message":"I suggest storing 32bit hash of SG id right before sending packets to the logging tables.\nThis would eliminate the need to care SG flows in the logging code.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"a30cbfd505bc2d83d6e4288b77c744cf61de0b9b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_7416c04b","line":331,"in_reply_to":"ff346bd7_85610dac","updated":"2017-07-28 01:59:01.000000000","message":"The question is whether we get extraneous logs. In this case, from the SGA ingress rule.","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"967adb87f0a6a375dd54fd8e255fe6f3922bbba1","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":329,"context_line":"                                      log_id, project_id)"},{"line_number":330,"context_line":"        for rule in rules_generator:"},{"line_number":331,"context_line":"            flows \u003d rules.create_flows_from_rule_and_port(rule, port)"},{"line_number":332,"context_line":"            for flow in flows:"},{"line_number":333,"context_line":"                flow[\u0027cookie\u0027] \u003d cookie"},{"line_number":334,"context_line":"                flow.pop(\u0027reg_port\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff346bd7_85610dac","line":331,"in_reply_to":"ff346bd7_c1def0d8","updated":"2017-07-27 10:31:47.000000000","message":"In this case we will also have ACCEPT logs for egress rule [1]. And I think that is reasonable.\n\n[1] http://paste.openstack.org/show/616688/","commit_id":"100135a8d7d0d9cb474532e068820e1ff1f694fe"}],"neutron/services/logapi/drivers/openvswitch/log_ryuapp.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"7ea7754faeffff930cc70d2402852bc6c87baa83","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from ryu.base import app_manager"},{"line_number":18,"context_line":"from ryu.controller import handler"},{"line_number":19,"context_line":"from ryu.controller import ofp_event"},{"line_number":20,"context_line":"#from ryu.lib import hub"},{"line_number":21,"context_line":"from ryu.ofproto import ofproto_v1_3"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f515b1d_17151140","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":24},"updated":"2017-10-03 04:13:13.000000000","message":"remove this line","commit_id":"6bc086ff47063fd4bbb4eb054c182dafb0c70da9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from ryu.base import app_manager"},{"line_number":18,"context_line":"from ryu.controller import handler"},{"line_number":19,"context_line":"from ryu.controller import ofp_event"},{"line_number":20,"context_line":"#from ryu.lib import hub"},{"line_number":21,"context_line":"from ryu.ofproto import ofproto_v1_3"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_9131910e","line":20,"updated":"2017-12-26 21:10:15.000000000","message":"please remove it if it\u0027s not necessary","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from ryu.base import app_manager"},{"line_number":18,"context_line":"from ryu.controller import handler"},{"line_number":19,"context_line":"from ryu.controller import ofp_event"},{"line_number":20,"context_line":"#from ryu.lib import hub"},{"line_number":21,"context_line":"from ryu.ofproto import ofproto_v1_3"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_802e1941","line":20,"in_reply_to":"bf8cb3f7_9131910e","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":27,"context_line":"    packet_in_handlers \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def start(self):"},{"line_number":30,"context_line":"        # Start Ryu event loop thread"},{"line_number":31,"context_line":"        super(OVSLogRyuApp, self).start()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":34,"context_line":"        self.packet_in_handlers.append(caller)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_6ce69447","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":41},"updated":"2018-01-03 12:50:25.000000000","message":"Is this needed?","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":27,"context_line":"    packet_in_handlers \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def start(self):"},{"line_number":30,"context_line":"        # Start Ryu event loop thread"},{"line_number":31,"context_line":"        super(OVSLogRyuApp, self).start()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def register_packet_in_handler(self, caller):"},{"line_number":34,"context_line":"        self.packet_in_handlers.append(caller)"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_8c9e61b6","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":41},"in_reply_to":"9f91af0f_6ce69447","updated":"2018-01-04 07:17:11.000000000","message":"It should be removed. Done.","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"}],"neutron/services/logapi/drivers/openvswitch/ovs_firewall_log.py":[{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"f2635f4b9302fd54b2ae0cf50fc575e5118171db","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        # set controller rate limit"},{"line_number":150,"context_line":"        rate_limit \u003d cfg.CONF.network_log.rate_limit"},{"line_number":151,"context_line":"        burst_limit \u003d cfg.CONF.network_log.burst_limit"},{"line_number":152,"context_line":"        if rate_limit:"},{"line_number":153,"context_line":"            if rate_limit \u003c 100:"},{"line_number":154,"context_line":"                LOG.warning(\"controller_rate_limit\u0027s value must be at \""},{"line_number":155,"context_line":"                            \"least 100\")"},{"line_number":156,"context_line":"            else:"},{"line_number":157,"context_line":"                int_br.set_controller_rate_limit(int(rate_limit))"},{"line_number":158,"context_line":"                if burst_limit:"},{"line_number":159,"context_line":"                    if burst_limit \u003c 25:"},{"line_number":160,"context_line":"                        LOG.warning(\"controller_burst_limit\u0027s value must be \""},{"line_number":161,"context_line":"                                    \"at least 25\")"},{"line_number":162,"context_line":"                    else:"},{"line_number":163,"context_line":"                        int_br.set_controller_burst_limit(int(burst_limit))"},{"line_number":164,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def start_logapp(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f515b1d_779e6c08","line":163,"range":{"start_line":152,"start_character":0,"end_line":163,"end_character":75},"updated":"2017-09-22 08:14:01.000000000","message":"please be short, clean and stay d.r.y\n\n        if rate_limit and rate_limit \u003e\u003d 100:\n            int_br.set_controller_rate_limit(int(rate_limit))\n            if burst_limit and burst_limit \u003e\u003d 25:\n                int_br.set_controller_burst_limit(int(burst_limit))\n            else:\n                LOG.warning(\"controller_burst_limit must be \u003e\u003d25\")\n        else:\n            LOG.warning(\"controller_rate_limit must be \u003e\u003d100\")","commit_id":"6bc086ff47063fd4bbb4eb054c182dafb0c70da9"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"7396d59f2528037dffad081ad63d1227378af561","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        # set controller rate limit"},{"line_number":150,"context_line":"        rate_limit \u003d cfg.CONF.network_log.rate_limit"},{"line_number":151,"context_line":"        burst_limit \u003d cfg.CONF.network_log.burst_limit"},{"line_number":152,"context_line":"        if rate_limit:"},{"line_number":153,"context_line":"            if rate_limit \u003c 100:"},{"line_number":154,"context_line":"                LOG.warning(\"controller_rate_limit\u0027s value must be at \""},{"line_number":155,"context_line":"                            \"least 100\")"},{"line_number":156,"context_line":"            else:"},{"line_number":157,"context_line":"                int_br.set_controller_rate_limit(int(rate_limit))"},{"line_number":158,"context_line":"                if burst_limit:"},{"line_number":159,"context_line":"                    if burst_limit \u003c 25:"},{"line_number":160,"context_line":"                        LOG.warning(\"controller_burst_limit\u0027s value must be \""},{"line_number":161,"context_line":"                                    \"at least 25\")"},{"line_number":162,"context_line":"                    else:"},{"line_number":163,"context_line":"                        int_br.set_controller_burst_limit(int(burst_limit))"},{"line_number":164,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def start_logapp(self):"}],"source_content_type":"text/x-python","patch_set":35,"id":"7f515b1d_1ae3df07","line":163,"range":{"start_line":152,"start_character":0,"end_line":163,"end_character":75},"in_reply_to":"7f515b1d_779e6c08","updated":"2017-09-22 08:28:44.000000000","message":"Looks good! Thanks.","commit_id":"6bc086ff47063fd4bbb4eb054c182dafb0c70da9"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def setup_logging():"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    log_file \u003d cfg.CONF.network_log.local_output_log_base"},{"line_number":50,"context_line":"    if log_file:"},{"line_number":51,"context_line":"        from logging import handlers as watch_handler"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_75c5078e","line":48,"updated":"2017-12-04 12:49:27.000000000","message":"nit: IMHO this empty line is not necessary here","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def setup_logging():"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    log_file \u003d cfg.CONF.network_log.local_output_log_base"},{"line_number":50,"context_line":"    if log_file:"},{"line_number":51,"context_line":"        from logging import handlers as watch_handler"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_df63bbdb","line":48,"in_reply_to":"df87a7cf_75c5078e","updated":"2017-12-05 10:32:13.000000000","message":"Done","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ovs_consts.OPENFLOW14,"},{"line_number":133,"context_line":"    ]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def __init__(self, initialize_bridge):"},{"line_number":136,"context_line":"        self.int_br \u003d self.initialize_bridge(initialize_bridge)"},{"line_number":137,"context_line":"        self._deferred \u003d False"},{"line_number":138,"context_line":"        self.log_ports \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_95c20b85","line":135,"updated":"2017-12-04 12:49:27.000000000","message":"why it is called initialize_bridge (like name of method) instead of e.g. \"bridge\" or something like that?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        ovs_consts.OPENFLOW14,"},{"line_number":133,"context_line":"    ]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def __init__(self, initialize_bridge):"},{"line_number":136,"context_line":"        self.int_br \u003d self.initialize_bridge(initialize_bridge)"},{"line_number":137,"context_line":"        self._deferred \u003d False"},{"line_number":138,"context_line":"        self.log_ports \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_1f6a83b2","line":135,"in_reply_to":"df87a7cf_95c20b85","updated":"2017-12-05 10:32:13.000000000","message":"This is my mistake. It should be \"integration_bridge\". Thanks.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        rate_limit \u003d cfg.CONF.network_log.rate_limit"},{"line_number":152,"context_line":"        burst_limit \u003d cfg.CONF.network_log.burst_limit"},{"line_number":153,"context_line":"        if rate_limit:"},{"line_number":154,"context_line":"            if rate_limit \u003c 100:"},{"line_number":155,"context_line":"                LOG.warning(\"controller_rate_limit\u0027s value must be at \""},{"line_number":156,"context_line":"                            \"least 100\")"},{"line_number":157,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_35bf7ffc","line":154,"updated":"2017-12-04 12:49:27.000000000","message":"I would personally move this check to ovs_lib as it can also be used by someone else and he will bot be aware of this limitations then","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        rate_limit \u003d cfg.CONF.network_log.rate_limit"},{"line_number":152,"context_line":"        burst_limit \u003d cfg.CONF.network_log.burst_limit"},{"line_number":153,"context_line":"        if rate_limit:"},{"line_number":154,"context_line":"            if rate_limit \u003c 100:"},{"line_number":155,"context_line":"                LOG.warning(\"controller_rate_limit\u0027s value must be at \""},{"line_number":156,"context_line":"                            \"least 100\")"},{"line_number":157,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_dffdfb3a","line":154,"in_reply_to":"df87a7cf_35bf7ffc","updated":"2017-12-05 10:32:13.000000000","message":"Done","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            else:"},{"line_number":158,"context_line":"                int_br.set_controller_rate_limit(int(rate_limit))"},{"line_number":159,"context_line":"                if burst_limit:"},{"line_number":160,"context_line":"                    if burst_limit \u003c 25:"},{"line_number":161,"context_line":"                        LOG.warning(\"controller_burst_limit\u0027s value must be \""},{"line_number":162,"context_line":"                                    \"at least 25\")"},{"line_number":163,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_55bc8304","line":160,"updated":"2017-12-04 12:49:27.000000000","message":"same as above","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            else:"},{"line_number":158,"context_line":"                int_br.set_controller_rate_limit(int(rate_limit))"},{"line_number":159,"context_line":"                if burst_limit:"},{"line_number":160,"context_line":"                    if burst_limit \u003c 25:"},{"line_number":161,"context_line":"                        LOG.warning(\"controller_burst_limit\u0027s value must be \""},{"line_number":162,"context_line":"                                    \"at least 25\")"},{"line_number":163,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_fff8ff49","line":160,"in_reply_to":"df87a7cf_55bc8304","updated":"2017-12-05 10:32:13.000000000","message":"Done","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":422,"context_line":"        else:"},{"line_number":423,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":424,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _delete_accept_flows_log(self, port, log_id):"},{"line_number":427,"context_line":"        cookie \u003d self._get_cookie(port.id, log_const.ACCEPT_EVENT)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_f536f7b4","line":424,"updated":"2017-12-04 12:49:27.000000000","message":"can\u0027t this part be done like:\n\nif event \u003d\u003d log_const.DROP_EVENT:\n    self._log_drop_packet(port, log_id, project_id)\nif event \u003d\u003d log_const.ACCEPT_EVENT:\n    self._log_accept_packet(port, log_id, project_id)\n\nit\u0027s shorter and IMHO is doing the same, no?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":421,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":422,"context_line":"        else:"},{"line_number":423,"context_line":"            self._log_drop_packet(port, log_id, project_id)"},{"line_number":424,"context_line":"            self._log_accept_packet(port, log_id, project_id)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    def _delete_accept_flows_log(self, port, log_id):"},{"line_number":427,"context_line":"        cookie \u003d self._get_cookie(port.id, log_const.ACCEPT_EVENT)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_d8e0accf","line":424,"in_reply_to":"df87a7cf_f536f7b4","updated":"2017-12-05 10:32:13.000000000","message":"Your snippet code is shorter. However, there is missing a case of log_event is \u0027ALL\u0027.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            cookie.remove_log_obj_ref(log_id)"},{"line_number":430,"context_line":"            if cookie.is_empty:"},{"line_number":431,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_INGRESS_TABLE,"},{"line_number":432,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":433,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_EGRESS_TABLE,"},{"line_number":434,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":435,"context_line":"                self._schedule_cookie_deletion(cookie)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_153cbb91","line":432,"updated":"2017-12-04 12:49:27.000000000","message":"what is this \"magic\" string \u0027/-1\u0027?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":429,"context_line":"            cookie.remove_log_obj_ref(log_id)"},{"line_number":430,"context_line":"            if cookie.is_empty:"},{"line_number":431,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_INGRESS_TABLE,"},{"line_number":432,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":433,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_EGRESS_TABLE,"},{"line_number":434,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":435,"context_line":"                self._schedule_cookie_deletion(cookie)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_18729412","line":432,"in_reply_to":"df87a7cf_153cbb91","updated":"2017-12-05 10:32:13.000000000","message":"Indeed, we no need this because it will be converted at https://github.com/openstack/neutron/blob/master/neutron/agent/common/ovs_lib.py#L403. Thanks.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_INGRESS_TABLE,"},{"line_number":432,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":433,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_EGRESS_TABLE,"},{"line_number":434,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":435,"context_line":"                self._schedule_cookie_deletion(cookie)"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def _delete_drop_flows_log(self, port, log_id):"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_b5406f09","line":434,"updated":"2017-12-04 12:49:27.000000000","message":"and same here","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":440,"context_line":"            cookie.remove_log_obj_ref(log_id)"},{"line_number":441,"context_line":"            if cookie.is_empty:"},{"line_number":442,"context_line":"                self._delete_flows(table\u003dovs_consts.LOG_DROP_TABLE,"},{"line_number":443,"context_line":"                                   cookie\u003dstr(cookie.id) + \u0027/-1\u0027)"},{"line_number":444,"context_line":"                self._schedule_cookie_deletion(cookie)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def delete_port_flows_log(self, port, log_id):"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_d545f318","line":443,"updated":"2017-12-04 12:49:27.000000000","message":"and here","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":453,"context_line":"        else:"},{"line_number":454,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":455,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _delete_sg_rules_flow_log(self, port, del_rules):"},{"line_number":458,"context_line":"        cookie \u003d self._get_cookie(port.id, log_const.ACCEPT_EVENT)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_754ae727","line":455,"updated":"2017-12-04 12:49:27.000000000","message":"please see my comment from L424","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":453,"context_line":"        else:"},{"line_number":454,"context_line":"            self._delete_accept_flows_log(port, log_id)"},{"line_number":455,"context_line":"            self._delete_drop_flows_log(port, log_id)"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def _delete_sg_rules_flow_log(self, port, del_rules):"},{"line_number":458,"context_line":"        cookie \u003d self._get_cookie(port.id, log_const.ACCEPT_EVENT)"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_985f8471","line":455,"in_reply_to":"df87a7cf_754ae727","updated":"2017-12-05 10:32:13.000000000","message":"please see my above answer at L424.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        int_br.add_protocols(*OVSFirewallLoggingDriver.REQUIRED_PROTOCOLS)"},{"line_number":149,"context_line":"        # set rate limit and burst limit for controller"},{"line_number":150,"context_line":"        int_br.set_controller_rate_limit("},{"line_number":151,"context_line":"            int(cfg.CONF.network_log.rate_limit))"},{"line_number":152,"context_line":"        int_br.set_controller_burst_limit("},{"line_number":153,"context_line":"            int(cfg.CONF.network_log.burst_limit))"},{"line_number":154,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_d107191c","line":151,"range":{"start_line":151,"start_character":12,"end_line":151,"end_character":15},"updated":"2017-12-26 21:10:15.000000000","message":"it is defined as IntOpt so You don\u0027t need this conversion here","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        int_br.add_protocols(*OVSFirewallLoggingDriver.REQUIRED_PROTOCOLS)"},{"line_number":149,"context_line":"        # set rate limit and burst limit for controller"},{"line_number":150,"context_line":"        int_br.set_controller_rate_limit("},{"line_number":151,"context_line":"            int(cfg.CONF.network_log.rate_limit))"},{"line_number":152,"context_line":"        int_br.set_controller_burst_limit("},{"line_number":153,"context_line":"            int(cfg.CONF.network_log.burst_limit))"},{"line_number":154,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_a031dda4","line":151,"range":{"start_line":151,"start_character":12,"end_line":151,"end_character":15},"in_reply_to":"bf8cb3f7_d107191c","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        int_br.set_controller_rate_limit("},{"line_number":151,"context_line":"            int(cfg.CONF.network_log.rate_limit))"},{"line_number":152,"context_line":"        int_br.set_controller_burst_limit("},{"line_number":153,"context_line":"            int(cfg.CONF.network_log.burst_limit))"},{"line_number":154,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def start_logapp(self):"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_f1025d0b","line":153,"updated":"2017-12-26 21:10:15.000000000","message":"ditto","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"eaa38c510151b4c4a83356585e5228644c513bfb","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        int_br.set_controller_rate_limit("},{"line_number":151,"context_line":"            int(cfg.CONF.network_log.rate_limit))"},{"line_number":152,"context_line":"        int_br.set_controller_burst_limit("},{"line_number":153,"context_line":"            int(cfg.CONF.network_log.burst_limit))"},{"line_number":154,"context_line":"        return int_br.deferred(full_ordered\u003dTrue)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def start_logapp(self):"}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_40281133","line":153,"in_reply_to":"bf8cb3f7_f1025d0b","updated":"2017-12-27 06:43:13.000000000","message":"Done","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4ef2dc37505bc9586b95f57f9b6fef5b327e74bf","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        remote_sg_id \u003d remote_rule[\u0027remote_group_id\u0027]"},{"line_number":381,"context_line":"        secgroup_id \u003d remote_rule[\u0027security_group_id\u0027]"},{"line_number":382,"context_line":"        flow_template \u003d {"},{"line_number":383,"context_line":"            \u0027priority\u0027: 70,"},{"line_number":384,"context_line":"            \u0027dl_type\u0027: ovsfw_consts.ethertype_to_dl_type_map[ethertype],"},{"line_number":385,"context_line":"            \u0027reg_port\u0027: port.ofport,"},{"line_number":386,"context_line":"            \u0027reg_remote_group\u0027: self.conj_id_map.get_conj_id("}],"source_content_type":"text/x-python","patch_set":48,"id":"bf8cb3f7_14132f5e","line":383,"range":{"start_line":383,"start_character":24,"end_line":383,"end_character":26},"updated":"2017-12-26 21:10:15.000000000","message":"nit: what is this \"magic number\"? maybe using some constant would be better for readability, what You think?","commit_id":"dcba81e7ddf6589651fa9e1d2340ad7950bcf914"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.start_logapp()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @staticmethod"},{"line_number":149,"context_line":"    def initialize_bridge(int_br):"},{"line_number":150,"context_line":"        int_br.add_protocols(*OVSFirewallLoggingDriver.REQUIRED_PROTOCOLS)"},{"line_number":151,"context_line":"        # set rate limit and burst limit for controller"},{"line_number":152,"context_line":"        int_br.set_controller_rate_limit(cfg.CONF.network_log.rate_limit)"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_501c9669","line":149,"range":{"start_line":149,"start_character":26,"end_line":149,"end_character":32},"updated":"2018-01-02 11:31:40.000000000","message":"nit: I would name this parameter \"bridge\", IMHO there is no need to suggest here that it must be integration bridge always. It will initialize any bridge which You will pass to this method, right?","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f8ebba8ea8ff30ebb6c9e9387bc0a1b48eb6e0fb","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        self.start_logapp()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @staticmethod"},{"line_number":149,"context_line":"    def initialize_bridge(int_br):"},{"line_number":150,"context_line":"        int_br.add_protocols(*OVSFirewallLoggingDriver.REQUIRED_PROTOCOLS)"},{"line_number":151,"context_line":"        # set rate limit and burst limit for controller"},{"line_number":152,"context_line":"        int_br.set_controller_rate_limit(cfg.CONF.network_log.rate_limit)"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_bc884fc6","line":149,"range":{"start_line":149,"start_character":26,"end_line":149,"end_character":32},"in_reply_to":"9f91af0f_501c9669","updated":"2018-01-03 06:08:46.000000000","message":"You\u0027re right. Done!","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                            action\u003daction, project\u003dproject_id)"},{"line_number":217,"context_line":"        new_cookie.add_log_obj_ref(log_id)"},{"line_number":218,"context_line":"        self.cookies_table.add(new_cookie)"},{"line_number":219,"context_line":"        return cookie_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _schedule_cookie_deletion(self, cookie):"},{"line_number":222,"context_line":"        # discard a cookie object"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_9069bebf","line":219,"updated":"2018-01-02 11:31:40.000000000","message":"What You think about something like:\n\n    def generate_cookie(self, port_id, action, log_id, project_id):\n        cookie \u003d self._get_cookie(port_id, action)\n        if not cookie:\n            cookie_id \u003d self.int_br.br.request_cookie()\n            cookie \u003d Cookie(id_\u003dcookie_id, port\u003dport_id,\n                                        action\u003daction, project\u003dproject_id)\n            self.cookies_table.add(cookie)\n        cookie.add_log_obj_ref(log_id)\n        return cookie.id","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f8ebba8ea8ff30ebb6c9e9387bc0a1b48eb6e0fb","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                            action\u003daction, project\u003dproject_id)"},{"line_number":217,"context_line":"        new_cookie.add_log_obj_ref(log_id)"},{"line_number":218,"context_line":"        self.cookies_table.add(new_cookie)"},{"line_number":219,"context_line":"        return cookie_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _schedule_cookie_deletion(self, cookie):"},{"line_number":222,"context_line":"        # discard a cookie object"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_fc9ed705","line":219,"in_reply_to":"9f91af0f_9069bebf","updated":"2018-01-03 06:08:46.000000000","message":"Cool! thanks.","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            of_port_log \u003d OFPortLog(port, ovs_port, log_event)"},{"line_number":270,"context_line":"            self.log_ports[log_id].add(of_port_log)"},{"line_number":271,"context_line":"        else:"},{"line_number":272,"context_line":"            LOG.warning(\"Port: %s is not active\", port_id)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_90ae9ee5","line":272,"updated":"2018-01-02 11:31:40.000000000","message":"in https://github.com/openstack/neutron/blob/master/neutron/agent/common/ovs_lib.py#L633 there is info that \"port\" is not present in bridge. Here You are logging that this port is not ACTIVE. Wouldn\u0027t it be confusing for operator who will read logs?","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f8ebba8ea8ff30ebb6c9e9387bc0a1b48eb6e0fb","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            of_port_log \u003d OFPortLog(port, ovs_port, log_event)"},{"line_number":270,"context_line":"            self.log_ports[log_id].add(of_port_log)"},{"line_number":271,"context_line":"        else:"},{"line_number":272,"context_line":"            LOG.warning(\"Port: %s is not active\", port_id)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_471a907d","line":272,"in_reply_to":"9f91af0f_90ae9ee5","updated":"2018-01-03 06:08:46.000000000","message":"It should be remove \u0027else\u0027. Thanks.","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027, None)"},{"line_number":277,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, None)"},{"line_number":278,"context_line":"        logs_info \u003d []"},{"line_number":279,"context_line":"        if port_id:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_50b81629","line":276,"range":{"start_line":276,"start_character":40,"end_line":276,"end_character":44},"updated":"2018-01-02 11:31:40.000000000","message":"nit: None is default value and there is no need to pass it to \"get()\" method","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"29406bbe2ef57cef1807b0f3e90e9c6f135ac102","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027, None)"},{"line_number":277,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, None)"},{"line_number":278,"context_line":"        logs_info \u003d []"},{"line_number":279,"context_line":"        if port_id:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_02355646","line":276,"range":{"start_line":276,"start_character":40,"end_line":276,"end_character":44},"in_reply_to":"9f91af0f_50b81629","updated":"2018-01-03 06:57:25.000000000","message":"Done","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027, None)"},{"line_number":277,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, None)"},{"line_number":278,"context_line":"        logs_info \u003d []"},{"line_number":279,"context_line":"        if port_id:"},{"line_number":280,"context_line":"            # try to clean port flows log for port updated/create event"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_70b51a31","line":277,"range":{"start_line":277,"start_character":52,"end_line":277,"end_character":56},"updated":"2018-01-02 11:31:40.000000000","message":"same as above","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"29406bbe2ef57cef1807b0f3e90e9c6f135ac102","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    def _create_security_group_log(self, context, **kwargs):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        port_id \u003d kwargs.get(\u0027port_id\u0027, None)"},{"line_number":277,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, None)"},{"line_number":278,"context_line":"        logs_info \u003d []"},{"line_number":279,"context_line":"        if port_id:"},{"line_number":280,"context_line":"            # try to clean port flows log for port updated/create event"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_6230e257","line":277,"range":{"start_line":277,"start_character":52,"end_line":277,"end_character":56},"in_reply_to":"9f91af0f_70b51a31","updated":"2018-01-03 06:57:25.000000000","message":"Done","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        # log resources deleted events"},{"line_number":330,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, [])"},{"line_number":331,"context_line":"        for log_resource in log_resources:"},{"line_number":332,"context_line":"            log_id \u003d log_resource.get(\u0027id\u0027)"},{"line_number":333,"context_line":"            of_port_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":334,"context_line":"            for of_port_log in of_port_logs:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_90dc5e75","line":331,"updated":"2018-01-02 11:31:40.000000000","message":"in L253 You are calling warts.get(\u0027log_resources\u0027, []) directly in \"for\" loop, can You do the same here also? IMO this \"log_resources\" variable is not necessary here","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ab684422315c020da4b20febaf68c328d17f51c7","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"        # log resources deleted events"},{"line_number":330,"context_line":"        log_resources \u003d kwargs.get(\u0027log_resources\u0027, [])"},{"line_number":331,"context_line":"        for log_resource in log_resources:"},{"line_number":332,"context_line":"            log_id \u003d log_resource.get(\u0027id\u0027)"},{"line_number":333,"context_line":"            of_port_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":334,"context_line":"            for of_port_log in of_port_logs:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_42283e85","line":331,"in_reply_to":"9f91af0f_90dc5e75","updated":"2018-01-03 06:10:08.000000000","message":"Done","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":399,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":400,"context_line":"                                      log_id, project_id)"},{"line_number":401,"context_line":"        for rule in rules_generator:"},{"line_number":402,"context_line":"            if \u0027remote_group_id\u0027 in rule:"},{"line_number":403,"context_line":"                flows \u003d self._create_conj_flows_log(rule, port)"},{"line_number":404,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_b047221e","line":401,"updated":"2018-01-02 11:31:40.000000000","message":"can\u0027t You just do:\n\nfor rule in port.secgroup_rules:\n    do_all_stuff()\n\nwhat is the point to use this generator?","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"ce65b289f6fddcf3acaa248f5596976b5ec4f6ad","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":399,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":400,"context_line":"                                      log_id, project_id)"},{"line_number":401,"context_line":"        for rule in rules_generator:"},{"line_number":402,"context_line":"            if \u0027remote_group_id\u0027 in rule:"},{"line_number":403,"context_line":"                flows \u003d self._create_conj_flows_log(rule, port)"},{"line_number":404,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_f9b104e3","line":401,"in_reply_to":"9f91af0f_4731300b","updated":"2018-01-03 12:07:29.000000000","message":"If You want, it\u0027s fine for me :)","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f8ebba8ea8ff30ebb6c9e9387bc0a1b48eb6e0fb","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        rules_generator \u003d self.create_rules_generator_for_port(port)"},{"line_number":399,"context_line":"        cookie \u003d self.generate_cookie(port.id, log_const.ACCEPT_EVENT,"},{"line_number":400,"context_line":"                                      log_id, project_id)"},{"line_number":401,"context_line":"        for rule in rules_generator:"},{"line_number":402,"context_line":"            if \u0027remote_group_id\u0027 in rule:"},{"line_number":403,"context_line":"                flows \u003d self._create_conj_flows_log(rule, port)"},{"line_number":404,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_4731300b","line":401,"in_reply_to":"9f91af0f_b047221e","updated":"2018-01-03 06:08:46.000000000","message":"We can do that as your suggestion. I\u0027m not sure why generator is used at here. Actually this code is borrowed from ovsfw code. Can I keep this code? :)","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5b4a57075402520c46e25ba0d9ec9ea06321b9ba","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                self._log_accept_flow(**flow)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def add_flows_from_rules(self, port, log_info):"},{"line_number":411,"context_line":"        # log event can be ACCEPT or DROP or ALL(both ACCEPT or DROP)"},{"line_number":412,"context_line":"        event \u003d log_info[\u0027event\u0027]"},{"line_number":413,"context_line":"        project_id \u003d log_info[\u0027project_id\u0027]"},{"line_number":414,"context_line":"        log_id \u003d log_info[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_d05986fe","line":411,"range":{"start_line":411,"start_character":61,"end_line":411,"end_character":63},"updated":"2018-01-02 11:31:40.000000000","message":"nit: s/or/and ?","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"f8ebba8ea8ff30ebb6c9e9387bc0a1b48eb6e0fb","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                self._log_accept_flow(**flow)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def add_flows_from_rules(self, port, log_info):"},{"line_number":411,"context_line":"        # log event can be ACCEPT or DROP or ALL(both ACCEPT or DROP)"},{"line_number":412,"context_line":"        event \u003d log_info[\u0027event\u0027]"},{"line_number":413,"context_line":"        project_id \u003d log_info[\u0027project_id\u0027]"},{"line_number":414,"context_line":"        log_id \u003d log_info[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":51,"id":"9f91af0f_dcae732d","line":411,"range":{"start_line":411,"start_character":61,"end_line":411,"end_character":63},"in_reply_to":"9f91af0f_d05986fe","updated":"2018-01-03 06:08:46.000000000","message":"Done","commit_id":"7de0c33c7778d4d7f48fb148b157b1abba0e7511"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        syslog_handler \u003d handlers.OSSysLogHandler()"},{"line_number":60,"context_line":"        LOG.logger.addHandler(syslog_handler)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"setup_logging()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def find_deleted_sg_rules(old_port, new_ports):"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_4004b115","line":62,"updated":"2018-01-03 12:50:25.000000000","message":"I don\u0027t think we want this side-effect here. That should be done in some initialization method or function for agent extension.","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        syslog_handler \u003d handlers.OSSysLogHandler()"},{"line_number":60,"context_line":"        LOG.logger.addHandler(syslog_handler)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"setup_logging()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"def find_deleted_sg_rules(old_port, new_ports):"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_ecae0de6","line":62,"in_reply_to":"9f91af0f_4004b115","updated":"2018-01-04 07:17:11.000000000","message":"Yeah, thanks for your great reviewing. Done","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class Cookie(object):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def __init__(self, id_, port, action, project):"},{"line_number":79,"context_line":"        self.id \u003d id_"},{"line_number":80,"context_line":"        self.port \u003d port"},{"line_number":81,"context_line":"        self.action \u003d action"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_80bcf905","line":78,"range":{"start_line":78,"start_character":23,"end_line":78,"end_character":26},"updated":"2018-01-03 12:50:25.000000000","message":"nit: consider cookie_id","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class Cookie(object):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def __init__(self, id_, port, action, project):"},{"line_number":79,"context_line":"        self.id \u003d id_"},{"line_number":80,"context_line":"        self.port \u003d port"},{"line_number":81,"context_line":"        self.action \u003d action"}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_ccb3094d","line":78,"range":{"start_line":78,"start_character":23,"end_line":78,"end_character":26},"in_reply_to":"9f91af0f_80bcf905","updated":"2018-01-04 07:17:11.000000000","message":"Done","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"088ad53cc29814a22e4cc3facaf96d438df4339e","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            log_id \u003d log_info[\u0027id\u0027]"},{"line_number":285,"context_line":"            old_ofport_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":286,"context_line":"            ports \u003d log_info.get(\u0027ports_log\u0027)"},{"line_number":287,"context_line":"            self.log_ports[log_id] \u003d set([])"},{"line_number":288,"context_line":"            for port in ports:"},{"line_number":289,"context_line":"                self.create_ofport_log(port, log_id, log_info.get(\u0027event\u0027))"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_c070c175","line":287,"range":{"start_line":287,"start_character":41,"end_line":287,"end_character":43},"updated":"2018-01-03 12:50:25.000000000","message":"nit: This is not needed, is it?","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"c932e9b95c43b7eb03a6f06b5903b757f56a36ff","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            log_id \u003d log_info[\u0027id\u0027]"},{"line_number":285,"context_line":"            old_ofport_logs \u003d self.log_ports.get(log_id, [])"},{"line_number":286,"context_line":"            ports \u003d log_info.get(\u0027ports_log\u0027)"},{"line_number":287,"context_line":"            self.log_ports[log_id] \u003d set([])"},{"line_number":288,"context_line":"            for port in ports:"},{"line_number":289,"context_line":"                self.create_ofport_log(port, log_id, log_info.get(\u0027event\u0027))"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"9f91af0f_6c843d5f","line":287,"range":{"start_line":287,"start_character":41,"end_line":287,"end_character":43},"in_reply_to":"9f91af0f_c070c175","updated":"2018-01-04 07:17:11.000000000","message":"Done","commit_id":"3fdd664188fbf70d5af84d7013c2351fa4bc3e12"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e4ba4110847605a94b299e991ab845cfaaaa16d0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def initialize(self, resource_rpc, **kwargs):"},{"line_number":143,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":144,"context_line":"        self.start_logapp()"},{"line_number":145,"context_line":"        setup_logging()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @staticmethod"},{"line_number":148,"context_line":"    def initialize_bridge(bridge):"}],"source_content_type":"text/x-python","patch_set":54,"id":"9f91af0f_929513e7","line":145,"updated":"2018-01-04 14:11:57.000000000","message":"Shouldn\u0027t this happen before start_logapp() ?","commit_id":"0f45ca7ce67bbee5675452f6f24951caeb5c3338"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"9640cf8d46bcb0c0a3ea3bb9ce1a3d7d311eef4a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    def initialize(self, resource_rpc, **kwargs):"},{"line_number":143,"context_line":"        self.resource_rpc \u003d resource_rpc"},{"line_number":144,"context_line":"        self.start_logapp()"},{"line_number":145,"context_line":"        setup_logging()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    @staticmethod"},{"line_number":148,"context_line":"    def initialize_bridge(bridge):"}],"source_content_type":"text/x-python","patch_set":54,"id":"9f91af0f_1cbd88d7","line":145,"in_reply_to":"9f91af0f_929513e7","updated":"2018-01-05 04:41:28.000000000","message":"Done","commit_id":"0f45ca7ce67bbee5675452f6f24951caeb5c3338"}],"neutron/services/logapi/logging_plugin.py":[{"author":{"_account_id":9200,"name":"IWAMOTO Toshihiro","email":"iwamoto@valinux.co.jp","username":"toshii"},"change_message_id":"609a8f84485a670a61fa4d779ec71cd9581665dd","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        log_objs \u003d log_object.Log.get_objects("},{"line_number":75,"context_line":"            context, project_id\u003dproject_id)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        need_updates \u003d []"},{"line_number":78,"context_line":"        for log_obj in log_objs:"},{"line_number":79,"context_line":"            if not log_obj.enabled:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_b78acc60","side":"PARENT","line":76,"updated":"2017-07-07 06:58:01.000000000","message":"gratuitous change.","commit_id":"591fe7cd662ebdda137eb1784091bcbd928f5e18"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"ea0ffcc8aa5e787786855018a8f087ee755eed95","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        log_objs \u003d log_object.Log.get_objects("},{"line_number":75,"context_line":"            context, project_id\u003dproject_id)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        need_updates \u003d []"},{"line_number":78,"context_line":"        for log_obj in log_objs:"},{"line_number":79,"context_line":"            if not log_obj.enabled:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_75f034ca","side":"PARENT","line":76,"in_reply_to":"3f1d235d_b78acc60","updated":"2017-07-12 02:34:06.000000000","message":"Done","commit_id":"591fe7cd662ebdda137eb1784091bcbd928f5e18"}],"neutron/tests/unit/agent/common/test_ovs_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c89a92dbc0f8b300d6edc0a5e608daf6a30a9c0","unresolved":false,"context_lines":[{"line_number":966,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":967,"context_line":"                \u0027controller_rate_limit\u0027, 200)"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    def test_set_controller_rate_limit_with_value_less_than_100(self):"},{"line_number":970,"context_line":"        with mock.patch.object("},{"line_number":971,"context_line":"                self.br, \"set_controller_field\""},{"line_number":972,"context_line":"        ) as set_ctrl_field_mock:"}],"source_content_type":"text/x-python","patch_set":49,"id":"bf8cb3f7_36eaf374","line":969,"range":{"start_line":969,"start_character":60,"end_line":969,"end_character":63},"updated":"2017-12-27 09:36:52.000000000","message":"sorry, I missed that in last PS. IMHO it should be better to name it \"less_than_min\" which is easier to understand for someone else in future.","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"34f214a0cf6beb86df7d8e650ce80a89306d065f","unresolved":false,"context_lines":[{"line_number":966,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":967,"context_line":"                \u0027controller_rate_limit\u0027, 200)"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    def test_set_controller_rate_limit_with_value_less_than_100(self):"},{"line_number":970,"context_line":"        with mock.patch.object("},{"line_number":971,"context_line":"                self.br, \"set_controller_field\""},{"line_number":972,"context_line":"        ) as set_ctrl_field_mock:"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f91af0f_c58d6e7c","line":969,"range":{"start_line":969,"start_character":60,"end_line":969,"end_character":63},"in_reply_to":"bf8cb3f7_36eaf374","updated":"2017-12-28 04:32:58.000000000","message":"Done","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c89a92dbc0f8b300d6edc0a5e608daf6a30a9c0","unresolved":false,"context_lines":[{"line_number":972,"context_line":"        ) as set_ctrl_field_mock:"},{"line_number":973,"context_line":"            self.br.set_controller_rate_limit(50)"},{"line_number":974,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":975,"context_line":"                \u0027controller_rate_limit\u0027, 100)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def test_set_controller_burst_limit(self):"},{"line_number":978,"context_line":"        with mock.patch.object("}],"source_content_type":"text/x-python","patch_set":49,"id":"bf8cb3f7_f6032b41","line":975,"range":{"start_line":975,"start_character":41,"end_line":975,"end_character":44},"updated":"2017-12-27 09:36:52.000000000","message":"as You defined const CTRL_RATE_LIMIT_MIN already, why not use it here?","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"34f214a0cf6beb86df7d8e650ce80a89306d065f","unresolved":false,"context_lines":[{"line_number":972,"context_line":"        ) as set_ctrl_field_mock:"},{"line_number":973,"context_line":"            self.br.set_controller_rate_limit(50)"},{"line_number":974,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":975,"context_line":"                \u0027controller_rate_limit\u0027, 100)"},{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def test_set_controller_burst_limit(self):"},{"line_number":978,"context_line":"        with mock.patch.object("}],"source_content_type":"text/x-python","patch_set":49,"id":"9f91af0f_85ed2627","line":975,"range":{"start_line":975,"start_character":41,"end_line":975,"end_character":44},"in_reply_to":"bf8cb3f7_f6032b41","updated":"2017-12-28 04:32:58.000000000","message":"Done","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c89a92dbc0f8b300d6edc0a5e608daf6a30a9c0","unresolved":false,"context_lines":[{"line_number":982,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":983,"context_line":"                \u0027controller_burst_limit\u0027, 100)"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    def test_set_controller_burst_limit_with_value_less_than_25(self):"},{"line_number":986,"context_line":"        with mock.patch.object("},{"line_number":987,"context_line":"                self.br, \"set_controller_field\""},{"line_number":988,"context_line":"        ) as set_ctrl_field_mock:"}],"source_content_type":"text/x-python","patch_set":49,"id":"bf8cb3f7_7695dbe3","line":985,"range":{"start_line":985,"start_character":61,"end_line":985,"end_character":63},"updated":"2017-12-27 09:36:52.000000000","message":"see my comment from L969","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"34f214a0cf6beb86df7d8e650ce80a89306d065f","unresolved":false,"context_lines":[{"line_number":982,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":983,"context_line":"                \u0027controller_burst_limit\u0027, 100)"},{"line_number":984,"context_line":""},{"line_number":985,"context_line":"    def test_set_controller_burst_limit_with_value_less_than_25(self):"},{"line_number":986,"context_line":"        with mock.patch.object("},{"line_number":987,"context_line":"                self.br, \"set_controller_field\""},{"line_number":988,"context_line":"        ) as set_ctrl_field_mock:"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f91af0f_45f71ef7","line":985,"range":{"start_line":985,"start_character":61,"end_line":985,"end_character":63},"in_reply_to":"bf8cb3f7_7695dbe3","updated":"2017-12-28 04:32:58.000000000","message":"Done","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3c89a92dbc0f8b300d6edc0a5e608daf6a30a9c0","unresolved":false,"context_lines":[{"line_number":988,"context_line":"        ) as set_ctrl_field_mock:"},{"line_number":989,"context_line":"            self.br.set_controller_burst_limit(10)"},{"line_number":990,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":991,"context_line":"                \u0027controller_burst_limit\u0027, 25)"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"class TestDeferredOVSBridge(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":49,"id":"bf8cb3f7_369f5304","line":991,"range":{"start_line":991,"start_character":42,"end_line":991,"end_character":44},"updated":"2017-12-27 09:36:52.000000000","message":"see my comment from L975","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"34f214a0cf6beb86df7d8e650ce80a89306d065f","unresolved":false,"context_lines":[{"line_number":988,"context_line":"        ) as set_ctrl_field_mock:"},{"line_number":989,"context_line":"            self.br.set_controller_burst_limit(10)"},{"line_number":990,"context_line":"            set_ctrl_field_mock.assert_called_once_with("},{"line_number":991,"context_line":"                \u0027controller_burst_limit\u0027, 25)"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":""},{"line_number":994,"context_line":"class TestDeferredOVSBridge(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":49,"id":"9f91af0f_e5dbd27a","line":991,"range":{"start_line":991,"start_character":42,"end_line":991,"end_character":44},"in_reply_to":"bf8cb3f7_369f5304","updated":"2017-12-28 04:32:58.000000000","message":"Done","commit_id":"5a3b06d5b883140f12d0c63661df9ce8a1b114ed"}],"neutron/tests/unit/agent/linux/openvswitch_firewall/test_firewall.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":719,"context_line":"class TestOVSFirewallDriverWithEnableLogging(TestOVSFirewallDriver):"},{"line_number":720,"context_line":"    def setUp(self):"},{"line_number":721,"context_line":"        super(TestOVSFirewallDriverWithEnableLogging, self).setUp()"},{"line_number":722,"context_line":"        set_enable_logging()"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_prepare_port_filter(self):"},{"line_number":725,"context_line":"        port_dict \u003d {\u0027device\u0027: \u0027port-id\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_95476b1e","line":722,"updated":"2017-12-04 12:49:27.000000000","message":"do You really need this helper function? is it used in other places also or only here?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":719,"context_line":"class TestOVSFirewallDriverWithEnableLogging(TestOVSFirewallDriver):"},{"line_number":720,"context_line":"    def setUp(self):"},{"line_number":721,"context_line":"        super(TestOVSFirewallDriverWithEnableLogging, self).setUp()"},{"line_number":722,"context_line":"        set_enable_logging()"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def test_prepare_port_filter(self):"},{"line_number":725,"context_line":"        port_dict \u003d {\u0027device\u0027: \u0027port-id\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_df6dfb98","line":722,"in_reply_to":"df87a7cf_95476b1e","updated":"2017-12-05 10:32:13.000000000","message":"Done!","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"40f23c297dbb2178d30e97fd8804b0f89ab1215c","unresolved":false,"context_lines":[{"line_number":717,"context_line":"class TestOVSFirewallDriverWithEnableLogging(TestOVSFirewallDriver):"},{"line_number":718,"context_line":"    def setUp(self):"},{"line_number":719,"context_line":"        super(TestOVSFirewallDriverWithEnableLogging, self).setUp()"},{"line_number":720,"context_line":"        # enabled logging"},{"line_number":721,"context_line":"        cfg.CONF.set_override(\u0027extensions\u0027, [\u0027log\u0027], group\u003d\u0027agent\u0027)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def test_prepare_port_filter(self):"}],"source_content_type":"text/x-python","patch_set":44,"id":"df87a7cf_1bf92e4c","line":720,"updated":"2017-12-05 11:32:25.000000000","message":"nit: s/enabled/enable","commit_id":"2387f3ec78123fe8b825a83987060c763e681692"}],"neutron/tests/unit/services/logapi/drivers/openvswitch/test_ovs_firewall_log.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"29e9f78706244d31c9e05c02b06dbf82442ba7d0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertEqual(self.mock_bridge.deferred.return_value, br)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_set_controller_rate_limit(self):"},{"line_number":143,"context_line":"        set_log_driver_config(100, 25)"},{"line_number":144,"context_line":"        self.log_driver.initialize_bridge(self.mock_bridge)"},{"line_number":145,"context_line":"        expected_calls \u003d [mock.call.set_controller_rate_limit(100),"},{"line_number":146,"context_line":"                          mock.call.set_controller_burst_limit(25)]"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_35e69f46","line":143,"updated":"2017-12-04 12:49:27.000000000","message":"maybe You could also add test case when values are too low?","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"},{"author":{"_account_id":15471,"name":"Nguyen Phuong An","email":"annp.cs51@gmail.com","username":"An-FVL"},"change_message_id":"3caa63327b90805e58de248a12759ac1df72d03c","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        self.assertEqual(self.mock_bridge.deferred.return_value, br)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_set_controller_rate_limit(self):"},{"line_number":143,"context_line":"        set_log_driver_config(100, 25)"},{"line_number":144,"context_line":"        self.log_driver.initialize_bridge(self.mock_bridge)"},{"line_number":145,"context_line":"        expected_calls \u003d [mock.call.set_controller_rate_limit(100),"},{"line_number":146,"context_line":"                          mock.call.set_controller_burst_limit(25)]"}],"source_content_type":"text/x-python","patch_set":43,"id":"df87a7cf_3804384a","line":143,"in_reply_to":"df87a7cf_35e69f46","updated":"2017-12-05 10:32:13.000000000","message":"I\u0027ve added these test cases at https://review.openstack.org/#/c/468281/44/neutron/tests/unit/agent/common/test_ovs_lib.py. Please review it. Thanks in advance.","commit_id":"158f37c77a4d9e7441a3a4482066d061c662b7ab"}]}
