)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"b3fb5bdb48e3ba8bc34e13673fe3869187ef3047","unresolved":false,"context_lines":[{"line_number":795,"context_line":"# global caching is enabled. (boolean value)"},{"line_number":796,"context_line":"#caching\u003dtrue"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"# TTL (in seconds) to cache idenity data. This has no"},{"line_number":799,"context_line":"# effect unless global caching is enabled. (integer value)"},{"line_number":800,"context_line":"#cache_time\u003d\u003cNone\u003e"},{"line_number":801,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":2,"id":"baada198_0229959b","line":798,"updated":"2014-08-03 06:50:09.000000000","message":"Identity (typo)","commit_id":"78d13a2b8110cf90f76d807f9584b94f4b0a5a7d"}],"keystone/common/config.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"44690d9d7e9899e38431c58dec2cdd32e57c4c26","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":170,"context_line":"                    help\u003d\u0027Toggle for identity caching. This has no \u0027"},{"line_number":171,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":172,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027,"},{"line_number":173,"context_line":"                   help\u003d\u0027Time to cache identity data (in seconds). This has \u0027"},{"line_number":174,"context_line":"                        \u0027no effect unless global and identity caching are \u0027"},{"line_number":175,"context_line":"                        \u0027enabled.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_5b541e55","line":172,"updated":"2014-08-12 15:41:18.000000000","message":"I think this actually needs to have a very short default. As written this would cache essentially forever. This is dangerous because switching from None to another value is nearly impossible unless you flush the entire cache.","commit_id":"9052f19bd1d1161644852437ca96da6cfd5d07d6"}],"keystone/identity/core.py":[{"author":{"_account_id":11717,"name":"Ryan Oshima","email":"ryan.oshima@hp.com","username":"RyanOshima"},"change_message_id":"2a910c0c730669c9c7e06dc3e117a6b7876589c8","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        domain_id, driver, entity_id \u003d ("},{"line_number":606,"context_line":"            self._get_domain_driver_and_entity_id(user_id))"},{"line_number":607,"context_line":"        user \u003d self._clear_domain_id_if_domain_unaware(driver, user)"},{"line_number":608,"context_line":"        # get user details to invalidate the cache."},{"line_number":609,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":610,"context_line":"        ref \u003d driver.update_user(entity_id, user)"},{"line_number":611,"context_line":"        if user.get(\u0027enabled\u0027) is False or user.get(\u0027password\u0027) is not None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_008663ba","line":608,"updated":"2014-07-30 16:40:25.000000000","message":"\"get\"-\u003e\"Get\"","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"405ad9207eae81fb45925f2cc7a8e18dfce12fa8","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            ref, domain_id, driver, mapping.EntityType.USER)"},{"line_number":617,"context_line":"        self.get_user.invalidate(self, user_old[\u0027id\u0027])"},{"line_number":618,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"},{"line_number":619,"context_line":"                                         user_old[\u0027domain_id\u0027])"},{"line_number":620,"context_line":"        return ret"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    @notifications.deleted(_USER)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9a854c0c","line":619,"updated":"2014-07-31 19:42:48.000000000","message":"These invalidates need to come right after the .update call on line 610 otherwise there is potentially a gap where revocation occurs and a token is still issued under the old data (or similar).","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":11717,"name":"Ryan Oshima","email":"ryan.oshima@hp.com","username":"RyanOshima"},"change_message_id":"2a910c0c730669c9c7e06dc3e117a6b7876589c8","unresolved":false,"context_lines":[{"line_number":625,"context_line":"    def delete_user(self, user_id):"},{"line_number":626,"context_line":"        domain_id, driver, entity_id \u003d ("},{"line_number":627,"context_line":"            self._get_domain_driver_and_entity_id(user_id))"},{"line_number":628,"context_line":"        # get user details to invalidate the cache."},{"line_number":629,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":630,"context_line":"        driver.delete_user(entity_id)"},{"line_number":631,"context_line":"        self.credential_api.delete_credentials_for_user(user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_40905bed","line":628,"updated":"2014-07-30 16:40:25.000000000","message":"Same as above","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"405ad9207eae81fb45925f2cc7a8e18dfce12fa8","unresolved":false,"context_lines":[{"line_number":633,"context_line":"        self.id_mapping_api.delete_id_mapping(user_id)"},{"line_number":634,"context_line":"        self.get_user.invalidate(self, user_id)"},{"line_number":635,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"},{"line_number":636,"context_line":"                                         user_old[\u0027domain_id\u0027])"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    @notifications.created(_GROUP, result_id_arg_attr\u003d\u0027id\u0027)"},{"line_number":639,"context_line":"    @domains_configured"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_7a6eb865","line":636,"updated":"2014-07-31 19:42:48.000000000","message":"Same as above, invalidates before deleting the credentials, tokens, etc","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"405ad9207eae81fb45925f2cc7a8e18dfce12fa8","unresolved":false,"context_lines":[{"line_number":679,"context_line":"        ref \u003d driver.update_group(entity_id, group)"},{"line_number":680,"context_line":"        ret \u003d self._set_domain_id_and_mapping("},{"line_number":681,"context_line":"            ref, domain_id, driver, mapping.EntityType.GROUP)"},{"line_number":682,"context_line":"        self.get_group.invalidate(self, group_id)"},{"line_number":683,"context_line":"        return ret"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def revoke_tokens_for_group(self, group_id):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bab690d9","line":682,"updated":"2014-07-31 19:42:48.000000000","message":"Same as above. move to below the update.","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"405ad9207eae81fb45925f2cc7a8e18dfce12fa8","unresolved":false,"context_lines":[{"line_number":706,"context_line":"        self.revoke_tokens_for_group(group_id)"},{"line_number":707,"context_line":"        driver.delete_group(entity_id)"},{"line_number":708,"context_line":"        self.id_mapping_api.delete_id_mapping(group_id)"},{"line_number":709,"context_line":"        self.get_group.invalidate(self, group_id)"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"    @domains_configured"},{"line_number":712,"context_line":"    @exception_translated(\u0027group\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9adaac1b","line":709,"updated":"2014-07-31 19:42:48.000000000","message":"Same as above (this is mostly for consistency not because it has a real code-requirement).","commit_id":"8537c79d5452ee1931df1ec612cb22c4b2561127"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027identity\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def get_expiration_time():"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_b0417c3b","line":43,"updated":"2014-08-19 13:55:17.000000000","message":"the \u0027identity\u0027 constant should be given a name so we know what it\u0027s for -- section\u003d\u0027identity\u0027","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027identity\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def get_expiration_time():"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_65d9c482","line":43,"in_reply_to":"1abeadc6_b0417c3b","updated":"2014-08-21 10:58:52.000000000","message":"I think we don\u0027t need to give a name here. It is pretty obvious.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            self._get_domain_driver_and_entity_id(user_id))"},{"line_number":632,"context_line":"        user \u003d self._clear_domain_id_if_domain_unaware(driver, user)"},{"line_number":633,"context_line":"        # Get user details to invalidate the cache."},{"line_number":634,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":635,"context_line":"        ref \u003d driver.update_user(entity_id, user)"},{"line_number":636,"context_line":"        self.get_user.invalidate(self, user_old[\u0027id\u0027])"},{"line_number":637,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_90a9e0e1","line":634,"updated":"2014-08-19 13:55:17.000000000","message":"this should only happen if caching is enabled, otherwise it\u0027s a waste","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            self._get_domain_driver_and_entity_id(user_id))"},{"line_number":632,"context_line":"        user \u003d self._clear_domain_id_if_domain_unaware(driver, user)"},{"line_number":633,"context_line":"        # Get user details to invalidate the cache."},{"line_number":634,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":635,"context_line":"        ref \u003d driver.update_user(entity_id, user)"},{"line_number":636,"context_line":"        self.get_user.invalidate(self, user_old[\u0027id\u0027])"},{"line_number":637,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_1c4915b7","line":634,"in_reply_to":"1abeadc6_90a9e0e1","updated":"2014-08-21 10:58:52.000000000","message":"A way to prevent this is to use SHOULD_CACHE(\u0027identity\u0027) and execute it and the next two invalidation calls only if caching is enabled.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":654,"context_line":"        driver.delete_user(entity_id)"},{"line_number":655,"context_line":"        self.get_user.invalidate(self, user_id)"},{"line_number":656,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"},{"line_number":657,"context_line":"                                         user_old[\u0027domain_id\u0027])"},{"line_number":658,"context_line":"        self.credential_api.delete_credentials_for_user(user_id)"},{"line_number":659,"context_line":"        self.token_api.delete_tokens_for_user(user_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_90800048","line":656,"updated":"2014-08-19 13:55:17.000000000","message":"lines 655-656 are copied from 636-637. Create a function and share it instead... self._invalidate_user(user_id, user_old)","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":653,"context_line":"        user_old \u003d self.get_user(user_id)"},{"line_number":654,"context_line":"        driver.delete_user(entity_id)"},{"line_number":655,"context_line":"        self.get_user.invalidate(self, user_id)"},{"line_number":656,"context_line":"        self.get_user_by_name.invalidate(self, user_old[\u0027name\u0027],"},{"line_number":657,"context_line":"                                         user_old[\u0027domain_id\u0027])"},{"line_number":658,"context_line":"        self.credential_api.delete_credentials_for_user(user_id)"},{"line_number":659,"context_line":"        self.token_api.delete_tokens_for_user(user_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_656e2498","line":656,"in_reply_to":"1abeadc6_90800048","updated":"2014-08-21 10:58:52.000000000","message":"It is required only in two places. It would add an overhead of one function call for two lines. So I didn\u0027t create a separate function.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"}],"keystone/tests/config_files/backend_ldap_pool.conf":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# value)"},{"line_number":41,"context_line":"auth_pool_connection_lifetime\u003d60"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[identity]"},{"line_number":44,"context_line":"caching\u003dfalse"}],"source_content_type":"text/plain","patch_set":7,"id":"1abeadc6_905c80ef","line":43,"updated":"2014-08-19 13:55:17.000000000","message":"add a comment why this is here.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0b6fc8aeebca79f70bb23287fa2c6b90bb38f403","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# value)"},{"line_number":41,"context_line":"auth_pool_connection_lifetime\u003d60"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[identity]"},{"line_number":44,"context_line":"caching\u003dfalse"}],"source_content_type":"text/plain","patch_set":7,"id":"1abeadc6_36d90d84","line":43,"in_reply_to":"1abeadc6_70cdcdb6","updated":"2014-08-25 23:06:37.000000000","message":"Does this mean caching can\u0027t be used with LDAP POOL?","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# value)"},{"line_number":41,"context_line":"auth_pool_connection_lifetime\u003d60"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"[identity]"},{"line_number":44,"context_line":"caching\u003dfalse"}],"source_content_type":"text/plain","patch_set":7,"id":"1abeadc6_70cdcdb6","line":43,"in_reply_to":"1abeadc6_905c80ef","updated":"2014-08-21 10:58:52.000000000","message":"There is a test called test_utf8_encoded_is_used_in_pool()  in test_backend_ldap_pool.py which was failing if cache was enabled. The person who wrote me told to disable cache to get it pass. I didn\u0027t understand the test. \nThis is not a good enough reason but I have no idea why the test was failing.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5370d98212cd6da18a392ec612cbdd7339d5168b","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        domain_id, driver, entity_id \u003d ("},{"line_number":241,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(ref[\u0027id\u0027]))"},{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_4c039875","line":243,"updated":"2014-08-04 20:01:51.000000000","message":"Why is delete_credentials_for_user necessary here?","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        domain_id, driver, entity_id \u003d ("},{"line_number":241,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(ref[\u0027id\u0027]))"},{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e78297fe","line":243,"in_reply_to":"baada198_4c039875","updated":"2014-08-05 20:32:05.000000000","message":"delete_credentials should not be called in this case.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"2ca4e200d63a06fb2f7eaf620cd51ec75f490b98","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(ref[\u0027id\u0027]))"},{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_484ff669","line":244,"updated":"2014-08-05 04:57:39.000000000","message":"I think we could do away with both delete_credentials_for_user and delete_tokens_for_user. But for consistency purpose (the way it is done in identity/core.py), I added these two lines.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5370d98212cd6da18a392ec612cbdd7339d5168b","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(ref[\u0027id\u0027]))"},{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_8ce210d2","line":244,"updated":"2014-08-04 20:01:51.000000000","message":"Why is delete_tokens_for_user necessary here?","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(ref[\u0027id\u0027]))"},{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e799b76e","line":244,"in_reply_to":"baada198_484ff669","updated":"2014-08-05 20:32:05.000000000","message":"This should not be needed. You aren\u0027t testing the token or credential parts, don\u0027t do the extra work in this case.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        driver.delete_user(entity_id)"},{"line_number":243,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"},{"line_number":248,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api, ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_279baf65","line":245,"updated":"2014-08-05 20:32:05.000000000","message":"Same as above comment.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5370d98212cd6da18a392ec612cbdd7339d5168b","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"},{"line_number":248,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api, ref[\u0027id\u0027])"},{"line_number":249,"context_line":"        self.assertRaises(exception.UserNotFound,"},{"line_number":250,"context_line":"                          self.identity_api.get_user, ref[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_acfc3472","line":247,"updated":"2014-08-04 20:01:51.000000000","message":"nice test!","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5370d98212cd6da18a392ec612cbdd7339d5168b","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"},{"line_number":248,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api, ref[\u0027id\u0027])"},{"line_number":249,"context_line":"        self.assertRaises(exception.UserNotFound,"},{"line_number":250,"context_line":"                          self.identity_api.get_user, ref[\u0027id\u0027])"},{"line_number":251,"context_line":"        user \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ac33545f","line":248,"updated":"2014-08-04 20:01:51.000000000","message":"Why not just self.identity_api.delete_user()? That should invalid the cache right?","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"},{"line_number":248,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api, ref[\u0027id\u0027])"},{"line_number":249,"context_line":"        self.assertRaises(exception.UserNotFound,"},{"line_number":250,"context_line":"                          self.identity_api.get_user, ref[\u0027id\u0027])"},{"line_number":251,"context_line":"        user \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_07ab0b20","line":248,"in_reply_to":"baada198_08589e23","updated":"2014-08-05 20:32:05.000000000","message":"the invalidation is correct in this case.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"2ca4e200d63a06fb2f7eaf620cd51ec75f490b98","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user(ref[\u0027id\u0027]))"},{"line_number":248,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api, ref[\u0027id\u0027])"},{"line_number":249,"context_line":"        self.assertRaises(exception.UserNotFound,"},{"line_number":250,"context_line":"                          self.identity_api.get_user, ref[\u0027id\u0027])"},{"line_number":251,"context_line":"        user \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_08589e23","line":248,"in_reply_to":"baada198_ac33545f","updated":"2014-08-05 04:57:39.000000000","message":"It makes the fact cache is being invalidated, explicit to someone who is reading code. IMO it\u0027s better than deleting the user and invalidating the cache.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        driver.delete_user(entity_id)"},{"line_number":295,"context_line":"        self.identity_api.credential_api.delete_credentials_for_user(ref[\u0027id\u0027])"},{"line_number":296,"context_line":"        self.identity_api.token_api.delete_tokens_for_user(ref[\u0027id\u0027])"},{"line_number":297,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(ref[\u0027id\u0027])"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        self.assertDictEqual(ref, self.identity_api.get_user_by_name("},{"line_number":300,"context_line":"            user[\u0027name\u0027], DEFAULT_DOMAIN_ID))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_671847ce","line":297,"updated":"2014-08-05 20:32:05.000000000","message":"Same comments as above (pretty much across the board","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":2480,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(group[\u0027id\u0027]))"},{"line_number":2481,"context_line":"        self.identity_api.revoke_tokens_for_group(group[\u0027id\u0027])"},{"line_number":2482,"context_line":"        driver.delete_group(entity_id)"},{"line_number":2483,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(group[\u0027id\u0027])"},{"line_number":2484,"context_line":""},{"line_number":2485,"context_line":"        self.assertEqual(group_ref, self.identity_api.get_group(group[\u0027id\u0027]))"},{"line_number":2486,"context_line":"        self.identity_api.get_group.invalidate(self.identity_api, group[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_875e3b50","line":2483,"updated":"2014-08-05 20:32:05.000000000","message":"Same comment as above, this shouldn\u0027t be needed.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"},{"line_number":230,"context_line":"    def test_cache_layer_get_user(self):"},{"line_number":231,"context_line":"        user \u003d {"},{"line_number":232,"context_line":"            \u0027name\u0027: uuid.uuid4().hex.lower(),"},{"line_number":233,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_302d6c47","line":232,"updated":"2014-08-19 13:55:17.000000000","message":"are user names limited to lowercase?","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"},{"line_number":230,"context_line":"    def test_cache_layer_get_user(self):"},{"line_number":231,"context_line":"        user \u003d {"},{"line_number":232,"context_line":"            \u0027name\u0027: uuid.uuid4().hex.lower(),"},{"line_number":233,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_1c2af58f","line":232,"in_reply_to":"1abeadc6_302d6c47","updated":"2014-08-21 10:58:52.000000000","message":"I will remove lower(). It could confuse someone reading the test.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":286,"context_line":"        }"},{"line_number":287,"context_line":"        self.identity_api.create_user(user)"},{"line_number":288,"context_line":"        ref \u003d self.identity_api.get_user_by_name(user[\u0027name\u0027],"},{"line_number":289,"context_line":"                                                 user[\u0027domain_id\u0027])"},{"line_number":290,"context_line":"        # delete bypassing the identity api."},{"line_number":291,"context_line":"        domain_id, driver, entity_id \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_b0d17cfd","line":288,"updated":"2014-08-19 13:55:17.000000000","message":"in the test_cache_layer_get_user version of this test there\u0027s some more comments to make the test understandable... those comments should be in this version, too.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"7f84b079bf4a1716e40bd7420cabab7b23dc4713","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":286,"context_line":"        }"},{"line_number":287,"context_line":"        self.identity_api.create_user(user)"},{"line_number":288,"context_line":"        ref \u003d self.identity_api.get_user_by_name(user[\u0027name\u0027],"},{"line_number":289,"context_line":"                                                 user[\u0027domain_id\u0027])"},{"line_number":290,"context_line":"        # delete bypassing the identity api."},{"line_number":291,"context_line":"        domain_id, driver, entity_id \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_bc7821c5","line":288,"in_reply_to":"1abeadc6_b0d17cfd","updated":"2014-08-21 10:58:52.000000000","message":"I will add those comments here. :)","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"65ae4eece464e201580ae0f2a7ef644ad8b8b1f1","unresolved":false,"context_lines":[{"line_number":629,"context_line":"            self.identity_api._get_domain_driver_and_entity_id(group[\u0027id\u0027]))"},{"line_number":630,"context_line":"        self.identity_api.revoke_tokens_for_group(group[\u0027id\u0027])"},{"line_number":631,"context_line":"        driver.delete_group(entity_id)"},{"line_number":632,"context_line":"        self.identity_api.id_mapping_api.delete_id_mapping(group[\u0027id\u0027])"},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        self.assertEqual(group_ref,"},{"line_number":635,"context_line":"                         self.identity_api.get_group(group[\u0027id\u0027]))"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_e76d3705","line":632,"updated":"2014-08-05 20:32:05.000000000","message":"Same comments as before.","commit_id":"b4aeea38f19293af25165f84afa1baa50b9f860b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        conf \u003d self.get_config(user_ref[\u0027domain_id\u0027])"},{"line_number":146,"context_line":"        conf.ldap.user_filter \u003d \u0027(CN\u003dDOES_NOT_MATCH)\u0027"},{"line_number":147,"context_line":"        self.reload_backends(user_ref[\u0027domain_id\u0027])"},{"line_number":148,"context_line":"        self.identity_api.get_user.invalidate(self.identity_api,"},{"line_number":149,"context_line":"                                              self.user_foo[\u0027id\u0027])"},{"line_number":150,"context_line":"        self.assertRaises(exception.UserNotFound,"},{"line_number":151,"context_line":"                          self.identity_api.get_user,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_3061ec39","line":148,"updated":"2014-08-19 13:55:17.000000000","message":"add a comment why this is necessary.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7826ef8e76e4dba9f823409244a755e0f9ce362a","unresolved":false,"context_lines":[{"line_number":618,"context_line":"                          group[\u0027id\u0027])"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"},{"line_number":621,"context_line":"    def test_cache_layer_group_crud(self):"},{"line_number":622,"context_line":"        group \u003d {"},{"line_number":623,"context_line":"            \u0027domain_id\u0027: CONF.identity.default_domain_id,"},{"line_number":624,"context_line":"            \u0027name\u0027: uuid.uuid4().hex}"}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_908720d7","line":621,"updated":"2014-08-19 13:55:17.000000000","message":"Add a comment why this is being overridden.","commit_id":"c427181296d0b471d11c9266f772cbe39bce3e3b"}],"keystone/tests/test_backend_ldap_pool.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0c13ce19b91819f935fc1f44c9927681cb581570","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        super(LdapIdentitySqlAssignment, self).config_overrides()"},{"line_number":238,"context_line":"        self.config_fixture.config("},{"line_number":239,"context_line":"            group\u003d\u0027identity\u0027,"},{"line_number":240,"context_line":"            caching\u003dTrue)"},{"line_number":241,"context_line":"        super(LdapIdentitySqlAssignment, self).test_cache_layer_get_user()"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_e293b04b","line":240,"updated":"2014-08-11 17:46:22.000000000","message":"Interesting. We have the @tests.skip_if_cache_disabled decorator there. So does that mean this test will be skipping as caching for identity was disabled to begin with?","commit_id":"32cc816a0dbc9200b510b304dc0003ad9153f762"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"462c08765a7900de2e8e08862c11a3d8be56e5ca","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"},{"line_number":230,"context_line":"    def test_cache_layer_get_user(self):"},{"line_number":231,"context_line":"        user \u003d {"},{"line_number":232,"context_line":"            \u0027name\u0027: uuid.uuid4().hex.lower(),"},{"line_number":233,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_445e9846","line":232,"updated":"2015-03-02 15:32:32.000000000","message":"the \"lower()\" is unnecessary","commit_id":"a60aaac6fef3b87967e35d41abe412fc3342fe45"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"b8ccdf4b96f94d7f2982899d83637e51f42beb53","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    @tests.skip_if_cache_disabled(\u0027identity\u0027)"},{"line_number":230,"context_line":"    def test_cache_layer_get_user(self):"},{"line_number":231,"context_line":"        user \u003d {"},{"line_number":232,"context_line":"            \u0027name\u0027: uuid.uuid4().hex.lower(),"},{"line_number":233,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID"},{"line_number":234,"context_line":"        }"},{"line_number":235,"context_line":"        self.identity_api.create_user(user)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_27860614","line":232,"in_reply_to":"ba7be1f8_445e9846","updated":"2015-03-02 15:43:43.000000000","message":"noted. Thanks.","commit_id":"a60aaac6fef3b87967e35d41abe412fc3342fe45"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"f290d668f1244d86b1de7c0f836f10eb64d72aca","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"        \"\"\"Call ``DELETE`` on the user and check the role assignment.\"\"\""},{"line_number":1162,"context_line":"        member_url, user \u003d self._create_new_user_and_assign_role_on_project()"},{"line_number":1163,"context_line":"        # Delete the user from identity backend"},{"line_number":1164,"context_line":"        self.identity_api.delete_user(user[\u0027id\u0027])"},{"line_number":1165,"context_line":"        # We should get a 404 when looking for the user in the identity"},{"line_number":1166,"context_line":"        # backend because we\u0027re not performing a delete operation on the role."},{"line_number":1167,"context_line":"        self.head(member_url, expected_status\u003d404)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_84e7b03f","line":1164,"updated":"2015-03-02 15:29:53.000000000","message":"is this change related?","commit_id":"a60aaac6fef3b87967e35d41abe412fc3342fe45"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"b8ccdf4b96f94d7f2982899d83637e51f42beb53","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"        \"\"\"Call ``DELETE`` on the user and check the role assignment.\"\"\""},{"line_number":1162,"context_line":"        member_url, user \u003d self._create_new_user_and_assign_role_on_project()"},{"line_number":1163,"context_line":"        # Delete the user from identity backend"},{"line_number":1164,"context_line":"        self.identity_api.delete_user(user[\u0027id\u0027])"},{"line_number":1165,"context_line":"        # We should get a 404 when looking for the user in the identity"},{"line_number":1166,"context_line":"        # backend because we\u0027re not performing a delete operation on the role."},{"line_number":1167,"context_line":"        self.head(member_url, expected_status\u003d404)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_4795ba3e","line":1164,"in_reply_to":"ba7be1f8_84e7b03f","updated":"2015-03-02 15:43:43.000000000","message":"Yes. If the call directly goes through the driver cache invalidation won\u0027t happen.","commit_id":"a60aaac6fef3b87967e35d41abe412fc3342fe45"}]}
