)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"66445f9f9e3d62a13bf6d489cbe716d90ac192d2","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Itzik Brown \u003citzikb@dev.mellanox.co.il\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-08 13:13:46 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Use provider:physical_network to propagate it in NetworkInfo"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Closes-Bug: #1239606"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F9rS4%3D","line":7,"updated":"2013-12-08 13:37:19.000000000","message":"Can you please add a little more explanation here - please see https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"6cacf1b2482c29477f6d84be1e4c5fe3eecc2ab8"}],"nova/network/neutronv2/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e25c7b8fc92d98271ffd2de4a06e8cab8c4c04a7","unresolved":false,"context_lines":[{"line_number":923,"context_line":""},{"line_number":924,"context_line":"    def _nw_info_build_network(self, port, networks, subnets):"},{"line_number":925,"context_line":"        # NOTE(danms): This loop can\u0027t fail to find a network since we"},{"line_number":926,"context_line":"        # filtered ports to only the ones matching networks in our parent"},{"line_number":927,"context_line":"        for net in networks:"},{"line_number":928,"context_line":"            if port[\u0027network_id\u0027] \u003d\u003d net[\u0027id\u0027]:"},{"line_number":929,"context_line":"                network_name \u003d net[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9Lto%3D","line":926,"updated":"2013-12-15 12:25:56.000000000","message":"we have an edge case where the entry may not be matched in this loop - please look at https://review.openstack.org/#/c/54521/8/nova/network/neutronv2/api.py","commit_id":"3042910ae1554cdc35a07edd1ae0847fedc15361"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"11fb3a4457e30ff057d911ad23cddda67d707574","unresolved":false,"context_lines":[{"line_number":959,"context_line":"            if port[\u0027network_id\u0027] \u003d\u003d net[\u0027id\u0027]:"},{"line_number":960,"context_line":"                network_name \u003d net[\u0027name\u0027]"},{"line_number":961,"context_line":"                tenant_id \u003d net[\u0027tenant_id\u0027]"},{"line_number":962,"context_line":"                physical_network \u003d net.get(\u0027provider:physical_network\u0027)"},{"line_number":963,"context_line":"                break"},{"line_number":964,"context_line":"        else:"},{"line_number":965,"context_line":"            tenant_id \u003d port[\u0027tenant_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F9pFg%3D","line":962,"updated":"2014-02-05 12:20:59.000000000","message":"i have one concern here - the provider network is only accessible via the admin context. if this is not the admin context then that value will be set as None.\nSo in some cases this value may change depending on the context that is used with the current call.","commit_id":"de954abbc47151490b17a4876e6d14a7d165f49a"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"7f551cad4a66052e7b6735c101bcc8279aad7034","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    def _has_provider_extension(self, refresh_cache\u003dFalse):"},{"line_number":374,"context_line":"        if refresh_cache:"},{"line_number":375,"context_line":"            self._refresh_neutron_extensions_cache()"},{"line_number":376,"context_line":"        return constants.PROVIDER_EXT in self.extensions"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _populate_neutron_extension_values(self, instance, port_req_body):"},{"line_number":379,"context_line":"        \"\"\"Populate neutron extension values for the instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Bz%2Fk%3D","line":376,"updated":"2014-02-18 21:26:08.000000000","message":"I vacillated on this a bit as I forsee a nightmarish future of _has_X_extension methods ;) That being said, have you examined all code paths to verify that the cache of extensions will always be updated when this is called. AFAICT there are only two ways it currently happens: if allocate_for_instance() is called or if some migrate related code runs. It might be more clear to simply refresh the cache in _nw_info_get_physical_networks() and check for the extension. The alternative would be to slightly tweak this code to provide True as the refresh_cache argument.","commit_id":"9a54e984381fd9ba0a18386932a2610a628003d3"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"34f1f52de526dc377d47bc6345d95635f248243f","unresolved":false,"context_lines":[{"line_number":373,"context_line":"    def _has_provider_extension(self, refresh_cache\u003dFalse):"},{"line_number":374,"context_line":"        if refresh_cache:"},{"line_number":375,"context_line":"            self._refresh_neutron_extensions_cache()"},{"line_number":376,"context_line":"        return constants.PROVIDER_EXT in self.extensions"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _populate_neutron_extension_values(self, instance, port_req_body):"},{"line_number":379,"context_line":"        \"\"\"Populate neutron extension values for the instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2BunI%3D","line":376,"in_reply_to":"AAAAUX%2F%2Bz%2Fk%3D","updated":"2014-02-19 15:18:30.000000000","message":"Done","commit_id":"9a54e984381fd9ba0a18386932a2610a628003d3"},{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"7f551cad4a66052e7b6735c101bcc8279aad7034","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"        _ensure_requested_network_ordering(lambda x: x[\u0027network_id\u0027],"},{"line_number":1056,"context_line":"                                           ports, net_ids)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        phys_networks \u003d self._nw_info_get_physical_networks(context, net_ids)"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"        for port in ports:"},{"line_number":1061,"context_line":"            network_IPs \u003d self._nw_info_get_ips(client, port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Bz9E%3D","line":1058,"updated":"2014-02-18 21:26:08.000000000","message":"Does it makes sense here to restrict the net_ids to the ones that have associations in the ports list?","commit_id":"9a54e984381fd9ba0a18386932a2610a628003d3"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"34f1f52de526dc377d47bc6345d95635f248243f","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"        _ensure_requested_network_ordering(lambda x: x[\u0027network_id\u0027],"},{"line_number":1056,"context_line":"                                           ports, net_ids)"},{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"        phys_networks \u003d self._nw_info_get_physical_networks(context, net_ids)"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"        for port in ports:"},{"line_number":1061,"context_line":"            network_IPs \u003d self._nw_info_get_ips(client, port)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2BunM%3D","line":1058,"in_reply_to":"AAAAUX%2F%2Bz9E%3D","updated":"2014-02-19 15:18:30.000000000","message":"Done","commit_id":"9a54e984381fd9ba0a18386932a2610a628003d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"56e32e85b4053ee9b5a9bd3223e45b543d1762e5","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"                                                                   subnets)"},{"line_number":1080,"context_line":"            physnet_info \u003d physnets_info.get(network[\u0027id\u0027])"},{"line_number":1081,"context_line":"            network[\u0027physical_network\u0027] \u003d physnet_info[0][\u0027physical_network\u0027] \\"},{"line_number":1082,"context_line":"                if physnet_info else None"},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"            nw_info.append(network_model.VIF("},{"line_number":1085,"context_line":"                id\u003dport[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FyqA%3D","line":1082,"updated":"2014-02-24 19:12:38.000000000","message":"Please use parentheses to eliminate the backslash continuation (femtonit)","commit_id":"c8f60e7935d4358c08caa4bd9fe20cec0b5781c2"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ca4abfffcd79b65c67919df212bbf29b7dce9a67","unresolved":false,"context_lines":[{"line_number":1068,"context_line":"        _ensure_requested_network_ordering(lambda x: x[\u0027network_id\u0027],"},{"line_number":1069,"context_line":"                                           ports, net_ids)"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        net_ids \u003d [port[\u0027network_id\u0027] for port in ports]"},{"line_number":1072,"context_line":"        physnets_info \u003d self._nw_info_get_physical_networks(context, net_ids)"},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":"        for port in ports:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAVn%2F%2FYXE%3D","line":1071,"updated":"2014-03-06 14:04:44.000000000","message":"if there are no port defined we should not call the function below.\ncan you please add a check here.","commit_id":"68ceb2cd69fb1f336e2f9b6d638fb4dbe7bff6ad"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f759cb19801a8e6f21aecb24f4e46ee3b918141c","unresolved":false,"context_lines":[{"line_number":1098,"context_line":"        networks, port_ids \u003d self._gather_port_ids_and_networks("},{"line_number":1099,"context_line":"                context, instance, networks, port_ids)"},{"line_number":1100,"context_line":"        nw_info \u003d network_model.NetworkInfo()"},{"line_number":1101,"context_line":"        physnets_info \u003d self._nw_info_get_physical_networks(context, networks)"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":"        for current_neutron_port in current_neutron_ports:"},{"line_number":1104,"context_line":"            if current_neutron_port[\u0027id\u0027] in port_ids:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FESg%3D","line":1101,"updated":"2014-03-10 08:40:16.000000000","message":"Consider the code below (it will save a client call if there are no ports)\n    if current_neutron_ports:\n        physnets_info \u003d self._nw_info_get_physical_networks(context, networks)","commit_id":"f308e9ce570cceca8913527f858acb416ed0aa07"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"2a9764f9fc433aebf8a665b543aac5ec3fa27dec","unresolved":false,"context_lines":[{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    def _nw_info_get_physical_networks(self, context, networks):"},{"line_number":1020,"context_line":"        phys_nets \u003d {}"},{"line_number":1021,"context_line":"        if self._has_provider_extension(context, refresh_cache\u003dTrue):"},{"line_number":1022,"context_line":"            net_ids \u003d [net[\u0027id\u0027] for net in networks]"},{"line_number":1023,"context_line":"            neutron \u003d neutronv2.get_client(context, admin\u003dTrue)"},{"line_number":1024,"context_line":"            search_opts \u003d {\u0027id\u0027: net_ids}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2FZOo%3D","line":1021,"updated":"2014-03-18 06:33:26.000000000","message":"I don\u0027t think we want to pass this with refresh_cache \u003d True because every time we enter   _build_network_info_model we check if this extension is loaded. This is not good because this is called within the periodic_heal task which is used to keep healing the cache.","commit_id":"50c349e9385775e89df9cac8d11199f63e230f44"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"2a9764f9fc433aebf8a665b543aac5ec3fa27dec","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"        nw_info \u003d network_model.NetworkInfo()"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"        if current_neutron_ports:"},{"line_number":1103,"context_line":"            physnets_info \u003d self._nw_info_get_physical_networks(context,"},{"line_number":1104,"context_line":"                                                                networks)"},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":"        for current_neutron_port in current_neutron_ports:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2FZNs%3D","line":1103,"updated":"2014-03-18 06:33:26.000000000","message":"Lets set this value on networks in allocate_for_instance instead so we don\u0027t have to keep calling into this each time we refresh the cache.","commit_id":"50c349e9385775e89df9cac8d11199f63e230f44"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"7fb4e5e6ac78c46cc6e2570be57381be99f33d3e","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"        nw_info \u003d network_model.NetworkInfo()"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"        if current_neutron_ports:"},{"line_number":1103,"context_line":"            physnets_info \u003d self._nw_info_get_physical_networks(context,"},{"line_number":1104,"context_line":"                                                                networks)"},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":"        for current_neutron_port in current_neutron_ports:"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAWH%2F%2FYVw%3D","line":1103,"in_reply_to":"AAAAWH%2F%2FZNs%3D","updated":"2014-03-18 08:55:38.000000000","message":"Physical network info is needed not just for allocate for instance but for deallocate/detach interface cases too. The common place for all these cases would be get_instance_nw_info. Will passing refresh_cache\u003dFalse as you suggested above will be enough?","commit_id":"50c349e9385775e89df9cac8d11199f63e230f44"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c998608b40b57ca890487801763da558278c995a","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        physnets_info \u003d self._nw_info_get_physical_networks(context, nets)"},{"line_number":134,"context_line":"        for net in nets:"},{"line_number":135,"context_line":"            physnet_info \u003d physnets_info.get(net[\u0027id\u0027])"},{"line_number":136,"context_line":"            physical_network \u003d (physnet_info[0][\u0027physical_network\u0027]"},{"line_number":137,"context_line":"                                if physnet_info else None)"},{"line_number":138,"context_line":"            net[\u0027physical_network\u0027] \u003d physical_network"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FGX4%3D","line":135,"updated":"2014-03-20 09:21:46.000000000","message":"if this is none then there will be an exception","commit_id":"03028216219b22ba25437667f78fcd2208b2b399"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e05ec01d816af38d1b89a82b2097aa7c89d79e37","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        physnets_info \u003d self._nw_info_get_physical_networks(context, nets)"},{"line_number":134,"context_line":"        for net in nets:"},{"line_number":135,"context_line":"            physnet_info \u003d physnets_info.get(net[\u0027id\u0027])"},{"line_number":136,"context_line":"            physical_network \u003d (physnet_info[0][\u0027physical_network\u0027]"},{"line_number":137,"context_line":"                                if physnet_info else None)"},{"line_number":138,"context_line":"            net[\u0027physical_network\u0027] \u003d physical_network"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAWH%2F%2FEpo%3D","line":135,"in_reply_to":"AAAAWH%2F%2FGX4%3D","updated":"2014-03-20 13:32:11.000000000","message":"in retrospect this cannot happen.","commit_id":"03028216219b22ba25437667f78fcd2208b2b399"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"bed4c92804bbbb75fa3ecb6ecec6740191300d8c","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _nw_info_get_physical_networks(self, context, networks):"},{"line_number":1034,"context_line":"        phys_nets \u003d {}"},{"line_number":1035,"context_line":"        if self._has_provider_extension(context, refresh_cache\u003dTrue):"},{"line_number":1036,"context_line":"            net_ids \u003d [net[\u0027id\u0027] for net in networks]"},{"line_number":1037,"context_line":"            neutron \u003d neutronv2.get_client(context, admin\u003dTrue)"},{"line_number":1038,"context_line":"            search_opts \u003d {\u0027id\u0027: net_ids}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F9p2Y%3D","line":1035,"updated":"2014-04-03 02:35:59.000000000","message":"Each time we call into here we end up calling to neutron to get the extensions it has loaded and to query the networks. We don\u0027t need to do this. We already have the network data in allocate_for_instance.","commit_id":"be4cc2b40b701cae1ae99e158a4a06ec09bffa43"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"a83f7640c022d340885e82b0f5980bf9a2dbf89e","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _nw_info_get_physical_networks(self, context, networks):"},{"line_number":1034,"context_line":"        phys_nets \u003d {}"},{"line_number":1035,"context_line":"        if self._has_provider_extension(context, refresh_cache\u003dTrue):"},{"line_number":1036,"context_line":"            net_ids \u003d [net[\u0027id\u0027] for net in networks]"},{"line_number":1037,"context_line":"            neutron \u003d neutronv2.get_client(context, admin\u003dTrue)"},{"line_number":1038,"context_line":"            search_opts \u003d {\u0027id\u0027: net_ids}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2FhyU%3D","line":1035,"in_reply_to":"AAAAW3%2F%2Fr2I%3D","updated":"2014-04-13 19:05:49.000000000","message":"Yes, you are right. Need to check what is the problem - anyway In patch set 16 I changed it to refresh_cache\u003dFalse.","commit_id":"be4cc2b40b701cae1ae99e158a4a06ec09bffa43"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"fa7ff46d8e23e23d063ea9ce3ecd5870e3c552ed","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _nw_info_get_physical_networks(self, context, networks):"},{"line_number":1034,"context_line":"        phys_nets \u003d {}"},{"line_number":1035,"context_line":"        if self._has_provider_extension(context, refresh_cache\u003dTrue):"},{"line_number":1036,"context_line":"            net_ids \u003d [net[\u0027id\u0027] for net in networks]"},{"line_number":1037,"context_line":"            neutron \u003d neutronv2.get_client(context, admin\u003dTrue)"},{"line_number":1038,"context_line":"            search_opts \u003d {\u0027id\u0027: net_ids}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAW3%2F%2Fr2I%3D","line":1035,"in_reply_to":"AAAAWH%2F9ot8%3D","updated":"2014-04-11 06:22:41.000000000","message":"I don\u0027t see what that would happen? It looks like the cache is refreshed on startup here: https://github.com/openstack/nova/blob/master/nova/network/neutronv2/api.py#L371 ?","commit_id":"be4cc2b40b701cae1ae99e158a4a06ec09bffa43"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"4ddd13e973cdb6d6cf34fa7005cc3aa5fda856b7","unresolved":false,"context_lines":[{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def _nw_info_get_physical_networks(self, context, networks):"},{"line_number":1034,"context_line":"        phys_nets \u003d {}"},{"line_number":1035,"context_line":"        if self._has_provider_extension(context, refresh_cache\u003dTrue):"},{"line_number":1036,"context_line":"            net_ids \u003d [net[\u0027id\u0027] for net in networks]"},{"line_number":1037,"context_line":"            neutron \u003d neutronv2.get_client(context, admin\u003dTrue)"},{"line_number":1038,"context_line":"            search_opts \u003d {\u0027id\u0027: net_ids}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAWH%2F9ot8%3D","line":1035,"in_reply_to":"AAAAWH%2F9p2Y%3D","updated":"2014-04-03 07:31:33.000000000","message":"The provider network is only accessible via the admin context so it\u0027s not possible to get the physical network without querying neutron again.\n\nRegarding refresh_cache:\nWhen running with refresh_cache\u003dFalse I had an issue - The first VM failed because provider extension was not in extensions cache. The second one and so on were able to run.\n\nWhen changing neutron_extension_sync_interval to 10 instead of the default (600 seconds) The first VM runs successfully.","commit_id":"be4cc2b40b701cae1ae99e158a4a06ec09bffa43"}],"nova/tests/network/test_neutronv2.py":[{"author":{"_account_id":6681,"name":"Brent Eagles","email":"beagles@redhat.com","username":"beagles"},"change_message_id":"7f551cad4a66052e7b6735c101bcc8279aad7034","unresolved":false,"context_lines":[{"line_number":1951,"context_line":"    def test_get_physical_network_provider_true(self):"},{"line_number":1952,"context_line":"        api \u003d neutronapi.API()"},{"line_number":1953,"context_line":"        self.mox.StubOutWithMock(api, \u0027_has_provider_extension\u0027)"},{"line_number":1954,"context_line":"        api._has_provider_extension().AndReturn(True)"},{"line_number":1955,"context_line":"        neutronv2.get_client("},{"line_number":1956,"context_line":"                mox.IgnoreArg(), admin\u003dTrue).AndReturn("},{"line_number":1957,"context_line":"                self.moxed_client)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUX%2F%2Bz7g%3D","line":1954,"updated":"2014-02-18 21:26:08.000000000","message":"The test is correct, but you\u0027ve missed the opportunity to test the implementation of _has_provider_extension, a new method, by stubbing it out and defaulting it to true.","commit_id":"9a54e984381fd9ba0a18386932a2610a628003d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"56e32e85b4053ee9b5a9bd3223e45b543d1762e5","unresolved":false,"context_lines":[{"line_number":1955,"context_line":""},{"line_number":1956,"context_line":"    def test_get_physical_network_provider_false(self):"},{"line_number":1957,"context_line":"        api \u003d neutronapi.API()"},{"line_number":1958,"context_line":"        self.mox.StubOutWithMock(api, \u0027_has_provider_extension\u0027)"},{"line_number":1959,"context_line":"        api._has_provider_extension(refresh_cache\u003dTrue).AndReturn(False)"},{"line_number":1960,"context_line":"        self.mox.ReplayAll()"},{"line_number":1961,"context_line":"        phys_nets \u003d api._nw_info_get_physical_networks(self.context,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FypY%3D","line":1958,"updated":"2014-02-24 19:12:38.000000000","message":"New tests are encouraged to use mock rather than mox (femtonit)","commit_id":"c8f60e7935d4358c08caa4bd9fe20cec0b5781c2"}]}
