)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"2e7bf3964604ec2db2fb6e182be51f2d193fc91f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds Prefix Delegation support for DVR."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Unlike Legacy router, gateway interface resides in SNAT namespace"},{"line_number":10,"context_line":"in case of DVR Edge router. Prefix delegation agent needs to use"},{"line_number":11,"context_line":"the namespace accordingly."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If6ada5027d0483fac7fc3ff935fee1edfc6e2759"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_2be56408","line":10,"range":{"start_line":9,"start_character":22,"end_line":10,"end_character":26},"updated":"2016-02-10 17:05:56.000000000","message":", DVR Edge Routers have their gateway interface in the SNAT namespace as apposed to the router namespace.","commit_id":"7dbb059bfd2eb02e7fcf2e9daa44e42a1dfc27ce"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"2e7bf3964604ec2db2fb6e182be51f2d193fc91f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adds Prefix Delegation support for DVR."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Unlike Legacy router, gateway interface resides in SNAT namespace"},{"line_number":10,"context_line":"in case of DVR Edge router. Prefix delegation agent needs to use"},{"line_number":11,"context_line":"the namespace accordingly."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If6ada5027d0483fac7fc3ff935fee1edfc6e2759"},{"line_number":14,"context_line":"Closes-Bug: #1541406"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_0b40a8a4","line":11,"range":{"start_line":10,"start_character":28,"end_line":11,"end_character":26},"updated":"2016-02-10 17:05:56.000000000","message":"Prefix delegation agent should have a handle on the proper namespace that hosts the gateway interface.\n\nThis patch will pass in the right namespace based on the router type by listening on the update_router event from the l3_agent.","commit_id":"7dbb059bfd2eb02e7fcf2e9daa44e42a1dfc27ce"}],"neutron/agent/linux/pd.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e4a151dc9119c6d87ef9c8e84bcf153b1d0b4fdd","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    if not router:"},{"line_number":333,"context_line":"        LOG.debug(\u0027Router to be updated is not in internal routers list!\u0027)"},{"line_number":334,"context_line":"    # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":335,"context_line":"    elif (type(updated_router) is not legacy_router.LegacyRouter and"},{"line_number":336,"context_line":"          updated_router.agent_conf.agent_mode \u003d\u003d"},{"line_number":337,"context_line":"          l3_constants.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":338,"context_line":"          updated_router.snat_namespace):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7af24918_afb30109","line":335,"updated":"2016-03-03 18:21:51.000000000","message":"This should be:\n\nisinstance(updated_router, dvr_edge_router.DvrEdgeRouter)","commit_id":"7dbb059bfd2eb02e7fcf2e9daa44e42a1dfc27ce"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9f2d4db115d5afd927b4da736db0ff6ad622aeb4","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    if not router:"},{"line_number":333,"context_line":"        LOG.debug(\u0027Router to be updated is not in internal routers list!\u0027)"},{"line_number":334,"context_line":"    elif (isinstance(updated_router, dvr_edge_router.DvrEdgeRouter) and"},{"line_number":335,"context_line":"          updated_router.agent_conf.agent_mode \u003d\u003d"},{"line_number":336,"context_line":"          l3_constants.L3_AGENT_MODE_DVR_SNAT and"},{"line_number":337,"context_line":"          updated_router.snat_namespace):"},{"line_number":338,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":339,"context_line":"        l3_agent.pd.routers[updated_router.router_id][\u0027gw_ns_name\u0027] \u003d \\"},{"line_number":340,"context_line":"            updated_router.snat_namespace.name"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_f2ade5e9","line":337,"range":{"start_line":334,"start_character":10,"end_line":337,"end_character":39},"updated":"2016-03-03 21:49:41.000000000","message":"Do you need all three checks in here.\nI think we can get rid of one of these since it is redundant.","commit_id":"d9ccefa937d1749785e2f1e2da251bacba4b3995"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ce4aec65640de4a16af8fcc3b3f88f466daa3313","unresolved":false,"context_lines":[{"line_number":335,"context_line":"          updated_router.snat_namespace):"},{"line_number":336,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":337,"context_line":"        l3_agent.pd.routers[updated_router.router_id][\u0027gw_ns_name\u0027] \u003d \\"},{"line_number":338,"context_line":"            updated_router.snat_namespace.name"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"@utils.synchronized(\"l3-agent-pd\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_abbb55e4","line":338,"updated":"2016-03-16 20:19:17.000000000","message":"nit: could put these lines in () to not use the backslash","commit_id":"b522b6f495d18f6dd025c9fe341e49c09adc5bff"},{"author":{"_account_id":15736,"name":"Ritesh Anand","email":"tellrit@gmail.com","username":"ritesh"},"change_message_id":"dd2c51d2c3a685b3931734530a252957a6fce0bb","unresolved":false,"context_lines":[{"line_number":335,"context_line":"          updated_router.snat_namespace):"},{"line_number":336,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":337,"context_line":"        l3_agent.pd.routers[updated_router.router_id][\u0027gw_ns_name\u0027] \u003d \\"},{"line_number":338,"context_line":"            updated_router.snat_namespace.name"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"@utils.synchronized(\"l3-agent-pd\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_96d5d9ba","line":338,"in_reply_to":"1af94dfe_abbb55e4","updated":"2016-03-16 23:29:41.000000000","message":"Done","commit_id":"b522b6f495d18f6dd025c9fe341e49c09adc5bff"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ce4aec65640de4a16af8fcc3b3f88f466daa3313","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            get_router_entry(added_router.ns_name))"},{"line_number":348,"context_line":"    else:"},{"line_number":349,"context_line":"        # This will happen during l3 agent restart"},{"line_number":350,"context_line":"        router[\u0027ns_name\u0027] \u003d added_router.ns_name"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"class PDInfo(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_6bcaed6e","line":350,"updated":"2016-03-16 20:19:17.000000000","message":"Does router[\u0027gw_ns_name\u0027] need to be set here as well?","commit_id":"b522b6f495d18f6dd025c9fe341e49c09adc5bff"},{"author":{"_account_id":15736,"name":"Ritesh Anand","email":"tellrit@gmail.com","username":"ritesh"},"change_message_id":"dd2c51d2c3a685b3931734530a252957a6fce0bb","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            get_router_entry(added_router.ns_name))"},{"line_number":348,"context_line":"    else:"},{"line_number":349,"context_line":"        # This will happen during l3 agent restart"},{"line_number":350,"context_line":"        router[\u0027ns_name\u0027] \u003d added_router.ns_name"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"class PDInfo(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_f6dc1de6","line":350,"in_reply_to":"1af94dfe_6bcaed6e","updated":"2016-03-16 23:29:41.000000000","message":"Done","commit_id":"b522b6f495d18f6dd025c9fe341e49c09adc5bff"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"954eaf9d1a88bce37ebfa5ab95ce0792da57bfdd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _delete_pd(self, router, pd_info):"},{"line_number":88,"context_line":"        self._delete_lla(router, pd_info.get_bind_lla_with_mask())"},{"line_number":89,"context_line":"        if pd_info.client_started:"},{"line_number":90,"context_line":"            pd_info.driver.disable(self.pmon, router[\u0027ns_name\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @utils.synchronized(\"l3-agent-pd\")"},{"line_number":93,"context_line":"    def disable_subnet(self, router_id, subnet_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_12bde0d7","line":90,"range":{"start_line":90,"start_character":46,"end_line":90,"end_character":63},"updated":"2016-04-01 08:58:15.000000000","message":"do you miss to change this?","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":15736,"name":"Ritesh Anand","email":"tellrit@gmail.com","username":"ritesh"},"change_message_id":"bc61d81b4fc6f7aa0bccf14fb68d31af46af44f3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _delete_pd(self, router, pd_info):"},{"line_number":88,"context_line":"        self._delete_lla(router, pd_info.get_bind_lla_with_mask())"},{"line_number":89,"context_line":"        if pd_info.client_started:"},{"line_number":90,"context_line":"            pd_info.driver.disable(self.pmon, router[\u0027ns_name\u0027])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @utils.synchronized(\"l3-agent-pd\")"},{"line_number":93,"context_line":"    def disable_subnet(self, router_id, subnet_id):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_c7ba6871","line":90,"range":{"start_line":90,"start_character":46,"end_line":90,"end_character":63},"in_reply_to":"ba0121b8_12bde0d7","updated":"2016-04-01 20:55:48.000000000","message":"Removed the gn_ns_name that I had introduced, so left this unchanged.","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"954eaf9d1a88bce37ebfa5ab95ce0792da57bfdd","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        for subnet_id, pd_info in six.iteritems(router[\u0027subnets\u0027]):"},{"line_number":147,"context_line":"            self._delete_lla(router, pd_info.get_bind_lla_with_mask())"},{"line_number":148,"context_line":"            if pd_info.client_started:"},{"line_number":149,"context_line":"                pd_info.driver.disable(self.pmon, router[\u0027ns_name\u0027])"},{"line_number":150,"context_line":"                pd_info.prefix \u003d None"},{"line_number":151,"context_line":"                pd_info.client_started \u003d False"},{"line_number":152,"context_line":"                prefix \u003d l3_constants.PROVISIONAL_IPV6_PD_PREFIX"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_9298d079","line":149,"range":{"start_line":149,"start_character":50,"end_line":149,"end_character":67},"updated":"2016-04-01 08:58:15.000000000","message":"ditto","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":15736,"name":"Ritesh Anand","email":"tellrit@gmail.com","username":"ritesh"},"change_message_id":"bc61d81b4fc6f7aa0bccf14fb68d31af46af44f3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        for subnet_id, pd_info in six.iteritems(router[\u0027subnets\u0027]):"},{"line_number":147,"context_line":"            self._delete_lla(router, pd_info.get_bind_lla_with_mask())"},{"line_number":148,"context_line":"            if pd_info.client_started:"},{"line_number":149,"context_line":"                pd_info.driver.disable(self.pmon, router[\u0027ns_name\u0027])"},{"line_number":150,"context_line":"                pd_info.prefix \u003d None"},{"line_number":151,"context_line":"                pd_info.client_started \u003d False"},{"line_number":152,"context_line":"                prefix \u003d l3_constants.PROVISIONAL_IPV6_PD_PREFIX"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_07b5807d","line":149,"range":{"start_line":149,"start_character":50,"end_line":149,"end_character":67},"in_reply_to":"ba0121b8_9298d079","updated":"2016-04-01 20:55:48.000000000","message":"Removed the gn_ns_name that I had introduced, so left this unchanged.","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"954eaf9d1a88bce37ebfa5ab95ce0792da57bfdd","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"def get_router_gw_ns_name(router):"},{"line_number":328,"context_line":"    if (isinstance(router, dvr_edge_router.DvrEdgeRouter)"},{"line_number":329,"context_line":"        and router.snat_namespace):"},{"line_number":330,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":331,"context_line":"        return router.snat_namespace.name"},{"line_number":332,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_72941c8a","line":329,"range":{"start_line":328,"start_character":0,"end_line":329,"end_character":35},"updated":"2016-04-01 08:58:15.000000000","message":"Can we just use if like this:\n\nif getattr(router, \u0027snat_namespace\u0027, None):\n    return snat_ns_name\nelse:\n    ...\n\nIf there is a snat namespace, we will alway use it, right?","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":15736,"name":"Ritesh Anand","email":"tellrit@gmail.com","username":"ritesh"},"change_message_id":"bc61d81b4fc6f7aa0bccf14fb68d31af46af44f3","unresolved":false,"context_lines":[{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"def get_router_gw_ns_name(router):"},{"line_number":328,"context_line":"    if (isinstance(router, dvr_edge_router.DvrEdgeRouter)"},{"line_number":329,"context_line":"        and router.snat_namespace):"},{"line_number":330,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":331,"context_line":"        return router.snat_namespace.name"},{"line_number":332,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_677d5cb1","line":329,"range":{"start_line":328,"start_character":0,"end_line":329,"end_character":35},"in_reply_to":"ba0121b8_72941c8a","updated":"2016-04-01 20:55:48.000000000","message":"Nice Python usage, but I would like this to be more explicit making it lesser prone to error and relatively future proof; leaving unchanged, we can discuss if you disagree.","commit_id":"95c9ec4b1e6f73c9e4500f4acc33ae9f99b27833"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"564374887e7ef0b918fb973b35f9dd564c1da45e","unresolved":false,"context_lines":[{"line_number":324,"context_line":"    if (isinstance(router, dvr_edge_router.DvrEdgeRouter)"},{"line_number":325,"context_line":"        and router.snat_namespace):"},{"line_number":326,"context_line":"        # For DVR Edge routers, the gw interface is in snat namespace"},{"line_number":327,"context_line":"        return router.snat_namespace.name"},{"line_number":328,"context_line":"    else:"},{"line_number":329,"context_line":"        return router.ns_name"},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_d48a8cbe","line":327,"range":{"start_line":327,"start_character":15,"end_line":327,"end_character":41},"updated":"2016-05-25 21:30:50.000000000","message":"It just feels like this should be encapsulated by the DVR code.  We should have some abstraction that allows getting the namespace for the right part of the router.  This seems like requiring PD to have too much internal knowledge of DVR.","commit_id":"d8a5ff8e494615c1fe054997f6c8638f9313163c"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"564374887e7ef0b918fb973b35f9dd564c1da45e","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    router \u003d l3_agent.pd.routers.get(updated_router.router_id)"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    if not router:"},{"line_number":338,"context_line":"        LOG.debug(\u0027Router to be updated is not in internal routers list!\u0027)"},{"line_number":339,"context_line":"    else:"},{"line_number":340,"context_line":"        l3_agent.pd.routers[updated_router.router_id][\u0027ns_name\u0027] \u003d ("},{"line_number":341,"context_line":"            get_router_gw_ns_name(updated_router))"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_341838d3","line":338,"range":{"start_line":338,"start_character":8,"end_line":338,"end_character":74},"updated":"2016-05-25 21:30:50.000000000","message":"This seems more worthy of an exception to me.  What do you think?","commit_id":"d8a5ff8e494615c1fe054997f6c8638f9313163c"}],"neutron/tests/unit/agent/linux/test_pd.py":[{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"dc8c015e8923902957b280f7f53bfcc360bce10a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def test_add_update_dvr_edge_router(self):"},{"line_number":49,"context_line":"        l3_agent \u003d mock.Mock()"},{"line_number":50,"context_line":"        l3_agent.pd.routers \u003d {}"},{"line_number":51,"context_line":"        router_id \u003d \u00271\u0027"},{"line_number":52,"context_line":"        ri \u003d dvr_edge_router.DvrEdgeRouter(l3_agent,"},{"line_number":53,"context_line":"                                           \u0027host\u0027,"},{"line_number":54,"context_line":"                                           router_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_c7028209","line":51,"updated":"2017-01-24 19:19:44.000000000","message":"nit: Just for uniformity, keep the router_id same. Why the router_id here is assigned a string and the one in #L30 is assigned an integer.","commit_id":"831325846bcb1870c060bd7c8ce355c23e7a683e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ce34773697040e825e809fceb4c6cf20ba8063ab","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def test_add_update_dvr_edge_router(self):"},{"line_number":49,"context_line":"        l3_agent \u003d mock.Mock()"},{"line_number":50,"context_line":"        l3_agent.pd.routers \u003d {}"},{"line_number":51,"context_line":"        router_id \u003d \u00271\u0027"},{"line_number":52,"context_line":"        ri \u003d dvr_edge_router.DvrEdgeRouter(l3_agent,"},{"line_number":53,"context_line":"                                           \u0027host\u0027,"},{"line_number":54,"context_line":"                                           router_id,"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a3905b3_f6b49183","line":51,"in_reply_to":"5a3905b3_c7028209","updated":"2017-01-24 20:15:17.000000000","message":"router_id is a uuid string typically, if I change this to an integer the class initialization fails:\n\n      File \"neutron/agent/l3/namespaces.py\", line 39, in build_ns_name\n        return prefix + identifier\n    TypeError: cannot concatenate \u0027str\u0027 and \u0027int\u0027 objects\n\nThe best I can do is change the other one on L30.","commit_id":"831325846bcb1870c060bd7c8ce355c23e7a683e"}]}
