)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"c96fd9aae54eeb25c0e65b79ed852dc15f9f6417","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The fernet rotation code contained a complicated calculation for"},{"line_number":10,"context_line":"what files were to be removed."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Also, stopped modifying a config options. Config is read-only."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ib21f98623fa1aa1624f06b4227e1e8448f62b5e3"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa32b979_e313a463","line":12,"updated":"2015-06-24 06:53:26.000000000","message":"s/options/option","commit_id":"f59ba186377eff7c4037aab8437f77de72a8c9c1"}],"keystone/token/providers/fernet/utils.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d65a42e6a705fb7355c523376f24a671c98e5550","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":213,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":214,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":215,"context_line":"        os.remove(key_to_purge)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_19f1a66a","line":215,"updated":"2015-06-22 20:10:35.000000000","message":"This looks like it always purges the newest key\n\nhttp://cdn.pasteraw.com/65g72cq7wd8hu43mdcvbad1izvog26e","commit_id":"706cf89d8546aabcd9d524f9b17295be253d1f9b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5c8e5b27ffc137884785b70173c2455e84ef5641","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":213,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":214,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":215,"context_line":"        os.remove(key_to_purge)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_993e13d9","line":215,"in_reply_to":"fa32b979_19f1a66a","updated":"2015-06-22 21:23:35.000000000","message":"Done","commit_id":"706cf89d8546aabcd9d524f9b17295be253d1f9b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b53924f7f0fffad3750c5c66a91f48389b27b6ee","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":213,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":214,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":215,"context_line":"        os.remove(key_to_purge)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d4a78309","line":215,"in_reply_to":"fa32b979_19f1a66a","updated":"2015-06-22 20:17:58.000000000","message":"so, why didn\u0027t the tests catch that?","commit_id":"706cf89d8546aabcd9d524f9b17295be253d1f9b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8496aa59b942457aea6938c6bb30d4909edbfa7b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    # add a new key to the rotation, which will be the *next* primary"},{"line_number":200,"context_line":"    _create_new_key(keystone_user_id, keystone_group_id)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    max_active_keys \u003d CONF.fernet_tokens.max_active_keys"},{"line_number":203,"context_line":"    # check for bad configuration"},{"line_number":204,"context_line":"    if max_active_keys \u003c 1:"},{"line_number":205,"context_line":"        LOG.warning(_LW("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_9cef16e9","line":202,"updated":"2015-07-10 18:04:18.000000000","message":"i\u0027m not sure this indirection buys you any benefit?","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8496aa59b942457aea6938c6bb30d4909edbfa7b","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    # purge excess keys"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    # Note that key_files doesn\u0027t contain the new active key that was created,"},{"line_number":213,"context_line":"    # only the old active keys."},{"line_number":214,"context_line":"    keys \u003d sorted(key_files.keys(), reverse\u003dTrue)"},{"line_number":215,"context_line":"    while len(keys) \u003e (max_active_keys - 1):"},{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_5c5c2ef0","line":213,"updated":"2015-07-10 18:04:18.000000000","message":"++","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8496aa59b942457aea6938c6bb30d4909edbfa7b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    # Note that key_files doesn\u0027t contain the new active key that was created,"},{"line_number":213,"context_line":"    # only the old active keys."},{"line_number":214,"context_line":"    keys \u003d sorted(key_files.keys(), reverse\u003dTrue)"},{"line_number":215,"context_line":"    while len(keys) \u003e (max_active_keys - 1):"},{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":217,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":218,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_fcc9827a","line":215,"updated":"2015-07-10 18:04:18.000000000","message":"++","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"4abe412ea6af7692671401ed0fb0ea534b684748","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":217,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":218,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":219,"context_line":"        os.remove(key_to_purge)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_01926f57","line":219,"updated":"2015-07-01 09:29:16.000000000","message":"how about we protect here against some problems while interacting with FS? Wrap it with try/except clause and catch OSError problems?","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a81949905ade54fdfb1e3941865c85f914e0ab10","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":217,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":218,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":219,"context_line":"        os.remove(key_to_purge)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_caa57747","line":219,"in_reply_to":"ba3cc151_01926f57","updated":"2015-07-01 12:58:03.000000000","message":"I could put that in a separate commit since this is how the code worked to begin with... also, I\u0027m not sure what to do in the case of an exception here other than to abort.","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8496aa59b942457aea6938c6bb30d4909edbfa7b","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":217,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":218,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":219,"context_line":"        os.remove(key_to_purge)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_bcb45a35","line":219,"in_reply_to":"ba3cc151_3eb5accf","updated":"2015-07-10 18:04:18.000000000","message":"you\u0027re going to get a big error in the logs without adding a try/except anyway","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"0f553ca4a3c60ad2a61251447812e423cb9da297","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        index_to_purge \u003d keys.pop()"},{"line_number":217,"context_line":"        key_to_purge \u003d key_files[index_to_purge]"},{"line_number":218,"context_line":"        LOG.info(_LI(\u0027Excess key to purge: %s\u0027), key_to_purge)"},{"line_number":219,"context_line":"        os.remove(key_to_purge)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"def load_keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_3eb5accf","line":219,"in_reply_to":"ba3cc151_caa57747","updated":"2015-07-06 09:48:45.000000000","message":"admins should be aware of that, so big red warning in the logs should do the job.","commit_id":"63429910cd115ff46acfe5d41af98319e8a2e2af"}]}
