)]}'
{"quantum/agent/l3_agent.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"8e797494609cf7a61466e2782243c62ec6622352","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        cur_router_ids \u003d set()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # identify and update new or modified routers"},{"line_number":178,"context_line":"        for r in self.qclient.list_routers()[\u0027routers\u0027]:"},{"line_number":179,"context_line":"            cur_router_ids.add(r[\u0027id\u0027])"},{"line_number":180,"context_line":"            if r[\u0027id\u0027] not in self.router_info:"},{"line_number":181,"context_line":"                self.router_info[r[\u0027id\u0027]] \u003d RouterInfo(r[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmWA%3D","line":178,"updated":"2012-08-28 16:42:05.000000000","message":"if we have multiple routers, the results without namespaces will be nonsensical, as all ports will be effectively part of a single router from a forwarding perspective.  \n\nSo if you\u0027re using not using namespaces, it really only makes sense to have a single router per agent.  In order to provide simple support for multiple external networks with the l3-agent, I\u0027m thinking of a model where you can limit the agent to only working with a particular external network.  I guess we could do something here, saying that if you disable namespaces, you need to specify a particular router id.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":175,"context_line":"        cur_router_ids \u003d set()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # identify and update new or modified routers"},{"line_number":178,"context_line":"        for r in self.qclient.list_routers()[\u0027routers\u0027]:"},{"line_number":179,"context_line":"            cur_router_ids.add(r[\u0027id\u0027])"},{"line_number":180,"context_line":"            if r[\u0027id\u0027] not in self.router_info:"},{"line_number":181,"context_line":"                self.router_info[r[\u0027id\u0027]] \u003d RouterInfo(r[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmKo%3D","line":178,"in_reply_to":"AAAALH%2F%2FmTU%3D","updated":"2012-08-28 19:34:33.000000000","message":"Yeah, its tricky.  Your understanding is correct for DHCP, but not for L3.  Think about the case where there are two quantum routers, X and Y, and four non-overlapping subnets (X1, X2, Y1, Y2), with two subnets on each router. \n\nTraffic should not be able to flow from X1 to Y1,  but since the device running the L3 agent basically acts like one big router, it would forward the traffic.  The only safe way to not use namespaces that I can think of would be to only run one router per linux host, which is why I suggested the limit.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"28cd85c3672de6be2bea6888040435b9c24788d7","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        cur_router_ids \u003d set()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        # identify and update new or modified routers"},{"line_number":178,"context_line":"        for r in self.qclient.list_routers()[\u0027routers\u0027]:"},{"line_number":179,"context_line":"            cur_router_ids.add(r[\u0027id\u0027])"},{"line_number":180,"context_line":"            if r[\u0027id\u0027] not in self.router_info:"},{"line_number":181,"context_line":"                self.router_info[r[\u0027id\u0027]] \u003d RouterInfo(r[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmTU%3D","line":178,"in_reply_to":"AAAALH%2F%2FmWA%3D","updated":"2012-08-28 17:06:06.000000000","message":"i need to think about this a bit more. my understanding, and i seem to have been wrong, was that the problem occurs if there are overlapping ip\u0027s between routers. i guess that i need to do my homework.\nspecifying the router id could be challenging. this may require that the api on the service be changed to have a flag whether namespaces should be used.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"8e797494609cf7a61466e2782243c62ec6622352","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            ri \u003d self.router_info[router_id]"},{"line_number":189,"context_line":"            del self.router_info[router_id]"},{"line_number":190,"context_line":"            if self.conf.use_namespaces:"},{"line_number":191,"context_line":"                self._destroy_router_namespace(ri.ns_name())"},{"line_number":192,"context_line":"        prev_router_ids \u003d cur_router_ids"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _set_subnet_info(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fmb4%3D","line":191,"updated":"2012-08-28 16:42:05.000000000","message":"here and above, this slightly changes the behavior, as destroy_router_namespace() also deletes the devices and the IPs of the deleted router.  If you created a router, stopped the agent, deleted the interfaces and router, and then created a new router, I think you\u0027d be in trouble with the non-namespace version.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"28cd85c3672de6be2bea6888040435b9c24788d7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"            ri \u003d self.router_info[router_id]"},{"line_number":189,"context_line":"            del self.router_info[router_id]"},{"line_number":190,"context_line":"            if self.conf.use_namespaces:"},{"line_number":191,"context_line":"                self._destroy_router_namespace(ri.ns_name())"},{"line_number":192,"context_line":"        prev_router_ids \u003d cur_router_ids"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _set_subnet_info(self, port):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmT4%3D","line":191,"in_reply_to":"AAAALH%2F%2Fmb4%3D","updated":"2012-08-28 17:06:06.000000000","message":"ok, i\u0027ll look into this.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"8e797494609cf7a61466e2782243c62ec6622352","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            namespace \u003d ri.ns_name()"},{"line_number":273,"context_line":"        else:"},{"line_number":274,"context_line":"            namespace \u003d None"},{"line_number":275,"context_line":"        return namespace"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_ex_gw_port(self, ri):"},{"line_number":278,"context_line":"        ports \u003d self.qclient.list_ports("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmcE%3D","line":275,"updated":"2012-08-28 16:42:05.000000000","message":"Nit:  this can just be: \n\nreturn ri.ns_name() if self.conf.use_namespaces() else None\n\nOr even simpler, why not just pass use_namspace flag to to RouterInfo constructor, so it can just embed this logic in ns_name() itself.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"28cd85c3672de6be2bea6888040435b9c24788d7","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            namespace \u003d ri.ns_name()"},{"line_number":273,"context_line":"        else:"},{"line_number":274,"context_line":"            namespace \u003d None"},{"line_number":275,"context_line":"        return namespace"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_ex_gw_port(self, ri):"},{"line_number":278,"context_line":"        ports \u003d self.qclient.list_ports("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FmTI%3D","line":275,"in_reply_to":"AAAALH%2F%2FmcE%3D","updated":"2012-08-28 17:06:06.000000000","message":"the constructor sounds best.","commit_id":"8211d4ad583b8debf6a9ec761923012492d6ff56"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"4a44b48c9c9426e01f2aa41395db8a169638fbac","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # identify and update new or modified routers"},{"line_number":183,"context_line":"        for r in self.qclient.list_routers()[\u0027routers\u0027]:"},{"line_number":184,"context_line":"            # If namespaces are disabled then only treat agents router ID"},{"line_number":185,"context_line":"            if (self.conf.use_namespaces or"},{"line_number":186,"context_line":"                r[\u0027agent_id\u0027] \u003d\u003d self.conf.agent_id):"},{"line_number":187,"context_line":"                cur_router_ids.add(r[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FleM%3D","line":184,"updated":"2012-08-29 15:16:26.000000000","message":"(Suggestion only)\n\n\u003d\u003e If namespaces are disabled, only process the router associated with the configured agent id.","commit_id":"af3d6d08fd8115dd731c1e785bbec8a18335668a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # identify and update new or modified routers"},{"line_number":183,"context_line":"        for r in self.qclient.list_routers()[\u0027routers\u0027]:"},{"line_number":184,"context_line":"            # If namespaces are disabled then only treat agents router ID"},{"line_number":185,"context_line":"            if (self.conf.use_namespaces or"},{"line_number":186,"context_line":"                r[\u0027agent_id\u0027] \u003d\u003d self.conf.agent_id):"},{"line_number":187,"context_line":"                cur_router_ids.add(r[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2Fld0%3D","line":184,"in_reply_to":"AAAALH%2F%2FleM%3D","updated":"2012-08-29 15:18:33.000000000","message":"Done","commit_id":"af3d6d08fd8115dd731c1e785bbec8a18335668a"}]}
