)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":15,"context_line":"interface and gwport and router itself."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"blueprint rpc-for-l3-agent"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I60f3081975fc7164b22f9e9fa941e702a3f4c663"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAMH%2F%2F4RU%3D","line":18,"updated":"2012-11-18 15:06:19.000000000","message":"Can you also add that it solves bug https://bugs.launchpad.net/quantum/+bug/1080286.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":15,"context_line":"interface and gwport and router itself."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"blueprint rpc-for-l3-agent"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I60f3081975fc7164b22f9e9fa941e702a3f4c663"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"AAAAMH%2F%2F4IU%3D","line":18,"in_reply_to":"AAAAMH%2F%2F4RU%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"On one hand, we sync router data (including routers,"},{"line_number":10,"context_line":"their gw ports, interfaces and floatingips) from l3_agent"},{"line_number":11,"context_line":"to quantum server periodically if needed."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"On the other hand, we notify l3 agent from quantum server when"},{"line_number":14,"context_line":"we delete or update a router\u0027s stuff, such as floating IP,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAMH%2F%2FyB0%3D","line":11,"updated":"2012-11-25 13:09:57.000000000","message":"Can you please add an explanation on when and why the retrieval will take place.","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"On one hand, we sync router data (including routers,"},{"line_number":10,"context_line":"their gw ports, interfaces and floatingips) from l3_agent"},{"line_number":11,"context_line":"to quantum server periodically if needed."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"On the other hand, we notify l3 agent from quantum server when"},{"line_number":14,"context_line":"we delete or update a router\u0027s stuff, such as floating IP,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAAMH%2F%2Fx%2F4%3D","line":11,"in_reply_to":"AAAAMH%2F%2FyB0%3D","updated":"2012-11-25 13:59:34.000000000","message":"When agents start, when we have an exception occurred in dealing with the RPC message.","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"}],"etc/l3_agent.ini":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# LinuxBridge"},{"line_number":11,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"#use_rpc \u003d False"},{"line_number":14,"context_line":"#rpc_topic \u003d l3agent"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# If not use_rpc, we need the Quantum user information"}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAALn%2F%2FwI0%3D","line":13,"updated":"2012-11-08 13:20:11.000000000","message":"Personally I think that this should be the default and the client the fallback.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#interface_driver \u003d quantum.agent.linux.interface.BridgeInterfaceDriver"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"#use_rpc \u003d False"},{"line_number":14,"context_line":"#rpc_topic \u003d l3agent"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# If not use_rpc, we need the Quantum user information"},{"line_number":17,"context_line":"# for accessing the Quantum API."}],"source_content_type":"text/x-properties","patch_set":1,"id":"AAAALn%2F%2FwIw%3D","line":14,"updated":"2012-11-08 13:20:11.000000000","message":"Why is the configurable?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"}],"etc/quantum.conf":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":177,"context_line":"# The actual topic names will be %s.%(default_notification_level)s"},{"line_number":178,"context_line":"notification_topics \u003d notifications"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"# l3_use_rpc \u003d True"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"[QUOTAS]"},{"line_number":183,"context_line":"# resource name(s) that are supported in quota features"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAMH%2F%2F8tc%3D","line":180,"updated":"2012-11-14 17:46:45.000000000","message":"I would prefer that this is in the l3-agent ini file. Is this possible?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":177,"context_line":"# The actual topic names will be %s.%(default_notification_level)s"},{"line_number":178,"context_line":"notification_topics \u003d notifications"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"# l3_use_rpc \u003d True"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"[QUOTAS]"},{"line_number":183,"context_line":"# resource name(s) that are supported in quota features"}],"source_content_type":"text/plain","patch_set":4,"id":"AAAAMH%2F%2F8G4%3D","line":180,"in_reply_to":"AAAAMH%2F%2F8tc%3D","updated":"2012-11-15 00:10:05.000000000","message":"It was removed. now there is no such flag. I will fix it.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"}],"quantum/agent/l3_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        self.polling_interval \u003d conf.polling_interval"},{"line_number":165,"context_line":"        if conf.use_rpc:"},{"line_number":166,"context_line":"            ctx \u003d context.RequestContext(\u0027quantum\u0027, \u0027quantum\u0027, is_admin\u003dTrue)"},{"line_number":167,"context_line":"            self.plugin_rpc \u003d L3PluginApi(ctx, topics.PLUGIN, conf.host)"},{"line_number":168,"context_line":"            self.fullsync \u003d True"},{"line_number":169,"context_line":"            self.syncing \u003d False"},{"line_number":170,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwIk%3D","line":167,"updated":"2012-11-08 13:20:11.000000000","message":"Where is conf.host set?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            params \u003d {\u0027router:external\u0027: True}"},{"line_number":235,"context_line":"            ex_nets \u003d self.qclient.list_networks(**params)[\u0027networks\u0027]"},{"line_number":236,"context_line":"            if len(ex_nets) \u003e 1:"},{"line_number":237,"context_line":"                raise Exception(\"must configure \u0027gateway_external_network_id\u0027\""},{"line_number":238,"context_line":"                                \" if Quantum has more than one \""},{"line_number":239,"context_line":"                                \"external network.\")"},{"line_number":240,"context_line":"            if len(ex_nets) \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwIg%3D","line":237,"updated":"2012-11-08 13:20:11.000000000","message":"must \u003d\u003e Must","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            raise Exception(\"Router port %s has no IP address\" % port[\u0027id\u0027])"},{"line_number":324,"context_line":"        if len(ips) \u003e 1:"},{"line_number":325,"context_line":"            LOG.error(\"Ignoring multiple IPs on router port %s\" % port[\u0027id\u0027])"},{"line_number":326,"context_line":"        if not self.conf.use_rpc:"},{"line_number":327,"context_line":"            port[\u0027subnet\u0027] \u003d self.qclient.show_subnet("},{"line_number":328,"context_line":"                ips[0][\u0027subnet_id\u0027])[\u0027subnet\u0027]"},{"line_number":329,"context_line":"        prefixlen \u003d netaddr.IPNetwork(port[\u0027subnet\u0027][\u0027cidr\u0027]).prefixlen"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwIY%3D","line":326,"updated":"2012-11-08 13:20:11.000000000","message":"if rpc is enabled how is the subnet info received?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            raise Exception(\"Router port %s has no IP address\" % port[\u0027id\u0027])"},{"line_number":324,"context_line":"        if len(ips) \u003e 1:"},{"line_number":325,"context_line":"            LOG.error(\"Ignoring multiple IPs on router port %s\" % port[\u0027id\u0027])"},{"line_number":326,"context_line":"        if not self.conf.use_rpc:"},{"line_number":327,"context_line":"            port[\u0027subnet\u0027] \u003d self.qclient.show_subnet("},{"line_number":328,"context_line":"                ips[0][\u0027subnet_id\u0027])[\u0027subnet\u0027]"},{"line_number":329,"context_line":"        prefixlen \u003d netaddr.IPNetwork(port[\u0027subnet\u0027][\u0027cidr\u0027]).prefixlen"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv8w%3D","line":326,"in_reply_to":"AAAALn%2F%2FwIY%3D","updated":"2012-11-08 16:26:46.000000000","message":"I got all of newly updated related data on one shot on the server side in sync_router RPC message.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        if self.conf.use_rpc:"},{"line_number":421,"context_line":"            gwinfo \u003d ri.router.get(\u0027external_gateway_info\u0027)"},{"line_number":422,"context_line":"            return gwinfo.get(\u0027gw_port\u0027) if gwinfo else None"},{"line_number":423,"context_line":"        ports \u003d self.qclient.list_ports("},{"line_number":424,"context_line":"            device_id\u003dri.router_id,"},{"line_number":425,"context_line":"            device_owner\u003dl3_db.DEVICE_OWNER_ROUTER_GW)[\u0027ports\u0027]"},{"line_number":426,"context_line":"        if not ports:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwII%3D","line":423,"updated":"2012-11-08 13:20:11.000000000","message":"missing else","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        if self.conf.use_rpc:"},{"line_number":421,"context_line":"            gwinfo \u003d ri.router.get(\u0027external_gateway_info\u0027)"},{"line_number":422,"context_line":"            return gwinfo.get(\u0027gw_port\u0027) if gwinfo else None"},{"line_number":423,"context_line":"        ports \u003d self.qclient.list_ports("},{"line_number":424,"context_line":"            device_id\u003dri.router_id,"},{"line_number":425,"context_line":"            device_owner\u003dl3_db.DEVICE_OWNER_ROUTER_GW)[\u0027ports\u0027]"},{"line_number":426,"context_line":"        if not ports:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv8o%3D","line":423,"in_reply_to":"AAAALn%2F%2FwII%3D","updated":"2012-11-08 16:26:46.000000000","message":"I escape from above if, so no else here","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":619,"context_line":"        with SYNC_SEM:"},{"line_number":620,"context_line":"            if router_id in self.router_info:"},{"line_number":621,"context_line":"                self._router_removed(router_id)"},{"line_number":622,"context_line":"        "},{"line_number":623,"context_line":"    def _process_sync_data(self, router_data):"},{"line_number":624,"context_line":"        routers_dict \u003d {}"},{"line_number":625,"context_line":"        for router in router_data[\u0027routers\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwH8%3D","line":622,"updated":"2012-11-08 13:20:11.000000000","message":":)","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                router[INTERFACE_KEY] \u003d router_interfaces"},{"line_number":639,"context_line":"        return routers_dict.values()"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def _do_single_loop_rpc(self, routers):"},{"line_number":642,"context_line":"        if (self.conf.external_network_bridge and"},{"line_number":643,"context_line":"            not ip_lib.device_exists(self.conf.external_network_bridge)):"},{"line_number":644,"context_line":"            LOG.error(\"external network bridge \u0027%s\u0027 does not exist\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHw%3D","line":641,"updated":"2012-11-08 13:20:11.000000000","message":"Is there an option of getting notifications. This can save the loop? The loop could be called if the agent restarts.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":638,"context_line":"                router[INTERFACE_KEY] \u003d router_interfaces"},{"line_number":639,"context_line":"        return routers_dict.values()"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"    def _do_single_loop_rpc(self, routers):"},{"line_number":642,"context_line":"        if (self.conf.external_network_bridge and"},{"line_number":643,"context_line":"            not ip_lib.device_exists(self.conf.external_network_bridge)):"},{"line_number":644,"context_line":"            LOG.error(\"external network bridge \u0027%s\u0027 does not exist\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv8A%3D","line":641,"in_reply_to":"AAAALn%2F%2FwHw%3D","updated":"2012-11-08 16:26:46.000000000","message":"THis method is called in periodical task. In fact, it is not called the way as we do in client version.  maybe I should change the method name.\n\nCurrently, I just use notification when a router is deleted. use notification for modification of router\u0027s  interface, gw-port, floatingips will make algorithm complicated.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class L3NATAgent(object):"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    OPTS \u003d ["},{"line_number":67,"context_line":"        cfg.StrOpt(\u0027admin_user\u0027),"},{"line_number":68,"context_line":"        cfg.StrOpt(\u0027admin_password\u0027),"},{"line_number":69,"context_line":"        cfg.StrOpt(\u0027admin_tenant_name\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7tc%3D","side":"PARENT","line":66,"updated":"2012-11-15 10:49:33.000000000","message":"Does this means that we do not have the client as a fallback?","commit_id":"b98068c3977ad41ffc66f4ef4d829b5e882345c8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, topic, host):"},{"line_number":65,"context_line":"        super(L3PluginApi, self).__init__("},{"line_number":66,"context_line":"            topic\u003dtopic, default_version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":67,"context_line":"        self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7h8%3D","line":64,"updated":"2012-11-15 12:26:16.000000000","message":"I think that we need to make sure that all functions calling this can deal with exceptions thrown from the rpc.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":129,"context_line":"        cfg.StrOpt(\u0027gateway_external_network_id\u0027, default\u003d\u0027\u0027,"},{"line_number":130,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":131,"context_line":"                        \"by the agents.\"),"},{"line_number":132,"context_line":"        cfg.BoolOpt(\u0027l3_agent_manager\u0027,"},{"line_number":133,"context_line":"                    default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ss%3D","line":132,"updated":"2012-11-15 10:49:33.000000000","message":"This should be StrOpt.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        cfg.StrOpt(\u0027gateway_external_network_id\u0027, default\u003d\u0027\u0027,"},{"line_number":130,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":131,"context_line":"                        \"by the agents.\"),"},{"line_number":132,"context_line":"        cfg.BoolOpt(\u0027l3_agent_manager\u0027,"},{"line_number":133,"context_line":"                    default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7mw%3D","line":132,"in_reply_to":"AAAAMH%2F%2F7ss%3D","updated":"2012-11-15 11:11:23.000000000","message":"Yes. thanks","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def main():"},{"line_number":567,"context_line":"    eventlet.monkey_patch(os\u003dFalse)"},{"line_number":568,"context_line":"    conf \u003d cfg.CONF"},{"line_number":569,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":570,"context_line":"    conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ts%3D","line":567,"updated":"2012-11-15 10:49:33.000000000","message":"Why is the os\u003dFalse?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def main():"},{"line_number":567,"context_line":"    eventlet.monkey_patch(os\u003dFalse)"},{"line_number":568,"context_line":"    conf \u003d cfg.CONF"},{"line_number":569,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":570,"context_line":"    conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7h4%3D","line":567,"in_reply_to":"AAAAMH%2F%2F7kQ%3D","updated":"2012-11-15 12:23:25.000000000","message":"I don\u0027t like it either.\nDone","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def main():"},{"line_number":567,"context_line":"    eventlet.monkey_patch(os\u003dFalse)"},{"line_number":568,"context_line":"    conf \u003d cfg.CONF"},{"line_number":569,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":570,"context_line":"    conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7kQ%3D","line":567,"in_reply_to":"AAAAMH%2F%2F7mo%3D","updated":"2012-11-15 11:51:07.000000000","message":"The os\u003dFalse was used for a problem specific to keystone. I do not think that it is relevant here and in a few weeks we plan on removing it. The bug was/is resolved in eventlet","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def main():"},{"line_number":567,"context_line":"    eventlet.monkey_patch(os\u003dFalse)"},{"line_number":568,"context_line":"    conf \u003d cfg.CONF"},{"line_number":569,"context_line":"    conf.register_opts(L3NATAgent.OPTS)"},{"line_number":570,"context_line":"    conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7mo%3D","line":567,"in_reply_to":"AAAAMH%2F%2F7ts%3D","updated":"2012-11-15 11:11:23.000000000","message":"I got it from your zombie fix patch.\nquantum-server has this kind of monkey_patch.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":130,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":131,"context_line":"                        \"by the agents.\"),"},{"line_number":132,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":133,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4zw%3D","line":133,"updated":"2012-11-16 23:38:42.000000000","message":"I failed to understand the purpose of this new option, can you clarify?","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":130,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":131,"context_line":"                        \"by the agents.\"),"},{"line_number":132,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":133,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3zc%3D","line":133,"in_reply_to":"AAAAMH%2F%2F4pk%3D","updated":"2012-11-19 11:47:02.000000000","message":"ok","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":131,"context_line":"                        \"by the agents.\"),"},{"line_number":132,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":133,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":134,"context_line":"    ]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def __init__(self, host, conf\u003dNone):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4pk%3D","line":133,"in_reply_to":"AAAAMH%2F%2F4zw%3D","updated":"2012-11-17 02:58:08.000000000","message":"This is the way all nova binary does. We use stuff in service.py to start the process and have a manager to do the actual work.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":196,"context_line":"            return self.plugin_rpc.get_external_network_id("},{"line_number":197,"context_line":"                context.get_admin_context())"},{"line_number":198,"context_line":"        except common.RemoteError as e:"},{"line_number":199,"context_line":"            if e.exc_type \u003d\u003d \u0027TooManyExternalNetworks\u0027:"},{"line_number":200,"context_line":"                raise Exception("},{"line_number":201,"context_line":"                    \"must configure \u0027gateway_external_network_id\u0027\""},{"line_number":202,"context_line":"                    \" if Quantum has more than one \""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4zs%3D","line":199,"updated":"2012-11-16 23:38:42.000000000","message":"Now this makes more sense.\nStill on the server side I have the impression that check is global, not for a specific agent, because we\u0027re raising there.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            return self.plugin_rpc.get_external_network_id("},{"line_number":197,"context_line":"                context.get_admin_context())"},{"line_number":198,"context_line":"        except common.RemoteError as e:"},{"line_number":199,"context_line":"            if e.exc_type \u003d\u003d \u0027TooManyExternalNetworks\u0027:"},{"line_number":200,"context_line":"                raise Exception("},{"line_number":201,"context_line":"                    \"must configure \u0027gateway_external_network_id\u0027\""},{"line_number":202,"context_line":"                    \" if Quantum has more than one \""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4nE%3D","line":199,"in_reply_to":"AAAAMH%2F%2F4zs%3D","updated":"2012-11-17 02:58:08.000000000","message":"Yes. u got it.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":553,"context_line":"                    router_id \u003d None"},{"line_number":554,"context_line":"                routers \u003d self.plugin_rpc.get_routers("},{"line_number":555,"context_line":"                    context, router_id)"},{"line_number":556,"context_line":"                self._do_rpc(routers)"},{"line_number":557,"context_line":"                self.fullsync \u003d False"},{"line_number":558,"context_line":"            except Exception:"},{"line_number":559,"context_line":"                LOG.exception(\"Sync router error\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4y4%3D","line":556,"updated":"2012-11-16 23:38:42.000000000","message":"_do_rpc seems to suggest we execute and rpc call, whereas it seems you\u0027re processing what\u0027s being returned by the rpc call. If that is correct, I would consider renaming this method.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                    router_id \u003d None"},{"line_number":554,"context_line":"                routers \u003d self.plugin_rpc.get_routers("},{"line_number":555,"context_line":"                    context, router_id)"},{"line_number":556,"context_line":"                self._do_rpc(routers)"},{"line_number":557,"context_line":"                self.fullsync \u003d False"},{"line_number":558,"context_line":"            except Exception:"},{"line_number":559,"context_line":"                LOG.exception(\"Sync router error\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4pc%3D","line":556,"in_reply_to":"AAAAMH%2F%2F4y4%3D","updated":"2012-11-17 02:58:08.000000000","message":"good idea. changed to _process_routers()","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"                try:"},{"line_number":172,"context_line":"                    self._destroy_router_namespace(ns)"},{"line_number":173,"context_line":"                except:"},{"line_number":174,"context_line":"                    LOG.exception(_(\"couldn\u0027t delete namespace \u0027%s\u0027\") % ns)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _destroy_router_namespace(self, namespace):"},{"line_number":177,"context_line":"        ns_ip \u003d ip_lib.IPWrapper(self.conf.root_helper,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Qs%3D","line":174,"updated":"2012-11-18 15:06:19.000000000","message":"Consider starting with a capital letter","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                try:"},{"line_number":172,"context_line":"                    self._destroy_router_namespace(ns)"},{"line_number":173,"context_line":"                except:"},{"line_number":174,"context_line":"                    LOG.exception(_(\"couldn\u0027t delete namespace \u0027%s\u0027\") % ns)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def _destroy_router_namespace(self, namespace):"},{"line_number":177,"context_line":"        ns_ip \u003d ip_lib.IPWrapper(self.conf.root_helper,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4IE%3D","line":174,"in_reply_to":"AAAAMH%2F%2F4Qs%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except common.RemoteError as e:"},{"line_number":204,"context_line":"            if e.exc_type \u003d\u003d \u0027TooManyExternalNetworks\u0027:"},{"line_number":205,"context_line":"                msg \u003d _("},{"line_number":206,"context_line":"                    \"must configure \u0027gateway_external_network_id\u0027\""},{"line_number":207,"context_line":"                    \" if Quantum has more than one \""},{"line_number":208,"context_line":"                    \"external network.\")"},{"line_number":209,"context_line":"                raise Exception(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Qw%3D","line":206,"updated":"2012-11-18 15:06:19.000000000","message":"Consider starting with a captal letter","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except common.RemoteError as e:"},{"line_number":204,"context_line":"            if e.exc_type \u003d\u003d \u0027TooManyExternalNetworks\u0027:"},{"line_number":205,"context_line":"                msg \u003d _("},{"line_number":206,"context_line":"                    \"must configure \u0027gateway_external_network_id\u0027\""},{"line_number":207,"context_line":"                    \" if Quantum has more than one \""},{"line_number":208,"context_line":"                    \"external network.\")"},{"line_number":209,"context_line":"                raise Exception(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4II%3D","line":206,"in_reply_to":"AAAAMH%2F%2F4Qw%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":533,"context_line":"    def _process_routers(self, routers):"},{"line_number":534,"context_line":"        if (self.conf.external_network_bridge and"},{"line_number":535,"context_line":"            not ip_lib.device_exists(self.conf.external_network_bridge)):"},{"line_number":536,"context_line":"            LOG.error(_(\"external network bridge \u0027%s\u0027 does not exist\")"},{"line_number":537,"context_line":"                      % self.conf.external_network_bridge)"},{"line_number":538,"context_line":"            return"},{"line_number":539,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Qk%3D","line":536,"updated":"2012-11-18 15:06:19.000000000","message":"Consider captal letter","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":533,"context_line":"    def _process_routers(self, routers):"},{"line_number":534,"context_line":"        if (self.conf.external_network_bridge and"},{"line_number":535,"context_line":"            not ip_lib.device_exists(self.conf.external_network_bridge)):"},{"line_number":536,"context_line":"            LOG.error(_(\"external network bridge \u0027%s\u0027 does not exist\")"},{"line_number":537,"context_line":"                      % self.conf.external_network_bridge)"},{"line_number":538,"context_line":"            return"},{"line_number":539,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4IM%3D","line":536,"in_reply_to":"AAAAMH%2F%2F4Qk%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":540,"context_line":"        target_ex_net_id \u003d self._fetch_external_net_id()"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        for r in routers:"},{"line_number":543,"context_line":"            if not r[\u0027admin_state_up\u0027]:"},{"line_number":544,"context_line":"                continue"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            ex_net_id \u003d (r[\u0027external_gateway_info\u0027] and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Qg%3D","line":543,"updated":"2012-11-18 15:06:19.000000000","message":"Can we have a unit test for the change in the admin state?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        target_ex_net_id \u003d self._fetch_external_net_id()"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        for r in routers:"},{"line_number":543,"context_line":"            if not r[\u0027admin_state_up\u0027]:"},{"line_number":544,"context_line":"                continue"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            ex_net_id \u003d (r[\u0027external_gateway_info\u0027] and"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4DY%3D","line":543,"in_reply_to":"AAAAMH%2F%2F4Qg%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":579,"context_line":"                    self._process_routers(routers)"},{"line_number":580,"context_line":"                    self.fullsync \u003d False"},{"line_number":581,"context_line":"                except Exception:"},{"line_number":582,"context_line":"                    LOG.exception(_(\"failed to sync routers\"))"},{"line_number":583,"context_line":"                    self.fullsync \u003d True"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def after_start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Qc%3D","line":582,"updated":"2012-11-18 15:06:19.000000000","message":"Consider capital letter","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                    self._process_routers(routers)"},{"line_number":580,"context_line":"                    self.fullsync \u003d False"},{"line_number":581,"context_line":"                except Exception:"},{"line_number":582,"context_line":"                    LOG.exception(_(\"failed to sync routers\"))"},{"line_number":583,"context_line":"                    self.fullsync \u003d True"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def after_start(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4IQ%3D","line":582,"in_reply_to":"AAAAMH%2F%2F4Qc%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"from quantum.agent.linux import utils"},{"line_number":33,"context_line":"from quantum.common import topics"},{"line_number":34,"context_line":"from quantum import context"},{"line_number":35,"context_line":"from quantum.db import l3_constants"},{"line_number":36,"context_line":"from quantum.openstack.common import cfg"},{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2mc%3D","line":35,"updated":"2012-11-20 00:10:52.000000000","message":"Agent classes should not need to import constants from the db submodule.  The constants should either be well know or added to common.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from quantum.agent.linux import utils"},{"line_number":33,"context_line":"from quantum.common import topics"},{"line_number":34,"context_line":"from quantum import context"},{"line_number":35,"context_line":"from quantum.db import l3_constants"},{"line_number":36,"context_line":"from quantum.openstack.common import cfg"},{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2Hs%3D","line":35,"in_reply_to":"AAAAMH%2F%2F2mc%3D","updated":"2012-11-20 12:18:41.000000000","message":"Original agent used the constants form l3_db. Because l3_db module imports too many unrelated modules , I move these constants into another files.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"INTERNAL_DEV_PREFIX \u003d \u0027qr-\u0027"},{"line_number":49,"context_line":"EXTERNAL_DEV_PREFIX \u003d \u0027qg-\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"SYNC_SEM \u003d semaphore.Semaphore(1)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class L3PluginApi(proxy.RpcProxy):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F20c%3D","line":51,"updated":"2012-11-20 00:10:52.000000000","message":"This should probably be an instance variable of L3NATAgent and instantiated inside the class\u0027s init method.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":48,"context_line":"INTERNAL_DEV_PREFIX \u003d \u0027qr-\u0027"},{"line_number":49,"context_line":"EXTERNAL_DEV_PREFIX \u003d \u0027qg-\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"SYNC_SEM \u003d semaphore.Semaphore(1)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class L3PluginApi(proxy.RpcProxy):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2H0%3D","line":51,"in_reply_to":"AAAAMH%2F%2F20c%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":32,"context_line":"from quantum.agent.linux import utils"},{"line_number":33,"context_line":"from quantum.common import topics"},{"line_number":34,"context_line":"from quantum import context"},{"line_number":35,"context_line":"from quantum.db import l3_constants"},{"line_number":36,"context_line":"from quantum.openstack.common import cfg"},{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F11k%3D","line":35,"updated":"2012-11-20 20:00:59.000000000","message":"I still disagree with placing these constants inside of the db submodule.  The should be in quantum.common.l3_contstants.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":32,"context_line":"from quantum.agent.linux import utils"},{"line_number":33,"context_line":"from quantum.common import topics"},{"line_number":34,"context_line":"from quantum import context"},{"line_number":35,"context_line":"from quantum.db import l3_constants"},{"line_number":36,"context_line":"from quantum.openstack.common import cfg"},{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1A0%3D","line":35,"in_reply_to":"AAAAMH%2F%2F11k%3D","updated":"2012-11-21 02:26:03.000000000","message":"Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":39,"context_line":"from quantum.openstack.common import periodic_task"},{"line_number":40,"context_line":"from quantum.openstack.common.rpc import common"},{"line_number":41,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":42,"context_line":"from quantum.openstack.common import service"},{"line_number":43,"context_line":"from quantum import manager"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1es%3D","line":40,"updated":"2012-11-20 20:00:59.000000000","message":"from quantum.openstack.common.rpc import common as common_rpc","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":37,"context_line":"from quantum.openstack.common import importutils"},{"line_number":38,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":39,"context_line":"from quantum.openstack.common import periodic_task"},{"line_number":40,"context_line":"from quantum.openstack.common.rpc import common"},{"line_number":41,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":42,"context_line":"from quantum.openstack.common import service"},{"line_number":43,"context_line":"from quantum import manager"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1Aw%3D","line":40,"in_reply_to":"AAAAMH%2F%2F1es%3D","updated":"2012-11-21 02:26:03.000000000","message":"as rpc_common. Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":133,"context_line":"        cfg.StrOpt(\u0027gateway_external_network_id\u0027, default\u003d\u0027\u0027,"},{"line_number":134,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":135,"context_line":"                        \"by the agents.\"),"},{"line_number":136,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":137,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1hc%3D","line":136,"updated":"2012-11-20 20:00:59.000000000","message":"This option makes no sense.  Why is this a configurable option?","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        cfg.StrOpt(\u0027gateway_external_network_id\u0027, default\u003d\u0027\u0027,"},{"line_number":134,"context_line":"                   help\u003d\"UUID of external network for routers implemented \""},{"line_number":135,"context_line":"                        \"by the agents.\"),"},{"line_number":136,"context_line":"        cfg.StrOpt(\u0027l3_agent_manager\u0027,"},{"line_number":137,"context_line":"                   default\u003d\u0027quantum.agent.l3_agent.L3NATAgent\u0027),"},{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1EU%3D","line":136,"in_reply_to":"AAAAMH%2F%2F1hc%3D","updated":"2012-11-21 02:26:03.000000000","message":"It is make the manager replaceable. All of the nova\u0027s managers are replaceable.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":141,"context_line":"        if conf:"},{"line_number":142,"context_line":"            self.conf \u003d conf"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            self.conf \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1hU%3D","line":141,"updated":"2012-11-20 20:00:59.000000000","message":"If the manager is directly instantiated in the main below, we don\u0027t need to modify this code.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":138,"context_line":"    ]"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def __init__(self, host, conf\u003dNone):"},{"line_number":141,"context_line":"        if conf:"},{"line_number":142,"context_line":"            self.conf \u003d conf"},{"line_number":143,"context_line":"        else:"},{"line_number":144,"context_line":"            self.conf \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F07E%3D","line":141,"in_reply_to":"AAAAMH%2F%2F1hU%3D","updated":"2012-11-21 02:26:03.000000000","message":"manager is configured by l3_agent_manager. It is helpful for others to replace it. So I prefer to avoid instantiation directly.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":205,"context_line":"                msg \u003d _("},{"line_number":206,"context_line":"                    \"The \u0027gateway_external_network_id\u0027 must be configured\""},{"line_number":207,"context_line":"                    \" if Quantum has more than one \""},{"line_number":208,"context_line":"                    \"external network.\")"},{"line_number":209,"context_line":"                raise Exception(msg)"},{"line_number":210,"context_line":"            else:"},{"line_number":211,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1hM%3D","line":208,"updated":"2012-11-20 20:00:59.000000000","message":"This should be combined with line 207.  Not sure why the string was split over 3 lines.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                msg \u003d _("},{"line_number":206,"context_line":"                    \"The \u0027gateway_external_network_id\u0027 must be configured\""},{"line_number":207,"context_line":"                    \" if Quantum has more than one \""},{"line_number":208,"context_line":"                    \"external network.\")"},{"line_number":209,"context_line":"                raise Exception(msg)"},{"line_number":210,"context_line":"            else:"},{"line_number":211,"context_line":"                raise"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F0%2FY%3D","line":208,"in_reply_to":"AAAAMH%2F%2F1hM%3D","updated":"2012-11-21 02:26:03.000000000","message":"Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":514,"context_line":"                except Exception:"},{"line_number":515,"context_line":"                    msg \u003d (_(\"Failed dealing with router\""},{"line_number":516,"context_line":"                             \"\u0027%(router_id)\u0027 deletion RPC message\") %"},{"line_number":517,"context_line":"                           {\u0027router_id\u0027: router_id})"},{"line_number":518,"context_line":"                    LOG.debug(msg)"},{"line_number":519,"context_line":"                    self.fullsync \u003d True"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F13A%3D","line":517,"updated":"2012-11-20 15:59:13.000000000","message":"I am pretty sure you have a very good reason for not having used %s as a format specifier and then router_id.\n\nSo I won\u0027t ask you to address this, but if you could have at least a look at this comment, and explain me the good reason for doing this, that would be great!","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":514,"context_line":"                except Exception:"},{"line_number":515,"context_line":"                    msg \u003d (_(\"Failed dealing with router\""},{"line_number":516,"context_line":"                             \"\u0027%(router_id)\u0027 deletion RPC message\") %"},{"line_number":517,"context_line":"                           {\u0027router_id\u0027: router_id})"},{"line_number":518,"context_line":"                    LOG.debug(msg)"},{"line_number":519,"context_line":"                    self.fullsync \u003d True"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1qU%3D","line":517,"in_reply_to":"AAAAMH%2F%2F11w%3D","updated":"2012-11-20 17:50:17.000000000","message":"due to the fact that there is 1 parameter %s will suffice","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":514,"context_line":"                except Exception:"},{"line_number":515,"context_line":"                    msg \u003d (_(\"Failed dealing with router\""},{"line_number":516,"context_line":"                             \"\u0027%(router_id)\u0027 deletion RPC message\") %"},{"line_number":517,"context_line":"                           {\u0027router_id\u0027: router_id})"},{"line_number":518,"context_line":"                    LOG.debug(msg)"},{"line_number":519,"context_line":"                    self.fullsync \u003d True"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F11w%3D","line":517,"in_reply_to":"AAAAMH%2F%2F13A%3D","updated":"2012-11-20 16:04:05.000000000","message":"1.  \"\u0027%(router_id)\u0027 should be  \"\u0027%(router_id)s\u0027\n2.  {\u0027router_id\u0027: router_id} should be locals()","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                except Exception:"},{"line_number":515,"context_line":"                    msg \u003d (_(\"Failed dealing with router\""},{"line_number":516,"context_line":"                             \"\u0027%(router_id)\u0027 deletion RPC message\") %"},{"line_number":517,"context_line":"                           {\u0027router_id\u0027: router_id})"},{"line_number":518,"context_line":"                    LOG.debug(msg)"},{"line_number":519,"context_line":"                    self.fullsync \u003d True"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F0%2FU%3D","line":517,"in_reply_to":"AAAAMH%2F%2F1g4%3D","updated":"2012-11-21 02:26:03.000000000","message":"Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":514,"context_line":"                except Exception:"},{"line_number":515,"context_line":"                    msg \u003d (_(\"Failed dealing with router\""},{"line_number":516,"context_line":"                             \"\u0027%(router_id)\u0027 deletion RPC message\") %"},{"line_number":517,"context_line":"                           {\u0027router_id\u0027: router_id})"},{"line_number":518,"context_line":"                    LOG.debug(msg)"},{"line_number":519,"context_line":"                    self.fullsync \u003d True"},{"line_number":520,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1g4%3D","line":517,"in_reply_to":"AAAAMH%2F%2F1qU%3D","updated":"2012-11-20 20:00:59.000000000","message":"Consider changing the message to read:\n\n\"Router removal triggered by RPC failed for %(router_id)s.\"","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":543,"context_line":"            if not r[\u0027admin_state_up\u0027]:"},{"line_number":544,"context_line":"                continue"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            ex_net_id \u003d (r[\u0027external_gateway_info\u0027] and"},{"line_number":547,"context_line":"                         r[\u0027external_gateway_info\u0027].get(\u0027network_id\u0027))"},{"line_number":548,"context_line":"            if not ex_net_id and not self.conf.handle_internal_only_routers:"},{"line_number":549,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1d0%3D","line":546,"updated":"2012-11-20 20:00:59.000000000","message":"ex_net_id \u003d (r[\u0027external_gateway_info\u0027] or {}).get(\u0027network_id\u0027)","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":543,"context_line":"            if not r[\u0027admin_state_up\u0027]:"},{"line_number":544,"context_line":"                continue"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"            ex_net_id \u003d (r[\u0027external_gateway_info\u0027] and"},{"line_number":547,"context_line":"                         r[\u0027external_gateway_info\u0027].get(\u0027network_id\u0027))"},{"line_number":548,"context_line":"            if not ex_net_id and not self.conf.handle_internal_only_routers:"},{"line_number":549,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F0%2FQ%3D","line":546,"in_reply_to":"AAAAMH%2F%2F1d0%3D","updated":"2012-11-21 02:26:03.000000000","message":"Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":555,"context_line":"            # with the configured agent id."},{"line_number":556,"context_line":"            if (not self.conf.use_namespaces and"},{"line_number":557,"context_line":"                r[\u0027id\u0027] !\u003d self.conf.router_id):"},{"line_number":558,"context_line":"                continue"},{"line_number":559,"context_line":"            if r[\u0027id\u0027] not in self.router_info:"},{"line_number":560,"context_line":"                self._router_added(r[\u0027id\u0027])"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F124%3D","line":558,"updated":"2012-11-20 15:59:13.000000000","message":"This check can be moved to line 543. It would be marginally more efficient","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":555,"context_line":"            # with the configured agent id."},{"line_number":556,"context_line":"            if (not self.conf.use_namespaces and"},{"line_number":557,"context_line":"                r[\u0027id\u0027] !\u003d self.conf.router_id):"},{"line_number":558,"context_line":"                continue"},{"line_number":559,"context_line":"            if r[\u0027id\u0027] not in self.router_info:"},{"line_number":560,"context_line":"                self._router_added(r[\u0027id\u0027])"},{"line_number":561,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F0%2FM%3D","line":558,"in_reply_to":"AAAAMH%2F%2F124%3D","updated":"2012-11-21 02:26:03.000000000","message":"Done","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":593,"context_line":"    conf.register_opts(interface.OPTS)"},{"line_number":594,"context_line":"    conf(sys.argv)"},{"line_number":595,"context_line":"    config.setup_logging(conf)"},{"line_number":596,"context_line":"    server \u003d quantum_service.Service.create(binary\u003d\u0027quantum-l3-agent\u0027)"},{"line_number":597,"context_line":"    service.launch(server).wait()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F1hY%3D","line":596,"updated":"2012-11-20 20:00:59.000000000","message":"The instance of the manager should be passed directly.  It avoids the configuration magic that is currently happening.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":593,"context_line":"    conf.register_opts(interface.OPTS)"},{"line_number":594,"context_line":"    conf(sys.argv)"},{"line_number":595,"context_line":"    config.setup_logging(conf)"},{"line_number":596,"context_line":"    server \u003d quantum_service.Service.create(binary\u003d\u0027quantum-l3-agent\u0027)"},{"line_number":597,"context_line":"    service.launch(server).wait()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F08E%3D","line":596,"in_reply_to":"AAAAMH%2F%2F1hY%3D","updated":"2012-11-21 02:26:03.000000000","message":"It is a kind of framework. we make the manager replaceable.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    self._router_removed(router_id)"},{"line_number":513,"context_line":"                except Exception:"},{"line_number":514,"context_line":"                    msg \u003d _(\"Failed dealing with router\""},{"line_number":515,"context_line":"                            \"\u0027%s\u0027 deletion RPC message\")"},{"line_number":516,"context_line":"                    LOG.debug(msg, router_id)"},{"line_number":517,"context_line":"                    self.fullsync \u003d True"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAw%3D","line":515,"updated":"2012-11-25 13:09:57.000000000","message":"missing space","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":512,"context_line":"                    self._router_removed(router_id)"},{"line_number":513,"context_line":"                except Exception:"},{"line_number":514,"context_line":"                    msg \u003d _(\"Failed dealing with router\""},{"line_number":515,"context_line":"                            \"\u0027%s\u0027 deletion RPC message\")"},{"line_number":516,"context_line":"                    LOG.debug(msg, router_id)"},{"line_number":517,"context_line":"                    self.fullsync \u003d True"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAA%3D","line":515,"in_reply_to":"AAAAMH%2F%2FyAw%3D","updated":"2012-11-25 13:59:34.000000000","message":"Done","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":"from quantum.openstack.common.rpc import common as rpc_common"},{"line_number":42,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":43,"context_line":"from quantum.openstack.common import service"},{"line_number":44,"context_line":"from quantum import manager"},{"line_number":45,"context_line":"from quantum import service as quantum_service"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2Bh4%3D","line":44,"updated":"2012-12-04 06:43:27.000000000","message":"This should go between lines 36, 37","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":41,"context_line":"from quantum.openstack.common.rpc import common as rpc_common"},{"line_number":42,"context_line":"from quantum.openstack.common.rpc import proxy"},{"line_number":43,"context_line":"from quantum.openstack.common import service"},{"line_number":44,"context_line":"from quantum import manager"},{"line_number":45,"context_line":"from quantum import service as quantum_service"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2BdY%3D","line":44,"in_reply_to":"AAAAMX%2F%2F%2Bh4%3D","updated":"2012-12-04 08:30:55.000000000","message":"Done","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"}],"quantum/agent/linux/interface.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":45,"context_line":"               help\u003d\u0027Openflow Ryu REST API host:port\u0027),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027meta_flavor_driver_mappings\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027Mapping between flavor and LinuxInterfaceDriver\u0027),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027host\u0027, default\u003dcommon_utils._get_hostname()),"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7iA%3D","line":48,"updated":"2012-11-15 12:26:16.000000000","message":"Maybe the host should be part of the configuration that can be used by all agents. Maybe the best place for this is in common/config.py.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               help\u003d\u0027Openflow Ryu REST API host:port\u0027),"},{"line_number":46,"context_line":"    cfg.StrOpt(\u0027meta_flavor_driver_mappings\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027Mapping between flavor and LinuxInterfaceDriver\u0027),"},{"line_number":48,"context_line":"    cfg.StrOpt(\u0027host\u0027, default\u003dcommon_utils._get_hostname()),"},{"line_number":49,"context_line":"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Z4%3D","line":48,"in_reply_to":"AAAAMH%2F%2F7iA%3D","updated":"2012-11-15 15:03:00.000000000","message":"good catch! Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":23,"context_line":"from quantum.agent.linux import ovs_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.common import exceptions"},{"line_number":26,"context_line":"from quantum.common import utils as common_utils"},{"line_number":27,"context_line":"from quantum.extensions.flavor import (FLAVOR_NETWORK)"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4QY%3D","line":26,"updated":"2012-11-18 15:06:19.000000000","message":"Is this import needed? It does not look like it is used.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from quantum.agent.linux import ovs_lib"},{"line_number":24,"context_line":"from quantum.agent.linux import utils"},{"line_number":25,"context_line":"from quantum.common import exceptions"},{"line_number":26,"context_line":"from quantum.common import utils as common_utils"},{"line_number":27,"context_line":"from quantum.extensions.flavor import (FLAVOR_NETWORK)"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"},{"line_number":29,"context_line":"from quantum.openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Hc%3D","line":26,"in_reply_to":"AAAAMH%2F%2F4QY%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":40,"context_line":"    cfg.StrOpt(\u0027network_device_mtu\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027MTU setting for device.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027meta_flavor_driver_mappings\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027Mapping between flavor and LinuxInterfaceDriver\u0027),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F20s%3D","line":43,"updated":"2012-11-20 00:10:52.000000000","message":"Stray comma.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    cfg.StrOpt(\u0027network_device_mtu\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027MTU setting for device.\u0027),"},{"line_number":42,"context_line":"    cfg.StrOpt(\u0027meta_flavor_driver_mappings\u0027,"},{"line_number":43,"context_line":"               help\u003d\u0027Mapping between flavor and LinuxInterfaceDriver\u0027),"},{"line_number":44,"context_line":"]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2H4%3D","line":43,"in_reply_to":"AAAAMH%2F%2F20s%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"}],"quantum/api/v2/base.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":19,"context_line":"from quantum.api.v2 import attributes"},{"line_number":20,"context_line":"from quantum.api.v2 import resource as wsgi_resource"},{"line_number":21,"context_line":"from quantum.common import exceptions"},{"line_number":22,"context_line":"from quantum.common import utils"},{"line_number":23,"context_line":"from quantum.openstack.common import cfg"},{"line_number":24,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":25,"context_line":"from quantum.openstack.common.notifier import api as notifier_api"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4QU%3D","line":22,"updated":"2012-11-18 15:06:19.000000000","message":"It seems like this import is not used.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from quantum.api.v2 import attributes"},{"line_number":20,"context_line":"from quantum.api.v2 import resource as wsgi_resource"},{"line_number":21,"context_line":"from quantum.common import exceptions"},{"line_number":22,"context_line":"from quantum.common import utils"},{"line_number":23,"context_line":"from quantum.openstack.common import cfg"},{"line_number":24,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":25,"context_line":"from quantum.openstack.common.notifier import api as notifier_api"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HY%3D","line":22,"in_reply_to":"AAAAMH%2F%2F4QU%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"}],"quantum/common/exceptions.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    message \u003d _(\"Invalid extension environment: %(reason)s\")"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"class TooManyExternalNetworks(QuantumException):"},{"line_number":240,"context_line":"    message \u003d _(\"More than one external networks exist\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHs%3D","line":240,"updated":"2012-11-08 13:20:11.000000000","message":"networks exist \u003d\u003e network exists","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":237,"context_line":"    message \u003d _(\"Invalid extension environment: %(reason)s\")"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"class TooManyExternalNetworks(QuantumException):"},{"line_number":240,"context_line":"    message \u003d _(\"More than one external networks exist\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv74%3D","line":240,"in_reply_to":"AAAALn%2F%2FwHs%3D","updated":"2012-11-08 16:26:46.000000000","message":"good catch.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"}],"quantum/common/utils.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":137,"context_line":"                            env\u003denv)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_hostname():"},{"line_number":141,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F8tE%3D","line":140,"updated":"2012-11-14 17:46:45.000000000","message":"Do we need the _?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                            env\u003denv)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_hostname():"},{"line_number":141,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7mc%3D","line":140,"in_reply_to":"AAAAMH%2F%2F8G0%3D","updated":"2012-11-15 11:11:23.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                            env\u003denv)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_hostname():"},{"line_number":141,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F8G0%3D","line":140,"in_reply_to":"AAAAMH%2F%2F8tE%3D","updated":"2012-11-15 00:10:05.000000000","message":"I just copied from original position. I will fix it.\nThank Grayk.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_hostname():"},{"line_number":141,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7pU%3D","line":141,"updated":"2012-11-15 10:49:33.000000000","message":"in nova they use socket.getfqdn(). Maybe we should use that too.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def _get_hostname():"},{"line_number":141,"context_line":"    return socket.gethostname()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7mg%3D","line":141,"in_reply_to":"AAAAMH%2F%2F7pU%3D","updated":"2012-11-15 11:11:23.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def get_hostname():"},{"line_number":141,"context_line":"    return socket.getfqdn()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2xQ%3D","line":141,"updated":"2012-11-20 00:10:52.000000000","message":"The previous version used gethostname().  Why the change to the FQDN?","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def get_hostname():"},{"line_number":141,"context_line":"    return socket.getfqdn()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2RI%3D","line":141,"in_reply_to":"AAAAMH%2F%2F2xQ%3D","updated":"2012-11-20 07:48:31.000000000","message":"Nova makes use of fqdn. I thought that it should be good if there was consistency. Is this problematic?","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"}],"quantum/db/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        connection_dict \u003d sql.engine.url.make_url(options[\u0027sql_connection\u0027])"},{"line_number":69,"context_line":"        engine_args \u003d {"},{"line_number":70,"context_line":"            \u0027pool_recycle\u0027: 3600,"},{"line_number":71,"context_line":"            \u0027echo\u0027: True,"},{"line_number":72,"context_line":"            \u0027convert_unicode\u0027: True,"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHk%3D","line":71,"updated":"2012-11-08 13:20:11.000000000","message":"Is this for debugging?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        connection_dict \u003d sql.engine.url.make_url(options[\u0027sql_connection\u0027])"},{"line_number":69,"context_line":"        engine_args \u003d {"},{"line_number":70,"context_line":"            \u0027pool_recycle\u0027: 3600,"},{"line_number":71,"context_line":"            \u0027echo\u0027: True,"},{"line_number":72,"context_line":"            \u0027convert_unicode\u0027: True,"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv70%3D","line":71,"in_reply_to":"AAAALn%2F%2FwHk%3D","updated":"2012-11-08 16:26:46.000000000","message":"sure.\nThis patch is WIP, used for code protection from lost.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"}],"quantum/db/l3_db.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                                              subnet[\u0027network_id\u0027], subnet_id)"},{"line_number":324,"context_line":"            fixed_ip \u003d {\u0027ip_address\u0027: subnet[\u0027gateway_ip\u0027],"},{"line_number":325,"context_line":"                        \u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":326,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"},{"line_number":327,"context_line":"                port \u003d self.create_port(context, {"},{"line_number":328,"context_line":"                    \u0027port\u0027:"},{"line_number":329,"context_line":"                    {\u0027tenant_id\u0027: subnet[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHM%3D","line":326,"updated":"2012-11-08 13:20:11.000000000","message":"Is this related to this patch or could this be a seperate issue?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                                              subnet[\u0027network_id\u0027], subnet_id)"},{"line_number":324,"context_line":"            fixed_ip \u003d {\u0027ip_address\u0027: subnet[\u0027gateway_ip\u0027],"},{"line_number":325,"context_line":"                        \u0027subnet_id\u0027: subnet[\u0027id\u0027]}"},{"line_number":326,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"},{"line_number":327,"context_line":"                port \u003d self.create_port(context, {"},{"line_number":328,"context_line":"                    \u0027port\u0027:"},{"line_number":329,"context_line":"                    {\u0027tenant_id\u0027: subnet[\u0027tenant_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv7k%3D","line":326,"in_reply_to":"AAAALn%2F%2FwHM%3D","updated":"2012-11-08 16:26:46.000000000","message":"THis is related to this patch,\nI have to change router\u0027s updated_at time so that my sync algorithm will collect this router and its related stuff, such as gw-port, interfaces and floatingips.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"l3_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027metadata_ip_address\u0027, default\u003d\u0027127.0.0.1\u0027),"},{"line_number":46,"context_line":"    cfg.IntOpt(\u0027metadata_port\u0027, default\u003d8775)"},{"line_number":47,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jA%3D","side":"PARENT","line":44,"updated":"2012-11-15 12:26:16.000000000","message":":)","commit_id":"b98068c3977ad41ffc66f4ef4d829b5e882345c8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        query routers  with the router_id. The gateway ports, if any,"},{"line_number":87,"context_line":"        will be queried too."},{"line_number":88,"context_line":"        @param context:"},{"line_number":89,"context_line":"        @param router_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7i4%3D","line":86,"updated":"2012-11-15 12:26:16.000000000","message":"query \u003d\u003e Query","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        query routers  with the router_id. The gateway ports, if any,"},{"line_number":87,"context_line":"        will be queried too."},{"line_number":88,"context_line":"        @param context:"},{"line_number":89,"context_line":"        @param router_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ZQ%3D","line":86,"in_reply_to":"AAAAMH%2F%2F7i4%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":91,"context_line":"        router_query \u003d context.session.query(Router)"},{"line_number":92,"context_line":"        if router_id:"},{"line_number":93,"context_line":"            router_query \u003d router_query.filter(Router.id \u003d\u003d router_id)"},{"line_number":94,"context_line":"        routers \u003d router_query.all()"},{"line_number":95,"context_line":"        gw_port_ids \u003d []"},{"line_number":96,"context_line":"        for router in routers:"},{"line_number":97,"context_line":"            gw_port_id \u003d router.gw_port_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7i0%3D","line":94,"updated":"2012-11-15 12:26:16.000000000","message":"if routers is None - doe we want to continue with the rest of the function?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        router_query \u003d context.session.query(Router)"},{"line_number":92,"context_line":"        if router_id:"},{"line_number":93,"context_line":"            router_query \u003d router_query.filter(Router.id \u003d\u003d router_id)"},{"line_number":94,"context_line":"        routers \u003d router_query.all()"},{"line_number":95,"context_line":"        gw_port_ids \u003d []"},{"line_number":96,"context_line":"        for router in routers:"},{"line_number":97,"context_line":"            gw_port_id \u003d router.gw_port_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ZU%3D","line":94,"in_reply_to":"AAAAMH%2F%2F7i0%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":111,"context_line":"                router[\u0027gw_port\u0027] \u003d gw_port_id_gw_port_dict[gw_port_id]"},{"line_number":112,"context_line":"        return routers_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":115,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":116,"context_line":"        @param context:"},{"line_number":117,"context_line":"        @param router_ids: a list of router_ids"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7iw%3D","line":114,"updated":"2012-11-15 12:26:16.000000000","message":"Typo - _get_sync_floatingi_ps","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                router[\u0027gw_port\u0027] \u003d gw_port_id_gw_port_dict[gw_port_id]"},{"line_number":112,"context_line":"        return routers_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":115,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":116,"context_line":"        @param context:"},{"line_number":117,"context_line":"        @param router_ids: a list of router_ids"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ZM%3D","line":114,"in_reply_to":"AAAAMH%2F%2F7iw%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return routers_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":115,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":116,"context_line":"        @param context:"},{"line_number":117,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":118,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7is%3D","line":115,"updated":"2012-11-15 12:26:16.000000000","message":"Ditto - copy/paste is the result of 97.36% of bugs in the industry\n\nPlease also add in a new line","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return routers_list"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":115,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":116,"context_line":"        @param context:"},{"line_number":117,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":118,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ZI%3D","line":115,"in_reply_to":"AAAAMH%2F%2F7is%3D","updated":"2012-11-15 15:03:00.000000000","message":"I was using find/replace...\nDone","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return gw_ports"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_sync_interfaces(self, context, router_ids):"},{"line_number":135,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids."},{"line_number":136,"context_line":"        @param context:"},{"line_number":137,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":138,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7io%3D","line":135,"updated":"2012-11-15 12:26:16.000000000","message":"New line","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return gw_ports"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_sync_interfaces(self, context, router_ids):"},{"line_number":135,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids."},{"line_number":136,"context_line":"        @param context:"},{"line_number":137,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":138,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ZA%3D","line":135,"in_reply_to":"AAAAMH%2F%2F7io%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return ports"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _populate_subnet_for_ports(self, context, ports):"},{"line_number":150,"context_line":"        \"\"\"populate ports with subnet."},{"line_number":151,"context_line":"        These ports already have fixed_ips populated."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        if not ports:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ig%3D","line":150,"updated":"2012-11-15 12:26:16.000000000","message":"populate \u003d\u003e Populate\nNew line","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return ports"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _populate_subnet_for_ports(self, context, ports):"},{"line_number":150,"context_line":"        \"\"\"populate ports with subnet."},{"line_number":151,"context_line":"        These ports already have fixed_ips populated."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        if not ports:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Y8%3D","line":150,"in_reply_to":"AAAAMH%2F%2F7ig%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":202,"context_line":"            router_ids \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":203,"context_line":"            floatingi_ps \u003d self._get_sync_floatingi_ps(context, router_ids)"},{"line_number":204,"context_line":"            interfaces \u003d self._get_sync_interfaces(context, router_ids)"},{"line_number":205,"context_line":"        return self._process_sync_data(routers, interfaces, floatingi_ps)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_external_network_id(self, context):"},{"line_number":208,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7ic%3D","line":205,"updated":"2012-11-15 12:26:16.000000000","message":"typo","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            router_ids \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":203,"context_line":"            floatingi_ps \u003d self._get_sync_floatingi_ps(context, router_ids)"},{"line_number":204,"context_line":"            interfaces \u003d self._get_sync_interfaces(context, router_ids)"},{"line_number":205,"context_line":"        return self._process_sync_data(routers, interfaces, floatingi_ps)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_external_network_id(self, context):"},{"line_number":208,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Y4%3D","line":205,"in_reply_to":"AAAAMH%2F%2F7ic%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_external_network_id(self, context):"},{"line_number":208,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":209,"context_line":"        if len(nets) \u003e 1:"},{"line_number":210,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":211,"context_line":"        else:"},{"line_number":212,"context_line":"            return nets[0][\u0027id\u0027] if nets else None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7iU%3D","line":209,"updated":"2012-11-15 12:26:16.000000000","message":"Not sure i understand here. There may be more than 1 external network - for example if there is more than one tenant.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def get_external_network_id(self, context):"},{"line_number":208,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":209,"context_line":"        if len(nets) \u003e 1:"},{"line_number":210,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":211,"context_line":"        else:"},{"line_number":212,"context_line":"            return nets[0][\u0027id\u0027] if nets else None"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Y0%3D","line":209,"in_reply_to":"AAAAMH%2F%2F7iU%3D","updated":"2012-11-15 15:03:00.000000000","message":"currently, if we have not defined external network for l3 agent in l3.ini, l3 agent will query the external network id. In this case,  we must have only one external network.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def delete_floatingip(self, context, id):"},{"line_number":745,"context_line":"        floatingip \u003d self._get_floatingip(context, id)"},{"line_number":746,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":747,"context_line":"            context.session.delete(floatingip)"},{"line_number":748,"context_line":"            self.delete_port(context.elevated(),"},{"line_number":749,"context_line":"                             floatingip[\u0027floating_port_id\u0027],"},{"line_number":750,"context_line":"                             l3_port_check\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7iM%3D","line":747,"updated":"2012-11-15 12:26:16.000000000","message":"Is this a bug that needs to be fixed in stable folsom versions?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":744,"context_line":"    def delete_floatingip(self, context, id):"},{"line_number":745,"context_line":"        floatingip \u003d self._get_floatingip(context, id)"},{"line_number":746,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":747,"context_line":"            context.session.delete(floatingip)"},{"line_number":748,"context_line":"            self.delete_port(context.elevated(),"},{"line_number":749,"context_line":"                             floatingip[\u0027floating_port_id\u0027],"},{"line_number":750,"context_line":"                             l3_port_check\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Yw%3D","line":747,"in_reply_to":"AAAAMH%2F%2F7iM%3D","updated":"2012-11-15 15:03:00.000000000","message":"I think so.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_routers(self, context,"},{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F44w%3D","line":83,"updated":"2012-11-16 23:38:42.000000000","message":"Note: I think you considered retrieving the gw_port by navigating the ORM relationship in the router model, and determined it implied executing a much higer number of queries when the router_id was not specified. Is that correct?","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_routers(self, context,"},{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3tQ%3D","line":83,"in_reply_to":"AAAAMH%2F%2F3zQ%3D","updated":"2012-11-19 13:04:44.000000000","message":"Using ORM relation ship will cause too many sql queries. We should use batch queries to improve performance.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_routers(self, context,"},{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4o0%3D","line":83,"in_reply_to":"AAAAMH%2F%2F44w%3D","updated":"2012-11-17 02:58:08.000000000","message":"l3 agent has an option to deal with only one router_id. In addition, when we need to notify the agent the data about only one router (when modification of router, its interfaces, gw_port and floatingips), we will have router_id.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_routers(self, context,"},{"line_number":83,"context_line":"                          router_id\u003dNone):"},{"line_number":84,"context_line":"        \"\"\"Query routers."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3zQ%3D","line":83,"in_reply_to":"AAAAMH%2F%2F4o0%3D","updated":"2012-11-19 11:47:02.000000000","message":"My comment was about something different, I guess.\nYou\u0027re running a second query for getting ext gw info from router data. Using sqlalchemy ORM you could have fetched it just by accessing the relationship object. Have you considered doing so, and if yes, why did you decide to go for a different approach? (not saying you did it wrong, just want to hear your opinion)","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"},{"line_number":87,"context_line":"        will be queried too."},{"line_number":88,"context_line":"        @param context:"},{"line_number":89,"context_line":"        @param router_id:"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        router_query \u003d context.session.query(Router)"},{"line_number":92,"context_line":"        if router_id:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F47k%3D","line":89,"updated":"2012-11-16 23:38:42.000000000","message":"Pedant comment:\nEither add description for parameters, or remove line 88-89","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        Query routers  with the router_id. The gateway ports, if any,"},{"line_number":87,"context_line":"        will be queried too."},{"line_number":88,"context_line":"        @param context:"},{"line_number":89,"context_line":"        @param router_id:"},{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        router_query \u003d context.session.query(Router)"},{"line_number":92,"context_line":"        if router_id:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4ow%3D","line":89,"in_reply_to":"AAAAMH%2F%2F47k%3D","updated":"2012-11-17 02:58:08.000000000","message":"Done","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":105,"context_line":"            gw_port_id_gw_port_dict[gw_port[\u0027id\u0027]] \u003d gw_port"},{"line_number":106,"context_line":"        router_id_gw_port_id_dict \u003d {}"},{"line_number":107,"context_line":"        for router in routers:"},{"line_number":108,"context_line":"            router_id_gw_port_id_dict[router.id] \u003d router.gw_port_id"},{"line_number":109,"context_line":"        routers_list \u003d [self._make_router_dict(c, None) for c in routers]"},{"line_number":110,"context_line":"        for router in routers_list:"},{"line_number":111,"context_line":"            gw_port_id \u003d router_id_gw_port_id_dict[router[\u0027id\u0027]]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F448%3D","line":108,"updated":"2012-11-16 23:38:42.000000000","message":"I do not see why you are creating this dict (see next comment)","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            gw_port_id_gw_port_dict[gw_port[\u0027id\u0027]] \u003d gw_port"},{"line_number":106,"context_line":"        router_id_gw_port_id_dict \u003d {}"},{"line_number":107,"context_line":"        for router in routers:"},{"line_number":108,"context_line":"            router_id_gw_port_id_dict[router.id] \u003d router.gw_port_id"},{"line_number":109,"context_line":"        routers_list \u003d [self._make_router_dict(c, None) for c in routers]"},{"line_number":110,"context_line":"        for router in routers_list:"},{"line_number":111,"context_line":"            gw_port_id \u003d router_id_gw_port_id_dict[router[\u0027id\u0027]]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4oo%3D","line":108,"in_reply_to":"AAAAMH%2F%2F448%3D","updated":"2012-11-17 02:58:08.000000000","message":"after make_router_dict, the dicted router has no gw_port_id.\nI need to put the dicted gw_port into the result dicted router.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":108,"context_line":"            router_id_gw_port_id_dict[router.id] \u003d router.gw_port_id"},{"line_number":109,"context_line":"        routers_list \u003d [self._make_router_dict(c, None) for c in routers]"},{"line_number":110,"context_line":"        for router in routers_list:"},{"line_number":111,"context_line":"            gw_port_id \u003d router_id_gw_port_id_dict[router[\u0027id\u0027]]"},{"line_number":112,"context_line":"            if gw_port_id:"},{"line_number":113,"context_line":"                router[\u0027gw_port\u0027] \u003d gw_port_id_gw_port_dict[gw_port_id]"},{"line_number":114,"context_line":"        return routers_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F444%3D","line":111,"updated":"2012-11-16 23:38:42.000000000","message":"what about router.gw_port_id?","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            router_id_gw_port_id_dict[router.id] \u003d router.gw_port_id"},{"line_number":109,"context_line":"        routers_list \u003d [self._make_router_dict(c, None) for c in routers]"},{"line_number":110,"context_line":"        for router in routers_list:"},{"line_number":111,"context_line":"            gw_port_id \u003d router_id_gw_port_id_dict[router[\u0027id\u0027]]"},{"line_number":112,"context_line":"            if gw_port_id:"},{"line_number":113,"context_line":"                router[\u0027gw_port\u0027] \u003d gw_port_id_gw_port_dict[gw_port_id]"},{"line_number":114,"context_line":"        return routers_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4ok%3D","line":111,"in_reply_to":"AAAAMH%2F%2F444%3D","updated":"2012-11-17 02:58:08.000000000","message":"after dicted, router has no gw_port_id.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":108,"context_line":"            router_id_gw_port_id_dict[router.id] \u003d router.gw_port_id"},{"line_number":109,"context_line":"        routers_list \u003d [self._make_router_dict(c, None) for c in routers]"},{"line_number":110,"context_line":"        for router in routers_list:"},{"line_number":111,"context_line":"            gw_port_id \u003d router_id_gw_port_id_dict[router[\u0027id\u0027]]"},{"line_number":112,"context_line":"            if gw_port_id:"},{"line_number":113,"context_line":"                router[\u0027gw_port\u0027] \u003d gw_port_id_gw_port_dict[gw_port_id]"},{"line_number":114,"context_line":"        return routers_list"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3zE%3D","line":111,"in_reply_to":"AAAAMH%2F%2F4ok%3D","updated":"2012-11-19 11:47:02.000000000","message":"I see.\nthe patch has also progressed a lot, so there\u0027s probably little to no point to do something about it now.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Query floating_ips that relate to list of router_ids."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        @param context:"},{"line_number":120,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        if not router_ids:"},{"line_number":123,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F44s%3D","line":120,"updated":"2012-11-16 23:38:42.000000000","message":"Same comments about @param as before","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        \"\"\"Query floating_ips that relate to list of router_ids."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        @param context:"},{"line_number":120,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        if not router_ids:"},{"line_number":123,"context_line":"            return []"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4og%3D","line":120,"in_reply_to":"AAAAMH%2F%2F44s%3D","updated":"2012-11-17 02:58:08.000000000","message":"Done","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter("},{"line_number":147,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"},{"line_number":148,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":149,"context_line":"        ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":150,"context_line":"        self._populate_subnet_for_ports(context, ports)"},{"line_number":151,"context_line":"        return ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F44o%3D","line":148,"updated":"2012-11-16 23:38:42.000000000","message":"I guess this condition makes the previous one (line 146) irrelevant","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter("},{"line_number":147,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"},{"line_number":148,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":149,"context_line":"        ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":150,"context_line":"        self._populate_subnet_for_ports(context, ports)"},{"line_number":151,"context_line":"        return ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3tk%3D","line":148,"in_reply_to":"AAAAMH%2F%2F3y0%3D","updated":"2012-11-19 13:04:44.000000000","message":"I know, that way we have to add another one method such as _get_syn_xxx(self, context, router_ids)","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter("},{"line_number":147,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"},{"line_number":148,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":149,"context_line":"        ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":150,"context_line":"        self._populate_subnet_for_ports(context, ports)"},{"line_number":151,"context_line":"        return ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4oc%3D","line":148,"in_reply_to":"AAAAMH%2F%2F44o%3D","updated":"2012-11-17 02:58:08.000000000","message":"yes.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter("},{"line_number":147,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"},{"line_number":148,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":149,"context_line":"        ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":150,"context_line":"        self._populate_subnet_for_ports(context, ports)"},{"line_number":151,"context_line":"        return ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3y0%3D","line":148,"in_reply_to":"AAAAMH%2F%2F4mI%3D","updated":"2012-11-19 11:47:02.000000000","message":"could be router_id be associated to something different than a router interface? You don\u0027t need to address it anyway, I was just curious to know how that could happen.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter("},{"line_number":147,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"},{"line_number":148,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":149,"context_line":"        ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":150,"context_line":"        self._populate_subnet_for_ports(context, ports)"},{"line_number":151,"context_line":"        return ports"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4mI%3D","line":148,"in_reply_to":"AAAAMH%2F%2F4oc%3D","updated":"2012-11-17 04:18:31.000000000","message":"no. I just want router\u0027s interfaces here.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":167,"context_line":"            fixed_ip \u003d fixed_ips[0]"},{"line_number":168,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":169,"context_line":"            my_ports.append(port)"},{"line_number":170,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":171,"context_line":"            subnet_id_set.add(fixed_ip[\u0027subnet_id\u0027])"},{"line_number":172,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":173,"context_line":"                                      models_v2.Subnet.cidr,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F46U%3D","line":170,"updated":"2012-11-16 23:38:42.000000000","message":"This assignment is required only the first time a port for a given subnet is found","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            fixed_ip \u003d fixed_ips[0]"},{"line_number":168,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":169,"context_line":"            my_ports.append(port)"},{"line_number":170,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":171,"context_line":"            subnet_id_set.add(fixed_ip[\u0027subnet_id\u0027])"},{"line_number":172,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":173,"context_line":"                                      models_v2.Subnet.cidr,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4oQ%3D","line":170,"in_reply_to":"AAAAMH%2F%2F46U%3D","updated":"2012-11-17 02:58:08.000000000","message":"Yes, but I think an \u0027if statement and a flag\u0027 is no more than good to always assignment","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":167,"context_line":"            fixed_ip \u003d fixed_ips[0]"},{"line_number":168,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":169,"context_line":"            my_ports.append(port)"},{"line_number":170,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":171,"context_line":"            subnet_id_set.add(fixed_ip[\u0027subnet_id\u0027])"},{"line_number":172,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":173,"context_line":"                                      models_v2.Subnet.cidr,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3ys%3D","line":170,"in_reply_to":"AAAAMH%2F%2F4oQ%3D","updated":"2012-11-19 11:47:02.000000000","message":"ok","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":168,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":169,"context_line":"            my_ports.append(port)"},{"line_number":170,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":171,"context_line":"            subnet_id_set.add(fixed_ip[\u0027subnet_id\u0027])"},{"line_number":172,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":173,"context_line":"                                      models_v2.Subnet.cidr,"},{"line_number":174,"context_line":"                                      models_v2.Subnet.gateway_ip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F46Q%3D","line":171,"updated":"2012-11-16 23:38:42.000000000","message":"Are you sure you need this set? subnet_id_ports_dict.keys() should not contain duplicates too.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":169,"context_line":"            my_ports.append(port)"},{"line_number":170,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":171,"context_line":"            subnet_id_set.add(fixed_ip[\u0027subnet_id\u0027])"},{"line_number":172,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":173,"context_line":"                                      models_v2.Subnet.cidr,"},{"line_number":174,"context_line":"                                      models_v2.Subnet.gateway_ip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4oI%3D","line":171,"in_reply_to":"AAAAMH%2F%2F46Q%3D","updated":"2012-11-17 02:58:08.000000000","message":"you are right.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":"        return self._process_sync_data(routers, interfaces, floating_ips)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def get_external_network_id(self, context):"},{"line_number":213,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":214,"context_line":"        if len(nets) \u003e 1:"},{"line_number":215,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":216,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F410%3D","line":213,"updated":"2012-11-16 23:38:42.000000000","message":"Wondering why we need to embed True in a list.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        return self._process_sync_data(routers, interfaces, floating_ips)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def get_external_network_id(self, context):"},{"line_number":213,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":214,"context_line":"        if len(nets) \u003e 1:"},{"line_number":215,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":216,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4oA%3D","line":213,"in_reply_to":"AAAAMH%2F%2F410%3D","updated":"2012-11-17 02:58:08.000000000","message":"our API front will put all filtering into a key to a list. Since we will use _in to do the job.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":210,"context_line":"        return self._process_sync_data(routers, interfaces, floating_ips)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def get_external_network_id(self, context):"},{"line_number":213,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":214,"context_line":"        if len(nets) \u003e 1:"},{"line_number":215,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":216,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3yg%3D","line":213,"in_reply_to":"AAAAMH%2F%2F4oA%3D","updated":"2012-11-19 11:47:02.000000000","message":"I think I\u0027ve done it differently in the past with the same attribute. I will verify anyway. Still, this sucks and should be an API bug.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":212,"context_line":"    def get_external_network_id(self, context):"},{"line_number":213,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":214,"context_line":"        if len(nets) \u003e 1:"},{"line_number":215,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":216,"context_line":"        else:"},{"line_number":217,"context_line":"            return nets[0][\u0027id\u0027] if nets else None"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F40U%3D","line":215,"updated":"2012-11-16 23:38:42.000000000","message":"Refresh my memory please. Are we enforcing a limit of a single external network per Quantum deployment?\nI recall a limit with external networks and agents, that if we have more than 1 external network we need to run multiple agents and specify gateway_external_network_id for each of them","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    def get_external_network_id(self, context):"},{"line_number":213,"context_line":"        nets \u003d self.get_networks(context, {\u0027router:external\u0027: [True]}, None)"},{"line_number":214,"context_line":"        if len(nets) \u003e 1:"},{"line_number":215,"context_line":"            raise q_exc.TooManyExternalNetworks()"},{"line_number":216,"context_line":"        else:"},{"line_number":217,"context_line":"            return nets[0][\u0027id\u0027] if nets else None"},{"line_number":218,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4n4%3D","line":215,"in_reply_to":"AAAAMH%2F%2F40U%3D","updated":"2012-11-17 02:58:08.000000000","message":"This is called from l3agent. If we have not specified the gateway_external_network_id for it, it queries the quatum server, and expects only one external network.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def _get_sync_floating_ips(self, context, router_ids):"},{"line_number":119,"context_line":"        \"\"\"Query floating_ips that relate to list of router_ids."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        @param context:"},{"line_number":122,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        if not router_ids:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4QI%3D","line":121,"updated":"2012-11-18 15:06:19.000000000","message":"Do you think that we need an explanation of what a context is?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def _get_sync_floating_ips(self, context, router_ids):"},{"line_number":119,"context_line":"        \"\"\"Query floating_ips that relate to list of router_ids."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        @param context:"},{"line_number":122,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        if not router_ids:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4DM%3D","line":121,"in_reply_to":"AAAAMH%2F%2F4QI%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def _get_sync_gw_ports(self, context, gw_port_ids):"},{"line_number":131,"context_line":"        if not gw_port_ids:"},{"line_number":132,"context_line":"            return []"},{"line_number":133,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":134,"context_line":"        query \u003d query.filter(models_v2.Port.id.in_(gw_port_ids))"},{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_GW)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Pw%3D","line":133,"updated":"2012-11-18 15:06:19.000000000","message":"I think that this can be problematic. Say for example someone is using a plugin that does not maintain a database for the ports, for example the NVP. I think that maybe you should use self._get_ports with a filter if possible.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def _get_sync_gw_ports(self, context, gw_port_ids):"},{"line_number":131,"context_line":"        if not gw_port_ids:"},{"line_number":132,"context_line":"            return []"},{"line_number":133,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":134,"context_line":"        query \u003d query.filter(models_v2.Port.id.in_(gw_port_ids))"},{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_GW)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HQ%3D","line":133,"in_reply_to":"AAAAMH%2F%2F4Pw%3D","updated":"2012-11-19 04:34:49.000000000","message":"garyk: ok, I will try to use these ways to call _get_routers, _get_ports and so on","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_GW)"},{"line_number":137,"context_line":"        gw_ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":138,"context_line":"        self._populate_subnet_for_ports(context, gw_ports)"},{"line_number":139,"context_line":"        return gw_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _get_sync_interfaces(self, context, router_ids):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4P4%3D","line":138,"updated":"2012-11-18 15:06:19.000000000","message":"Does this need to be called if the gw_ports is empty?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        query \u003d query.filter("},{"line_number":136,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_GW)"},{"line_number":137,"context_line":"        gw_ports \u003d [self._make_port_dict(c, None) for c in query.all()]"},{"line_number":138,"context_line":"        self._populate_subnet_for_ports(context, gw_ports)"},{"line_number":139,"context_line":"        return gw_ports"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _get_sync_interfaces(self, context, router_ids):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HU%3D","line":138,"in_reply_to":"AAAAMH%2F%2F4P4%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids.\"\"\""},{"line_number":143,"context_line":"        if not router_ids:"},{"line_number":144,"context_line":"            return []"},{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":147,"context_line":"        query \u003d query.filter("},{"line_number":148,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Ps%3D","line":145,"updated":"2012-11-18 15:06:19.000000000","message":"Same issue here with the ports.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\"Query router interfaces that relate to list of router_ids.\"\"\""},{"line_number":143,"context_line":"        if not router_ids:"},{"line_number":144,"context_line":"            return []"},{"line_number":145,"context_line":"        query \u003d context.session.query(models_v2.Port)"},{"line_number":146,"context_line":"        query \u003d query.filter(models_v2.Port.device_id.in_(router_ids))"},{"line_number":147,"context_line":"        query \u003d query.filter("},{"line_number":148,"context_line":"            models_v2.Port.device_owner \u003d\u003d DEVICE_OWNER_ROUTER_INTF)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HM%3D","line":145,"in_reply_to":"AAAAMH%2F%2F4Ps%3D","updated":"2012-11-19 04:34:49.000000000","message":"same explanation.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":159,"context_line":"            return"},{"line_number":160,"context_line":"        subnet_id_ports_dict \u003d {}"},{"line_number":161,"context_line":"        for port in ports:"},{"line_number":162,"context_line":"            fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":163,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":164,"context_line":"                LOG.error((\"Ignoring multiple IPs on router port %s\" %"},{"line_number":165,"context_line":"                           port[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4P0%3D","line":162,"updated":"2012-11-18 15:06:19.000000000","message":"How do we ensure that port.get is the plugins port.get?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            return"},{"line_number":160,"context_line":"        subnet_id_ports_dict \u003d {}"},{"line_number":161,"context_line":"        for port in ports:"},{"line_number":162,"context_line":"            fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":163,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":164,"context_line":"                LOG.error((\"Ignoring multiple IPs on router port %s\" %"},{"line_number":165,"context_line":"                           port[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HA%3D","line":162,"in_reply_to":"AAAAMH%2F%2F4P0%3D","updated":"2012-11-19 04:34:49.000000000","message":"If  I use _get_xxx way to do it, it is ok?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":167,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":168,"context_line":"            my_ports.append(port)"},{"line_number":169,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":170,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":171,"context_line":"                                      models_v2.Subnet.cidr,"},{"line_number":172,"context_line":"                                      models_v2.Subnet.gateway_ip)"},{"line_number":173,"context_line":"        query \u003d query.filter(models_v2.Subnet.id.in_("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Po%3D","line":170,"updated":"2012-11-18 15:06:19.000000000","message":"Same problem with the subnets.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            my_ports \u003d subnet_id_ports_dict.get(fixed_ip[\u0027subnet_id\u0027], [])"},{"line_number":168,"context_line":"            my_ports.append(port)"},{"line_number":169,"context_line":"            subnet_id_ports_dict[fixed_ip[\u0027subnet_id\u0027]] \u003d my_ports"},{"line_number":170,"context_line":"        query \u003d context.session.query(models_v2.Subnet.id,"},{"line_number":171,"context_line":"                                      models_v2.Subnet.cidr,"},{"line_number":172,"context_line":"                                      models_v2.Subnet.gateway_ip)"},{"line_number":173,"context_line":"        query \u003d query.filter(models_v2.Subnet.id.in_("}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4G8%3D","line":170,"in_reply_to":"AAAAMH%2F%2F4Po%3D","updated":"2012-11-19 04:34:49.000000000","message":"I just want to limit some fields to query so that we don\u0027t need to get all the fields. this help the performance.\nbut I will use _get_subnets here","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":204,"context_line":"            routers \u003d self._get_sync_routers(context,"},{"line_number":205,"context_line":"                                             router_id)"},{"line_number":206,"context_line":"            router_ids \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":207,"context_line":"            floating_ips \u003d self._get_sync_floating_ips(context, router_ids)"},{"line_number":208,"context_line":"            interfaces \u003d self._get_sync_interfaces(context, router_ids)"},{"line_number":209,"context_line":"        return self._process_sync_data(routers, interfaces, floating_ips)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4P8%3D","line":207,"updated":"2012-11-18 15:06:19.000000000","message":"Does this method need to be called if router_ids is None. It can save a function call","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            routers \u003d self._get_sync_routers(context,"},{"line_number":205,"context_line":"                                             router_id)"},{"line_number":206,"context_line":"            router_ids \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":207,"context_line":"            floating_ips \u003d self._get_sync_floating_ips(context, router_ids)"},{"line_number":208,"context_line":"            interfaces \u003d self._get_sync_interfaces(context, router_ids)"},{"line_number":209,"context_line":"        return self._process_sync_data(routers, interfaces, floating_ips)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Gw%3D","line":207,"in_reply_to":"AAAAMH%2F%2F4P8%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":480,"context_line":"                 \u0027name\u0027: \u0027\u0027}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":483,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":484,"context_line":"        return {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":485,"context_line":"                \u0027subnet_id\u0027: port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]}"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Pk%3D","line":483,"updated":"2012-11-18 15:06:19.000000000","message":"Does this solve bug https://bugs.launchpad.net/quantum/+bug/1060985?\nIf so then can you please add this to the commit message.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":480,"context_line":"                 \u0027name\u0027: \u0027\u0027}})"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":483,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":484,"context_line":"        return {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":485,"context_line":"                \u0027subnet_id\u0027: port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]}"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4HE%3D","line":483,"in_reply_to":"AAAAMH%2F%2F4Pk%3D","updated":"2012-11-19 04:34:49.000000000","message":"no, this is not for general notification API. it is used to notify l3 agent.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":752,"context_line":"        floatingip \u003d self._get_floatingip(context, id)"},{"line_number":753,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":754,"context_line":"            context.session.delete(floatingip)"},{"line_number":755,"context_line":"            self.delete_port(context.elevated(),"},{"line_number":756,"context_line":"                             floatingip[\u0027floating_port_id\u0027],"},{"line_number":757,"context_line":"                             l3_port_check\u003dFalse)"},{"line_number":758,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Pg%3D","line":755,"updated":"2012-11-18 15:06:19.000000000","message":"If possible could we make this change in a separate patch set - this is a bug that should be back ported to stable folsom. Or do you think we should do it as a separate patch?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":752,"context_line":"        floatingip \u003d self._get_floatingip(context, id)"},{"line_number":753,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":754,"context_line":"            context.session.delete(floatingip)"},{"line_number":755,"context_line":"            self.delete_port(context.elevated(),"},{"line_number":756,"context_line":"                             floatingip[\u0027floating_port_id\u0027],"},{"line_number":757,"context_line":"                             l3_port_check\u003dFalse)"},{"line_number":758,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Go%3D","line":755,"in_reply_to":"AAAAMH%2F%2F4Pg%3D","updated":"2012-11-19 04:34:49.000000000","message":"ok, I will leave it to https://bugs.launchpad.net/quantum/+bug/1080516","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":157,"context_line":"        for port in ports:"},{"line_number":158,"context_line":"            fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":159,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":160,"context_line":"                LOG.error((\"Ignoring multiple IPs on router port %s\" %"},{"line_number":161,"context_line":"                           port[\u0027id\u0027]))"},{"line_number":162,"context_line":"                ports.remove(port)"},{"line_number":163,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F354%3D","line":160,"updated":"2012-11-19 09:03:21.000000000","message":"Do you have a test case for this?","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        for port in ports:"},{"line_number":158,"context_line":"            fixed_ips \u003d port.get(\u0027fixed_ips\u0027, [])"},{"line_number":159,"context_line":"            if len(fixed_ips) \u003e 1:"},{"line_number":160,"context_line":"                LOG.error((\"Ignoring multiple IPs on router port %s\" %"},{"line_number":161,"context_line":"                           port[\u0027id\u0027]))"},{"line_number":162,"context_line":"                ports.remove(port)"},{"line_number":163,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F32Y%3D","line":160,"in_reply_to":"AAAAMH%2F%2F354%3D","updated":"2012-11-19 10:28:06.000000000","message":"Done","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":77,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":"    \"\"\"Plugins which support l3 agent should mix in this and L3_NAT_db_mixin\"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_sync_routers(self, context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2nQ%3D","line":80,"updated":"2012-11-20 00:10:52.000000000","message":"This is a dependent object of the L3_NAT_db_mixin.  I do not see the need for the separation between them and why you\u0027re making plugin authors need to include 2 mixins when one will do.\n\nThese methods do not need need access to the plugin state.  You could reasonably turn these into a small lib that the L3_NAT_db_mixin class uses.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class L3_RPC_db_mixin(object):"},{"line_number":81,"context_line":"    \"\"\"Plugins which support l3 agent should mix in this and L3_NAT_db_mixin\"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _get_sync_routers(self, context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2I8%3D","line":80,"in_reply_to":"AAAAMH%2F%2F2nQ%3D","updated":"2012-11-20 12:18:41.000000000","message":"We are using get_ports, get_floatingips, make_xx_dict methods of plugin which mixes in it.\nSo I think I can put all these functions into L3_NAT_db_mixin.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":281,"context_line":"            context.session.add(router_db)"},{"line_number":282,"context_line":"            if has_gw_info:"},{"line_number":283,"context_line":"                self._update_router_gw_info(context, router_db[\u0027id\u0027], gw_info)"},{"line_number":284,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":285,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":286,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":287,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2uQ%3D","line":284,"updated":"2012-11-20 00:10:52.000000000","message":"this variable should be singular since get_sync_data will only return 1 in this case.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":281,"context_line":"            context.session.add(router_db)"},{"line_number":282,"context_line":"            if has_gw_info:"},{"line_number":283,"context_line":"                self._update_router_gw_info(context, router_db[\u0027id\u0027], gw_info)"},{"line_number":284,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":285,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":286,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":287,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JU%3D","line":284,"in_reply_to":"AAAAMH%2F%2F2uQ%3D","updated":"2012-11-20 12:18:41.000000000","message":"I am using the same code for one router when router_id is provided, or many routers if router_id is not provided.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":300,"context_line":"            # Ensure we actually have something to update"},{"line_number":301,"context_line":"            if r.keys():"},{"line_number":302,"context_line":"                router_db.update(r)"},{"line_number":303,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":304,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":305,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":306,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2uM%3D","line":303,"updated":"2012-11-20 00:10:52.000000000","message":"this variable should be singular since get_sync_data will only return 1 in this case.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            # Ensure we actually have something to update"},{"line_number":301,"context_line":"            if r.keys():"},{"line_number":302,"context_line":"                router_db.update(r)"},{"line_number":303,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":304,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":305,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":306,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JQ%3D","line":303,"in_reply_to":"AAAAMH%2F%2F2uM%3D","updated":"2012-11-20 12:18:41.000000000","message":"the same as before.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":476,"context_line":"                 \u0027device_owner\u0027: DEVICE_OWNER_ROUTER_INTF,"},{"line_number":477,"context_line":"                 \u0027name\u0027: \u0027\u0027}})"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":480,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":481,"context_line":"        return {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":482,"context_line":"                \u0027subnet_id\u0027: port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]}"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2uA%3D","line":479,"updated":"2012-11-20 00:10:52.000000000","message":"this variable should be singular since get_sync_data will only return 1 in this case.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":476,"context_line":"                 \u0027device_owner\u0027: DEVICE_OWNER_ROUTER_INTF,"},{"line_number":477,"context_line":"                 \u0027name\u0027: \u0027\u0027}})"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":480,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":481,"context_line":"        return {\u0027port_id\u0027: port[\u0027id\u0027],"},{"line_number":482,"context_line":"                \u0027subnet_id\u0027: port[\u0027fixed_ips\u0027][0][\u0027subnet_id\u0027]}"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JM%3D","line":479,"in_reply_to":"AAAAMH%2F%2F2uA%3D","updated":"2012-11-20 12:18:41.000000000","message":"the same as before.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":537,"context_line":"                raise w_exc.HTTPNotFound(\"Router %(router_id)s has no \""},{"line_number":538,"context_line":"                                         \"interface on subnet %(subnet_id)s\""},{"line_number":539,"context_line":"                                         % locals())"},{"line_number":540,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":541,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_floatingip(self, context, id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2t8%3D","line":540,"updated":"2012-11-20 00:10:52.000000000","message":"this variable should be singular since get_sync_data will only return 1 in this case.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                raise w_exc.HTTPNotFound(\"Router %(router_id)s has no \""},{"line_number":538,"context_line":"                                         \"interface on subnet %(subnet_id)s\""},{"line_number":539,"context_line":"                                         % locals())"},{"line_number":540,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":541,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_floatingip(self, context, id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JI%3D","line":540,"in_reply_to":"AAAAMH%2F%2F2t8%3D","updated":"2012-11-20 12:18:41.000000000","message":"the same as before.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":675,"context_line":"                              \u0027fixed_port_id\u0027: port_id,"},{"line_number":676,"context_line":"                              \u0027router_id\u0027: router_id})"},{"line_number":677,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":678,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    def create_floatingip(self, context, floatingip):"},{"line_number":681,"context_line":"        fip \u003d floatingip[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F3IE%3D","line":678,"updated":"2012-11-19 19:41:03.000000000","message":"If we are creating a floating ip, floatingip_db does not exist here! So _get_sync_data will probably be unable to fetch the newly created floating ip information.\n(This is what I am seeing anyway)","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":675,"context_line":"                              \u0027fixed_port_id\u0027: port_id,"},{"line_number":676,"context_line":"                              \u0027router_id\u0027: router_id})"},{"line_number":677,"context_line":"        routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":678,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    def create_floatingip(self, context, floatingip):"},{"line_number":681,"context_line":"        fip \u003d floatingip[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JE%3D","line":678,"in_reply_to":"AAAAMH%2F%2F3IE%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":797,"context_line":"                raise Exception(\u0027Multiple floating IPs found for port %s\u0027"},{"line_number":798,"context_line":"                                % port_id)"},{"line_number":799,"context_line":"        if router_id:"},{"line_number":800,"context_line":"            routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":801,"context_line":"            l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def _check_l3_view_auth(self, context, network):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2t4%3D","line":800,"updated":"2012-11-20 00:10:52.000000000","message":"this variable should be singular since get_sync_data will only return 1 in this case.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":797,"context_line":"                raise Exception(\u0027Multiple floating IPs found for port %s\u0027"},{"line_number":798,"context_line":"                                % port_id)"},{"line_number":799,"context_line":"        if router_id:"},{"line_number":800,"context_line":"            routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":801,"context_line":"            l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def _check_l3_view_auth(self, context, network):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2JA%3D","line":800,"in_reply_to":"AAAAMH%2F%2F2t4%3D","updated":"2012-11-20 12:18:41.000000000","message":"the same as before.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":837,"context_line":"        for subnet_dict in subnet_dicts:"},{"line_number":838,"context_line":"            ports \u003d subnet_id_ports_dict.get(subnet_dict[\u0027id\u0027], [])"},{"line_number":839,"context_line":"            for port in ports:"},{"line_number":840,"context_line":"                port[\u0027subnet\u0027] \u003d {\u0027id\u0027: subnet_dict[\u0027id\u0027],"},{"line_number":841,"context_line":"                                  \u0027cidr\u0027: subnet_dict[\u0027cidr\u0027],"},{"line_number":842,"context_line":"                                  \u0027gateway_ip\u0027: subnet_dict[\u0027gateway_ip\u0027]}"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F15g%3D","line":840,"updated":"2012-11-20 15:59:13.000000000","message":"We\u0027ve got a bit of data duplication here as the subnet_id is already in fixed_ips. Actually instead of adding a \u0027subnet\u0027 attribute to port you could just stash the extra subnet info in fixed_ips.\n\nAnyway, this will have a bit of a ripple effect. If you think this will actually make things more efficient as you\u0027ll be transmitting a smaller payload, perhaps just put a TODO.\n\nOr perhaps you just don\u0027t need the subnet id?","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":837,"context_line":"        for subnet_dict in subnet_dicts:"},{"line_number":838,"context_line":"            ports \u003d subnet_id_ports_dict.get(subnet_dict[\u0027id\u0027], [])"},{"line_number":839,"context_line":"            for port in ports:"},{"line_number":840,"context_line":"                port[\u0027subnet\u0027] \u003d {\u0027id\u0027: subnet_dict[\u0027id\u0027],"},{"line_number":841,"context_line":"                                  \u0027cidr\u0027: subnet_dict[\u0027cidr\u0027],"},{"line_number":842,"context_line":"                                  \u0027gateway_ip\u0027: subnet_dict[\u0027gateway_ip\u0027]}"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F068%3D","line":840,"in_reply_to":"AAAAMH%2F%2F15g%3D","updated":"2012-11-21 02:26:03.000000000","message":"Yes, I don\u0027t  need the id. You have known it.  we can stash it into fixed_ips. But it will involve change the agent. I like TODO for now","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":145,"context_line":"            context.session.add(router_db)"},{"line_number":146,"context_line":"            if has_gw_info:"},{"line_number":147,"context_line":"                self._update_router_gw_info(context, router_db[\u0027id\u0027], gw_info)"},{"line_number":148,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":149,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":150,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":151,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAs%3D","line":148,"updated":"2012-11-25 13:09:57.000000000","message":"Why do we call get_sync_data here. When a router is create there is no floating ip information for the router. \nAmi I missing something here?","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            context.session.add(router_db)"},{"line_number":146,"context_line":"            if has_gw_info:"},{"line_number":147,"context_line":"                self._update_router_gw_info(context, router_db[\u0027id\u0027], gw_info)"},{"line_number":148,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":149,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":150,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":151,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAE%3D","line":148,"in_reply_to":"AAAAMH%2F%2FyAs%3D","updated":"2012-11-25 13:59:34.000000000","message":"I agree we can remove this notification since the router has no internal interfaces just after creation.","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":164,"context_line":"            # Ensure we actually have something to update"},{"line_number":165,"context_line":"            if r.keys():"},{"line_number":166,"context_line":"                router_db.update(r)"},{"line_number":167,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":168,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":169,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":170,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAo%3D","line":167,"updated":"2012-11-25 13:09:57.000000000","message":"The method get_sync_data does a search on the router id. You already have this information. No?","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":164,"context_line":"            # Ensure we actually have something to update"},{"line_number":165,"context_line":"            if r.keys():"},{"line_number":166,"context_line":"                router_db.update(r)"},{"line_number":167,"context_line":"        routers \u003d self.get_sync_data(context.elevated(),"},{"line_number":168,"context_line":"                                     router_db[\u0027id\u0027])"},{"line_number":169,"context_line":"        l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"},{"line_number":170,"context_line":"        return self._make_router_dict(router_db)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAI%3D","line":167,"in_reply_to":"AAAAMH%2F%2FyAo%3D","updated":"2012-11-25 13:59:34.000000000","message":"I need the gw_port information too.","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":624,"context_line":"            self._update_fip_assoc(context, fip, floatingip_db,"},{"line_number":625,"context_line":"                                   self.get_port(context.elevated(),"},{"line_number":626,"context_line":"                                                 fip_port_id))"},{"line_number":627,"context_line":"        router_id \u003d floatingip_db[\u0027router_id\u0027]"},{"line_number":628,"context_line":"        if router_id:"},{"line_number":629,"context_line":"            routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":630,"context_line":"            l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAk%3D","line":627,"updated":"2012-11-25 13:09:57.000000000","message":"do we need to send the message if the router id has not changed?","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":624,"context_line":"            self._update_fip_assoc(context, fip, floatingip_db,"},{"line_number":625,"context_line":"                                   self.get_port(context.elevated(),"},{"line_number":626,"context_line":"                                                 fip_port_id))"},{"line_number":627,"context_line":"        router_id \u003d floatingip_db[\u0027router_id\u0027]"},{"line_number":628,"context_line":"        if router_id:"},{"line_number":629,"context_line":"            routers \u003d self.get_sync_data(context.elevated(), router_id)"},{"line_number":630,"context_line":"            l3_rpc_agent_api.L3AgentNofity.routers_updated(context, routers)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAMH%2F%2FyAM%3D","line":627,"in_reply_to":"AAAAMH%2F%2FyAk%3D","updated":"2012-11-25 13:59:34.000000000","message":"Yes, because floatingips are changing. Currently we will send all of stuff of a router [router, its interfaces and floatingips] to l3 agent if any part of the router changes. Later we can improve it. This way will reduce the code change on l3 agent.","commit_id":"c5edeb1d83808cdb9cfebd88503841759dd35eba"}],"quantum/db/l3_rpc_agent_api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jI%3D","line":1,"updated":"2012-11-15 12:26:16.000000000","message":"I am not sure that this is the best place for this file. I have seen that the dhcp file is also here so I guess that it is ok. It is just a bit misleading the name - \"agent\" in the \"db\" directory","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Ys%3D","line":1,"in_reply_to":"AAAAMH%2F%2F7jI%3D","updated":"2012-11-15 15:03:00.000000000","message":"agent_api means api for us to call agent.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":38,"context_line":"                  topic\u003dself.topic)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":41,"context_line":"        if routers:"},{"line_number":42,"context_line":"            LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":43,"context_line":"            self.cast(context,"},{"line_number":44,"context_line":"                      self.make_msg(\u0027routers_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jE%3D","line":41,"updated":"2012-11-15 12:26:16.000000000","message":"When I was testing with qpid there was an exception thrown in the cast function - this was due to the fact that the l3 agent was not up and running. We should make sure that this is treated in the code. That is, that we are able to recover fro exceptions in the RPC code.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                  topic\u003dself.topic)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":41,"context_line":"        if routers:"},{"line_number":42,"context_line":"            LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":43,"context_line":"            self.cast(context,"},{"line_number":44,"context_line":"                      self.make_msg(\u0027routers_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Yc%3D","line":41,"in_reply_to":"AAAAMH%2F%2F7jE%3D","updated":"2012-11-15 15:03:00.000000000","message":"It is code problem. the router has a gw_port db object, for which qpid has no encoding . We don\u0027t need exception catch statement here since notification and other RPC message features have not done this way. I need a patch to revert the router dict\u0027s gw_port.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"            topic\u003dtopic, default_version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":34,"context_line":"        LOG.debug(router_id)"},{"line_number":35,"context_line":"        self.cast(context,"},{"line_number":36,"context_line":"                  self.make_msg(\u0027router_deleted\u0027,"},{"line_number":37,"context_line":"                                router_id\u003drouter_id),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Pc%3D","line":34,"updated":"2012-11-18 15:06:19.000000000","message":"Consider having some kind of text that could be more descriptive - just printing the router_id is pretty cryptic.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            topic\u003dtopic, default_version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":34,"context_line":"        LOG.debug(router_id)"},{"line_number":35,"context_line":"        self.cast(context,"},{"line_number":36,"context_line":"                  self.make_msg(\u0027router_deleted\u0027,"},{"line_number":37,"context_line":"                                router_id\u003drouter_id),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Gk%3D","line":34,"in_reply_to":"AAAAMH%2F%2F4Pc%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":31,"context_line":"            topic\u003dtopic, default_version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":34,"context_line":"        LOG.debug(\u0027Nofity agent the router %s is deleted\u0027, router_id)"},{"line_number":35,"context_line":"        self.cast(context,"},{"line_number":36,"context_line":"                  self.make_msg(\u0027router_deleted\u0027,"},{"line_number":37,"context_line":"                                router_id\u003drouter_id),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F350%3D","line":34,"updated":"2012-11-19 09:03:21.000000000","message":"Consider localization of log message","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            topic\u003dtopic, default_version\u003dself.BASE_RPC_API_VERSION)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":34,"context_line":"        LOG.debug(\u0027Nofity agent the router %s is deleted\u0027, router_id)"},{"line_number":35,"context_line":"        self.cast(context,"},{"line_number":36,"context_line":"                  self.make_msg(\u0027router_deleted\u0027,"},{"line_number":37,"context_line":"                                router_id\u003drouter_id),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F34g%3D","line":34,"in_reply_to":"AAAAMH%2F%2F350%3D","updated":"2012-11-19 10:28:06.000000000","message":"I am wondering if we should localization debug message. I18n team tells me we had better not to localize debug log msg. Instead we should localize warning, info.\nBut now, I will fix it with localization.","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":41,"context_line":"        if routers:"},{"line_number":42,"context_line":"            LOG.debug(\u0027Nofity agent routers were updated:\\n %s\u0027,"},{"line_number":43,"context_line":"                      jsonutils.dumps(routers, indent\u003d5))"},{"line_number":44,"context_line":"            self.cast(context,"},{"line_number":45,"context_line":"                      self.make_msg(\u0027routers_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F35w%3D","line":42,"updated":"2012-11-19 09:03:21.000000000","message":"Ditto","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def routers_updated(self, context, routers):"},{"line_number":41,"context_line":"        if routers:"},{"line_number":42,"context_line":"            LOG.debug(\u0027Nofity agent routers were updated:\\n %s\u0027,"},{"line_number":43,"context_line":"                      jsonutils.dumps(routers, indent\u003d5))"},{"line_number":44,"context_line":"            self.cast(context,"},{"line_number":45,"context_line":"                      self.make_msg(\u0027routers_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F34k%3D","line":42,"in_reply_to":"AAAAMH%2F%2F35w%3D","updated":"2012-11-19 10:28:06.000000000","message":"The same.","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":"                      topic\u003dself.topic)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"L3AgentNofity \u003d L3AgentNotifyAPI()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F10E%3D","line":50,"updated":"2012-11-20 20:00:59.000000000","message":"Why is this being instantiated?","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                      topic\u003dself.topic)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"L3AgentNofity \u003d L3AgentNotifyAPI()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F06o%3D","line":50,"in_reply_to":"AAAAMH%2F%2F10E%3D","updated":"2012-11-21 02:26:03.000000000","message":"I found we just need one of it.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"}],"quantum/db/l3_rpc_base.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        @param end_time:"},{"line_number":61,"context_line":"        @param router_id:"},{"line_number":62,"context_line":"        @param start_time: python datetime object"},{"line_number":63,"context_line":"        \"\"\"    "},{"line_number":64,"context_line":"        router_query \u003d context.session.query(l3_db.Router).options("},{"line_number":65,"context_line":"            joinedload(models_v2.Port))"},{"line_number":66,"context_line":"        if router_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHE%3D","line":63,"updated":"2012-11-08 13:20:11.000000000","message":":)","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self._populate_cidr_for_gw_port(context, gw_ports)"},{"line_number":80,"context_line":"        return routers"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":83,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":84,"context_line":"        @param context:"},{"line_number":85,"context_line":"        @param router_ids: a list of router_ids"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwHA%3D","line":82,"updated":"2012-11-08 13:20:11.000000000","message":"typo - floatingi_ps","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self._populate_cidr_for_gw_port(context, gw_ports)"},{"line_number":80,"context_line":"        return routers"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _get_sync_floatingi_ps(self, context, router_ids):"},{"line_number":83,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":84,"context_line":"        @param context:"},{"line_number":85,"context_line":"        @param router_ids: a list of router_ids"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv7g%3D","line":82,"in_reply_to":"AAAALn%2F%2FwHA%3D","updated":"2012-11-08 16:26:46.000000000","message":"I cannot say anything. :)","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        \"\"\"Query floatingi_ps that relate to list of router_ids."},{"line_number":84,"context_line":"        @param context:"},{"line_number":85,"context_line":"        @param router_ids: a list of router_ids"},{"line_number":86,"context_line":"        \"\"\"    "},{"line_number":87,"context_line":"        query \u003d context.session.query(l3_db.FloatingIP)"},{"line_number":88,"context_line":"        query \u003d query.filter(l3_db.FloatingIP.router_id.in_(router_ids))"},{"line_number":89,"context_line":"        return [self._make_floatingip_dict(c, None) for c in query.all()]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwG8%3D","line":86,"updated":"2012-11-08 13:20:11.000000000","message":":)","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if gw_port:"},{"line_number":122,"context_line":"                gw_port[\u0027fixed_ips\u0027] \u003d port[\u0027fixed_ips\u0027]"},{"line_number":123,"context_line":"                gw_port[\u0027subnet\u0027] \u003d port[\u0027subnet\u0027]"},{"line_number":124,"context_line":"        "},{"line_number":125,"context_line":"    def _populate_subnet_for_port(self, context, ports):"},{"line_number":126,"context_line":"        \"\"\"populate ports with subnet."},{"line_number":127,"context_line":"        These ports already have fixed_ips populated."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwG4%3D","line":124,"updated":"2012-11-08 13:20:11.000000000","message":":)","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            router_ids \u003d [router[\u0027id\u0027] for router in routers]"},{"line_number":161,"context_line":"            floatingi_ps \u003d self._get_sync_floatingi_ps(context, router_ids)"},{"line_number":162,"context_line":"            interfaces \u003d self._get_sync_interfaces(context, router_ids)"},{"line_number":163,"context_line":"        "},{"line_number":164,"context_line":"        return {\u0027_routers\u0027: routers,"},{"line_number":165,"context_line":"                \u0027_floatingi_ps\u0027: floatingi_ps,"},{"line_number":166,"context_line":"                \u0027_interfaces\u0027: interfaces}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwG0%3D","line":163,"updated":"2012-11-08 13:20:11.000000000","message":":(","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        \"\"\""},{"line_number":244,"context_line":"        return L3RPCdb().get_external_network_id(context)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        "}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwGw%3D","line":246,"updated":"2012-11-08 13:20:11.000000000","message":"oy vey","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":40,"context_line":"        return routers"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4PY%3D","line":37,"updated":"2012-11-18 15:06:19.000000000","message":"Is this something that is dynamic or static? If it is static then can we do self.context \u003d quantum_context.get_admin_context() in an __init__ method?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":40,"context_line":"        return routers"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4Gc%3D","line":37,"in_reply_to":"AAAAMH%2F%2F4PY%3D","updated":"2012-11-19 04:34:49.000000000","message":"please see https://review.openstack.org/#/c/15726/. This will fix the context problem in all call back methods.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":46,"context_line":"        this query."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":49,"context_line":"        return self.plugin.get_external_network_id(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4PU%3D","line":49,"updated":"2012-11-18 15:06:19.000000000","message":"Maybe log the external network id?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        this query."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":49,"context_line":"        return self.plugin.get_external_network_id(context)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4GY%3D","line":49,"in_reply_to":"AAAAMH%2F%2F4PU%3D","updated":"2012-11-19 04:34:49.000000000","message":"Done","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(\"Routers returned to l3 agent:\\n %s\","},{"line_number":40,"context_line":"                  jsonutils.dumps(routers, indent\u003d5))"},{"line_number":41,"context_line":"        return routers"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F35s%3D","line":39,"updated":"2012-11-19 09:03:21.000000000","message":"Localization","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(\"Routers returned to l3 agent:\\n %s\","},{"line_number":40,"context_line":"                  jsonutils.dumps(routers, indent\u003d5))"},{"line_number":41,"context_line":"        return routers"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F34Y%3D","line":39,"in_reply_to":"AAAAMH%2F%2F35s%3D","updated":"2012-11-19 10:28:06.000000000","message":"I am wondering if we should do it for LOG.debug.","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":50,"context_line":"        net_id \u003d self.plugin.get_external_network_id(context)"},{"line_number":51,"context_line":"        LOG.debug(\"External network ID returned to l3 agent: %s\","},{"line_number":52,"context_line":"                  net_id)"},{"line_number":53,"context_line":"        return net_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F35o%3D","line":51,"updated":"2012-11-19 09:03:21.000000000","message":"Ditto","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":50,"context_line":"        net_id \u003d self.plugin.get_external_network_id(context)"},{"line_number":51,"context_line":"        LOG.debug(\"External network ID returned to l3 agent: %s\","},{"line_number":52,"context_line":"                  net_id)"},{"line_number":53,"context_line":"        return net_id"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAMH%2F%2F34U%3D","line":51,"in_reply_to":"AAAAMH%2F%2F35o%3D","updated":"2012-11-19 10:28:06.000000000","message":"the same.","commit_id":"8cdc5373ed853c997fd1cd0aeb8db3983182eabf"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class L3RpcCallbackMixin():"},{"line_number":25,"context_line":"    \"\"\"A mix-in that enable L3 agent rpc support in plugin implementations.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def sync_routers(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2rI%3D","line":24,"updated":"2012-11-20 00:10:52.000000000","message":"class L3RpcCallbackMixin(object):","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":21,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class L3RpcCallbackMixin():"},{"line_number":25,"context_line":"    \"\"\"A mix-in that enable L3 agent rpc support in plugin implementations.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def sync_routers(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2Js%3D","line":24,"in_reply_to":"AAAAMH%2F%2F2rI%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(_(\"Routers returned to l3 agent:\\n %s\"),"},{"line_number":40,"context_line":"                  jsonutils.dumps(routers, indent\u003d5))"},{"line_number":41,"context_line":"        return routers"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2qk%3D","line":38,"updated":"2012-11-20 00:10:52.000000000","message":"To make this a true MixIn consider:\n\nfrom quantum import manager\n\nplugin \u003d manager.QuantumManager.get_plugin()\n\nrouters \u003d plugin.get_sync_data(context, router_id)","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in kwargs for multi host BP"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(_(\"Routers returned to l3 agent:\\n %s\"),"},{"line_number":40,"context_line":"                  jsonutils.dumps(routers, indent\u003d5))"},{"line_number":41,"context_line":"        return routers"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2Jo%3D","line":38,"in_reply_to":"AAAAMH%2F%2F2qk%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":47,"context_line":"        this query."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":50,"context_line":"        net_id \u003d self.plugin.get_external_network_id(context)"},{"line_number":51,"context_line":"        LOG.debug(_(\"External network ID returned to l3 agent: %s\"),"},{"line_number":52,"context_line":"                  net_id)"},{"line_number":53,"context_line":"        return net_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2qU%3D","line":50,"updated":"2012-11-20 00:10:52.000000000","message":"same as above","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        this query."},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":50,"context_line":"        net_id \u003d self.plugin.get_external_network_id(context)"},{"line_number":51,"context_line":"        LOG.debug(_(\"External network ID returned to l3 agent: %s\"),"},{"line_number":52,"context_line":"                  net_id)"},{"line_number":53,"context_line":"        return net_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2Jk%3D","line":50,"in_reply_to":"AAAAMH%2F%2F2qU%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"}],"quantum/db/l3_rpc_plugin.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\"A mix-in that enable L3 agent rpc support in plugin implementations.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def sync_routers(self, context, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"sync routers according to filters to a specific agent."},{"line_number":29,"context_line":"        @param context: contain user information"},{"line_number":30,"context_line":"        @param kwargs: host, or router_id"},{"line_number":31,"context_line":"        @return: a list of routers"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jQ%3D","line":28,"updated":"2012-11-15 12:26:16.000000000","message":"I think that you need a new line after the first line.","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    \"\"\"A mix-in that enable L3 agent rpc support in plugin implementations.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def sync_routers(self, context, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"sync routers according to filters to a specific agent."},{"line_number":29,"context_line":"        @param context: contain user information"},{"line_number":30,"context_line":"        @param kwargs: host, or router_id"},{"line_number":31,"context_line":"        @return: a list of routers"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7YE%3D","line":28,"in_reply_to":"AAAAMH%2F%2F7jQ%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":40,"context_line":"        return routers"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_external_network_id(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jM%3D","line":39,"updated":"2012-11-15 12:26:16.000000000","message":"Id the debug necessary here?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        # host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":37,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":38,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":39,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"},{"line_number":40,"context_line":"        return routers"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_external_network_id(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7X4%3D","line":39,"in_reply_to":"AAAAMH%2F%2F7jM%3D","updated":"2012-11-15 15:03:00.000000000","message":"Don\u0027t you want to know what message is sent out to agent?","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F44c%3D","line":1,"updated":"2012-11-16 23:38:42.000000000","message":"For consistency, calling this module l3_rpc_base.py","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2012 OpenStack, LLC."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4no%3D","line":1,"in_reply_to":"AAAAMH%2F%2F44c%3D","updated":"2012-11-17 02:58:08.000000000","message":"Done","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in multi host BP"},{"line_number":37,"context_line":"        # host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":38,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":39,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":40,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F44U%3D","line":37,"updated":"2012-11-16 23:38:42.000000000","message":"Thanks for the TODO note. However, I think commented out code is prohibited... is it?","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\""},{"line_number":35,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":36,"context_line":"        # TODO(gongysh) we will use host in multi host BP"},{"line_number":37,"context_line":"        # host \u003d kwargs.get(\u0027host\u0027)"},{"line_number":38,"context_line":"        context \u003d quantum_context.get_admin_context()"},{"line_number":39,"context_line":"        routers \u003d self.plugin.get_sync_data(context, router_id)"},{"line_number":40,"context_line":"        LOG.debug(jsonutils.dumps(routers, indent\u003d5))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4nw%3D","line":37,"in_reply_to":"AAAAMH%2F%2F44U%3D","updated":"2012-11-17 02:58:08.000000000","message":"Done","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"}],"quantum/manager.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return decorator(args[0])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ManagerMeta(type):"},{"line_number":66,"context_line":"    def __init__(cls, names, bases, dict_):"},{"line_number":67,"context_line":"        \"\"\"Metaclass that allows us to collect decorated periodic tasks.\"\"\""},{"line_number":68,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F5JM%3D","line":65,"updated":"2012-11-16 23:38:42.000000000","message":"Frankly, I wonder why we needed to use metaclasses here. We are redefining __init__, not __new__, and this leads me to believe that probably the metaclass is not needed. \n\nAnyway, I\u0027ve seen these classe have been pretty much copied over from nova. So I won\u0027t start an argument for something which has been already approved in another Openstack project :)","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return decorator(args[0])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ManagerMeta(type):"},{"line_number":66,"context_line":"    def __init__(cls, names, bases, dict_):"},{"line_number":67,"context_line":"        \"\"\"Metaclass that allows us to collect decorated periodic tasks.\"\"\""},{"line_number":68,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4nk%3D","line":65,"in_reply_to":"AAAAMH%2F%2F5JM%3D","updated":"2012-11-17 02:58:08.000000000","message":":)","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"                cls._ticks_to_skip[name] \u003d task._ticks_between_runs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Manager(object):"},{"line_number":93,"context_line":"    __metaclass__ \u003d ManagerMeta"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F5Is%3D","line":92,"updated":"2012-11-16 23:38:42.000000000","message":"Wondering if it makes sense to add code in manager.py or creating a new module called taskmanager.py","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"                cls._ticks_to_skip[name] \u003d task._ticks_between_runs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Manager(object):"},{"line_number":93,"context_line":"    __metaclass__ \u003d ManagerMeta"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F3xM%3D","line":92,"in_reply_to":"AAAAMH%2F%2F4ng%3D","updated":"2012-11-19 11:47:02.000000000","message":"Never mind.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                cls._ticks_to_skip[name] \u003d task._ticks_between_runs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Manager(object):"},{"line_number":93,"context_line":"    __metaclass__ \u003d ManagerMeta"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4ng%3D","line":92,"in_reply_to":"AAAAMH%2F%2F5Is%3D","updated":"2012-11-17 02:58:08.000000000","message":"First, Nova does it the same way. All managers are in the manager.py.\nIf I put these into taskmanager.py, should I rename the manager.py into quantummanger.py?\nsecond, I am afraid our QuantumManager feels lonely.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class QuantumManager(object):"},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    Quantum\u0027s Manager class is responsible for parsing a config file and"},{"line_number":157,"context_line":"    instantiating the correct plugin that concretely implement"},{"line_number":158,"context_line":"    quantum_plugin_base class."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4PQ%3D","line":155,"updated":"2012-11-18 15:06:19.000000000","message":"Is this the correct format?","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class QuantumManager(object):"},{"line_number":155,"context_line":"    \"\"\""},{"line_number":156,"context_line":"    Quantum\u0027s Manager class is responsible for parsing a config file and"},{"line_number":157,"context_line":"    instantiating the correct plugin that concretely implement"},{"line_number":158,"context_line":"    quantum_plugin_base class."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4GM%3D","line":155,"in_reply_to":"AAAAMH%2F%2F4PQ%3D","updated":"2012-11-19 04:34:49.000000000","message":"I think class description is different than the method description. So it can work.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def periodic_task(*args, **kwargs):"},{"line_number":32,"context_line":"    \"\"\"Decorator to indicate that a method is a periodic task."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This decorator can be used in two ways:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2zo%3D","line":31,"updated":"2012-11-20 00:10:52.000000000","message":"We should be using the version in openstack.common.periodic_task.  Not sure it makes to have copied that code here.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def periodic_task(*args, **kwargs):"},{"line_number":32,"context_line":"    \"\"\"Decorator to indicate that a method is a periodic task."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This decorator can be used in two ways:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2LU%3D","line":31,"in_reply_to":"AAAAMH%2F%2F2zo%3D","updated":"2012-11-20 12:18:41.000000000","message":"thanks. Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return decorator(args[0])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ManagerMeta(type):"},{"line_number":66,"context_line":"    def __init__(cls, names, bases, dict_):"},{"line_number":67,"context_line":"        \"\"\"Metaclass that allows us to collect decorated periodic tasks.\"\"\""},{"line_number":68,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2zc%3D","line":65,"updated":"2012-11-20 00:10:52.000000000","message":"If you change the parent class below you can drop this code.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return decorator(args[0])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class ManagerMeta(type):"},{"line_number":66,"context_line":"    def __init__(cls, names, bases, dict_):"},{"line_number":67,"context_line":"        \"\"\"Metaclass that allows us to collect decorated periodic tasks.\"\"\""},{"line_number":68,"context_line":"        super(ManagerMeta, cls).__init__(names, bases, dict_)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2LQ%3D","line":65,"in_reply_to":"AAAAMH%2F%2F2zc%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":89,"context_line":"                cls._ticks_to_skip[name] \u003d task._ticks_between_runs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Manager(object):"},{"line_number":93,"context_line":"    __metaclass__ \u003d ManagerMeta"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2zI%3D","line":92,"updated":"2012-11-20 00:10:52.000000000","message":"This should a subclass of openstack.common.periodic_task.PeriodTasks","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                cls._ticks_to_skip[name] \u003d task._ticks_between_runs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class Manager(object):"},{"line_number":93,"context_line":"    __metaclass__ \u003d ManagerMeta"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Set RPC API version to 1.0 by default."}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2LM%3D","line":92,"in_reply_to":"AAAAMH%2F%2F2zI%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"}],"quantum/plugins/openvswitch/agent/ovs_quantum_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"# @author: Dave Lapsley, Nicira Networks, Inc."},{"line_number":21,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import logging as std_logging"},{"line_number":24,"context_line":"import sys"},{"line_number":25,"context_line":"import time"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwGU%3D","line":23,"updated":"2012-11-08 13:20:11.000000000","message":"Common logging?","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":20,"context_line":"# @author: Dave Lapsley, Nicira Networks, Inc."},{"line_number":21,"context_line":"# @author: Aaron Rosen, Nicira Networks, Inc."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import logging as std_logging"},{"line_number":24,"context_line":"import sys"},{"line_number":25,"context_line":"import time"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv7Y%3D","line":23,"in_reply_to":"AAAALn%2F%2FwGU%3D","updated":"2012-11-08 16:26:46.000000000","message":"I need it.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"def main():"},{"line_number":689,"context_line":"    eventlet.monkey_patch(thread\u003dFalse)"},{"line_number":690,"context_line":"    cfg.CONF(args\u003dsys.argv, project\u003d\u0027quantum\u0027)"},{"line_number":691,"context_line":"    logging_config.setup_logging(cfg.CONF)"},{"line_number":692,"context_line":"    cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwGQ%3D","line":689,"updated":"2012-11-08 13:20:11.000000000","message":"??","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":686,"context_line":""},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"def main():"},{"line_number":689,"context_line":"    eventlet.monkey_patch(thread\u003dFalse)"},{"line_number":690,"context_line":"    cfg.CONF(args\u003dsys.argv, project\u003d\u0027quantum\u0027)"},{"line_number":691,"context_line":"    logging_config.setup_logging(cfg.CONF)"},{"line_number":692,"context_line":"    cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv7c%3D","line":689,"in_reply_to":"AAAALn%2F%2FwGQ%3D","updated":"2012-11-08 16:26:46.000000000","message":"for testing.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"}],"quantum/service.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"2b96b0efde20d63f09f9b575b9c863b00bba4c1b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host)"},{"line_number":111,"context_line":"    return server"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class Service(object):"},{"line_number":115,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FwGM%3D","line":113,"updated":"2012-11-08 13:20:11.000000000","message":"Maybe you should consider having this class in a separate file.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    server.start(app, cfg.CONF.bind_port, cfg.CONF.bind_host)"},{"line_number":111,"context_line":"    return server"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class Service(object):"},{"line_number":115,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2Fv7M%3D","line":113,"in_reply_to":"AAAALn%2F%2FwGM%3D","updated":"2012-11-08 16:26:46.000000000","message":"I prefer RPC service and wsgiservice sit together. They are brothers.","commit_id":"dafcc0f45ad45f6cbedf01ddee4bfafb9e174481"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":236,"context_line":"        for x in self.timers:"},{"line_number":237,"context_line":"            try:"},{"line_number":238,"context_line":"                x.stop()"},{"line_number":239,"context_line":"            except Exception:"},{"line_number":240,"context_line":"                pass"},{"line_number":241,"context_line":"        self.timers \u003d []"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jo%3D","line":239,"updated":"2012-11-15 12:26:16.000000000","message":"Maybe consider logging exceptions. This may be useful for troubleshooting","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        for x in self.timers:"},{"line_number":237,"context_line":"            try:"},{"line_number":238,"context_line":"                x.stop()"},{"line_number":239,"context_line":"            except Exception:"},{"line_number":240,"context_line":"                pass"},{"line_number":241,"context_line":"        self.timers \u003d []"},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Xo%3D","line":239,"in_reply_to":"AAAAMH%2F%2F7jo%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":244,"context_line":"        for x in self.timers:"},{"line_number":245,"context_line":"            try:"},{"line_number":246,"context_line":"                x.wait()"},{"line_number":247,"context_line":"            except Exception:"},{"line_number":248,"context_line":"                pass"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def periodic_tasks(self, raise_on_error\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7jk%3D","line":247,"updated":"2012-11-15 12:26:16.000000000","message":"Maybe consider logging exceptions. This may be useful for troubleshooting","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        for x in self.timers:"},{"line_number":245,"context_line":"            try:"},{"line_number":246,"context_line":"                x.wait()"},{"line_number":247,"context_line":"            except Exception:"},{"line_number":248,"context_line":"                pass"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def periodic_tasks(self, raise_on_error\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAMH%2F%2F7Xk%3D","line":247,"in_reply_to":"AAAAMH%2F%2F7jk%3D","updated":"2012-11-15 15:03:00.000000000","message":"Done","commit_id":"0368ea36864496737eb8bbd1ae2139347dbc36e6"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":119,"context_line":"    return server"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class Service(object):"},{"line_number":123,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    A service takes a manager and enables rpc by listening to queues based"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F42Y%3D","line":122,"updated":"2012-11-16 23:38:42.000000000","message":"Is this still part of the work required for running periodic tasks on agents? Or is there any other purpose?","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    return server"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class Service(object):"},{"line_number":123,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    A service takes a manager and enables rpc by listening to queues based"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAMH%2F%2F4nM%3D","line":122,"in_reply_to":"AAAAMH%2F%2F42Y%3D","updated":"2012-11-17 02:58:08.000000000","message":"there is a framework for all nova\u0027s binaries starting. and we are also porting this framework into oslo (openstack-common).\ncurrently, we have launcher in openstack-common (imported into quantum), we have service which the launcher will start here, each service will find a manager in manager.py.\n\nIn fact, you can see the framework via QuantumApiService and QuantumManager.\nI think quantum wants to have such kind of framework before.","commit_id":"f8ae9ca74b5e948cc3dd7dc3e4c76903df6f615f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":119,"context_line":"    return server"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class Service(object):"},{"line_number":123,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    A service takes a manager and enables rpc by listening to queues based"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2rQ%3D","line":122,"updated":"2012-11-20 00:10:52.000000000","message":"This looks like an old fork of Oslo.  They\u0027ve added openstack.common.rpc.service and we should base our code off those changes.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    return server"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class Service(object):"},{"line_number":123,"context_line":"    \"\"\"Service object for binaries running on hosts."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    A service takes a manager and enables rpc by listening to queues based"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAMH%2F%2F2Lk%3D","line":122,"in_reply_to":"AAAAMH%2F%2F2rQ%3D","updated":"2012-11-20 12:18:41.000000000","message":"Done. I will base that class.","commit_id":"db084d7cc140954a4d851b2d07380b0591cb7564"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":184,"context_line":"        if not host:"},{"line_number":185,"context_line":"            host \u003d CONF.host"},{"line_number":186,"context_line":"        if not binary:"},{"line_number":187,"context_line":"            binary \u003d os.path.basename(inspect.stack()[-1][1])"},{"line_number":188,"context_line":"        if not topic:"},{"line_number":189,"context_line":"            topic \u003d binary.rpartition(\u0027quantum-\u0027)[2]"},{"line_number":190,"context_line":"            topic \u003d topic.replace(\"-\", \"_\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F16Y%3D","line":187,"updated":"2012-11-20 20:00:59.000000000","message":"Why are you inspecting the stack frame?  Seems like the topic can be defined as a constant.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        if not host:"},{"line_number":185,"context_line":"            host \u003d CONF.host"},{"line_number":186,"context_line":"        if not binary:"},{"line_number":187,"context_line":"            binary \u003d os.path.basename(inspect.stack()[-1][1])"},{"line_number":188,"context_line":"        if not topic:"},{"line_number":189,"context_line":"            topic \u003d binary.rpartition(\u0027quantum-\u0027)[2]"},{"line_number":190,"context_line":"            topic \u003d topic.replace(\"-\", \"_\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F06Y%3D","line":187,"in_reply_to":"AAAAMH%2F%2F16Y%3D","updated":"2012-11-21 02:26:03.000000000","message":"Yes. But I don\u0027t want to change much since this framework (from nova) likely be put into olso project.","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":28,"context_line":"from quantum.openstack.common import rpc"},{"line_number":29,"context_line":"from quantum.openstack.common.rpc import service"},{"line_number":30,"context_line":"from quantum.openstack.common import version"},{"line_number":31,"context_line":"from quantum import context"},{"line_number":32,"context_line":"from quantum import wsgi"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2Bh0%3D","line":31,"updated":"2012-12-04 06:43:27.000000000","message":"This should go between lines 23, 24","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from quantum.openstack.common import rpc"},{"line_number":29,"context_line":"from quantum.openstack.common.rpc import service"},{"line_number":30,"context_line":"from quantum.openstack.common import version"},{"line_number":31,"context_line":"from quantum import context"},{"line_number":32,"context_line":"from quantum import wsgi"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2BdU%3D","line":31,"in_reply_to":"AAAAMX%2F%2F%2Bh0%3D","updated":"2012-12-04 08:30:55.000000000","message":"Done","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"}],"quantum/tests/unit/test_l3_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"class TestBasicRouterOperations(unittest.TestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        self.conf \u003d cfg.CommonConfigOpts()"},{"line_number":38,"context_line":"        self.conf.register_opts(base_config.core_opts)"},{"line_number":39,"context_line":"        self.conf.register_opts(l3_agent.L3NATAgent.OPTS)"},{"line_number":40,"context_line":"        self.conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4PM%3D","line":37,"updated":"2012-11-18 15:06:19.000000000","message":"Does anyone still use the self.conf \u003d config.setup_conf()? I think that it can be deleted.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class TestBasicRouterOperations(unittest.TestCase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        self.conf \u003d cfg.CommonConfigOpts()"},{"line_number":38,"context_line":"        self.conf.register_opts(base_config.core_opts)"},{"line_number":39,"context_line":"        self.conf.register_opts(l3_agent.L3NATAgent.OPTS)"},{"line_number":40,"context_line":"        self.conf.register_opts(interface.OPTS)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAMH%2F%2F4GE%3D","line":37,"in_reply_to":"AAAAMH%2F%2F4PM%3D","updated":"2012-11-19 04:34:49.000000000","message":"It is dangerous for out-of-tree agents.","commit_id":"976b16979b9b43a75270f42fabc144b2ba74442a"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.agent import l3_agent"},{"line_number":24,"context_line":"from quantum.agent.linux import interface"},{"line_number":25,"context_line":"from quantum.openstack.common import uuidutils"},{"line_number":26,"context_line":"from quantum.common import config as base_config"},{"line_number":27,"context_line":"from quantum.common import constants as l3_constants"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2Bhw%3D","line":25,"updated":"2012-12-04 06:43:27.000000000","message":"This should go between lines 28, 29","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from quantum.agent import l3_agent"},{"line_number":24,"context_line":"from quantum.agent.linux import interface"},{"line_number":25,"context_line":"from quantum.openstack.common import uuidutils"},{"line_number":26,"context_line":"from quantum.common import config as base_config"},{"line_number":27,"context_line":"from quantum.common import constants as l3_constants"},{"line_number":28,"context_line":"from quantum.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAAMX%2F%2F%2BdQ%3D","line":25,"in_reply_to":"AAAAMX%2F%2F%2Bhw%3D","updated":"2012-12-04 08:30:55.000000000","message":"Done","commit_id":"2130e711f2b22b7818e241a0fadd94797c11caed"}],"quantum/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":1099,"context_line":"    def _test_notify_op_agent(self, target_func, *args):"},{"line_number":1100,"context_line":"        l3_rpc_agent_api_str \u003d ("},{"line_number":1101,"context_line":"            \u0027quantum.db.l3_rpc_agent_api.L3AgentNotifyAPI\u0027)"},{"line_number":1102,"context_line":"        oldNotify \u003d l3_rpc_agent_api.L3AgentNofity"},{"line_number":1103,"context_line":"        try:"},{"line_number":1104,"context_line":"            with mock.patch(l3_rpc_agent_api_str) as notifyApi:"},{"line_number":1105,"context_line":"                l3_rpc_agent_api.L3AgentNofity \u003d notifyApi"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F13g%3D","line":1102,"updated":"2012-11-20 15:59:13.000000000","message":"This should not be needed if you use the patch in a with block.\n\nAlso, you might consider start and stop methods.\n\nThis does not have to be addressed. I just wanted to let you know about the alternative possibility (I am pretty sure you\u0027re already aware of it anyway!)","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"59891c902c1930736fa2567a7b9c5b9ffebb6a70","unresolved":false,"context_lines":[{"line_number":1099,"context_line":"    def _test_notify_op_agent(self, target_func, *args):"},{"line_number":1100,"context_line":"        l3_rpc_agent_api_str \u003d ("},{"line_number":1101,"context_line":"            \u0027quantum.db.l3_rpc_agent_api.L3AgentNotifyAPI\u0027)"},{"line_number":1102,"context_line":"        oldNotify \u003d l3_rpc_agent_api.L3AgentNofity"},{"line_number":1103,"context_line":"        try:"},{"line_number":1104,"context_line":"            with mock.patch(l3_rpc_agent_api_str) as notifyApi:"},{"line_number":1105,"context_line":"                l3_rpc_agent_api.L3AgentNofity \u003d notifyApi"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAMH%2F%2F06I%3D","line":1102,"in_reply_to":"AAAAMH%2F%2F13g%3D","updated":"2012-11-21 02:26:03.000000000","message":"I am not sure how to use \u0027with\u0027 to achieve my goal?","commit_id":"0323fd8d8cc336c5798937970978eeea3bd45396"}]}
