)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4b43ecf32b83e4750b420ce008ea18fda5e2b7ff","unresolved":false,"context_lines":[{"line_number":13,"context_line":"get an InstanceNotFound error trying to lookup instance B."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change tries to find the instance in another cell using its"},{"line_number":16,"context_line":"instance mapping, and makes the code a bit more graceful if"},{"line_number":17,"context_line":"instance B is deleted or if this code, for whatever reason,"},{"line_number":18,"context_line":"does not have access to the API DB (the latter part is really about"},{"line_number":19,"context_line":"future proofing this code because right now it\u0027s only called by the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_a294e7e8","line":16,"range":{"start_line":16,"start_character":22,"end_line":16,"end_character":56},"updated":"2019-09-05 18:17:24.000000000","message":"It makes the code a bit more in violation of our goals to not add new upcalls. This is just an upcall that doesn\u0027t fail as much if it\u0027s triggered without access to the API DB and I really hate to push this kind of thing more than absolutely necessary.\n\nAre you really planning to call this done as-is without following up later to do this right?","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf2aabf882a0c3764d726355f45144d360fd3137","unresolved":false,"context_lines":[{"line_number":13,"context_line":"get an InstanceNotFound error trying to lookup instance B."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This change tries to find the instance in another cell using its"},{"line_number":16,"context_line":"instance mapping, and makes the code a bit more graceful if"},{"line_number":17,"context_line":"instance B is deleted or if this code, for whatever reason,"},{"line_number":18,"context_line":"does not have access to the API DB (the latter part is really about"},{"line_number":19,"context_line":"future proofing this code because right now it\u0027s only called by the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7faddb67_d32a177c","line":16,"range":{"start_line":16,"start_character":22,"end_line":16,"end_character":56},"in_reply_to":"7faddb67_a294e7e8","updated":"2019-09-05 19:46:55.000000000","message":"This isn\u0027t an up-call. The only thing that calls this code is the API.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa2c291cdcf0c30cca557df4da5e77b64d6a2c65","unresolved":false,"context_lines":[{"line_number":2373,"context_line":""},{"line_number":2374,"context_line":"        This method is meant to be used sparingly since it tries to find"},{"line_number":2375,"context_line":"        the instance by UUID in the cell-targeted context. If the instance"},{"line_number":2376,"context_line":"        is not found, this method will try to determine if its not found"},{"line_number":2377,"context_line":"        because it is deleted or if it is just in another cell. Therefore"},{"line_number":2378,"context_line":"        it assumes to have access to the API database and should only be"},{"line_number":2379,"context_line":"        called from methods that are used in the control plane services."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_3224a560","line":2376,"range":{"start_line":2376,"start_character":59,"end_line":2376,"end_character":62},"updated":"2019-08-22 20:31:45.000000000","message":"it\u0027s","commit_id":"2606dc29164f5809b4ce1c9e39edc6d553a35eec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad4faa7c8b99d7e2a1404ba85882f2bf5c3b71df","unresolved":false,"context_lines":[{"line_number":2373,"context_line":""},{"line_number":2374,"context_line":"        This method is meant to be used sparingly since it tries to find"},{"line_number":2375,"context_line":"        the instance by UUID in the cell-targeted context. If the instance"},{"line_number":2376,"context_line":"        is not found, this method will try to determine if its not found"},{"line_number":2377,"context_line":"        because it is deleted or if it is just in another cell. Therefore"},{"line_number":2378,"context_line":"        it assumes to have access to the API database and should only be"},{"line_number":2379,"context_line":"        called from methods that are used in the control plane services."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_32b26508","line":2376,"range":{"start_line":2376,"start_character":59,"end_line":2376,"end_character":62},"in_reply_to":"7faddb67_3224a560","updated":"2019-08-22 20:37:42.000000000","message":"Done","commit_id":"2606dc29164f5809b4ce1c9e39edc6d553a35eec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8dc2ea2ae6803d6b9b871331e0aa7225ade1dbbe","unresolved":false,"context_lines":[{"line_number":2455,"context_line":"                context, orig_instance_uuid)"},{"line_number":2456,"context_line":"            if orig_instance:"},{"line_number":2457,"context_line":"                # purge cached nw info for the original instance"},{"line_number":2458,"context_line":"                base_api.update_instance_cache_with_nw_info(self, context,"},{"line_number":2459,"context_line":"                                                            orig_instance)"},{"line_number":2460,"context_line":"            else:"},{"line_number":2461,"context_line":"                # Leave a breadcrumb about not being able to refresh the"},{"line_number":2462,"context_line":"                # the cache for the original instance."}],"source_content_type":"text/x-python","patch_set":1,"id":"ffb9cba7_447f7814","line":2459,"range":{"start_line":2458,"start_character":16,"end_line":2459,"end_character":74},"updated":"2019-04-30 21:54:32.000000000","message":"If orig_instance is in another cell, we likely also need to pass the targeted context for the other cell to this method, so either return that from _get_instance_by_uuid_using_api_db or use orig_instance._context.","commit_id":"2606dc29164f5809b4ce1c9e39edc6d553a35eec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ad4faa7c8b99d7e2a1404ba85882f2bf5c3b71df","unresolved":false,"context_lines":[{"line_number":2455,"context_line":"                context, orig_instance_uuid)"},{"line_number":2456,"context_line":"            if orig_instance:"},{"line_number":2457,"context_line":"                # purge cached nw info for the original instance"},{"line_number":2458,"context_line":"                base_api.update_instance_cache_with_nw_info(self, context,"},{"line_number":2459,"context_line":"                                                            orig_instance)"},{"line_number":2460,"context_line":"            else:"},{"line_number":2461,"context_line":"                # Leave a breadcrumb about not being able to refresh the"},{"line_number":2462,"context_line":"                # the cache for the original instance."}],"source_content_type":"text/x-python","patch_set":1,"id":"7faddb67_f2cb6d70","line":2459,"range":{"start_line":2458,"start_character":16,"end_line":2459,"end_character":74},"in_reply_to":"ffb9cba7_447f7814","updated":"2019-08-22 20:37:42.000000000","message":"Done","commit_id":"2606dc29164f5809b4ce1c9e39edc6d553a35eec"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2683f75d7684460d7571c81ff70977554c9f942e","unresolved":false,"context_lines":[{"line_number":2371,"context_line":"        # the cache for that instance to avoid a window of time where multiple"},{"line_number":2372,"context_line":"        # servers in the API say they are using the same floating IP."},{"line_number":2373,"context_line":"        if fip[\u0027port_id\u0027]:"},{"line_number":2374,"context_line":"            port \u003d self._show_port(context, fip[\u0027port_id\u0027],"},{"line_number":2375,"context_line":"                                   neutron_client\u003dclient)"},{"line_number":2376,"context_line":"            orig_instance_uuid \u003d port[\u0027device_id\u0027]"},{"line_number":2377,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_f3b4bed6","line":2374,"updated":"2019-08-23 19:33:02.000000000","message":"Unrelated but it\u0027s funny we don\u0027t handle errors here since refreshing the cache on the other instance should be best effort, but if the old port is gone or something we should just log it and not fail the associate operation happening here.","commit_id":"389835455700a33355f76461ee1914a0a2843ee8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2683f75d7684460d7571c81ff70977554c9f942e","unresolved":false,"context_lines":[{"line_number":2380,"context_line":"            LOG.info(\u0027re-assign floating IP %(address)s from \u0027"},{"line_number":2381,"context_line":"                     \u0027instance %(instance_id)s\u0027, msg_dict,"},{"line_number":2382,"context_line":"                     instance\u003dinstance)"},{"line_number":2383,"context_line":"            orig_instance \u003d self._get_instance_by_uuid_using_api_db("},{"line_number":2384,"context_line":"                context, orig_instance_uuid)"},{"line_number":2385,"context_line":"            if orig_instance:"},{"line_number":2386,"context_line":"                # purge cached nw info for the original instance; pass the"}],"source_content_type":"text/x-python","patch_set":2,"id":"7faddb67_93c54a40","line":2383,"updated":"2019-08-23 19:33:02.000000000","message":"Note to self but it would be a lot easier to test this code if the refresh logic was in a separate method so we could just test that without needing to mock out all of the associate stuff above.","commit_id":"389835455700a33355f76461ee1914a0a2843ee8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4b43ecf32b83e4750b420ce008ea18fda5e2b7ff","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                    return objects.Instance.get_by_uuid(cctxt, instance_uuid)"},{"line_number":2402,"context_line":"                except exception.InstanceNotFound:"},{"line_number":2403,"context_line":"                    # Alright it\u0027s really gone."},{"line_number":2404,"context_line":"                    return"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":"    def get_all(self, context):"},{"line_number":2407,"context_line":"        \"\"\"Get all networks for client.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_a261473b","line":2404,"updated":"2019-09-05 18:17:24.000000000","message":"This is very clever and workaround-y, but I definitely wouldn\u0027t encourage anyone to write more code like this in the future. I totally get why this is worthwhile for making this backportable, but I do hate to see it live around and provide an example that someone else might copy. I almost wonder if we should put this into a utility method somewhere so that we can (a) not replicate the code itself anywhere else and (b) put lots of warnings above it about when the technique should/can be used and what the downsides are. You\u0027ve got comments above, which is good, but I can see someone finding this and just lifting the contents elsewhere.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8f68d5b6f6da82649521d768ce4815f62a92f325","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                    return objects.Instance.get_by_uuid(cctxt, instance_uuid)"},{"line_number":2402,"context_line":"                except exception.InstanceNotFound:"},{"line_number":2403,"context_line":"                    # Alright it\u0027s really gone."},{"line_number":2404,"context_line":"                    return"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":"    def get_all(self, context):"},{"line_number":2407,"context_line":"        \"\"\"Get all networks for client.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d3ba17be","line":2404,"in_reply_to":"7faddb67_93557ffb","updated":"2019-09-05 19:58:44.000000000","message":"Okay, so I was confused about your intentions here, and I assume Artom was as well. I read this as being defensive about code that called this where access to the API DB was in question (i.e. if they were running multiple cells without api db access as recommended). I see now (and after talking to you) that this is purely an API-level thing and not an upcall. However, I think the overly graceful handling of no api db configuration is why we were both confused. I don\u0027t expect we\u0027d even be able to get this far if we had no api db (we couldn\u0027t even look up the instance this method is being called for). If we did, there would be a lot of error-level tracebacks being logged, so gently logging at info level that \"your entire deployment is configured in a way that can\u0027t possibly work\" seems a tad out of place.\n\nSo, if you\u0027re going to catch it and log, I\u0027d say do so at error and then re-raise the exception like all the other API code would.\n\nThe other thing you referenced is for code that could legit be called from either api or cell level services and *needs* to be graceful about not requiring api db access. This is wholly different, IMHO.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf2aabf882a0c3764d726355f45144d360fd3137","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                    return objects.Instance.get_by_uuid(cctxt, instance_uuid)"},{"line_number":2402,"context_line":"                except exception.InstanceNotFound:"},{"line_number":2403,"context_line":"                    # Alright it\u0027s really gone."},{"line_number":2404,"context_line":"                    return"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":"    def get_all(self, context):"},{"line_number":2407,"context_line":"        \"\"\"Get all networks for client.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_93557ffb","line":2404,"in_reply_to":"7faddb67_a261473b","updated":"2019-09-05 19:46:55.000000000","message":"I think I originally didn\u0027t have the CantStartEngineError handling in here but you suggested adding it while talking in person about this at the Train PTG in Denver to make it safe, like this change:\n\nI0a413eb4f8a94500941e53b9a294d7cdb45d2a1c\n\nAt least that was my recollection. Since it was discussed in person and not in the review I can\u0027t say I misunderstood.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e449a82366b6590a9d8631837d45288c08c022d3","unresolved":false,"context_lines":[{"line_number":2401,"context_line":"                    return objects.Instance.get_by_uuid(cctxt, instance_uuid)"},{"line_number":2402,"context_line":"                except exception.InstanceNotFound:"},{"line_number":2403,"context_line":"                    # Alright it\u0027s really gone."},{"line_number":2404,"context_line":"                    return"},{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":"    def get_all(self, context):"},{"line_number":2407,"context_line":"        \"\"\"Get all networks for client.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_935a5f7f","line":2404,"in_reply_to":"7faddb67_d3ba17be","updated":"2019-09-05 20:05:11.000000000","message":"I\u0027ll just remove the handling of CantStartEngineError since if it does happen for some reason, it\u0027ll get logged at L2322.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"16701ac80521b4a4ebf68aafdcd07802f049841d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":22,"context_line":"from neutronclient.common import exceptions as neutron_client_exc"},{"line_number":23,"context_line":"from neutronclient.v2_0 import client as clientv20"},{"line_number":24,"context_line":"from oslo_db import exception as db_exc"},{"line_number":25,"context_line":"from oslo_log import log as logging"},{"line_number":26,"context_line":"from oslo_utils import excutils"},{"line_number":27,"context_line":"from oslo_utils import strutils"}],"source_content_type":"text/x-python","patch_set":6,"id":"5faad753_dcd9a322","line":24,"updated":"2019-09-06 16:08:57.000000000","message":"Crap this is no longer used, pep8.","commit_id":"c4beaa46047ea3a6252e605525487dc3ed8cf57e"}],"nova/tests/unit/network/test_neutronv2.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4b43ecf32b83e4750b420ce008ea18fda5e2b7ff","unresolved":false,"context_lines":[{"line_number":5755,"context_line":"            self.api, ctxt, instance, nw_info\u003dNone)"},{"line_number":5756,"context_line":""},{"line_number":5757,"context_line":"    @mock.patch(\u0027nova.network.base_api.update_instance_cache_with_nw_info\u0027)"},{"line_number":5758,"context_line":"    def test_update_inst_info_cache_for_disassociated_fip_other_cell("},{"line_number":5759,"context_line":"            self, mock_update_cache):"},{"line_number":5760,"context_line":"        \"\"\"Tests a scenario where a floating IP is associated to an instance"},{"line_number":5761,"context_line":"        in another cell from the one in which it\u0027s currently associated"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_22da37e8","line":5758,"updated":"2019-09-05 18:17:24.000000000","message":"Maybe it\u0027s just me, but it seems like a bunch of these tests are way more complicated than they need to be. If your get-from-local-or-api method was somewhere common, you could test it more easily to make sure it works, and then just validate that we call it in the situations necessary from the network api.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf2aabf882a0c3764d726355f45144d360fd3137","unresolved":false,"context_lines":[{"line_number":5755,"context_line":"            self.api, ctxt, instance, nw_info\u003dNone)"},{"line_number":5756,"context_line":""},{"line_number":5757,"context_line":"    @mock.patch(\u0027nova.network.base_api.update_instance_cache_with_nw_info\u0027)"},{"line_number":5758,"context_line":"    def test_update_inst_info_cache_for_disassociated_fip_other_cell("},{"line_number":5759,"context_line":"            self, mock_update_cache):"},{"line_number":5760,"context_line":"        \"\"\"Tests a scenario where a floating IP is associated to an instance"},{"line_number":5761,"context_line":"        in another cell from the one in which it\u0027s currently associated"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_d3869765","line":5758,"in_reply_to":"7faddb67_22da37e8","updated":"2019-09-05 19:46:55.000000000","message":"This is why this change turned from a single patch into three, so I could split a lot of the code up so I didn\u0027t have to mock as much. The existing code, before the split, was doing a lot of different things so yeah it\u0027s a bear to test it without having to mock a bunch. This is just making sure we call _get_instance_by_uuid_using_api_db without having to also test the stuff in _get_instance_by_uuid_using_api_db - which is in separate tests.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"39507fe1e919545c1d16837d8c29713328f66222","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            ctxt, uuids.old_port_id, neutron_client\u003dmock_client)"},{"line_number":5788,"context_line":"        _get_instance_by_uuid_using_api_db.assert_called_once_with("},{"line_number":5789,"context_line":"            ctxt, old_instance.uuid)"},{"line_number":5790,"context_line":"        # update_instance_cache_with_nw_info is called twice, once directly"},{"line_number":5791,"context_line":"        # on the original instance and once via the refresh_cache decorator"},{"line_number":5792,"context_line":"        # for the newly associated instance."},{"line_number":5793,"context_line":"        mock_update_cache.assert_called_once_with("},{"line_number":5794,"context_line":"            self.api, cctxt, old_instance)"},{"line_number":5795,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_dd45ac70","line":5792,"range":{"start_line":5790,"start_character":0,"end_line":5792,"end_character":44},"updated":"2019-08-30 09:10:17.000000000","message":"this doesn\u0027t appear to match what\u0027s below?","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4b43ecf32b83e4750b420ce008ea18fda5e2b7ff","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            ctxt, uuids.old_port_id, neutron_client\u003dmock_client)"},{"line_number":5788,"context_line":"        _get_instance_by_uuid_using_api_db.assert_called_once_with("},{"line_number":5789,"context_line":"            ctxt, old_instance.uuid)"},{"line_number":5790,"context_line":"        # update_instance_cache_with_nw_info is called twice, once directly"},{"line_number":5791,"context_line":"        # on the original instance and once via the refresh_cache decorator"},{"line_number":5792,"context_line":"        # for the newly associated instance."},{"line_number":5793,"context_line":"        mock_update_cache.assert_called_once_with("},{"line_number":5794,"context_line":"            self.api, cctxt, old_instance)"},{"line_number":5795,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_6257cf5b","line":5792,"range":{"start_line":5790,"start_character":0,"end_line":5792,"end_character":44},"in_reply_to":"7faddb67_c2a323b0","updated":"2019-09-05 18:17:24.000000000","message":"Definitely think we need a follow-up queued so we don\u0027t forget. This is definitely a harmful comment otherwise as it\u0027s just confusing.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"20db1d705cd3013b9c33310b05bf655550928032","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            ctxt, uuids.old_port_id, neutron_client\u003dmock_client)"},{"line_number":5788,"context_line":"        _get_instance_by_uuid_using_api_db.assert_called_once_with("},{"line_number":5789,"context_line":"            ctxt, old_instance.uuid)"},{"line_number":5790,"context_line":"        # update_instance_cache_with_nw_info is called twice, once directly"},{"line_number":5791,"context_line":"        # on the original instance and once via the refresh_cache decorator"},{"line_number":5792,"context_line":"        # for the newly associated instance."},{"line_number":5793,"context_line":"        mock_update_cache.assert_called_once_with("},{"line_number":5794,"context_line":"            self.api, cctxt, old_instance)"},{"line_number":5795,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_c2a323b0","line":5792,"range":{"start_line":5790,"start_character":0,"end_line":5792,"end_character":44},"in_reply_to":"7faddb67_dd45ac70","updated":"2019-09-05 17:51:06.000000000","message":"Yeah, I think this is an old comment from when I (locally) had started the test with hitting associate_floating_ip directly but then realized I was going to have to be doing a lot of unnecessary mocking in several tests so that\u0027s why I started splitting things up for more targeted testing, and now call _update_inst_info_cache_for_disassociated_fip in here so the comment is old. I can remove that in a follow up or if I need to respin.","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"39507fe1e919545c1d16837d8c29713328f66222","unresolved":false,"context_lines":[{"line_number":5941,"context_line":"        mock_get_inst.assert_called_once_with(ctxt, instance.uuid)"},{"line_number":5942,"context_line":"        mock_get_map.assert_called_once_with(ctxt, instance.uuid)"},{"line_number":5943,"context_line":"        self.assertIn(\u0027Unable to find instance; no access to the API DB\u0027,"},{"line_number":5944,"context_line":"                      self.stdlog.logger.output)"},{"line_number":5945,"context_line":""},{"line_number":5946,"context_line":"    @mock.patch(\u0027nova.network.neutronv2.api._get_ksa_client\u0027,"},{"line_number":5947,"context_line":"                new_callable\u003dmock.NonCallableMock)  # asserts not called"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_fd2f48a4","line":5944,"range":{"start_line":5944,"start_character":22,"end_line":5944,"end_character":47},"updated":"2019-08-30 09:10:17.000000000","message":"hmm, this is new (to me)","commit_id":"08fcb3e22e6db15ae70eb55fba68c50bc5976260"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2d2f3a24b94d6c89b36017671a27137c23b596be","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            ctxt, uuids.old_port_id, neutron_client\u003dmock_client)"},{"line_number":5788,"context_line":"        _get_instance_by_uuid_using_api_db.assert_called_once_with("},{"line_number":5789,"context_line":"            ctxt, old_instance.uuid)"},{"line_number":5790,"context_line":"        # update_instance_cache_with_nw_info is called twice, once directly"},{"line_number":5791,"context_line":"        # on the original instance and once via the refresh_cache decorator"},{"line_number":5792,"context_line":"        # for the newly associated instance."},{"line_number":5793,"context_line":"        mock_update_cache.assert_called_once_with("},{"line_number":5794,"context_line":"            self.api, cctxt, old_instance)"},{"line_number":5795,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_6e79f87f","line":5792,"range":{"start_line":5790,"start_character":8,"end_line":5792,"end_character":44},"updated":"2019-09-05 20:20:33.000000000","message":"still need to clean this up","commit_id":"9bdd5bec1f658817b08f29d50c6f07387c4ee45c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2bf382b91664c566111c48e9b6e69087e46ff89f","unresolved":false,"context_lines":[{"line_number":5787,"context_line":"            ctxt, uuids.old_port_id, neutron_client\u003dmock_client)"},{"line_number":5788,"context_line":"        _get_instance_by_uuid_using_api_db.assert_called_once_with("},{"line_number":5789,"context_line":"            ctxt, old_instance.uuid)"},{"line_number":5790,"context_line":"        # update_instance_cache_with_nw_info is called twice, once directly"},{"line_number":5791,"context_line":"        # on the original instance and once via the refresh_cache decorator"},{"line_number":5792,"context_line":"        # for the newly associated instance."},{"line_number":5793,"context_line":"        mock_update_cache.assert_called_once_with("},{"line_number":5794,"context_line":"            self.api, cctxt, old_instance)"},{"line_number":5795,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_f0e62613","line":5792,"range":{"start_line":5790,"start_character":8,"end_line":5792,"end_character":44},"in_reply_to":"7faddb67_6e79f87f","updated":"2019-09-05 21:05:45.000000000","message":"Done","commit_id":"9bdd5bec1f658817b08f29d50c6f07387c4ee45c"}]}
