)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixes bug 1048108"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The changeset also removed the namespace garbage collection from the port unplug. This"},{"line_number":12,"context_line":"attempts to delete the namespace. This is problematic as there may be additional attrinutes"},{"line_number":13,"context_line":"to the namespace that need to be dealt with."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I418a1ec4e9b65e5bea67ae84414019c3d6b54214"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAALH%2F%2FcI4%3D","line":12,"updated":"2012-09-11 10:23:02.000000000","message":"I feel really bad about pointing this out - but there\u0027s a typo in the commit message...","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fixes bug 1048108"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The changeset also removed the namespace garbage collection from the port unplug. This"},{"line_number":12,"context_line":"attempts to delete the namespace. This is problematic as there may be additional attrinutes"},{"line_number":13,"context_line":"to the namespace that need to be dealt with."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I418a1ec4e9b65e5bea67ae84414019c3d6b54214"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAALH%2F%2FcE8%3D","line":12,"in_reply_to":"AAAALH%2F%2FcI4%3D","updated":"2012-09-11 12:59:43.000000000","message":"Done","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"}],"quantum/agent/l3_agent.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"f032810369483e9d490432e6c3a2610db059fe60","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        )"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        #(TODO): need to solve netns deletion issues"},{"line_number":134,"context_line":"        # self._destroy_all_router_namespaces()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _destroy_all_router_namespaces(self):"},{"line_number":137,"context_line":"        \"\"\"Destroy all router namespaces on the host to eliminate"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2FcwE%3D","line":134,"updated":"2012-09-10 20:58:09.000000000","message":"I think this can cause problems, as if the agent assumes it is starting from a clean state for each namespace.  We wouldn\u0027t want old devices with IPs sitting in the namespace.  If we have issues deleting the namespace, I think we should specifically disable only the actual ns_ip.netns.delete() call.","commit_id":"f961040a6c91d5b3ad84d2d3f77dc16f038fddef"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"9f02664e8944c0f14b3deedcb8568fe94326abe2","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        )"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        #(TODO): need to solve netns deletion issues"},{"line_number":134,"context_line":"        # self._destroy_all_router_namespaces()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _destroy_all_router_namespaces(self):"},{"line_number":137,"context_line":"        \"\"\"Destroy all router namespaces on the host to eliminate"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAALH%2F%2Fcok%3D","line":134,"in_reply_to":"AAAALH%2F%2FcwE%3D","updated":"2012-09-10 21:46:43.000000000","message":"i have addressed this. please note that the unplug had to be addressed. it would try and delete the namespace which is incorrect","commit_id":"f961040a6c91d5b3ad84d2d3f77dc16f038fddef"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                   namespace\u003dnamespace)"},{"line_number":158,"context_line":"        #(TODO) Address the failure for the deletion of the namespace"},{"line_number":159,"context_line":"        #if self.conf.use_namespaces:"},{"line_number":160,"context_line":"        #    ns_ip.netns.delete(namespace)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def _create_router_namespace(self, ri):"},{"line_number":163,"context_line":"            ip_wrapper_root \u003d ip_lib.IPWrapper(self.conf.root_helper)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcJA%3D","line":160,"updated":"2012-09-11 10:23:02.000000000","message":"Commented out lines are forbidden according to ten commandments of openstack.","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                   namespace\u003dnamespace)"},{"line_number":158,"context_line":"        #(TODO) Address the failure for the deletion of the namespace"},{"line_number":159,"context_line":"        #if self.conf.use_namespaces:"},{"line_number":160,"context_line":"        #    ns_ip.netns.delete(namespace)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def _create_router_namespace(self, ri):"},{"line_number":163,"context_line":"            ip_wrapper_root \u003d ip_lib.IPWrapper(self.conf.root_helper)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcE4%3D","line":160,"in_reply_to":"AAAALH%2F%2FcJA%3D","updated":"2012-09-11 12:59:43.000000000","message":"Done","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":365,"context_line":"            if self.conf.use_namespaces:"},{"line_number":366,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(self.conf.root_helper,"},{"line_number":367,"context_line":"                                              namespace\u003dri.ns_name())"},{"line_number":368,"context_line":"                ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                utils.execute(cmd, check_exit_code\u003dFalse,"},{"line_number":371,"context_line":"                              root_helper\u003dself.conf.root_helper)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fcnw%3D","line":368,"updated":"2012-09-11 00:46:37.000000000","message":"good, was just thinking we had to file a bug to handle assigning the route if it existed already.","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":365,"context_line":"            if self.conf.use_namespaces:"},{"line_number":366,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(self.conf.root_helper,"},{"line_number":367,"context_line":"                                              namespace\u003dri.ns_name())"},{"line_number":368,"context_line":"                ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                utils.execute(cmd, check_exit_code\u003dFalse,"},{"line_number":371,"context_line":"                              root_helper\u003dself.conf.root_helper)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcVg%3D","line":368,"in_reply_to":"AAAALH%2F%2FcWI%3D","updated":"2012-09-11 05:20:39.000000000","message":"yup, agreed.","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":365,"context_line":"            if self.conf.use_namespaces:"},{"line_number":366,"context_line":"                ip_wrapper \u003d ip_lib.IPWrapper(self.conf.root_helper,"},{"line_number":367,"context_line":"                                              namespace\u003dri.ns_name())"},{"line_number":368,"context_line":"                ip_wrapper.netns.execute(cmd, check_exit_code\u003dFalse)"},{"line_number":369,"context_line":"            else:"},{"line_number":370,"context_line":"                utils.execute(cmd, check_exit_code\u003dFalse,"},{"line_number":371,"context_line":"                              root_helper\u003dself.conf.root_helper)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcWI%3D","line":368,"in_reply_to":"AAAALH%2F%2Fcnw%3D","updated":"2012-09-11 05:17:05.000000000","message":"one of the problems was that the creation would fail due to the existance of the route and namespace","commit_id":"72b07430f6b9fc29a24fd78c83e740d8f794f16b"}],"quantum/agent/linux/interface.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2Fcns%3D","side":"PARENT","line":159,"updated":"2012-09-11 00:46:37.000000000","message":"i\u0027m not sure, but I think Mark added this logic, and while the L3 code didn\u0027t rely on it, I think the DHCP logic may have.","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcE0%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2FcI8%3D","updated":"2012-09-11 12:59:43.000000000","message":"I think that we certainly need to document this.\nThe cleanup utility does the garbage collection. The problem here is that when a interface was being unplugged it tried to delete the namespace. This was also done via the agent.","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcI8%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2FcVE%3D","updated":"2012-09-11 10:23:02.000000000","message":"From what I recall in the netns cleanup utility we are still using the same emptiness criterion for removing a namespace, which is probably incorrect.\nShall we say that all quantum namespace are force-collected in the cleanup utility (and document it should be used only if quantum is not running)?","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcVE%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2FcVk%3D","updated":"2012-09-11 05:23:12.000000000","message":"ok, sorry, my comment crossed wires with yours.","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcVk%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2FcdU%3D","updated":"2012-09-11 05:20:39.000000000","message":"I actually like that agents at least try to clean up after themselves...  Gary, were you removing this in order to avoid triggering an error on namespace deletion or because it was no longer used by L3 agent?","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcV0%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2FcdU%3D","updated":"2012-09-11 05:17:05.000000000","message":"The problem encountered (discussed on mail thread) was that the  when the namespace_is_empty it does not mean that the namespace can be deleted. For example of a default gateway was defined on the namespace. The problem here was that when all of the namespace devices were deleted there were still some unreferenced handles ont he namespace file descriptor. This would cause the namespace deletion to fail. All access to the namespace thereafter was impossible.\n\nIn the netns cleanup utility the garbage collection is called. So I think that we are good to go.","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"4e07343239a643947ade26087cfeb8900a81990d","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        if namespace:"},{"line_number":158,"context_line":"            ip \u003d ip_lib.IPWrapper(self.conf.root_helper, namespace)"},{"line_number":159,"context_line":"            ip.garbage_collect_namespace()"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"class BridgeInterfaceDriver(LinuxInterfaceDriver):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALH%2F%2FcdU%3D","side":"PARENT","line":159,"in_reply_to":"AAAALH%2F%2Fcns%3D","updated":"2012-09-11 02:44:41.000000000","message":"I added this to automatically remove old network namespaces.  I\u0027m ok dropping this for Folsom (since quantum-netns-cleanup can be run periodically).  In Grizzly, we can take a second look at the agents and how they cleanup after themselves.","commit_id":"ba684d7ac2dd1fbcb4a51aa7950e2599659d2acd"}]}
