)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":9,"context_line":"A complete engine to backup/restore nova instances through freezer."},{"line_number":10,"context_line":"This engine is able backup/restore signle server for now with"},{"line_number":11,"context_line":"limited features. It can be used to backup to local/ssh/swift or any"},{"line_number":12,"context_line":"storage driver availeble."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I317fc87d6f1f674f0eb7244e4b2a5d7a95743a5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba2be162_3a0adb79","line":12,"updated":"2017-03-03 16:10:28.000000000","message":"availeble -\u003e available","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"}],"freezer/common/config.py":[{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":117,"context_line":"               choices\u003d[\u0027tar\u0027, \u0027rsync\u0027, \u0027nova\u0027],"},{"line_number":118,"context_line":"               dest\u003d\u0027engine_name\u0027,"},{"line_number":119,"context_line":"               default\u003dDEFAULT_PARAMS[\u0027engine_name\u0027],"},{"line_number":120,"context_line":"               help\u003d\"Engine to be used for backup/restore. \""},{"line_number":121,"context_line":"                    \"With tar, the file inode will be checked for changes \""},{"line_number":122,"context_line":"                    \"amid backup execution. If the file inode changed, the \""},{"line_number":123,"context_line":"                    \"whole file will be backed up. With rsync, the data \""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_3ae57bdb","line":120,"updated":"2017-03-03 16:10:28.000000000","message":"Probably it\u0027s better to add some words about nova engine into this description","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"}],"freezer/engine/nova/nova.py":[{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        img_id \u003d image.id"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        def image_active():"},{"line_number":75,"context_line":"            image \u003d self.glance.images.get(img_id)"},{"line_number":76,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_b57fbca9","line":74,"updated":"2017-03-03 16:10:28.000000000","message":"You\u0027re using this function several times, so let\u0027s define it aas an outer function with image_id parameter.","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"},{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            image \u003d self.glance.images.get(img_id)"},{"line_number":76,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        utils.wait_for(image_active, 1, 100,"},{"line_number":79,"context_line":"                       message\u003d\"Waiting for image to finish uploading {0} \""},{"line_number":80,"context_line":"                               \"and become active\".format(img_id))"},{"line_number":81,"context_line":"        server \u003d self.nova.servers.create(name\u003dserver_info.get(\u0027name\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_5544c019","line":78,"updated":"2017-03-03 16:10:28.000000000","message":"Probably it\u0027s not a very good idea to set a hardcoded timeout for image creation. Here it was set to 100 seconds. This value should depend on the image size, so sometimes this process might take much more time.\n\nIn my patch I used code which waited untill status becomes either active or killed. During this process my code sent logs to make this process more transparent. I decided that in case process stucked it would be better to let user terminate process by his own. Probably this was also not a very good approach. Here are the link https://review.openstack.org/#/c/379281/14/freezer/openstack/osclients.py","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"},{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            return not server.__dict__[\u0027OS-EXT-STS:task_state\u0027]"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        utils.wait_for("},{"line_number":98,"context_line":"            instance_finish_task, 1, 100,"},{"line_number":99,"context_line":"            message\u003d\"Waiting for instance {0} to finish {1} to start the \""},{"line_number":100,"context_line":"                    \"snapshot process\".format("},{"line_number":101,"context_line":"                        backup_path,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_75faa476","line":98,"updated":"2017-03-03 16:10:28.000000000","message":"same question here related to hardcoding time limit","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"},{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                \"Image {0} is not created or can\u0027t be found.\".format(image_id)"},{"line_number":113,"context_line":"            )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        def image_active():"},{"line_number":116,"context_line":"            image \u003d self.glance.images.get(image_id)"},{"line_number":117,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_3542ec68","line":115,"updated":"2017-03-03 16:10:28.000000000","message":"Same thing related to image_active here","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"},{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"b41ecd5b99f212f8193264c61e864dcf28e38bed","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            image \u003d self.glance.images.get(image_id)"},{"line_number":117,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        utils.wait_for(image_active, 1, 100,"},{"line_number":120,"context_line":"                       message\u003d\"Waiting for instnace {0} snapshot to become \""},{"line_number":121,"context_line":"                               \"active\".format(backup_path))"},{"line_number":122,"context_line":"        image \u003d self.glance.images.get(image_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba2be162_f513f4b5","line":119,"updated":"2017-03-03 16:10:28.000000000","message":"Same thing related to time limit","commit_id":"40e7abdd8dd171f1b5d6cf85e0cd297e45e0ae4e"},{"author":{"_account_id":6508,"name":"Dmitry Stepanenko","email":"dstepanenko@mirantis.com","username":"dstepanenko"},"change_message_id":"70a46bf5736c0f7cda4b2f36882249b5067a61d2","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            utils.wait_for("},{"line_number":79,"context_line":"                NovaEngine.image_active,"},{"line_number":80,"context_line":"                1,"},{"line_number":81,"context_line":"                100,"},{"line_number":82,"context_line":"                message\u003d\"Waiting for image to finish uploading {0} and become\""},{"line_number":83,"context_line":"                        \" active\".format(image.id),"},{"line_number":84,"context_line":"                kwargs\u003d{\"glance_client\": self.glance, \"image_id\": image.id}"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba2be162_f71d7c73","line":81,"updated":"2017-03-06 12:01:47.000000000","message":"Let\u0027s at least create a constant for this time limit. What do you think? It\u0027s not a good idea to have this value hardcoded in several place of the code.","commit_id":"12ec41afabe5447e5249731bed7909d2a1dcddf0"}]}
