)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b4a4d8c255b119c7231a5eb7e194c7942f1e7ecb","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Cuts any direct imports of revoke.model as that"},{"line_number":10,"context_line":"triggers the dependency registration."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partialy-Fixes:  Bug 1291099"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I0db36b295c2040ec1fb248cf75dc55c44c059211"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAWH%2F%2Fp%2B8%3D","line":12,"updated":"2014-03-14 17:34:35.000000000","message":"I think this should be partial-bug: 1291099","commit_id":"9c54bf088af54e2cc069bc01e8ad71085eb57e5b"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"30a17a498a182279c15d744a847c3f3c12a504b8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"resolution."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: 1291099"},{"line_number":19,"context_line":"Related-Bug: 1292283"},{"line_number":20,"context_line":"Change-Id: I0db36b295c2040ec1fb248cf75dc55c44c059211"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAWH%2F%2Flmg%3D","line":19,"updated":"2014-03-15 22:48:52.000000000","message":"This now closes the RC blocker and is related to the bug for the logic/behavior interaction with Horizon","commit_id":"7c9746c49b7518f2a000f7e4822e822c6eeee81d"}],"keystone/common/config.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1057d61b8a07e873a7262b658cf5e7492f7aedaf","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                        \u0027from the backend.\u0027),"},{"line_number":208,"context_line":"        cfg.BoolOpt(\u0027caching\u0027, default\u003dTrue,"},{"line_number":209,"context_line":"                    help\u003d\u0027Toggle for revocation event cacheing. This has no \u0027"},{"line_number":210,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":211,"context_line":"    ],"},{"line_number":212,"context_line":"    \u0027cache\u0027: ["},{"line_number":213,"context_line":"        cfg.StrOpt(\u0027config_prefix\u0027, default\u003d\u0027cache.keystone\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Flo8%3D","line":210,"updated":"2014-03-15 22:24:18.000000000","message":"Note for other reviewers, this has no functional impact unless caching is enabled. This should not be a cause for worry late in the cycle.  The default behavior is to enable caching on any section with caching code.","commit_id":"3d7a48ad66c2421dd8ffc20271bbb175b4060238"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"30a17a498a182279c15d744a847c3f3c12a504b8","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                         \u0027effect unless global caching is enabled.\u0027),"},{"line_number":182,"context_line":"        cfg.IntOpt(\u0027revocation_cache_time\u0027, default\u003d3600,"},{"line_number":183,"context_line":"                   help\u003d\u0027Time to cache the revocation list and the revocation \u0027"},{"line_number":184,"context_line":"                        \u0027events if revoke extension is enabled (in seconds). \u0027"},{"line_number":185,"context_line":"                        \u0027This has no effect unless global and token \u0027"},{"line_number":186,"context_line":"                        \u0027caching are enabled.\u0027),"},{"line_number":187,"context_line":"        cfg.IntOpt(\u0027cache_time\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2Flmk%3D","line":184,"updated":"2014-03-15 22:48:52.000000000","message":"Note to other reviewers: As stated in previous patchset, this is the default behavior and should not affect anything (except making caching for revocation events optional if caching is globally enabled.","commit_id":"7c9746c49b7518f2a000f7e4822e822c6eeee81d"}],"keystone/common/dependency.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1057d61b8a07e873a7262b658cf5e7492f7aedaf","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    the optional argument is used internally, and should be treated as an"},{"line_number":224,"context_line":"    implementation detail."},{"line_number":225,"context_line":"    \"\"\""},{"line_number":226,"context_line":"    new_providers\u003ddict()"},{"line_number":227,"context_line":"    if provider_name:"},{"line_number":228,"context_line":"        # A provider was registered, so take care of any objects depending on"},{"line_number":229,"context_line":"        # it."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Flo4%3D","line":226,"updated":"2014-03-15 22:24:18.000000000","message":"NIT: Typically I prefer seeing the literal {} when initializing a dictionary, as there is a significant performance penalty to using the constructor.","commit_id":"3d7a48ad66c2421dd8ffc20271bbb175b4060238"}],"keystone/contrib/revoke/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1057d61b8a07e873a7262b658cf5e7492f7aedaf","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027revoke\u0027)"},{"line_number":54,"context_line":"# TODO(ayoung): migrate from the token section"},{"line_number":55,"context_line":"REVOCATION_CACHE_EXPIRATION_TIME \u003d lambda: CONF.token.revocation_cache_time"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def revoked_before_cutoff_time():"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Flow%3D","line":55,"updated":"2014-03-15 22:24:18.000000000","message":"We should probably enhance the token revocation caching expiration time configuration option to indicate that it also encompasses the revoke api.","commit_id":"3d7a48ad66c2421dd8ffc20271bbb175b4060238"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1057d61b8a07e873a7262b658cf5e7492f7aedaf","unresolved":false,"context_lines":[{"line_number":172,"context_line":"            raise exception.TokenNotFound(_(\u0027Failed to validate token\u0027))"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def revoke(self, event):"},{"line_number":175,"context_line":"        self._get_revoke_tree.invalidate(self)"},{"line_number":176,"context_line":"        self.driver.revoke(event)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Flos%3D","line":175,"updated":"2014-03-15 22:24:18.000000000","message":"This needs to happen in the opposite order. You want to ensure the revocation event has occurred before you invalidate the cache. In the case of multiple keystones you could repopulate the cache between invalidation and revocation event.","commit_id":"3d7a48ad66c2421dd8ffc20271bbb175b4060238"}],"keystone/token/provider.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1057d61b8a07e873a7262b658cf5e7492f7aedaf","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if self.revoke_api is not None:"},{"line_number":127,"context_line":"            token_values \u003d self.revoke_api.model.build_token_values_v2("},{"line_number":128,"context_line":"                token_data, CONF.identity.default_domain_id)"},{"line_number":129,"context_line":"            self.revoke_api.check_token(token_values)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def validate_v2_token(self, token_id, belongs_to\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Floc%3D","line":128,"updated":"2014-03-15 22:24:18.000000000","message":"Ah good catch!","commit_id":"3d7a48ad66c2421dd8ffc20271bbb175b4060238"}]}
