)]}'
{"heat/engine/resources/neutron/router.py":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"00593809a5116fb3ae25c91373fa6b23b68eaea8","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        do not delete previous router\u0027s underlying."},{"line_number":339,"context_line":"        \u0027\u0027\u0027"},{"line_number":340,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":341,"context_line":"        new_agent_id \u003d props.get(\u0027l3_agent_id\u0027, \u0027\u0027)"},{"line_number":342,"context_line":"        new_router_id \u003d prop_diff.get(\u0027router_id\u0027, \u0027\u0027)"},{"line_number":343,"context_line":"        client \u003d self.neutron()"},{"line_number":344,"context_line":"        if new_router_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BZW0%3D","line":341,"updated":"2014-01-27 12:06:50.000000000","message":"may be prop_diff instead props?","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"6bbf2e218557504e6d7be69c1e0acecdb54abe86","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        do not delete previous router\u0027s underlying."},{"line_number":339,"context_line":"        \u0027\u0027\u0027"},{"line_number":340,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":341,"context_line":"        new_agent_id \u003d props.get(\u0027l3_agent_id\u0027, \u0027\u0027)"},{"line_number":342,"context_line":"        new_router_id \u003d prop_diff.get(\u0027router_id\u0027, \u0027\u0027)"},{"line_number":343,"context_line":"        client \u003d self.neutron()"},{"line_number":344,"context_line":"        if new_router_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BSKk%3D","line":341,"in_reply_to":"AAAAUH%2F%2BUqs%3D","updated":"2014-01-28 12:40:47.000000000","message":"thanks. I understand. This explanation suits me.","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":9000,"name":"Ryo Miki","email":"miki.ryo@po.ntt-tx.co.jp","username":"miki.ryo"},"change_message_id":"c989ca6a928f8a75f976d9ed1299049b2e54232a","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        do not delete previous router\u0027s underlying."},{"line_number":339,"context_line":"        \u0027\u0027\u0027"},{"line_number":340,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":341,"context_line":"        new_agent_id \u003d props.get(\u0027l3_agent_id\u0027, \u0027\u0027)"},{"line_number":342,"context_line":"        new_router_id \u003d prop_diff.get(\u0027router_id\u0027, \u0027\u0027)"},{"line_number":343,"context_line":"        client \u003d self.neutron()"},{"line_number":344,"context_line":"        if new_router_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BUqs%3D","line":341,"in_reply_to":"AAAAUH%2F%2BZW0%3D","updated":"2014-01-28 01:40:41.000000000","message":"It needs latest l3_agent_id even if it is updated or not. I think props is correct, because prop_diff is None when l3_agent_id is not updated. new_router_id should be retrieved by prop_diff, to check router_id is updated.","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"00593809a5116fb3ae25c91373fa6b23b68eaea8","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                                          \u0027agt\u0027: new_agent_id})"},{"line_number":356,"context_line":"                    return"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    try:"},{"line_number":359,"context_line":"                        client.remove_router_from_l3_agent("},{"line_number":360,"context_line":"                            prev_agent_id, new_router_id)"},{"line_number":361,"context_line":"                    except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BZUI%3D","line":358,"updated":"2014-01-27 12:06:50.000000000","message":"Why do you not use handle_delete here?","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":9000,"name":"Ryo Miki","email":"miki.ryo@po.ntt-tx.co.jp","username":"miki.ryo"},"change_message_id":"328378ef20b26d5253603d932de6634d6742f524","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                                          \u0027agt\u0027: new_agent_id})"},{"line_number":356,"context_line":"                    return"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    try:"},{"line_number":359,"context_line":"                        client.remove_router_from_l3_agent("},{"line_number":360,"context_line":"                            prev_agent_id, new_router_id)"},{"line_number":361,"context_line":"                    except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BNh4%3D","line":358,"in_reply_to":"AAAAUH%2F%2BSHw%3D","updated":"2014-01-29 01:41:42.000000000","message":"\"prev_agent_id\" is the id of l3-agent which new_router_id is associated with (see line 345). Sorry, \"prev_agent_id\" is maybe wrong name, it should be \"current_agent_id\". I will change it.\n\nThis section compare with \"prev_agent_id\" and \"new_agent_id\". \"new_agent_id\" is id that is specified by updated template. If they equals, just update resource information because l3_agent which I want to associate with new_router_id is already done. If they doesn\u0027t, remove prev_agent_id to avoid 409.","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"6bbf2e218557504e6d7be69c1e0acecdb54abe86","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                                          \u0027agt\u0027: new_agent_id})"},{"line_number":356,"context_line":"                    return"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    try:"},{"line_number":359,"context_line":"                        client.remove_router_from_l3_agent("},{"line_number":360,"context_line":"                            prev_agent_id, new_router_id)"},{"line_number":361,"context_line":"                    except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BSHw%3D","line":358,"in_reply_to":"AAAAUH%2F%2BUpQ%3D","updated":"2014-01-28 12:40:47.000000000","message":"Ok, If i right understood you, it\u0027s validation that new_router_id is not associated.\nSo, if new_router_id was associated with previous agent - we will remove it without any error.\nBut if  new_router_id wasn\u0027t associated with previous agent - we will get error or not?\n(If it will be error, we cann\u0027t correct to add new router).","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":9000,"name":"Ryo Miki","email":"miki.ryo@po.ntt-tx.co.jp","username":"miki.ryo"},"change_message_id":"c989ca6a928f8a75f976d9ed1299049b2e54232a","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                                          \u0027agt\u0027: new_agent_id})"},{"line_number":356,"context_line":"                    return"},{"line_number":357,"context_line":"                else:"},{"line_number":358,"context_line":"                    try:"},{"line_number":359,"context_line":"                        client.remove_router_from_l3_agent("},{"line_number":360,"context_line":"                            prev_agent_id, new_router_id)"},{"line_number":361,"context_line":"                    except NeutronClientException as ex:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2BUpQ%3D","line":358,"in_reply_to":"AAAAUH%2F%2BZUI%3D","updated":"2014-01-28 01:40:41.000000000","message":"handle_delete will remove association of previous router_id. Here removes association of new router_id that is updated by template to make sure it is not associated.","commit_id":"ae87c1e2859b8471e66ad2903b300922af94aa87"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"16dcb3de68ac229cb6b8623cb1291e18ba64522d","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        do not delete previous router\u0027s underlying."},{"line_number":339,"context_line":"        \u0027\u0027\u0027"},{"line_number":340,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":341,"context_line":"        new_agent_id \u003d props.get(\u0027l3_agent_id\u0027, \u0027\u0027)"},{"line_number":342,"context_line":"        new_router_id \u003d prop_diff.get(\u0027router_id\u0027, \u0027\u0027)"},{"line_number":343,"context_line":"        client \u003d self.neutron()"},{"line_number":344,"context_line":"        if new_router_id:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F91M4%3D","line":341,"updated":"2014-02-03 15:06:32.000000000","message":"May be we should use L3_AGENT_ID instead \u0027l3_agent_id\u0027 ?","commit_id":"703d93de55736ffbd725d25ef49cdfef7cf0cd4d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"16dcb3de68ac229cb6b8623cb1291e18ba64522d","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        \u0027\u0027\u0027"},{"line_number":340,"context_line":"        props \u003d self.prepare_update_properties(json_snippet)"},{"line_number":341,"context_line":"        new_agent_id \u003d props.get(\u0027l3_agent_id\u0027, \u0027\u0027)"},{"line_number":342,"context_line":"        new_router_id \u003d prop_diff.get(\u0027router_id\u0027, \u0027\u0027)"},{"line_number":343,"context_line":"        client \u003d self.neutron()"},{"line_number":344,"context_line":"        if new_router_id:"},{"line_number":345,"context_line":"            current_agent \u003d client.list_l3_agent_hosting_routers("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F91M8%3D","line":342,"updated":"2014-02-03 15:06:32.000000000","message":"same for \u0027router_id\u0027","commit_id":"703d93de55736ffbd725d25ef49cdfef7cf0cd4d"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"2cb1fb3d769741c2e9b317ac26d4578f91070c7c","unresolved":false,"context_lines":[{"line_number":296,"context_line":"              \u0027l3_agent. Note that the default policy setting in Neutron \u0027"},{"line_number":297,"context_line":"              \u0027restricts usage of this property to administrative users \u0027"},{"line_number":298,"context_line":"              \u0027only.\u0027),"},{"line_number":299,"context_line":"            update_allowed\u003dTrue,"},{"line_number":300,"context_line":"            required\u003dTrue"},{"line_number":301,"context_line":"        ),"},{"line_number":302,"context_line":"        L3_AGENT_ID: properties.Schema("}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FKpw%3D","line":299,"updated":"2014-03-07 22:40:52.000000000","message":"If we change the router here, how is this in any sense the same resource? All this resource does is set what should anyway be a property of a router.","commit_id":"75293030ec7b62c50ca7ca38cd42e2f4ec280290"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d4866c0c683c3d681e700698a954aa8c99b816a4","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        ),"},{"line_number":84,"context_line":"        AGENT_ID: properties.Schema("},{"line_number":85,"context_line":"            properties.Schema.STRING,"},{"line_number":86,"context_line":"            _(\u0027ID of the L3 agent.\u0027),"},{"line_number":87,"context_line":"            update_allowed\u003dTrue"},{"line_number":88,"context_line":"        ),"},{"line_number":89,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F9r0%3D","line":86,"updated":"2014-03-12 17:14:43.000000000","message":"You need to add a comment in the description to indicate that this property is only usable by admins: \u0027Note that the default policy setting in Neutron restricts usage of this property to administrative users only.\u0027","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"94505a7d843f3bc9cb64dc15e7beccb245a9ed1f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        ),"},{"line_number":84,"context_line":"        AGENT_ID: properties.Schema("},{"line_number":85,"context_line":"            properties.Schema.STRING,"},{"line_number":86,"context_line":"            _(\u0027ID of the L3 agent.\u0027),"},{"line_number":87,"context_line":"            update_allowed\u003dTrue"},{"line_number":88,"context_line":"        ),"},{"line_number":89,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F4R4%3D","line":86,"in_reply_to":"AAAAWH%2F%2F9r0%3D","updated":"2014-03-13 07:22:12.000000000","message":"Sure, it\u0027s done.","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d4866c0c683c3d681e700698a954aa8c99b816a4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            agent_id \u003d props.pop(self.AGENT_ID)"},{"line_number":120,"context_line":"        except KeyError:"},{"line_number":121,"context_line":"            pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        router \u003d self.neutron().create_router({\u0027router\u0027: props})[\u0027router\u0027]"},{"line_number":124,"context_line":"        self.resource_id_set(router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F9pg%3D","line":121,"updated":"2014-03-12 17:14:43.000000000","message":"Slightly tidier way:\n\n  agent_id \u003d props.pop(self.AGENT_ID, None)","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"94505a7d843f3bc9cb64dc15e7beccb245a9ed1f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        try:"},{"line_number":119,"context_line":"            agent_id \u003d props.pop(self.AGENT_ID)"},{"line_number":120,"context_line":"        except KeyError:"},{"line_number":121,"context_line":"            pass"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        router \u003d self.neutron().create_router({\u0027router\u0027: props})[\u0027router\u0027]"},{"line_number":124,"context_line":"        self.resource_id_set(router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F4Rw%3D","line":121,"in_reply_to":"AAAAWH%2F%2F9pg%3D","updated":"2014-03-13 07:22:12.000000000","message":"Oh, it\u0027s smart, thank you. Done.","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"},{"author":{"_account_id":4257,"name":"Zane Bitter","email":"zbitter@redhat.com","username":"zaneb"},"change_message_id":"d4866c0c683c3d681e700698a954aa8c99b816a4","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        try:"},{"line_number":151,"context_line":"            agent_id \u003d props.pop(self.AGENT_ID)"},{"line_number":152,"context_line":"        except KeyError:"},{"line_number":153,"context_line":"            pass"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if self.AGENT_ID in prop_diff:"},{"line_number":156,"context_line":"            self._replace_agent(agent_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F9ns%3D","line":153,"updated":"2014-03-12 17:14:43.000000000","message":"Same as above.","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"},{"author":{"_account_id":8844,"name":"Mitsuru Kanabuchi","email":"kanabuchi.mitsuru@po.ntts.co.jp","username":"kanabuchi"},"change_message_id":"94505a7d843f3bc9cb64dc15e7beccb245a9ed1f","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        try:"},{"line_number":151,"context_line":"            agent_id \u003d props.pop(self.AGENT_ID)"},{"line_number":152,"context_line":"        except KeyError:"},{"line_number":153,"context_line":"            pass"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if self.AGENT_ID in prop_diff:"},{"line_number":156,"context_line":"            self._replace_agent(agent_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2F4Rk%3D","line":153,"in_reply_to":"AAAAWH%2F%2F9ns%3D","updated":"2014-03-13 07:22:12.000000000","message":"Done too.","commit_id":"3628a4d1288630d8c5e8c910f59950dfe060665e"}],"heat/tests/test_neutron.py":[{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"f96b6ca8a99209f7d75af6445475b05a5f243a66","unresolved":false,"context_lines":[{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"        self.m.VerifyAll()"},{"line_number":1183,"context_line":""},{"line_number":1184,"context_line":"    def test_router_l3_agent_update(self):"},{"line_number":1185,"context_line":"        clients.OpenStackClients.keystone().AndReturn("},{"line_number":1186,"context_line":"            fakes.FakeKeystoneClient())"},{"line_number":1187,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2BMvc%3D","line":1184,"updated":"2014-01-29 05:36:53.000000000","message":"A lot of the code in these tests is just repeated in all of them. Maybe you could refactor them a little bit and extract the repeated parts into another method to avoid repetition and make them easier to read?","commit_id":"1596f96b15954caf98e5d163d12aeb66681627af"}]}
