)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6858c7623a642d8d7056908e1d1c40c349c21b0","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Work to find the root cause for exceptions found in the df-controller"},{"line_number":10,"context_line":"log file in the tempest run and resolve them."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I14039b3e5752b8ecbc7505a5cb2da3965484c1f6"},{"line_number":13,"context_line":"Closes-Bug: #1728518"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1f485f77_c609dbdd","line":11,"updated":"2017-11-12 12:38:29.000000000","message":"Please include the details of the impact this patch on the code","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"f8e2a305e2e90b83fbe32ce630a1d785d0cf775d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Work to find the root cause for exceptions found in the df-controller"},{"line_number":10,"context_line":"log file in the tempest run and resolve them."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I14039b3e5752b8ecbc7505a5cb2da3965484c1f6"},{"line_number":13,"context_line":"Closes-Bug: #1728518"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1f485f77_469f2b50","line":11,"in_reply_to":"1f485f77_c609dbdd","updated":"2017-11-12 13:26:00.000000000","message":"Done","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bd873a4a2241b39ff9ab0238b10f23a3880a6e4b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shachar Snapiri \u003cshachar.snapiri@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-12 15:41:34 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Resolve exceptions found in the tempest log"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixed issues in the code revealed by exceptions in the tempest build"},{"line_number":10,"context_line":"logs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1f485f77_6627c714","line":7,"updated":"2017-11-12 13:46:39.000000000","message":"nit: I think it would be better to rebase this on top of https://review.openstack.org/#/c/503965 (which is almost finished)","commit_id":"a2a39303e0e9b4290de1674ec4a72ba441d86b8f"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"d63a529d6e128b26a81edb7475aee44cead64167","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Shachar Snapiri \u003cshachar.snapiri@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-12 15:41:34 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Resolve exceptions found in the tempest log"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixed issues in the code revealed by exceptions in the tempest build"},{"line_number":10,"context_line":"logs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1f485f77_66558750","line":7,"in_reply_to":"1f485f77_6627c714","updated":"2017-11-12 13:52:12.000000000","message":"This is an option, but as I agreed with leyal, the merge is super easy, so it does not make that much of a difference...","commit_id":"a2a39303e0e9b4290de1674ec4a72ba441d86b8f"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"5272c06e92cc6a75d9828d6c5b21742f243638ec","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixed issues in the code revealed by exceptions in the tempest build"},{"line_number":10,"context_line":"logs."},{"line_number":11,"context_line":"These were in different areas of the code:"},{"line_number":12,"context_line":"* dnat - two issues found - reference to removed ports existed \u0026"},{"line_number":13,"context_line":"        uninstall and unbind methods were both calling each other."},{"line_number":14,"context_line":"        added a cache to identify ports in process so we will avoid"},{"line_number":15,"context_line":"        these loop calls"},{"line_number":16,"context_line":"* dhcp - Ports with IPv6 address only were added to the dhcp, which"},{"line_number":17,"context_line":"        only handles IPv4 packets"},{"line_number":18,"context_line":"* l3_proactive handler - added handling to cases where ports had no"},{"line_number":19,"context_line":"        (or multiple) IP addresses."},{"line_number":20,"context_line":"* topology: minor old typo bug."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Note - DHCP should be revisited as the code assumes each port may have"},{"line_number":23,"context_line":"just one address - which is not correct."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1f485f77_e9bdc868","line":20,"range":{"start_line":12,"start_character":0,"end_line":20,"end_character":31},"updated":"2017-11-12 16:51:42.000000000","message":"I would prefer to have each one fixed by separate commit","commit_id":"a2a39303e0e9b4290de1674ec4a72ba441d86b8f"}],"dragonflow/controller/apps/dhcp.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bd873a4a2241b39ff9ab0238b10f23a3880a6e4b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        dhcp_message_type \u003d self._get_dhcp_message_type_opt(dhcp_packet)"},{"line_number":111,"context_line":"        send_packet \u003d None"},{"line_number":112,"context_line":"        if dhcp_message_type \u003d\u003d dhcp.DHCP_DISCOVER:"},{"line_number":113,"context_line":"            # FIXME the port may have multiple IP addresses, check all"},{"line_number":114,"context_line":"            send_packet \u003d self._create_dhcp_response("},{"line_number":115,"context_line":"                                packet,"},{"line_number":116,"context_line":"                                dhcp_packet,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_a6b13fe4","line":113,"updated":"2017-11-12 13:46:39.000000000","message":"Not sure I understand this comment, but I assume it\u0027s solved in https://review.openstack.org/#/c/503965 ?","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"d63a529d6e128b26a81edb7475aee44cead64167","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        dhcp_message_type \u003d self._get_dhcp_message_type_opt(dhcp_packet)"},{"line_number":111,"context_line":"        send_packet \u003d None"},{"line_number":112,"context_line":"        if dhcp_message_type \u003d\u003d dhcp.DHCP_DISCOVER:"},{"line_number":113,"context_line":"            # FIXME the port may have multiple IP addresses, check all"},{"line_number":114,"context_line":"            send_packet \u003d self._create_dhcp_response("},{"line_number":115,"context_line":"                                packet,"},{"line_number":116,"context_line":"                                dhcp_packet,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_c6667b52","line":113,"in_reply_to":"1f485f77_a6b13fe4","updated":"2017-11-12 13:52:12.000000000","message":"Indeed","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"}],"dragonflow/controller/apps/dnat.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1a0402309bde4a31a1fac96f32e4b80a5b276b46","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            # We MUST raise the port_update event for other processes to handle"},{"line_number":508,"context_line":"            # but we want to ignore it (so it will not call us back."},{"line_number":509,"context_line":"            # So, we keep a set of fips in process to ignore."},{"line_number":510,"context_line":"            self.fips_in_process.add(floatingip.floating_lport.id)"},{"line_number":511,"context_line":"            if floatingip.lport.is_local:"},{"line_number":512,"context_line":"                floatingip.floating_lport.emit_unbind_local()"},{"line_number":513,"context_line":"            elif floatingip.lport.is_remote:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_161abd6d","line":510,"range":{"start_line":510,"start_character":17,"end_line":510,"end_character":32},"updated":"2017-11-07 12:06:50.000000000","message":"Maybe a bit nitty, but attibute name implies fips and content implies lports...\n\nI think it should either be called correctly to reflect that, or we can store floatingip_id and check later on if port\u0027s device_id matches the IDs in the set.","commit_id":"7c82dce26fc86c05d679decb6826b9b5e84d65ef"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1a0402309bde4a31a1fac96f32e4b80a5b276b46","unresolved":false,"context_lines":[{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    @df_base_app.register_event(l2.LogicalPort, l2.EVENT_UNBIND_REMOTE)"},{"line_number":569,"context_line":"    def _remote_port_unbound(self, lport):"},{"line_number":570,"context_line":"        # In case the port is already in process, just ignore"},{"line_number":571,"context_line":"        if lport.id in self.fips_in_process:"},{"line_number":572,"context_line":"            self.fips_in_process.remove(lport.id)"},{"line_number":573,"context_line":"            return"},{"line_number":574,"context_line":"        for floatingip in self._get_floatingips_by_lport(lport):"},{"line_number":575,"context_line":"            self._uninstall_remote_floatingip(floatingip)"},{"line_number":576,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_96546dff","line":573,"range":{"start_line":570,"start_character":0,"end_line":573,"end_character":18},"updated":"2017-11-07 12:06:50.000000000","message":"Repeats above block verbatim, maybe worth factoring out","commit_id":"7c82dce26fc86c05d679decb6826b9b5e84d65ef"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6858c7623a642d8d7056908e1d1c40c349c21b0","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            self._install_remote_floatingip(floatingip)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def _uninstall_floatingip(self, floatingip):"},{"line_number":478,"context_line":"        # In case the VM was deleted, the nova port is removed. (Actually the"},{"line_number":479,"context_line":"        # floating port was also uninstalled), we should just return in that"},{"line_number":480,"context_line":"        # case."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        # FIXME lport in self.db_store"},{"line_number":483,"context_line":"        if floatingip.lport.get_object() is None:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_06fff3aa","line":480,"range":{"start_line":478,"start_character":8,"end_line":480,"end_character":15},"updated":"2017-11-12 12:38:29.000000000","message":"I do not see how this comment adds more information than the code. Can it be removed?","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"f8e2a305e2e90b83fbe32ce630a1d785d0cf775d","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            self._install_remote_floatingip(floatingip)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def _uninstall_floatingip(self, floatingip):"},{"line_number":478,"context_line":"        # In case the VM was deleted, the nova port is removed. (Actually the"},{"line_number":479,"context_line":"        # floating port was also uninstalled), we should just return in that"},{"line_number":480,"context_line":"        # case."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        # FIXME lport in self.db_store"},{"line_number":483,"context_line":"        if floatingip.lport.get_object() is None:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_26ac2f8b","line":480,"range":{"start_line":478,"start_character":8,"end_line":480,"end_character":15},"in_reply_to":"1f485f77_06fff3aa","updated":"2017-11-12 13:26:00.000000000","message":"I believe it just tells us in which cases we may get to this scenario. I would gladly remove it from the code, but I believe it must reside somewhere...","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"bd873a4a2241b39ff9ab0238b10f23a3880a6e4b","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            # We MUST raise the port_update event for other processes to handle"},{"line_number":508,"context_line":"            # but we want to ignore it (so it will not call us back."},{"line_number":509,"context_line":"            # So, we keep a set of fips in process to ignore."},{"line_number":510,"context_line":"            self.lports_in_process.add(floatingip.floating_lport.id)"},{"line_number":511,"context_line":"            if floatingip.lport.is_local:"},{"line_number":512,"context_line":"                floatingip.floating_lport.emit_unbind_local()"},{"line_number":513,"context_line":"            elif floatingip.lport.is_remote:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_c6e1dbd2","line":510,"range":{"start_line":510,"start_character":17,"end_line":510,"end_character":34},"updated":"2017-11-12 13:46:39.000000000","message":"nit: I don\u0027t think I like this solution, but I can\u0027t think of anything better...","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"d63a529d6e128b26a81edb7475aee44cead64167","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            # We MUST raise the port_update event for other processes to handle"},{"line_number":508,"context_line":"            # but we want to ignore it (so it will not call us back."},{"line_number":509,"context_line":"            # So, we keep a set of fips in process to ignore."},{"line_number":510,"context_line":"            self.lports_in_process.add(floatingip.floating_lport.id)"},{"line_number":511,"context_line":"            if floatingip.lport.is_local:"},{"line_number":512,"context_line":"                floatingip.floating_lport.emit_unbind_local()"},{"line_number":513,"context_line":"            elif floatingip.lport.is_remote:"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_06737317","line":510,"range":{"start_line":510,"start_character":17,"end_line":510,"end_character":34},"in_reply_to":"1f485f77_c6e1dbd2","updated":"2017-11-12 13:52:12.000000000","message":"I do not like it either. Tried to think of ways around it and the rest were at least as bad...","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6858c7623a642d8d7056908e1d1c40c349c21b0","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @df_base_app.register_event(l2.LogicalPort, l2.EVENT_UNBIND_LOCAL)"},{"line_number":551,"context_line":"    def _local_port_unbound(self, lport):"},{"line_number":552,"context_line":"        # In case the port is already in process, just ignore"},{"line_number":553,"context_line":"        if lport.id in self.lports_in_process:"},{"line_number":554,"context_line":"            self.lports_in_process.remove(lport.id)"},{"line_number":555,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_6621074e","line":552,"range":{"start_line":552,"start_character":50,"end_line":552,"end_character":61},"updated":"2017-11-12 12:38:29.000000000","message":"it is not just ignored, it is flushed from the temporary store","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"f8e2a305e2e90b83fbe32ce630a1d785d0cf775d","unresolved":false,"context_lines":[{"line_number":549,"context_line":""},{"line_number":550,"context_line":"    @df_base_app.register_event(l2.LogicalPort, l2.EVENT_UNBIND_LOCAL)"},{"line_number":551,"context_line":"    def _local_port_unbound(self, lport):"},{"line_number":552,"context_line":"        # In case the port is already in process, just ignore"},{"line_number":553,"context_line":"        if lport.id in self.lports_in_process:"},{"line_number":554,"context_line":"            self.lports_in_process.remove(lport.id)"},{"line_number":555,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_06a9337a","line":552,"range":{"start_line":552,"start_character":50,"end_line":552,"end_character":61},"in_reply_to":"1f485f77_6621074e","updated":"2017-11-12 13:26:00.000000000","message":"Done","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6858c7623a642d8d7056908e1d1c40c349c21b0","unresolved":false,"context_lines":[{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    @df_base_app.register_event(l2.LogicalPort, l2.EVENT_UNBIND_REMOTE)"},{"line_number":569,"context_line":"    def _remote_port_unbound(self, lport):"},{"line_number":570,"context_line":"        # In case the port is already in process, just ignore"},{"line_number":571,"context_line":"        if lport.id in self.lports_in_process:"},{"line_number":572,"context_line":"            self.lports_in_process.remove(lport.id)"},{"line_number":573,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_461e0b0d","line":570,"range":{"start_line":570,"start_character":50,"end_line":570,"end_character":61},"updated":"2017-11-12 12:38:29.000000000","message":"ditto","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"f8e2a305e2e90b83fbe32ce630a1d785d0cf775d","unresolved":false,"context_lines":[{"line_number":567,"context_line":""},{"line_number":568,"context_line":"    @df_base_app.register_event(l2.LogicalPort, l2.EVENT_UNBIND_REMOTE)"},{"line_number":569,"context_line":"    def _remote_port_unbound(self, lport):"},{"line_number":570,"context_line":"        # In case the port is already in process, just ignore"},{"line_number":571,"context_line":"        if lport.id in self.lports_in_process:"},{"line_number":572,"context_line":"            self.lports_in_process.remove(lport.id)"},{"line_number":573,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_e6b737d8","line":570,"range":{"start_line":570,"start_character":50,"end_line":570,"end_character":61},"in_reply_to":"1f485f77_461e0b0d","updated":"2017-11-12 13:26:00.000000000","message":"Done","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"}],"dragonflow/neutron/ml2/mech_driver.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c6858c7623a642d8d7056908e1d1c40c349c21b0","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                                                          old_subnet[\u0027id\u0027])"},{"line_number":401,"context_line":"                    self._delete_subnet_dhcp_port(context, port)"},{"line_number":402,"context_line":"                else:"},{"line_number":403,"context_line":"                    LOG.error(\"SHACHAR2\")"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            return None, None"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_0618131b","line":403,"range":{"start_line":403,"start_character":20,"end_line":403,"end_character":41},"updated":"2017-11-12 12:38:29.000000000","message":"Maybe something a bit more descriptive :-)","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"f8e2a305e2e90b83fbe32ce630a1d785d0cf775d","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                                                          old_subnet[\u0027id\u0027])"},{"line_number":401,"context_line":"                    self._delete_subnet_dhcp_port(context, port)"},{"line_number":402,"context_line":"                else:"},{"line_number":403,"context_line":"                    LOG.error(\"SHACHAR2\")"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"            return None, None"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1f485f77_c6bc3bbd","line":403,"range":{"start_line":403,"start_character":20,"end_line":403,"end_character":41},"in_reply_to":"1f485f77_0618131b","updated":"2017-11-12 13:26:00.000000000","message":"oops :P","commit_id":"52835ac68d2b5dce73ae9106559d505a93391616"}]}
