)]}'
{"nova/api/openstack/placement/handlers/reshaper.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"a03a8427f9acb99873be7c33e545446b9fac8045","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        generation \u003d inventory_data[\u0027resource_provider_generation\u0027]"},{"line_number":68,"context_line":"        if generation !\u003d resource_provider.generation:"},{"line_number":69,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":70,"context_line":"                _(\u0027resource provider generation conflict for provider %(rp)s: \u0027"},{"line_number":71,"context_line":"                  \u0027actual: %(actual)s, given: %(given)s\u0027) %"},{"line_number":72,"context_line":"                {\u0027rp\u0027: rp_uuid,"},{"line_number":73,"context_line":"                 \u0027actual\u0027: resource_provider.generation,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_bdba6107","line":70,"updated":"2019-01-15 15:14:13.000000000","message":"Unless this change is strictly necessary I wouldn\u0027t change anything in here at all, if you can help it, it\u0027s making more work/overhead for the extraction. If we think the response is insufficient, save it up for later and change it in placement itself.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"00233cbb356d47af69e606581912afa9bac5674e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        generation \u003d inventory_data[\u0027resource_provider_generation\u0027]"},{"line_number":68,"context_line":"        if generation !\u003d resource_provider.generation:"},{"line_number":69,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":70,"context_line":"                _(\u0027resource provider generation conflict for provider %(rp)s: \u0027"},{"line_number":71,"context_line":"                  \u0027actual: %(actual)s, given: %(given)s\u0027) %"},{"line_number":72,"context_line":"                {\u0027rp\u0027: rp_uuid,"},{"line_number":73,"context_line":"                 \u0027actual\u0027: resource_provider.generation,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_d8f66f90","line":70,"range":{"start_line":70,"start_character":19,"end_line":70,"end_character":78},"updated":"2019-01-14 13:59:08.000000000","message":"changing i18n\u0027s messages shouldn\u0027t be done lightly. Is there a reason to change this particular message? i.e. are you trying to differentiate better between a consumer and a provider generation conflict?","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c1a59de1b57718cd75c605fc273e53332fa44b1d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        generation \u003d inventory_data[\u0027resource_provider_generation\u0027]"},{"line_number":68,"context_line":"        if generation !\u003d resource_provider.generation:"},{"line_number":69,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":70,"context_line":"                _(\u0027resource provider generation conflict for provider %(rp)s: \u0027"},{"line_number":71,"context_line":"                  \u0027actual: %(actual)s, given: %(given)s\u0027) %"},{"line_number":72,"context_line":"                {\u0027rp\u0027: rp_uuid,"},{"line_number":73,"context_line":"                 \u0027actual\u0027: resource_provider.generation,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_ef390b3f","line":70,"in_reply_to":"bfdaf3ff_bdba6107","updated":"2019-01-15 19:23:16.000000000","message":"This really does improve debuggability, so I\u0027d like to keep it. I proposed a corresponding change to placement [1] to address the extraction sync issue.\n\n[1] https://review.openstack.org/631055","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"07f48491188f73ccd7bcd03864b298af08b48bfc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        generation \u003d inventory_data[\u0027resource_provider_generation\u0027]"},{"line_number":68,"context_line":"        if generation !\u003d resource_provider.generation:"},{"line_number":69,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":70,"context_line":"                _(\u0027resource provider generation conflict for provider %(rp)s: \u0027"},{"line_number":71,"context_line":"                  \u0027actual: %(actual)s, given: %(given)s\u0027) %"},{"line_number":72,"context_line":"                {\u0027rp\u0027: rp_uuid,"},{"line_number":73,"context_line":"                 \u0027actual\u0027: resource_provider.generation,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_d42b817f","line":70,"range":{"start_line":70,"start_character":19,"end_line":70,"end_character":78},"in_reply_to":"bfdaf3ff_c8f0d7cc","updated":"2019-01-15 13:32:30.000000000","message":"No, no need to change. Was just curious. You can add a log message in a future patch if you\u0027d like, sure.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"670f23335a437f4e079c4fcc2bc9d3bb0fc59e3b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        generation \u003d inventory_data[\u0027resource_provider_generation\u0027]"},{"line_number":68,"context_line":"        if generation !\u003d resource_provider.generation:"},{"line_number":69,"context_line":"            raise webob.exc.HTTPConflict("},{"line_number":70,"context_line":"                _(\u0027resource provider generation conflict for provider %(rp)s: \u0027"},{"line_number":71,"context_line":"                  \u0027actual: %(actual)s, given: %(given)s\u0027) %"},{"line_number":72,"context_line":"                {\u0027rp\u0027: rp_uuid,"},{"line_number":73,"context_line":"                 \u0027actual\u0027: resource_provider.generation,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_c8f0d7cc","line":70,"range":{"start_line":70,"start_character":19,"end_line":70,"end_character":78},"in_reply_to":"bfdaf3ff_d8f66f90","updated":"2019-01-14 23:22:03.000000000","message":"I think this was probably for better debuggability. You can already differentiate RP vs consumer gen conflict based on the beginning of the string (the consumer ones say \"consumer\"). Want me to change it back? Maybe create a log message instead?","commit_id":"6e49978b91e53d40dca766134340233163da374a"}],"nova/conf/compute.py":[{"author":{"_account_id":2033,"name":"Belmiro Moreira","email":"moreira.belmiro.email.lists@gmail.com","username":"moreira-belmiro-email-lists"},"change_message_id":"70e6ae30e6969e839f704fc3a3aa4c94640fe59c","unresolved":false,"context_lines":[{"line_number":658,"context_line":"Interval for updating nova-compute-side cache of the compute node resource"},{"line_number":659,"context_line":"provider\u0027s inventories, aggregates, and traits."},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"This option specifies the number of seconds between attempts to update a"},{"line_number":662,"context_line":"provider\u0027s inventories, aggregates and traits in the local cache of the compute"},{"line_number":663,"context_line":"node."},{"line_number":664,"context_line":""},{"line_number":665,"context_line":"A value of zero disables cache refresh completely."},{"line_number":666,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_a0d765bd","line":663,"range":{"start_line":661,"start_character":0,"end_line":663,"end_character":5},"updated":"2018-11-22 14:20:57.000000000","message":"Adding the inventories is a huge improvement.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"045e3804f0f43232af54bcf9a94b6bdac8d5035a","unresolved":false,"context_lines":[{"line_number":1037,"context_line":"            context, rp_uuid, name\u003dname,"},{"line_number":1038,"context_line":"            parent_provider_uuid\u003dparent_provider_uuid)"},{"line_number":1039,"context_line":"        # Ensure inventories are up to date (for *all* cached RPs)"},{"line_number":1040,"context_line":"        for uuid in self._provider_tree.get_provider_uuids():"},{"line_number":1041,"context_line":"            self._refresh_and_get_inventory(context, uuid)"},{"line_number":1042,"context_line":"        # Return a *copy* of the tree."},{"line_number":1043,"context_line":"        return copy.deepcopy(self._provider_tree)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_0b475f54","side":"PARENT","line":1040,"updated":"2018-11-22 12:29:08.000000000","message":"ok nice makes sense, so no more double inventory queries from performance pov.","commit_id":"801ef1adca667ecdf243464b083282418d5987e4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7203d38d0b19f9a96d2571729b6bc980ccb8b8","unresolved":false,"context_lines":[{"line_number":1037,"context_line":"            context, rp_uuid, name\u003dname,"},{"line_number":1038,"context_line":"            parent_provider_uuid\u003dparent_provider_uuid)"},{"line_number":1039,"context_line":"        # Ensure inventories are up to date (for *all* cached RPs)"},{"line_number":1040,"context_line":"        for uuid in self._provider_tree.get_provider_uuids():"},{"line_number":1041,"context_line":"            self._refresh_and_get_inventory(context, uuid)"},{"line_number":1042,"context_line":"        # Return a *copy* of the tree."},{"line_number":1043,"context_line":"        return copy.deepcopy(self._provider_tree)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_2709f9d9","side":"PARENT","line":1040,"in_reply_to":"3f79a3b5_0b475f54","updated":"2018-11-26 23:33:10.000000000","message":"Pretty sure it means *no* inventory queries (after the initial one).","commit_id":"801ef1adca667ecdf243464b083282418d5987e4"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"045e3804f0f43232af54bcf9a94b6bdac8d5035a","unresolved":false,"context_lines":[{"line_number":780,"context_line":"        this process, CONF.compute.resource_provider_association_refresh"},{"line_number":781,"context_line":"        seconds have passed, or the force arg has been set to True."},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"        Note that we do *not* refresh inventories.  The reason is largely"},{"line_number":784,"context_line":"        historical: all code paths that get us here are doing inventory refresh"},{"line_number":785,"context_line":"        themselves."},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        :param context: The security context"},{"line_number":788,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_0b70bfa6","line":785,"range":{"start_line":783,"start_character":8,"end_line":785,"end_character":19},"updated":"2018-11-22 12:29:08.000000000","message":"nit: no longer needed.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"045e3804f0f43232af54bcf9a94b6bdac8d5035a","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                - ResourceProviderRetrievalFailed"},{"line_number":799,"context_line":"        \"\"\""},{"line_number":800,"context_line":"        if force or self._associations_stale(rp_uuid):"},{"line_number":801,"context_line":"            # Refresh inventories"},{"line_number":802,"context_line":"            msg \u003d \"Refreshing inventories for resource provider %s\""},{"line_number":803,"context_line":"            LOG.debug(msg, rp_uuid)"},{"line_number":804,"context_line":"            self._refresh_and_get_inventory(context, rp_uuid)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_4b40f733","line":801,"updated":"2018-11-22 12:29:08.000000000","message":"so we merge inventory refresh also with association refresh.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":2033,"name":"Belmiro Moreira","email":"moreira.belmiro.email.lists@gmail.com","username":"moreira-belmiro-email-lists"},"change_message_id":"70e6ae30e6969e839f704fc3a3aa4c94640fe59c","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                - ResourceProviderRetrievalFailed"},{"line_number":799,"context_line":"        \"\"\""},{"line_number":800,"context_line":"        if force or self._associations_stale(rp_uuid):"},{"line_number":801,"context_line":"            # Refresh inventories"},{"line_number":802,"context_line":"            msg \u003d \"Refreshing inventories for resource provider %s\""},{"line_number":803,"context_line":"            LOG.debug(msg, rp_uuid)"},{"line_number":804,"context_line":"            self._refresh_and_get_inventory(context, rp_uuid)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_e04c7dca","line":801,"in_reply_to":"3f79a3b5_4b40f733","updated":"2018-11-22 14:20:57.000000000","message":"+1","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":26936,"name":"Surya Seetharaman","email":"suryaseetharaman.9@gmail.com","username":"tssurya"},"change_message_id":"045e3804f0f43232af54bcf9a94b6bdac8d5035a","unresolved":false,"context_lines":[{"line_number":840,"context_line":"                        self._provider_tree.new_root("},{"line_number":841,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":842,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":843,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits"},{"line_number":844,"context_line":"                    # and aggregates (but not *his* aggregate-associated"},{"line_number":845,"context_line":"                    # providers).  No need to override force\u003dTrue for newly-"},{"line_number":846,"context_line":"                    # added providers - the missing timestamp will always"},{"line_number":847,"context_line":"                    # trigger them to refresh."},{"line_number":848,"context_line":"                    self._refresh_associations(context, rp[\u0027uuid\u0027],"},{"line_number":849,"context_line":"                                               force\u003dforce,"},{"line_number":850,"context_line":"                                               refresh_sharing\u003dFalse)"},{"line_number":851,"context_line":"            self._association_refresh_time[rp_uuid] \u003d time.time()"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _associations_stale(self, uuid):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_cb516767","line":850,"range":{"start_line":843,"start_character":19,"end_line":850,"end_character":69},"updated":"2018-11-22 12:29:08.000000000","message":"Does this mean we don\u0027t have to refresh inventories here and we would be from on ? Sorry I am not very proficient with the whole provider sharing concept. Probably not a big deal anyways in terms of performance since if the whole refreshing config thing is disabled we would not reach here.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"07d46415d74d5736bd9e84117ee7205617ffef14","unresolved":false,"context_lines":[{"line_number":840,"context_line":"                        self._provider_tree.new_root("},{"line_number":841,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":842,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":843,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits"},{"line_number":844,"context_line":"                    # and aggregates (but not *his* aggregate-associated"},{"line_number":845,"context_line":"                    # providers).  No need to override force\u003dTrue for newly-"},{"line_number":846,"context_line":"                    # added providers - the missing timestamp will always"},{"line_number":847,"context_line":"                    # trigger them to refresh."},{"line_number":848,"context_line":"                    self._refresh_associations(context, rp[\u0027uuid\u0027],"},{"line_number":849,"context_line":"                                               force\u003dforce,"},{"line_number":850,"context_line":"                                               refresh_sharing\u003dFalse)"},{"line_number":851,"context_line":"            self._association_refresh_time[rp_uuid] \u003d time.time()"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _associations_stale(self, uuid):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_c4ffcaae","line":850,"range":{"start_line":843,"start_character":19,"end_line":850,"end_character":69},"in_reply_to":"3f79a3b5_87648db5","updated":"2018-11-27 20:49:02.000000000","message":"\u003e \u003e Does this mean we don\u0027t have to refresh inventories here\n \u003e \n \u003e Yeah, we do, I should add \"and inventories\" to the comment.\n\nDone.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec7203d38d0b19f9a96d2571729b6bc980ccb8b8","unresolved":false,"context_lines":[{"line_number":840,"context_line":"                        self._provider_tree.new_root("},{"line_number":841,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":842,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":843,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits"},{"line_number":844,"context_line":"                    # and aggregates (but not *his* aggregate-associated"},{"line_number":845,"context_line":"                    # providers).  No need to override force\u003dTrue for newly-"},{"line_number":846,"context_line":"                    # added providers - the missing timestamp will always"},{"line_number":847,"context_line":"                    # trigger them to refresh."},{"line_number":848,"context_line":"                    self._refresh_associations(context, rp[\u0027uuid\u0027],"},{"line_number":849,"context_line":"                                               force\u003dforce,"},{"line_number":850,"context_line":"                                               refresh_sharing\u003dFalse)"},{"line_number":851,"context_line":"            self._association_refresh_time[rp_uuid] \u003d time.time()"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _associations_stale(self, uuid):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f79a3b5_87648db5","line":850,"range":{"start_line":843,"start_character":19,"end_line":850,"end_character":69},"in_reply_to":"3f79a3b5_cb516767","updated":"2018-11-26 23:33:10.000000000","message":"\u003e Does this mean we don\u0027t have to refresh inventories here\n\nYeah, we do, I should add \"and inventories\" to the comment.\n\n \u003e and we\n \u003e would be from on ?\n\nSorry, this isn\u0027t parsing for me.\n\n \u003e Sorry I am not very proficient with the whole\n \u003e provider sharing concept.\n\nWell, it really doesn\u0027t exist yet. The idea in caching terms is that we would have the sharing providers as roots alongside the compute node in the cache. But we *don\u0027t* want to go out and get all the *other* roots (compute node providers) that *also* share with that provider.\n\n \u003e Probably not a big deal anyways in terms\n \u003e of performance since if the whole refreshing config thing is\n \u003e disabled we would not reach here.\n\nAnd also because nobody is using sharing providers yet (because they aren\u0027t fully supported). So yeah, this code path is probably never reached outside of test.","commit_id":"5cdb825394f3015ef4b1224eb7d9f55633d217e9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f3f693622afadfd7f3ee1a73a0ab66f7147ce840","unresolved":false,"context_lines":[{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        return curr"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":776,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":778,"context_line":"        sharing providers for the specified resource provider uuid."}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_ce0cae3b","line":775,"range":{"start_line":775,"start_character":8,"end_line":775,"end_character":29},"updated":"2018-11-28 22:40:29.000000000","message":"might be worth just renaming this to _refresh_provider() since everything about the provider is now being pulled anew.","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef1173e17417989cb8d91f86670f62fa36924139","unresolved":false,"context_lines":[{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        return curr"},{"line_number":774,"context_line":""},{"line_number":775,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":776,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":777,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":778,"context_line":"        sharing providers for the specified resource provider uuid."}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_0e05c6bf","line":775,"range":{"start_line":775,"start_character":8,"end_line":775,"end_character":29},"in_reply_to":"3f79a3b5_ce0cae3b","updated":"2018-11-28 22:53:35.000000000","message":"It\u0027s refreshing both the attributes of the specified provider *and* any sharing providers \"associated\" with that provider (if refresh_sharing).\n\nAlso, nit, the fact that the conf option is still called resource_provider_association_refresh makes it easier to, um, \"associate\" it with this method (and we\u0027re not going to rename the conf option at this point).","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f3f693622afadfd7f3ee1a73a0ab66f7147ce840","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        this process, CONF.compute.resource_provider_association_refresh"},{"line_number":782,"context_line":"        seconds have passed, or the force arg has been set to True."},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        Note that we do *not* refresh inventories.  The reason is largely"},{"line_number":785,"context_line":"        historical: all code paths that get us here are doing inventory refresh"},{"line_number":786,"context_line":"        themselves."},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_330d893e","line":786,"range":{"start_line":784,"start_character":6,"end_line":786,"end_character":19},"updated":"2018-11-28 22:40:29.000000000","message":"This is no longer correct.","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef1173e17417989cb8d91f86670f62fa36924139","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        this process, CONF.compute.resource_provider_association_refresh"},{"line_number":782,"context_line":"        seconds have passed, or the force arg has been set to True."},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        Note that we do *not* refresh inventories.  The reason is largely"},{"line_number":785,"context_line":"        historical: all code paths that get us here are doing inventory refresh"},{"line_number":786,"context_line":"        themselves."},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_8e11d6fb","line":786,"range":{"start_line":784,"start_character":6,"end_line":786,"end_character":19},"in_reply_to":"3f79a3b5_330d893e","updated":"2018-11-28 22:53:35.000000000","message":"Good eye, thanks, will fix.","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e4ef6e8e4ff4630a4a382f1c84e8cc83f35661e3","unresolved":false,"context_lines":[{"line_number":781,"context_line":"        this process, CONF.compute.resource_provider_association_refresh"},{"line_number":782,"context_line":"        seconds have passed, or the force arg has been set to True."},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        Note that we do *not* refresh inventories.  The reason is largely"},{"line_number":785,"context_line":"        historical: all code paths that get us here are doing inventory refresh"},{"line_number":786,"context_line":"        themselves."},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_5bacc5a7","line":786,"range":{"start_line":784,"start_character":6,"end_line":786,"end_character":19},"in_reply_to":"3f79a3b5_8e11d6fb","updated":"2018-11-29 22:54:38.000000000","message":"Done","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f3f693622afadfd7f3ee1a73a0ab66f7147ce840","unresolved":false,"context_lines":[{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":790,"context_line":"                        aggregates and traits"},{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6efc7a0a","line":790,"range":{"start_line":790,"start_character":23,"end_line":790,"end_character":45},"updated":"2018-11-28 22:40:29.000000000","message":"traits, aggregates and inventories","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e4ef6e8e4ff4630a4a382f1c84e8cc83f35661e3","unresolved":false,"context_lines":[{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":790,"context_line":"                        aggregates and traits"},{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_7bb18100","line":790,"range":{"start_line":790,"start_character":23,"end_line":790,"end_character":45},"in_reply_to":"3f79a3b5_4ecdfe8f","updated":"2018-11-29 22:54:38.000000000","message":"Done","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef1173e17417989cb8d91f86670f62fa36924139","unresolved":false,"context_lines":[{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        :param context: The security context"},{"line_number":789,"context_line":"        :param rp_uuid: UUID of the resource provider to check for fresh"},{"line_number":790,"context_line":"                        aggregates and traits"},{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_4ecdfe8f","line":790,"range":{"start_line":790,"start_character":23,"end_line":790,"end_character":45},"in_reply_to":"3f79a3b5_6efc7a0a","updated":"2018-11-28 22:53:35.000000000","message":"ditto","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f3f693622afadfd7f3ee1a73a0ab66f7147ce840","unresolved":false,"context_lines":[{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"},{"line_number":794,"context_line":"                                including their traits and aggregates (but not"},{"line_number":795,"context_line":"                                *their* sharing providers)."},{"line_number":796,"context_line":"        :raise: On various placement API errors, one of:"},{"line_number":797,"context_line":"                - ResourceProviderAggregateRetrievalFailed"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_93fd7d0b","line":794,"range":{"start_line":794,"start_character":48,"end_line":794,"end_character":69},"updated":"2018-11-28 22:40:29.000000000","message":"traits, aggregates and inventories","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e4ef6e8e4ff4630a4a382f1c84e8cc83f35661e3","unresolved":false,"context_lines":[{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"},{"line_number":794,"context_line":"                                including their traits and aggregates (but not"},{"line_number":795,"context_line":"                                *their* sharing providers)."},{"line_number":796,"context_line":"        :raise: On various placement API errors, one of:"},{"line_number":797,"context_line":"                - ResourceProviderAggregateRetrievalFailed"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_1bc64d6c","line":794,"range":{"start_line":794,"start_character":48,"end_line":794,"end_character":69},"in_reply_to":"3f79a3b5_6ed0fa2a","updated":"2018-11-29 22:54:38.000000000","message":"Done","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef1173e17417989cb8d91f86670f62fa36924139","unresolved":false,"context_lines":[{"line_number":791,"context_line":"        :param force: If True, force the refresh"},{"line_number":792,"context_line":"        :param refresh_sharing: If True, fetch all the providers associated"},{"line_number":793,"context_line":"                                by aggregate with the specified provider,"},{"line_number":794,"context_line":"                                including their traits and aggregates (but not"},{"line_number":795,"context_line":"                                *their* sharing providers)."},{"line_number":796,"context_line":"        :raise: On various placement API errors, one of:"},{"line_number":797,"context_line":"                - ResourceProviderAggregateRetrievalFailed"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_6ed0fa2a","line":794,"range":{"start_line":794,"start_character":48,"end_line":794,"end_character":69},"in_reply_to":"3f79a3b5_93fd7d0b","updated":"2018-11-28 22:53:35.000000000","message":"ditto","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        return curr"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e0d63950","line":806,"range":{"start_line":806,"start_character":8,"end_line":806,"end_character":29},"updated":"2019-01-21 15:18:29.000000000","message":"Are we OK to keep the name of this function? I mean it now refresh everything for the rp_uuid including inventories.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8f9db975f8a2b87ca729839edfedc633c351d0a","unresolved":false,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        return curr"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_80b8762a","line":806,"range":{"start_line":806,"start_character":8,"end_line":806,"end_character":29},"in_reply_to":"9fdfeff1_59737ce8","updated":"2019-01-22 15:51:24.000000000","message":"Yeah, I would say \"association\" encompasses inventories as well as traits and aggregates.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a9af1aede5f5b05625ad339c7d85b264c7a15cae","unresolved":false,"context_lines":[{"line_number":803,"context_line":""},{"line_number":804,"context_line":"        return curr"},{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_59737ce8","line":806,"range":{"start_line":806,"start_character":8,"end_line":806,"end_character":29},"in_reply_to":"9fdfeff1_e0d63950","updated":"2019-01-21 18:20:28.000000000","message":"I think \"association\" is generic enough to keep. But I\u0027m up for a good bikeshedding competition! :)","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        Only refresh if there has been no refresh during the lifetime of"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_603d69ba","line":808,"range":{"start_line":808,"start_character":10,"end_line":808,"end_character":76},"updated":"2019-01-21 15:18:29.000000000","message":"and now inventories as well.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8f9db975f8a2b87ca729839edfedc633c351d0a","unresolved":false,"context_lines":[{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        Only refresh if there has been no refresh during the lifetime of"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a0b57a33","line":808,"range":{"start_line":808,"start_character":10,"end_line":808,"end_character":76},"in_reply_to":"9fdfeff1_603d69ba","updated":"2019-01-22 15:51:24.000000000","message":"Agreed.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd7ff94fd0b3d8d9e5a0051683505dece6fda81f","unresolved":false,"context_lines":[{"line_number":805,"context_line":""},{"line_number":806,"context_line":"    def _refresh_associations(self, context, rp_uuid, force\u003dFalse,"},{"line_number":807,"context_line":"                              refresh_sharing\u003dTrue):"},{"line_number":808,"context_line":"        \"\"\"Refresh aggregates, traits, and (optionally) aggregate-associated"},{"line_number":809,"context_line":"        sharing providers for the specified resource provider uuid."},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        Only refresh if there has been no refresh during the lifetime of"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d314ad46","line":808,"range":{"start_line":808,"start_character":10,"end_line":808,"end_character":76},"in_reply_to":"9fdfeff1_a0b57a33","updated":"2019-01-28 22:20:46.000000000","message":"Done","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":829,"context_line":"            # Refresh inventories"},{"line_number":830,"context_line":"            msg \u003d \"Refreshing inventories for resource provider %s\""},{"line_number":831,"context_line":"            LOG.debug(msg, rp_uuid)"},{"line_number":832,"context_line":"            self._refresh_and_get_inventory(context, rp_uuid)"},{"line_number":833,"context_line":"            # Refresh aggregates"},{"line_number":834,"context_line":"            agg_info \u003d self._get_provider_aggregates(context, rp_uuid)"},{"line_number":835,"context_line":"            # If @safe_connect makes the above return None, this will raise"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_40970592","line":832,"updated":"2019-01-21 15:18:29.000000000","message":"Note for the future me: Until now this refresh did not depend on the _associations_stale() check at L1072 (base version), and now it does not depend on it either as _ensure_resource_provider() calls _refresh_associations() with force\u003dTrue","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a9af1aede5f5b05625ad339c7d85b264c7a15cae","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                        self._provider_tree.new_root("},{"line_number":869,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":870,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":871,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits,"},{"line_number":872,"context_line":"                    # aggregates, and inventories (but not *his* aggregate-"},{"line_number":873,"context_line":"                    # associated providers). No need to override force\u003dTrue for"},{"line_number":874,"context_line":"                    # newly- added providers - the missing timestamp will"},{"line_number":875,"context_line":"                    # always trigger them to refresh."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_94820b4f","line":872,"range":{"start_line":871,"start_character":59,"end_line":872,"end_character":65},"updated":"2019-01-21 18:20:28.000000000","message":"Next respin, can we get rid of the male-centric wording? RPs are not men.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8f9db975f8a2b87ca729839edfedc633c351d0a","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                        self._provider_tree.new_root("},{"line_number":869,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":870,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":871,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits,"},{"line_number":872,"context_line":"                    # aggregates, and inventories (but not *his* aggregate-"},{"line_number":873,"context_line":"                    # associated providers). No need to override force\u003dTrue for"},{"line_number":874,"context_line":"                    # newly- added providers - the missing timestamp will"},{"line_number":875,"context_line":"                    # always trigger them to refresh."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_a08eda75","line":872,"range":{"start_line":871,"start_character":59,"end_line":872,"end_character":65},"in_reply_to":"9fdfeff1_94820b4f","updated":"2019-01-22 15:51:24.000000000","message":"Okay.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd7ff94fd0b3d8d9e5a0051683505dece6fda81f","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                        self._provider_tree.new_root("},{"line_number":869,"context_line":"                            rp[\u0027name\u0027], rp[\u0027uuid\u0027],"},{"line_number":870,"context_line":"                            generation\u003drp[\u0027generation\u0027])"},{"line_number":871,"context_line":"                    # Now we have to (populate or) refresh that guy\u0027s traits,"},{"line_number":872,"context_line":"                    # aggregates, and inventories (but not *his* aggregate-"},{"line_number":873,"context_line":"                    # associated providers). No need to override force\u003dTrue for"},{"line_number":874,"context_line":"                    # newly- added providers - the missing timestamp will"},{"line_number":875,"context_line":"                    # always trigger them to refresh."}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_931aa56c","line":872,"range":{"start_line":871,"start_character":59,"end_line":872,"end_character":65},"in_reply_to":"9fdfeff1_a08eda75","updated":"2019-01-28 22:20:46.000000000","message":"Done","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"}],"nova/tests/functional/test_report_client.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"309c1a14cf6f85cdec4bb2dfd765e7840b208b39","unresolved":false,"context_lines":[{"line_number":944,"context_line":"                                               \u0027STORAGE_DISK_SSD\u0027,"},{"line_number":945,"context_line":"                                               \u0027CUSTOM_FAST\u0027])"},{"line_number":946,"context_line":"            self.assertRaises("},{"line_number":947,"context_line":"                exception.ResourceProviderUpdateConflict,"},{"line_number":948,"context_line":"                self.client.update_from_provider_tree, self.context, new_tree)"},{"line_number":949,"context_line":"            # ...but the next iteration will refresh the cache with the latest"},{"line_number":950,"context_line":"            # generation and so the next attempt should succeed."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_d180319f","line":947,"range":{"start_line":947,"start_character":0,"end_line":947,"end_character":57},"updated":"2018-11-06 23:33:08.000000000","message":"this needs to be moved to the previous patch.","commit_id":"95d8a56a57358cad41c821415750c59ba9a58f4e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3a56cbf4bf93984503d1dc87eaa2cd2fcce3f24e","unresolved":false,"context_lines":[{"line_number":944,"context_line":"                                               \u0027STORAGE_DISK_SSD\u0027,"},{"line_number":945,"context_line":"                                               \u0027CUSTOM_FAST\u0027])"},{"line_number":946,"context_line":"            self.assertRaises("},{"line_number":947,"context_line":"                exception.ResourceProviderUpdateConflict,"},{"line_number":948,"context_line":"                self.client.update_from_provider_tree, self.context, new_tree)"},{"line_number":949,"context_line":"            # ...but the next iteration will refresh the cache with the latest"},{"line_number":950,"context_line":"            # generation and so the next attempt should succeed."}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_2c482e60","line":947,"range":{"start_line":947,"start_character":0,"end_line":947,"end_character":57},"in_reply_to":"3f79a3b5_d180319f","updated":"2018-11-06 23:34:43.000000000","message":"Done","commit_id":"95d8a56a57358cad41c821415750c59ba9a58f4e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"00233cbb356d47af69e606581912afa9bac5674e","unresolved":false,"context_lines":[{"line_number":1308,"context_line":"            # of this test case, so just clear the cache so"},{"line_number":1309,"context_line":"            # get_provider_tree_and_ensure_root repopulates it and we avoid the"},{"line_number":1310,"context_line":"            # conflict exception."},{"line_number":1311,"context_line":"            self.client.clear_provider_cache()"},{"line_number":1312,"context_line":""},{"line_number":1313,"context_line":"            ptree \u003d self.client.get_provider_tree_and_ensure_root("},{"line_number":1314,"context_line":"                self.context, self.compute_uuid)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_181397b7","line":1311,"updated":"2019-01-14 13:59:08.000000000","message":"✓","commit_id":"6e49978b91e53d40dca766134340233163da374a"}],"nova/tests/unit/scheduler/client/test_report.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f3f693622afadfd7f3ee1a73a0ab66f7147ce840","unresolved":false,"context_lines":[{"line_number":2984,"context_line":"            self.client._refresh_associations(self.context, uuid)"},{"line_number":2985,"context_line":"            self.assert_things_not_called(timer_entry\u003duuid)"},{"line_number":2986,"context_line":""},{"line_number":2987,"context_line":"            self.reset_things()"},{"line_number":2988,"context_line":""},{"line_number":2989,"context_line":"            # Forever passes"},{"line_number":2990,"context_line":"            mock_future.return_value \u003d float(\u0027inf\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_0e9b86c6","line":2987,"updated":"2018-11-28 22:40:29.000000000","message":"hmm, previous unit tests were incorrectly failing to reset. nice catch here and below on line 2994.","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ef1173e17417989cb8d91f86670f62fa36924139","unresolved":false,"context_lines":[{"line_number":2984,"context_line":"            self.client._refresh_associations(self.context, uuid)"},{"line_number":2985,"context_line":"            self.assert_things_not_called(timer_entry\u003duuid)"},{"line_number":2986,"context_line":""},{"line_number":2987,"context_line":"            self.reset_things()"},{"line_number":2988,"context_line":""},{"line_number":2989,"context_line":"            # Forever passes"},{"line_number":2990,"context_line":"            mock_future.return_value \u003d float(\u0027inf\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f79a3b5_ce1b4e1a","line":2987,"in_reply_to":"3f79a3b5_0e9b86c6","updated":"2018-11-28 22:53:35.000000000","message":"Actually, neither should be necessary, since the things weren\u0027t called (which is why it didn\u0027t matter before). I bet I put these here by accident. But since I\u0027ve factored the methods out, and you have to look at them to know they don\u0027t have some other side effect, it\u0027s probably good form to leave these.","commit_id":"7b6e01396c102bf37e0e2c08c99cd7319dbd02dc"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"00233cbb356d47af69e606581912afa9bac5674e","unresolved":false,"context_lines":[{"line_number":2859,"context_line":""},{"line_number":2860,"context_line":"        self.mock_get_sharing \u003d self.useFixture(fixtures.MockPatch("},{"line_number":2861,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2862,"context_line":"            \u0027_get_sharing_providers\u0027)).mock"},{"line_number":2863,"context_line":""},{"line_number":2864,"context_line":"    def assert_things_were_called(self, uuid, sharing\u003dTrue):"},{"line_number":2865,"context_line":"        self.mock_get_inv.assert_called_once_with(self.context, uuid)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bfdaf3ff_d8242f10","line":2862,"updated":"2019-01-14 13:59:08.000000000","message":"nice cleanup, thank you.","commit_id":"6e49978b91e53d40dca766134340233163da374a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":2861,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2862,"context_line":"            \u0027_get_sharing_providers\u0027)).mock"},{"line_number":2863,"context_line":""},{"line_number":2864,"context_line":"    def assert_things_were_called(self, uuid, sharing\u003dTrue):"},{"line_number":2865,"context_line":"        self.mock_get_inv.assert_called_once_with(self.context, uuid)"},{"line_number":2866,"context_line":"        self.mock_get_aggs.assert_called_once_with(self.context, uuid)"},{"line_number":2867,"context_line":"        self.mock_get_traits.assert_called_once_with(self.context, uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_e003990c","line":2864,"range":{"start_line":2864,"start_character":8,"end_line":2864,"end_character":33},"updated":"2019-01-21 15:18:29.000000000","message":"I don\u0027t know if \u0027getters\u0027 would be better in the name or not than \u0027things\u0027. But I feel that \u0027things\u0027 adds nothing to the name. \n\nassert_getters_were_called()","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f8f9db975f8a2b87ca729839edfedc633c351d0a","unresolved":false,"context_lines":[{"line_number":2861,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2862,"context_line":"            \u0027_get_sharing_providers\u0027)).mock"},{"line_number":2863,"context_line":""},{"line_number":2864,"context_line":"    def assert_things_were_called(self, uuid, sharing\u003dTrue):"},{"line_number":2865,"context_line":"        self.mock_get_inv.assert_called_once_with(self.context, uuid)"},{"line_number":2866,"context_line":"        self.mock_get_aggs.assert_called_once_with(self.context, uuid)"},{"line_number":2867,"context_line":"        self.mock_get_traits.assert_called_once_with(self.context, uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_60eeb223","line":2864,"range":{"start_line":2864,"start_character":8,"end_line":2864,"end_character":33},"in_reply_to":"9fdfeff1_34979f93","updated":"2019-01-22 15:51:24.000000000","message":"Okay","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd7ff94fd0b3d8d9e5a0051683505dece6fda81f","unresolved":false,"context_lines":[{"line_number":2861,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2862,"context_line":"            \u0027_get_sharing_providers\u0027)).mock"},{"line_number":2863,"context_line":""},{"line_number":2864,"context_line":"    def assert_things_were_called(self, uuid, sharing\u003dTrue):"},{"line_number":2865,"context_line":"        self.mock_get_inv.assert_called_once_with(self.context, uuid)"},{"line_number":2866,"context_line":"        self.mock_get_aggs.assert_called_once_with(self.context, uuid)"},{"line_number":2867,"context_line":"        self.mock_get_traits.assert_called_once_with(self.context, uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_732f018e","line":2864,"range":{"start_line":2864,"start_character":8,"end_line":2864,"end_character":33},"in_reply_to":"9fdfeff1_60eeb223","updated":"2019-01-28 22:20:46.000000000","message":"Done","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"a9af1aede5f5b05625ad339c7d85b264c7a15cae","unresolved":false,"context_lines":[{"line_number":2861,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2862,"context_line":"            \u0027_get_sharing_providers\u0027)).mock"},{"line_number":2863,"context_line":""},{"line_number":2864,"context_line":"    def assert_things_were_called(self, uuid, sharing\u003dTrue):"},{"line_number":2865,"context_line":"        self.mock_get_inv.assert_called_once_with(self.context, uuid)"},{"line_number":2866,"context_line":"        self.mock_get_aggs.assert_called_once_with(self.context, uuid)"},{"line_number":2867,"context_line":"        self.mock_get_traits.assert_called_once_with(self.context, uuid)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_34979f93","line":2864,"range":{"start_line":2864,"start_character":8,"end_line":2864,"end_character":33},"in_reply_to":"9fdfeff1_e003990c","updated":"2019-01-21 18:20:28.000000000","message":"Yeah, \"things\" doesn\u0027t make good sense here or below.","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":2881,"context_line":"            self.client._provider_tree.has_traits(uuid, [\u0027CUSTOM_SILVER\u0027]))"},{"line_number":2882,"context_line":"        self.assertEqual(43, self.client._provider_tree.data(uuid).generation)"},{"line_number":2883,"context_line":""},{"line_number":2884,"context_line":"    def assert_things_not_called(self, timer_entry\u003dNone):"},{"line_number":2885,"context_line":"        self.mock_get_inv.assert_not_called()"},{"line_number":2886,"context_line":"        self.mock_get_aggs.assert_not_called()"},{"line_number":2887,"context_line":"        self.mock_get_traits.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_4012a55a","line":2884,"range":{"start_line":2884,"start_character":8,"end_line":2884,"end_character":32},"updated":"2019-01-21 15:18:29.000000000","message":"assert_getters_not_called","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd7ff94fd0b3d8d9e5a0051683505dece6fda81f","unresolved":false,"context_lines":[{"line_number":2881,"context_line":"            self.client._provider_tree.has_traits(uuid, [\u0027CUSTOM_SILVER\u0027]))"},{"line_number":2882,"context_line":"        self.assertEqual(43, self.client._provider_tree.data(uuid).generation)"},{"line_number":2883,"context_line":""},{"line_number":2884,"context_line":"    def assert_things_not_called(self, timer_entry\u003dNone):"},{"line_number":2885,"context_line":"        self.mock_get_inv.assert_not_called()"},{"line_number":2886,"context_line":"        self.mock_get_aggs.assert_not_called()"},{"line_number":2887,"context_line":"        self.mock_get_traits.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_3325f9ab","line":2884,"range":{"start_line":2884,"start_character":8,"end_line":2884,"end_character":32},"in_reply_to":"9fdfeff1_4012a55a","updated":"2019-01-28 22:20:46.000000000","message":"Done","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3529afb73785da3838b2514eab6c8cdbffb72e99","unresolved":false,"context_lines":[{"line_number":2891,"context_line":"        else:"},{"line_number":2892,"context_line":"            self.assertIn(timer_entry, self.client._association_refresh_time)"},{"line_number":2893,"context_line":""},{"line_number":2894,"context_line":"    def reset_things(self):"},{"line_number":2895,"context_line":"        self.mock_get_inv.reset_mock()"},{"line_number":2896,"context_line":"        self.mock_get_aggs.reset_mock()"},{"line_number":2897,"context_line":"        self.mock_get_traits.reset_mock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_001c9d68","line":2894,"range":{"start_line":2894,"start_character":8,"end_line":2894,"end_character":20},"updated":"2019-01-21 15:18:29.000000000","message":"reset_getter_mocks","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bd7ff94fd0b3d8d9e5a0051683505dece6fda81f","unresolved":false,"context_lines":[{"line_number":2891,"context_line":"        else:"},{"line_number":2892,"context_line":"            self.assertIn(timer_entry, self.client._association_refresh_time)"},{"line_number":2893,"context_line":""},{"line_number":2894,"context_line":"    def reset_things(self):"},{"line_number":2895,"context_line":"        self.mock_get_inv.reset_mock()"},{"line_number":2896,"context_line":"        self.mock_get_aggs.reset_mock()"},{"line_number":2897,"context_line":"        self.mock_get_traits.reset_mock()"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fdfeff1_d33d8dc4","line":2894,"range":{"start_line":2894,"start_character":8,"end_line":2894,"end_character":20},"in_reply_to":"9fdfeff1_001c9d68","updated":"2019-01-28 22:20:46.000000000","message":"Done","commit_id":"2f77e7ad90300458f4cdaefabb8e62aadec6c5fd"}]}
