)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"6e15e9f108f746dc7bda85c11967df894e4b1932","unresolved":false,"context_lines":[{"line_number":10,"context_line":"occasionally refuses SSH connections for a few seconds just after"},{"line_number":11,"context_line":"becoming \u0027ACTIVE\u0027.  This causes the stack creation to fail."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To avoid this, keep trying to initialize the SSH connection for up to 30"},{"line_number":14,"context_line":"seconds."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1287331"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2Fp14%3D","line":13,"updated":"2014-03-04 20:38:33.000000000","message":"Minor nit, this doesn\u0027t iterate on seconds anymore, but actual cycles from the TaskRunner.","commit_id":"696a8f68d93085480cfd64931ff32a9dddeb05e7"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"6bca1184397160cc1e89d9257a8433f6d5c2bb74","unresolved":false,"context_lines":[{"line_number":10,"context_line":"occasionally refuses SSH connections for a few seconds just after"},{"line_number":11,"context_line":"becoming \u0027ACTIVE\u0027.  This causes the stack creation to fail."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"To avoid this, keep trying to initialize the SSH connection for up to 30"},{"line_number":14,"context_line":"seconds."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Closes-Bug: #1287331"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAVn%2F%2FpMM%3D","line":13,"in_reply_to":"AAAAVn%2F%2Fp14%3D","updated":"2014-03-04 21:55:41.000000000","message":"Done","commit_id":"696a8f68d93085480cfd64931ff32a9dddeb05e7"}],"contrib/rackspace/rackspace/resources/cloud_server.py":[{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"f721503b151dc36460613c9d10d5309821c2c903","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                transport \u003d paramiko.Transport((self.server.accessIPv4, 22))"},{"line_number":283,"context_line":"            except paramiko.SSHException:"},{"line_number":284,"context_line":"                logger.debug(\"Failed to get SSH transport, will retry\")"},{"line_number":285,"context_line":"                return False"},{"line_number":286,"context_line":"            transport.connect(hostkey\u003dNone, username\u003d\"root\", pkey\u003dpkey)"},{"line_number":287,"context_line":"            sftp \u003d paramiko.SFTPClient.from_transport(transport)"},{"line_number":288,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2FWBU%3D","line":285,"updated":"2014-03-06 18:04:09.000000000","message":"can you move this try/except block to line#276, so that unnecessary temp file create/write/delete operations could be avoided?","commit_id":"8c806df0004ef701219c431257cadcea40d7453a"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"44e288a1bc7c26265822ef2327812cea550a323a","unresolved":false,"context_lines":[{"line_number":282,"context_line":"                transport \u003d paramiko.Transport((self.server.accessIPv4, 22))"},{"line_number":283,"context_line":"            except paramiko.SSHException:"},{"line_number":284,"context_line":"                logger.debug(\"Failed to get SSH transport, will retry\")"},{"line_number":285,"context_line":"                return False"},{"line_number":286,"context_line":"            transport.connect(hostkey\u003dNone, username\u003d\"root\", pkey\u003dpkey)"},{"line_number":287,"context_line":"            sftp \u003d paramiko.SFTPClient.from_transport(transport)"},{"line_number":288,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2FMhU%3D","line":285,"in_reply_to":"AAAAVn%2F%2FWBU%3D","updated":"2014-03-07 18:01:17.000000000","message":"Done","commit_id":"8c806df0004ef701219c431257cadcea40d7453a"}],"contrib/rackspace/resources/cloud_server.py":[{"author":{"_account_id":7395,"name":"Andrew Plunk","email":"andrew.plunk@rackspace.com","username":"aplunk"},"change_message_id":"8d2582b9fbcfb1cfe22a57bd027b1963191af18f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Transfer files to the Cloud Server via SFTP.\"\"\""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        def get_transport():"},{"line_number":274,"context_line":"            retry_until \u003d time.time() + 30"},{"line_number":275,"context_line":"            while time.time() \u003c retry_until:"},{"line_number":276,"context_line":"                try:"},{"line_number":277,"context_line":"                    return paramiko.Transport((self.server.accessIPv4, 22))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2F2Eo%3D","line":274,"updated":"2014-03-03 20:34:44.000000000","message":"Hard coding a 30 second timeout will probably have to be re-factored in the future. It would be best to make this configurable. Also, retry logic is pretty generic and there are a lot of decorator libraries out there which handle this. I would recommend at least starting the discussion of which library would be appropriate.","commit_id":"4686b612fc1a714ead640dfd2d1ba0b74dac454f"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"414ee27a47fedbd7999cb75244eac7a585524d28","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \"\"\"Transfer files to the Cloud Server via SFTP.\"\"\""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        def get_transport():"},{"line_number":274,"context_line":"            retry_until \u003d time.time() + 30"},{"line_number":275,"context_line":"            while time.time() \u003c retry_until:"},{"line_number":276,"context_line":"                try:"},{"line_number":277,"context_line":"                    return paramiko.Transport((self.server.accessIPv4, 22))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2F2AE%3D","line":274,"in_reply_to":"AAAAVn%2F%2F2Eo%3D","updated":"2014-03-03 20:38:42.000000000","message":"Future refactor is fine. Hopefully the need for this will go away once the public images get sorted; this just protects us in case it crops up again. As for adding a new lib, that\u0027s a bit tricky unless the one you pick is already in the master requirements. Otherwise, we\u0027ll also have to convince infra that a new requirement is justified.","commit_id":"4686b612fc1a714ead640dfd2d1ba0b74dac454f"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"da51e179ccbb9f75f185f1363b98f75528d73484","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                    return paramiko.Transport((self.server.accessIPv4, 22))"},{"line_number":278,"context_line":"                except paramiko.SSHException:"},{"line_number":279,"context_line":"                    logger.debug(\"Failed to get SSH transport, will retry\")"},{"line_number":280,"context_line":"                    eventlet.sleep(1)"},{"line_number":281,"context_line":"            raise exception.Error(_(\"Failed to get SSH transport after 30s\"))"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        with tempfile.NamedTemporaryFile() as private_key_file:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2F2R8%3D","line":280,"updated":"2014-03-03 20:18:46.000000000","message":"I know this is a bigger change, but would it be possible to refactor so that this doesn\u0027t block other tasks? Maybe having this return true/false and having the caller check and return so that check_create_complete can return false and let other operations do some work?","commit_id":"4686b612fc1a714ead640dfd2d1ba0b74dac454f"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"c30b16466fd6787ca3a82a8ca7bd678741dd1a8e","unresolved":false,"context_lines":[{"line_number":277,"context_line":"                    return paramiko.Transport((self.server.accessIPv4, 22))"},{"line_number":278,"context_line":"                except paramiko.SSHException:"},{"line_number":279,"context_line":"                    logger.debug(\"Failed to get SSH transport, will retry\")"},{"line_number":280,"context_line":"                    eventlet.sleep(1)"},{"line_number":281,"context_line":"            raise exception.Error(_(\"Failed to get SSH transport after 30s\"))"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        with tempfile.NamedTemporaryFile() as private_key_file:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2F12A%3D","line":280,"in_reply_to":"AAAAVn%2F%2F2R8%3D","updated":"2014-03-03 20:55:18.000000000","message":"I agree with Randall (blocking for 30 seconds is not looking good)","commit_id":"4686b612fc1a714ead640dfd2d1ba0b74dac454f"}]}
