)]}'
{"Authors":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"40bca333ecea49381a16309a32724aa3e5435128","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Aaron Lee \u003caaron.lee@rackspace.com\u003e"},{"line_number":2,"context_line":"Adam Gandelman \u003cadamg@canonical.com\u003e"},{"line_number":3,"context_line":"Adam Johnson \u003cadjohn@gmail.com\u003e"},{"line_number":4,"context_line":"Alex Meade \u003calex.meade@rackspace.com\u003e"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAACX%2F%2F%2BdQ%3D","line":1,"updated":"2011-09-27 18:41:23.000000000","message":"Should this be part of this patch?","commit_id":"251d86fe1ab8abc39cf269ef81d72e1b582a6493"}],"nova/db/sqlalchemy/session.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"40bca333ecea49381a16309a32724aa3e5435128","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    if \"sqlite\" in connection_dict.drivername:"},{"line_number":72,"context_line":"        engine_args[\"poolclass\"] \u003d sqlalchemy.pool.NullPool"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    elif MySQLdb and \"mysql\" in connection_dict.drivername:"},{"line_number":75,"context_line":"        LOG.info(_(\"Using mysql/eventlet db_pool.\"))"},{"line_number":76,"context_line":"        # MySQLdb won\u0027t accept \u0027None\u0027 in the password field"},{"line_number":77,"context_line":"        password \u003d connection_dict.password or \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACX%2F%2F%2BdU%3D","side":"PARENT","line":74,"updated":"2011-09-27 18:41:23.000000000","message":"Can we safely remove this block?\n\nI know the MySQLdb not accepting None in the password field was a legitimate problem a few months back.","commit_id":"21da183edee9c8f8ddf0ff6a880486c0ed2e4623"}],"tools/xenserver/vdi-reaper.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"283d6acd55756743df9acbc51cb26256ddbf1226","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova import utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def process_vdis(session):"},{"line_number":31,"context_line":"    \"\"\"Load and return all existing VDIs and their UUIDs.\"\"\""},{"line_number":32,"context_line":"    vdis \u003d session.xenapi.VDI.get_all_records()"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F%2Bgo%3D","line":30,"updated":"2011-09-27 16:37:52.000000000","message":"Might be more descriptively named, \"_find_candidate_vdis\"","commit_id":"4ae1a0f061024d5c7068b6ed3d6d1226af69087e"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"283d6acd55756743df9acbc51cb26256ddbf1226","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    gflags.FLAGS(sys.argv)"},{"line_number":70,"context_line":"    flags \u003d gflags.FLAGS"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    session \u003d XenAPI.Session(flags.xenapi_connection_url)"},{"line_number":73,"context_line":"    session.xenapi.login_with_password(flags.xenapi_connection_username,"},{"line_number":74,"context_line":"            flags.xenapi_connection_password)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAACX%2F%2F%2Bgg%3D","line":72,"updated":"2011-09-27 16:37:52.000000000","message":"Probably a good idea to have this code encapsulated in a function; that would allow some one to use it from the Python console, or import it to create a custom script.","commit_id":"4ae1a0f061024d5c7068b6ed3d6d1226af69087e"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"40bca333ecea49381a16309a32724aa3e5435128","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    utils.default_flagfile()"},{"line_number":74,"context_line":"    FLAGS(sys.argv)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    session \u003d XenAPI.Session(FLAGS.xenapi_connection_url)"},{"line_number":77,"context_line":"    session.xenapi.login_with_password(FLAGS.xenapi_connection_username,"},{"line_number":78,"context_line":"            FLAGS.xenapi_connection_password)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAACX%2F%2F%2Bdc%3D","line":76,"updated":"2011-09-27 18:41:23.000000000","message":"To be useful to a another application or from the console, the code would need to be able to specify arguments without flags.\n\nPerhaps creating a function:\n\ndef destroy_orphaned_vdis(connection_url, username, password):\n\nCould have the core logic, and then main() could just extract args from the command line and feed it to the destroy_orphaned_vdis function.\n\nIt\u0027s a bit of a pain, but in my experience, these tools can be useful outside the context of the wrapper script, so making the core logic importable could be really useful in the future as we create adhoc scripts for operational needs.","commit_id":"251d86fe1ab8abc39cf269ef81d72e1b582a6493"}]}
