)]}'
{"quantum/plugins/nec/agent/nec_quantum_agent.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                    datapath_id\u003ddatapath_id,"},{"line_number":62,"context_line":"                                    port_added\u003dport_added,"},{"line_number":63,"context_line":"                                    port_removed\u003dport_removed))"},{"line_number":64,"context_line":"        except Exception as e:"},{"line_number":65,"context_line":"            LOG.warn(_(\"update_ports() failed.\"))"},{"line_number":66,"context_line":"            return"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAoA%3D","line":64,"updated":"2013-02-11 19:09:54.000000000","message":"We should avoid to use generic Exception","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                    datapath_id\u003ddatapath_id,"},{"line_number":62,"context_line":"                                    port_added\u003dport_added,"},{"line_number":63,"context_line":"                                    port_removed\u003dport_removed))"},{"line_number":64,"context_line":"        except Exception as e:"},{"line_number":65,"context_line":"            LOG.warn(_(\"update_ports() failed.\"))"},{"line_number":66,"context_line":"            return"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BZM%3D","line":64,"in_reply_to":"AAAAM3%2F%2FAGA%3D","updated":"2013-02-12 19:11:43.000000000","message":"I got your point. Let\u0027s keep this style here","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":"                                    datapath_id\u003ddatapath_id,"},{"line_number":62,"context_line":"                                    port_added\u003dport_added,"},{"line_number":63,"context_line":"                                    port_removed\u003dport_removed))"},{"line_number":64,"context_line":"        except Exception as e:"},{"line_number":65,"context_line":"            LOG.warn(_(\"update_ports() failed.\"))"},{"line_number":66,"context_line":"            return"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAGA%3D","line":64,"in_reply_to":"AAAAM3%2F%2FAoA%3D","updated":"2013-02-11 22:51:20.000000000","message":"I agree in general, but a generic Exception is used in RPC call in most cases using RPC (OVS, LB plugin and l3-agent).\nI will check what exceptions are raised but I am not confident if i can find an answer.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.callback_nec \u003d NECAgentRpcCallback(self.context,"},{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAng%3D","line":147,"updated":"2013-02-11 19:09:54.000000000","message":"Question: Why two callback class is separated?","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.callback_nec \u003d NECAgentRpcCallback(self.context,"},{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BZE%3D","line":147,"in_reply_to":"AAAAM3%2F%2FAK0%3D","updated":"2013-02-12 19:11:43.000000000","message":"It make sense.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.callback_nec \u003d NECAgentRpcCallback(self.context,"},{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAK0%3D","line":147,"in_reply_to":"AAAAM3%2F%2FAng%3D","updated":"2013-02-11 22:51:20.000000000","message":"Each RPC has its version and it changes independently.\nThe sender side specifies its version per feature (e.g., security group RPC specifies 1.1 now).\n\nIf we split callbacks we can easily maintain each feature. I am not sure which is better the integrated version or separated version, but at now separated versions looks better to me from the point of the maintainability.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"},{"line_number":151,"context_line":"        consumers \u003d [[topics.PORT, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAnc%3D","line":148,"updated":"2013-02-11 19:09:54.000000000","message":"callbacks is needed?","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"},{"line_number":151,"context_line":"        consumers \u003d [[topics.PORT, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B8Sg%3D","line":148,"in_reply_to":"AAAAM3%2F%2FAKo%3D","updated":"2013-02-13 22:37:38.000000000","message":"Done","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                                self, self.sg_agent)"},{"line_number":146,"context_line":"        self.callback_sg \u003d SecurityGroupAgentRpcCallback(self.context,"},{"line_number":147,"context_line":"                                                         self.sg_agent)"},{"line_number":148,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_sg]"},{"line_number":149,"context_line":"        self.dispatcher \u003d dispatcher.RpcDispatcher(callbacks)"},{"line_number":150,"context_line":"        # Define the listening consumer for the agent"},{"line_number":151,"context_line":"        consumers \u003d [[topics.PORT, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAKo%3D","line":148,"in_reply_to":"AAAAM3%2F%2FAnc%3D","updated":"2013-02-11 22:51:20.000000000","message":"It is just used in the next line. Will merge them.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"}],"quantum/plugins/nec/db/api.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"daf1d322d2a8800d27651b008a1d70a211c830dc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    query \u003d query.filter(models_v2.Port.id \u003d\u003d port_id)"},{"line_number":137,"context_line":"    port_and_sgs \u003d query.all()"},{"line_number":138,"context_line":"    if not port_and_sgs:"},{"line_number":139,"context_line":"        return None"},{"line_number":140,"context_line":"    port \u003d port_and_sgs[0][0]"},{"line_number":141,"context_line":"    plugin \u003d manager.QuantumManager.get_plugin()"},{"line_number":142,"context_line":"    port_dict \u003d plugin._make_port_dict(port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2F6g%3D","line":139,"updated":"2013-02-12 00:54:27.000000000","message":"nit you don\u0027t need None","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":136,"context_line":"    query \u003d query.filter(models_v2.Port.id \u003d\u003d port_id)"},{"line_number":137,"context_line":"    port_and_sgs \u003d query.all()"},{"line_number":138,"context_line":"    if not port_and_sgs:"},{"line_number":139,"context_line":"        return None"},{"line_number":140,"context_line":"    port \u003d port_and_sgs[0][0]"},{"line_number":141,"context_line":"    plugin \u003d manager.QuantumManager.get_plugin()"},{"line_number":142,"context_line":"    port_dict \u003d plugin._make_port_dict(port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2F20%3D","line":139,"in_reply_to":"AAAAM3%2F%2B%2F6g%3D","updated":"2013-02-13 22:37:38.000000000","message":"\"return\" and \"return None\" is same (both return None).\nSince this method expects to return some value, I return None explicitly here. It is just for cosistency. Please let me go unchanged.\n\nI grepped the quantum code. Both styles are commonly used and there seems to be no consensus for it.\n  return None : 45\n  return : 149 (including method which does return a value)\n\nIn addition, I have a plan to refactor this method. It is a common logic among OVS, LB and NEC plugin. It is worth refactoring I believe.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"}],"quantum/plugins/nec/nec_plugin.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.callback_nec \u003d NECPluginV2RPCCallbacks(self)"},{"line_number":99,"context_line":"        self.callback_dhcp \u003d DhcpRpcCallback()"},{"line_number":100,"context_line":"        self.callback_l3 \u003d L3RpcCallback()"},{"line_number":101,"context_line":"        self.callback_sg \u003d SecurityGroupServerRpcCallback()"},{"line_number":102,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_dhcp,"},{"line_number":103,"context_line":"                     self.callback_l3, self.callback_sg]"},{"line_number":104,"context_line":"        self.dispatcher \u003d q_rpc.PluginRpcDispatcher(callbacks)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAnM%3D","line":101,"updated":"2013-02-11 19:09:54.000000000","message":"Same question here as agent code","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":98,"context_line":"        self.callback_nec \u003d NECPluginV2RPCCallbacks(self)"},{"line_number":99,"context_line":"        self.callback_dhcp \u003d DhcpRpcCallback()"},{"line_number":100,"context_line":"        self.callback_l3 \u003d L3RpcCallback()"},{"line_number":101,"context_line":"        self.callback_sg \u003d SecurityGroupServerRpcCallback()"},{"line_number":102,"context_line":"        callbacks \u003d [self.callback_nec, self.callback_dhcp,"},{"line_number":103,"context_line":"                     self.callback_l3, self.callback_sg]"},{"line_number":104,"context_line":"        self.dispatcher \u003d q_rpc.PluginRpcDispatcher(callbacks)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAKU%3D","line":101,"in_reply_to":"AAAAM3%2F%2FAnM%3D","updated":"2013-02-11 22:51:20.000000000","message":"I replied in agent side.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        LOG.debug(_(\"NECPluginV2.update_network() called, \""},{"line_number":253,"context_line":"                    \"id\u003d%(id)s network\u003d%(network)s .\"), locals())"},{"line_number":254,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":255,"context_line":"            old_net \u003d super(NECPluginV2, self).get_network(context, id)"},{"line_number":256,"context_line":"            new_net \u003d super(NECPluginV2, self).update_network(context, id,"},{"line_number":257,"context_line":"                                                              network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAnI%3D","line":254,"updated":"2013-02-11 19:09:54.000000000","message":"related change?","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        LOG.debug(_(\"NECPluginV2.update_network() called, \""},{"line_number":253,"context_line":"                    \"id\u003d%(id)s network\u003d%(network)s .\"), locals())"},{"line_number":254,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":255,"context_line":"            old_net \u003d super(NECPluginV2, self).get_network(context, id)"},{"line_number":256,"context_line":"            new_net \u003d super(NECPluginV2, self).update_network(context, id,"},{"line_number":257,"context_line":"                                                              network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B8RQ%3D","line":254,"in_reply_to":"AAAAM3%2F%2B%2BZA%3D","updated":"2013-02-13 22:37:38.000000000","message":"I decided to change it in the other patch I posted. I reverted this line.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        LOG.debug(_(\"NECPluginV2.update_network() called, \""},{"line_number":253,"context_line":"                    \"id\u003d%(id)s network\u003d%(network)s .\"), locals())"},{"line_number":254,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":255,"context_line":"            old_net \u003d super(NECPluginV2, self).get_network(context, id)"},{"line_number":256,"context_line":"            new_net \u003d super(NECPluginV2, self).update_network(context, id,"},{"line_number":257,"context_line":"                                                              network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BZA%3D","line":254,"in_reply_to":"AAAAM3%2F%2FAJc%3D","updated":"2013-02-12 19:11:43.000000000","message":"I got it. Could you add this on commit message?","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":251,"context_line":"        \"\"\""},{"line_number":252,"context_line":"        LOG.debug(_(\"NECPluginV2.update_network() called, \""},{"line_number":253,"context_line":"                    \"id\u003d%(id)s network\u003d%(network)s .\"), locals())"},{"line_number":254,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":255,"context_line":"            old_net \u003d super(NECPluginV2, self).get_network(context, id)"},{"line_number":256,"context_line":"            new_net \u003d super(NECPluginV2, self).update_network(context, id,"},{"line_number":257,"context_line":"                                                              network)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAJc%3D","line":254,"in_reply_to":"AAAAM3%2F%2FAnI%3D","updated":"2013-02-11 22:51:20.000000000","message":"Actually it is not a part of the BP.\n\nIn this code, two style are used: \"with session.context.begin\" and \"session \u003d context.session\" + \"with session.begin\".\nThe latter style is only used in here and L.223 (above), so I replaced them with the former style.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"daf1d322d2a8800d27651b008a1d70a211c830dc","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                self.activate_port_if_ready(context, new_port)"},{"line_number":403,"context_line":"            else:"},{"line_number":404,"context_line":"                self.deactivate_port(context, old_port)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2F6U%3D","line":405,"updated":"2013-02-12 00:54:27.000000000","message":"missing: self._extend_port_dict_security_group(context, port)","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"unresolved":false,"context_lines":[{"line_number":402,"context_line":"                self.activate_port_if_ready(context, new_port)"},{"line_number":403,"context_line":"            else:"},{"line_number":404,"context_line":"                self.deactivate_port(context, old_port)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2BY4%3D","line":405,"in_reply_to":"AAAAM3%2F%2B%2F6U%3D","updated":"2013-02-12 19:11:43.000000000","message":"It is included in update_security_group_on_port","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":402,"context_line":"                self.activate_port_if_ready(context, new_port)"},{"line_number":403,"context_line":"            else:"},{"line_number":404,"context_line":"                self.deactivate_port(context, old_port)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B%2F2I%3D","line":405,"in_reply_to":"AAAAM3%2F%2B%2F6U%3D","updated":"2013-02-13 22:37:38.000000000","message":"Thanks for the detail review.\n\n_extend_port_dict_security_group() is called in update_security_group_on_port at L.391.\nBut it is confusing since other attribute extend methods are usually called in the plugin top-level code. (Perhaps I must forget it soon). I will add a note here.\n\nIn addition it is better to refactor update_security_group_on_port() in db/securitygroups_rpc_base.py. During the coding, I found several points to be refactored in the common security group RPC code.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"9283de3eea3787f3f561607595e427b407e11b91","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"},{"line_number":409,"context_line":"        \"\"\"Delete port and packet_filters associated with the port.\"\"\""},{"line_number":410,"context_line":"        LOG.debug(_(\"NECPluginV2.delete_port() called, id\u003d%s .\"), id)"},{"line_number":411,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":412,"context_line":"            port \u003d super(NECPluginV2, self).get_port(context, id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAmY%3D","line":409,"updated":"2013-02-11 19:09:54.000000000","message":"Question:\nCan we call deactivate_port twice times without exception?\n\n(If the deactivate_port throws exception in seconde call, may be,  we can\u0027t delete port on deletion error after L417.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"},{"line_number":409,"context_line":"        \"\"\"Delete port and packet_filters associated with the port.\"\"\""},{"line_number":410,"context_line":"        LOG.debug(_(\"NECPluginV2.delete_port() called, id\u003d%s .\"), id)"},{"line_number":411,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":412,"context_line":"            port \u003d super(NECPluginV2, self).get_port(context, id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B8Ls%3D","line":409,"in_reply_to":"AAAAM3%2F%2FAHg%3D","updated":"2013-02-13 22:37:38.000000000","message":"I checked the full operation sequence.\ndeactivate_port can be called twice without exceptions. This method catches an exception during talking with the external controller. Actually the rest of delete_port is executed even when an error occurs.\n\nI found out some points should be improved for better consistency between quantum and an external controller (though it is not a scope of the patch). I will improve them in a separate patch.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":406,"context_line":"        return self._extend_port_dict_binding(context, new_port)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def delete_port(self, context, id, l3_port_check\u003dTrue):"},{"line_number":409,"context_line":"        \"\"\"Delete port and packet_filters associated with the port.\"\"\""},{"line_number":410,"context_line":"        LOG.debug(_(\"NECPluginV2.delete_port() called, id\u003d%s .\"), id)"},{"line_number":411,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":412,"context_line":"            port \u003d super(NECPluginV2, self).get_port(context, id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FAHg%3D","line":409,"in_reply_to":"AAAAM3%2F%2FAmY%3D","updated":"2013-02-11 22:51:20.000000000","message":"Hmm... Good point. It is not good that operations on Quantum DB are splitted into two parts. I will reconsider the sequence of the operations.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":411,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":412,"context_line":"            port \u003d super(NECPluginV2, self).get_port(context, id)"},{"line_number":413,"context_line":"            if ndb.get_portinfo(id):"},{"line_number":414,"context_line":"                ndb.del_portinfo(id)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        self.deactivate_port(context, port)"},{"line_number":417,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B720%3D","line":414,"updated":"2013-02-13 22:37:38.000000000","message":"I reverted this change since it is not related to this patch. I will fix it in another patch.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"unresolved":false,"context_lines":[{"line_number":662,"context_line":"                             mac\u003dp.get(\u0027mac\u0027, \u0027\u0027))"},{"line_number":663,"context_line":"            self.plugin.activate_port_if_ready(rpc_context, port)"},{"line_number":664,"context_line":"        for id in kwargs.get(\u0027port_removed\u0027, []):"},{"line_number":665,"context_line":"            try:"},{"line_number":666,"context_line":"                port \u003d self.plugin.get_port(rpc_context, id)"},{"line_number":667,"context_line":"                if port and ndb.get_portinfo(id):"},{"line_number":668,"context_line":"                    ndb.del_portinfo(id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2B73g%3D","line":665,"updated":"2013-02-13 22:37:38.000000000","message":"I reverted this change since it is not related to this patch. I will fix it in another patch.","commit_id":"77295e9fd7d989114bf3d91e0a89a7c958cba653"}]}
