)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"fd191a8a42271529e80593b07540266d2347c9a8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-09-10 15:45:30 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Move region configuration to a critical section"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I65f85aedd5b087499b889540417b9502e050ce7c"},{"line_number":10,"context_line":"Closes-bug: 1482271"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da20952f_354b472d","line":8,"updated":"2015-09-10 13:31:45.000000000","message":"Could you explain why you are making this fix?","commit_id":"5148eb51eebc0c45c482cbb0241b38cfdfa4147c"}],"keystone/tests/unit/test_kvs.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"36b5c0c5b1db36df0b938a126f6c6729253fab65","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        if not store.is_configured:"},{"line_number":595,"context_line":"            # Now the other thread does the same initialization"},{"line_number":596,"context_line":"            other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":597,"context_line":"            if not other_store.is_configured:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a1a9d01_381a177e","line":594,"updated":"2015-09-29 19:52:33.000000000","message":"there shouldn\u0027t be if checks in tests. The test should be asserting how the code is supposed to work, not react to it. If the store is supposed to be not is_configured here then assert that.","commit_id":"9c8021e716b8c18dfaf6eefec95da8da1648628b"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"1f7674f4482e4346ba797978c480d19fb38e4a76","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        if not store.is_configured:"},{"line_number":595,"context_line":"            # Now the other thread does the same initialization"},{"line_number":596,"context_line":"            other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":597,"context_line":"            if not other_store.is_configured:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_5ca59144","line":594,"in_reply_to":"9a1a9d01_381a177e","updated":"2015-10-21 14:18:29.000000000","message":"Done","commit_id":"9c8021e716b8c18dfaf6eefec95da8da1648628b"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cbb5f677bd6f37de7826b5e2195889bec729ea2f","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        if not store.is_configured:"},{"line_number":595,"context_line":"            # Now the other thread does the same initialization"},{"line_number":596,"context_line":"            other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":597,"context_line":"            if not other_store.is_configured:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_119ce20d","line":594,"in_reply_to":"9a1a9d01_381a177e","updated":"2015-10-21 14:06:11.000000000","message":"Yes, and if the value isn\u0027t available from the existing config, override it in setUp and make sure the store isn\u0027t configured yet","commit_id":"9c8021e716b8c18dfaf6eefec95da8da1648628b"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cbb5f677bd6f37de7826b5e2195889bec729ea2f","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        if not store.is_configured:"},{"line_number":595,"context_line":"            # Now the other thread does the same initialization"},{"line_number":596,"context_line":"            other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":597,"context_line":"            if not other_store.is_configured:"},{"line_number":598,"context_line":"                other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":599,"context_line":"            # The initial thread continues execution"},{"line_number":600,"context_line":"            self.assertRaises(RuntimeError, store.configure,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_518edad0","line":597,"updated":"2015-10-21 14:06:11.000000000","message":"Same here","commit_id":"9c8021e716b8c18dfaf6eefec95da8da1648628b"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"1f7674f4482e4346ba797978c480d19fb38e4a76","unresolved":false,"context_lines":[{"line_number":594,"context_line":"        if not store.is_configured:"},{"line_number":595,"context_line":"            # Now the other thread does the same initialization"},{"line_number":596,"context_line":"            other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":597,"context_line":"            if not other_store.is_configured:"},{"line_number":598,"context_line":"                other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":599,"context_line":"            # The initial thread continues execution"},{"line_number":600,"context_line":"            self.assertRaises(RuntimeError, store.configure,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_fc649d22","line":597,"in_reply_to":"3a29b11f_518edad0","updated":"2015-10-21 14:18:29.000000000","message":"Done","commit_id":"9c8021e716b8c18dfaf6eefec95da8da1648628b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b2418a3d502ecd5b35aa177262e18c8a20e5a6b9","unresolved":false,"context_lines":[{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":595,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_0440e205","line":592,"updated":"2015-10-22 20:47:59.000000000","message":"nit: \n\n    def test_region_initialization_race_condition(self): \n\n?","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"727174b85734f127d7985427010f8e23dbe26ccd","unresolved":false,"context_lines":[{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":595,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a26ad4f_fd9e6006","line":592,"in_reply_to":"3a29b11f_0440e205","updated":"2015-10-28 02:46:10.000000000","message":"++","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f2fed68f461a1eaaa6bbc2eb0485c4ac0e9b7dc9","unresolved":false,"context_lines":[{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    def test_race_condition(self):"},{"line_number":593,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":594,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":595,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa80f949_2abb3e74","line":592,"in_reply_to":"3a29b11f_0440e205","updated":"2015-11-03 18:34:31.000000000","message":"Done","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"87a8ea118f92418cd9da8425933a0fabc8036b9b","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def test_region_initialization_race_condition(self):"},{"line_number":594,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":595,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":596,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_d4d01ccc","line":593,"updated":"2015-11-08 17:01:39.000000000","message":"I reverted the change in keystone/token/persistence/backends/kvs.py and this test still passed, so this test isn\u0027t going to prevent us from reintroducing the error.","commit_id":"e443f6dca492f80b0537e18fefd9ba30e9372295"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"557c1331074b9f1dd9727c3118054d754580b4c8","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    def test_region_initialization_race_condition(self):"},{"line_number":594,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":595,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":596,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_da84300c","line":593,"in_reply_to":"da85f559_d4d01ccc","updated":"2015-11-11 14:56:02.000000000","message":"I just don\u0027t know how to expose race conditions in unit tests. Neither I\u0027ve found any example of this.\nThis case illustrates how race condition happens, imitating it on the code similar to that being modified.\nI\u0027d really appreciate any suggestion how to do the test properly.","commit_id":"e443f6dca492f80b0537e18fefd9ba30e9372295"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"87a8ea118f92418cd9da8425933a0fabc8036b9b","unresolved":false,"context_lines":[{"line_number":597,"context_line":"        self.assertFalse(other_store.is_configured)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":600,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":601,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_f45e8075","line":600,"updated":"2015-11-08 17:01:39.000000000","message":"this needs a comment to explain why it\u0027s correct for store.configure to raise an exeption in this case.","commit_id":"e443f6dca492f80b0537e18fefd9ba30e9372295"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"87a8ea118f92418cd9da8425933a0fabc8036b9b","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":600,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":601,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_b451d864","line":601,"updated":"2015-11-08 17:01:39.000000000","message":"why passing dict in this case?","commit_id":"e443f6dca492f80b0537e18fefd9ba30e9372295"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"557c1331074b9f1dd9727c3118054d754580b4c8","unresolved":false,"context_lines":[{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":600,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":601,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":10,"id":"da85f559_3ac21c35","line":601,"in_reply_to":"da85f559_b451d864","updated":"2015-11-11 14:56:02.000000000","message":"That\u0027s because I want to pass exact ``backing_store`` parameter and don\u0027t want to rely on parameter order in third-party library.","commit_id":"e443f6dca492f80b0537e18fefd9ba30e9372295"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8b415dacc221f68ec37d4d377d6a6c113f24d900","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_region_initialization_race_condition(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_4d2c9e4a","line":598,"updated":"2015-11-24 17:17:49.000000000","message":"Don\u0027t add a test that says it validates there\u0027s no race condition when it doesn\u0027t. Get rid of this.","commit_id":"d4ed9530b59a3e6e75d5892cd32a4bd0acbadea0"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"8d0f98ed806ff140960fae4449bcc6a51fb1c8eb","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_region_initialization_race_condition(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_ad85cf07","line":598,"in_reply_to":"9a8ffd7b_4d2c9e4a","updated":"2015-11-25 15:27:29.000000000","message":"Done","commit_id":"d4ed9530b59a3e6e75d5892cd32a4bd0acbadea0"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"6ee27987b9d4556fa688c712ebe567a4b21247ce","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization_race_condition(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_ef20c7f9","line":598,"updated":"2015-12-04 11:50:12.000000000","message":"Brant\u0027s concern still applies here. You better not talking about race_condition in the method name, since it is not validating it.\n\nI believe just removing \"_race_condition\" from the end would be fine.","commit_id":"f157e3dc24d942246cf4ce95db475e8015aaf42d"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"3e05891d1499163c3520c92bbf91a35bf7ec7041","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization_race_condition(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_fa85d906","line":598,"in_reply_to":"7a740942_ef20c7f9","updated":"2015-12-04 16:14:27.000000000","message":"Done","commit_id":"f157e3dc24d942246cf4ce95db475e8015aaf42d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a9edc263febc453b598502b6cb2b1970557a90c","unresolved":false,"context_lines":[{"line_number":586,"context_line":""},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"class TestCacheRegionInit(unit.TestCase):"},{"line_number":589,"context_line":"    \"\"\"Illustrate the race condition on cache initialization"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    This case doesn\u0027t actually expose the error, it just simulates unprotected"},{"line_number":592,"context_line":"    code behaviour, when race condition leads to re-configuration of shared"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_720bacd6","line":589,"range":{"start_line":589,"start_character":58,"end_line":589,"end_character":60},"updated":"2016-01-06 20:22:43.000000000","message":"nit: add a period, if you have another patch coming.","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":586,"context_line":""},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"class TestCacheRegionInit(unit.TestCase):"},{"line_number":589,"context_line":"    \"\"\"Illustrate the race condition on cache initialization"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"    This case doesn\u0027t actually expose the error, it just simulates unprotected"},{"line_number":592,"context_line":"    code behaviour, when race condition leads to re-configuration of shared"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_51d6aa28","line":589,"range":{"start_line":589,"start_character":58,"end_line":589,"end_character":60},"in_reply_to":"fa69d971_720bacd6","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[{"line_number":593,"context_line":"    KVS backend object. What, in turn, results in an exception."},{"line_number":594,"context_line":"    \"\"\""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_c4395243","line":596,"updated":"2015-12-29 19:28:31.000000000","message":"should this reference keystone.token.persistence.backends.kvs.Token.kvs_backend rather than copy?","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":593,"context_line":"    KVS backend object. What, in turn, results in an exception."},{"line_number":594,"context_line":"    \"\"\""},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_91198224","line":596,"in_reply_to":"fa69d971_c4395243","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_a481befd","line":598,"updated":"2015-12-29 19:28:31.000000000","message":"There should be a comment saying what this test is validating.","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_71508632","line":598,"in_reply_to":"fa69d971_a481befd","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":602,"context_line":"        self.assertFalse(other_store.is_configured)"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_a4af7e7c","line":599,"updated":"2015-12-29 19:28:31.000000000","message":"There should be a comment why token-driver is used here. Can a random string be used instead?","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":596,"context_line":"    kvs_backend \u003d \u0027openstack.kvs.Memory\u0027"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":599,"context_line":"        store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":600,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":601,"context_line":"        other_store \u003d core.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":602,"context_line":"        self.assertFalse(other_store.is_configured)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_9180a28c","line":599,"in_reply_to":"fa69d971_a4af7e7c","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[{"line_number":602,"context_line":"        self.assertFalse(other_store.is_configured)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":605,"context_line":"        # This error shows that core.get_key_value_store() returns shared"},{"line_number":606,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":607,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":608,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_e48ed626","line":605,"range":{"start_line":605,"start_character":59,"end_line":605,"end_character":73},"updated":"2015-12-29 19:28:31.000000000","message":"-\u003e returns a shared\n(add \"a\")","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":602,"context_line":"        self.assertFalse(other_store.is_configured)"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":605,"context_line":"        # This error shows that core.get_key_value_store() returns shared"},{"line_number":606,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":607,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":608,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_d1ea9ada","line":605,"range":{"start_line":605,"start_character":59,"end_line":605,"end_character":73},"in_reply_to":"fa69d971_e48ed626","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        # This error shows that core.get_key_value_store() returns shared"},{"line_number":606,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":607,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":608,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_84a03a92","line":608,"updated":"2015-12-29 19:28:31.000000000","message":"why is a dict passed here? a dict isn\u0027t passed at line 604. backing_store\u003dself.kvs_backend should work.","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        # This error shows that core.get_key_value_store() returns shared"},{"line_number":606,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":607,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":608,"context_line":"                          dict(backing_store\u003dself.kvs_backend))"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a5de9d1_d17a9abc","line":608,"in_reply_to":"fa69d971_84a03a92","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a849bdab7c9406e893a84c75640645aa3f16885","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fa69d971_a40bfe7c","line":609,"updated":"2015-12-29 19:28:31.000000000","message":"You should be able to test calling Token.__init__ twice. Override kvs.get_key_value_store to return a mock.Mock and check if configure() is called again.","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d74b6f9f6456bc898c34b0b9853295367633ac98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5a5ae5dd_09520d68","line":609,"in_reply_to":"fa69d971_a40bfe7c","updated":"2016-02-03 13:41:38.000000000","message":"Done","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"be952ee1de4dae9157c1c6f2c180926f23a4b748","unresolved":false,"context_lines":[{"line_number":598,"context_line":"    store_name \u003d \u0027test-kvs\u0027"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":601,"context_line":"        \"\"\"Simulate_race condition on token storage initialization\"\"\""},{"line_number":602,"context_line":"        store \u003d core.get_key_value_store(self.store_name)"},{"line_number":603,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":604,"context_line":"        other_store \u003d core.get_key_value_store(self.store_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a57f1b5_63db27ed","line":601,"range":{"start_line":601,"start_character":19,"end_line":601,"end_character":20},"updated":"2016-02-12 04:07:22.000000000","message":"(nit) remove _\n\n(nit) add a period at the end","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d13118c7d98e71f93e34ad08d58dd387af28e6da","unresolved":false,"context_lines":[{"line_number":598,"context_line":"    store_name \u003d \u0027test-kvs\u0027"},{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def test_different_instances_initialization(self):"},{"line_number":601,"context_line":"        \"\"\"Simulate_race condition on token storage initialization\"\"\""},{"line_number":602,"context_line":"        store \u003d core.get_key_value_store(self.store_name)"},{"line_number":603,"context_line":"        self.assertFalse(store.is_configured)"},{"line_number":604,"context_line":"        other_store \u003d core.get_key_value_store(self.store_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1af94dfe_127a95f1","line":601,"range":{"start_line":601,"start_character":19,"end_line":601,"end_character":20},"in_reply_to":"3a57f1b5_63db27ed","updated":"2016-03-16 14:17:40.000000000","message":"Done","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"be952ee1de4dae9157c1c6f2c180926f23a4b748","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        other_store \u003d core.get_key_value_store(self.store_name)"},{"line_number":605,"context_line":"        self.assertFalse(other_store.is_configured)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":608,"context_line":"        # This error shows that core.get_key_value_store() returns a shared"},{"line_number":609,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a57f1b5_03a91324","line":607,"updated":"2016-02-12 04:07:22.000000000","message":"self.assertTrue(store.is_configured)","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d13118c7d98e71f93e34ad08d58dd387af28e6da","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        other_store \u003d core.get_key_value_store(self.store_name)"},{"line_number":605,"context_line":"        self.assertFalse(other_store.is_configured)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        other_store.configure(backing_store\u003dself.kvs_backend)"},{"line_number":608,"context_line":"        # This error shows that core.get_key_value_store() returns a shared"},{"line_number":609,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1af94dfe_d2214dfd","line":607,"in_reply_to":"3a57f1b5_03a91324","updated":"2016-03-16 14:17:40.000000000","message":"Done","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"be952ee1de4dae9157c1c6f2c180926f23a4b748","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        # This error shows that core.get_key_value_store() returns a shared"},{"line_number":609,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a57f1b5_c601c906","line":611,"updated":"2016-02-12 04:07:22.000000000","message":"self.assertFalse(store.is_configured)","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d13118c7d98e71f93e34ad08d58dd387af28e6da","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        # This error shows that core.get_key_value_store() returns a shared"},{"line_number":609,"context_line":"        # object protected from re-configuration with an exception."},{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"1af94dfe_72fe7939","line":611,"in_reply_to":"3a57f1b5_c601c906","updated":"2016-03-16 14:17:40.000000000","message":"This isn\u0027t required here as this test verifies the exception raised.","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"be952ee1de4dae9157c1c6f2c180926f23a4b748","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""},{"line_number":615,"context_line":"        target \u003d core.KeyValueStore"},{"line_number":616,"context_line":"        with mock.patch.object(target, \u0027configure\u0027) as configure_mock:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a57f1b5_e33877f1","line":613,"range":{"start_line":613,"start_character":0,"end_line":613,"end_character":46},"updated":"2016-02-12 04:07:22.000000000","message":"I don\u0027t see what this test is buying us; test above already shows the method is called twice","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d13118c7d98e71f93e34ad08d58dd387af28e6da","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        self.assertRaises(RuntimeError, store.configure,"},{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""},{"line_number":615,"context_line":"        target \u003d core.KeyValueStore"},{"line_number":616,"context_line":"        with mock.patch.object(target, \u0027configure\u0027) as configure_mock:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1af94dfe_b5b58b32","line":613,"range":{"start_line":613,"start_character":0,"end_line":613,"end_character":46},"in_reply_to":"3a57f1b5_e33877f1","updated":"2016-03-16 14:17:40.000000000","message":"Brant Knudson asked for it a patch earlier:\n\"You should be able to test calling Token.__init__ twice. Override kvs.get_key_value_store to return a mock.Mock and check if configure() is called again.\"","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"be952ee1de4dae9157c1c6f2c180926f23a4b748","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""},{"line_number":615,"context_line":"        target \u003d core.KeyValueStore"},{"line_number":616,"context_line":"        with mock.patch.object(target, \u0027configure\u0027) as configure_mock:"},{"line_number":617,"context_line":"            store \u003d core.get_key_value_store(self.store_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a57f1b5_a3eb5f77","line":614,"range":{"start_line":614,"start_character":11,"end_line":614,"end_character":12},"updated":"2016-02-12 04:07:22.000000000","message":"(nit) capitalize","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"d13118c7d98e71f93e34ad08d58dd387af28e6da","unresolved":false,"context_lines":[{"line_number":611,"context_line":"                          backing_store\u003dself.kvs_backend)"},{"line_number":612,"context_line":""},{"line_number":613,"context_line":"    def test_kvs_configure_called_twice(self):"},{"line_number":614,"context_line":"        \"\"\"check if configure() is called again\"\"\""},{"line_number":615,"context_line":"        target \u003d core.KeyValueStore"},{"line_number":616,"context_line":"        with mock.patch.object(target, \u0027configure\u0027) as configure_mock:"},{"line_number":617,"context_line":"            store \u003d core.get_key_value_store(self.store_name)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1af94dfe_55588732","line":614,"range":{"start_line":614,"start_character":11,"end_line":614,"end_character":12},"in_reply_to":"3a57f1b5_a3eb5f77","updated":"2016-03-16 14:17:40.000000000","message":"Done","commit_id":"57a597a379bcfe2bd06ce919d85779ed27f8d9a6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ec5fa99b713100adf88a42396fc4df11397b6c29","unresolved":false,"context_lines":[{"line_number":590,"context_line":"    \"\"\"Illustrate the race condition on cache initialization."},{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    This case doesn\u0027t actually expose the error, it just simulates unprotected"},{"line_number":593,"context_line":"    code behaviour, when race condition leads to re-configuration of shared"},{"line_number":594,"context_line":"    KVS backend object. What, in turn, results in an exception."},{"line_number":595,"context_line":"    \"\"\""},{"line_number":596,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"da0c15f0_2e1dfb0f","line":593,"range":{"start_line":593,"start_character":66,"end_line":593,"end_character":75},"updated":"2016-03-24 19:31:37.000000000","message":"\"of the shared\" (add the)","commit_id":"691d497885cf4d8b39bb6ddb384b7c027bb52f95"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ec5fa99b713100adf88a42396fc4df11397b6c29","unresolved":false,"context_lines":[{"line_number":591,"context_line":""},{"line_number":592,"context_line":"    This case doesn\u0027t actually expose the error, it just simulates unprotected"},{"line_number":593,"context_line":"    code behaviour, when race condition leads to re-configuration of shared"},{"line_number":594,"context_line":"    KVS backend object. What, in turn, results in an exception."},{"line_number":595,"context_line":"    \"\"\""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    kvs_backend \u003d token_kvs_backend.Token.kvs_backend"}],"source_content_type":"text/x-python","patch_set":19,"id":"da0c15f0_ce2b9f32","line":594,"range":{"start_line":594,"start_character":24,"end_line":594,"end_character":28},"updated":"2016-03-24 19:31:37.000000000","message":"change to \"Which\"","commit_id":"691d497885cf4d8b39bb6ddb384b7c027bb52f95"}],"keystone/token/persistence/backends/kvs.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"76e8e765e17d85545e6a93c15181ba1af75850ed","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self._store \u003d kvs.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":53,"context_line":"        if backing_store is not None:"},{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":56,"context_line":"            if not self._store.is_configured:"},{"line_number":57,"context_line":"                # Do not re-configure the backend if the store has been"},{"line_number":58,"context_line":"                # initialized"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_29791294","line":55,"updated":"2015-09-14 00:32:05.000000000","message":"There needs to be a comment why this is necessary otherwise we\u0027ll just remove it. Better would be a test.","commit_id":"58c3cf393c9628d0310d6e1a9e862dd198a76704"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"8912eae637b871622ab2afab81066cf0bf062f23","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self._store \u003d kvs.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":53,"context_line":"        if backing_store is not None:"},{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":56,"context_line":"            if not self._store.is_configured:"},{"line_number":57,"context_line":"                # Do not re-configure the backend if the store has been"},{"line_number":58,"context_line":"                # initialized"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba15a1d1_d3e415e1","line":55,"in_reply_to":"ba15a1d1_29791294","updated":"2015-09-17 13:23:08.000000000","message":"Done","commit_id":"58c3cf393c9628d0310d6e1a9e862dd198a76704"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e49c0f37d48fb154af8e3aabfd9ff096435ef53e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        super(Token, self).__init__()"},{"line_number":52,"context_line":"        self._store \u003d kvs.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":53,"context_line":"        if backing_store is not None:"},{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":56,"context_line":"            if not self._store.is_configured:"},{"line_number":57,"context_line":"                # Do not re-configure the backend if the store has been"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_938f24cc","line":54,"updated":"2015-09-20 14:17:45.000000000","message":"the comments you added should be here instead?","commit_id":"ca0f58f2909f1ccfd975acf8bc4c3194f13f80b1"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"0a3caf985ec70f103f4acf0cca1c114600a16793","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        super(Token, self).__init__()"},{"line_number":52,"context_line":"        self._store \u003d kvs.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":53,"context_line":"        if backing_store is not None:"},{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":56,"context_line":"            if not self._store.is_configured:"},{"line_number":57,"context_line":"                # Do not re-configure the backend if the store has been"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_ae93cf4e","line":54,"in_reply_to":"ba15a1d1_938f24cc","updated":"2015-09-21 12:49:00.000000000","message":"Done","commit_id":"ca0f58f2909f1ccfd975acf8bc4c3194f13f80b1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b2418a3d502ecd5b35aa177262e18c8a20e5a6b9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        # Using a lock here to avoid race condition."},{"line_number":56,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":57,"context_line":"            if not self._store.is_configured:"},{"line_number":58,"context_line":"                # Do not re-configure the backend if the store has been"},{"line_number":59,"context_line":"                # initialized."},{"line_number":60,"context_line":"                self._store.configure(backing_store\u003dself.kvs_backend, **kwargs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a29b11f_aa8d37d4","line":57,"updated":"2015-10-22 20:47:59.000000000","message":"isn\u0027t this also done here - https://github.com/openstack/keystone/blob/a597a86b854215835a4d54885daeb161d7b0efb8/keystone/contrib/revoke/backends/kvs.py#L40","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"b2ab77e9d712137a3da90d8af21028e3bc33e943","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        # Using a lock here to avoid race condition."},{"line_number":56,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":57,"context_line":"            if not self._store.is_configured:"},{"line_number":58,"context_line":"                # Do not re-configure the backend if the store has been"},{"line_number":59,"context_line":"                # initialized."},{"line_number":60,"context_line":"                self._store.configure(backing_store\u003dself.kvs_backend, **kwargs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa80f949_2aed7e8b","line":57,"in_reply_to":"3a29b11f_aa8d37d4","updated":"2015-11-03 18:32:53.000000000","message":"I can\u0027t imagine a use case when revocation engine is used before token driver is initialized.","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"727174b85734f127d7985427010f8e23dbe26ccd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        # Using a lock here to avoid race condition."},{"line_number":56,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":57,"context_line":"            if not self._store.is_configured:"},{"line_number":58,"context_line":"                # Do not re-configure the backend if the store has been"},{"line_number":59,"context_line":"                # initialized."},{"line_number":60,"context_line":"                self._store.configure(backing_store\u003dself.kvs_backend, **kwargs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a26ad4f_9df96c50","line":57,"in_reply_to":"3a29b11f_aa8d37d4","updated":"2015-10-28 02:46:10.000000000","message":"guess it is, although it does not lock it. maybe it\u0027ll be correct to remove it at this point you mentioned","commit_id":"38c88f7dba3e9534ea56ea404e5015b76df97472"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a9edc263febc453b598502b6cb2b1970557a90c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self._store \u003d kvs.get_key_value_store(\u0027token-driver\u0027)"},{"line_number":53,"context_line":"        if backing_store is not None:"},{"line_number":54,"context_line":"            self.kvs_backend \u003d backing_store"},{"line_number":55,"context_line":"        # Using a lock here to avoid race condition."},{"line_number":56,"context_line":"        with STORE_CONF_LOCK:"},{"line_number":57,"context_line":"            if not self._store.is_configured:"},{"line_number":58,"context_line":"                # Do not re-configure the backend if the store has been"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa69d971_72c08c50","line":55,"range":{"start_line":55,"start_character":31,"end_line":55,"end_character":51},"updated":"2016-01-06 20:22:43.000000000","message":"it would be help to know what race condition is being avoided here.","commit_id":"4787edf3744f23ee3085ed249f2a2e78908bf9fd"}]}
