)]}'
{"freezer/openstack/backup.py":[{"author":{"_account_id":16768,"name":"Ruslan Aliev","email":"raliev@mirantis.com","username":"raliev"},"change_message_id":"766e8b3c43c185da91218d82bdee938750d8ac41","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        glance \u003d client_manager.get_glance()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        def condition():"},{"line_number":55,"context_line":"            return not instance.__dict__[\u0027OS-EXT-STS:task_state\u0027]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        utils.wait_for(condition, 1, 10)"},{"line_number":58,"context_line":"        instance \u003d nova.servers.get(instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_6ba55c45","line":55,"updated":"2016-11-28 08:19:28.000000000","message":"Are you sure that instance object will be updated in runtime without calling nova.servers.get() again?","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"7d45788918efb3fb3dd47a43a5bea14218e0d7fb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        glance \u003d client_manager.get_glance()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        def condition():"},{"line_number":55,"context_line":"            return not instance.__dict__[\u0027OS-EXT-STS:task_state\u0027]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        utils.wait_for(condition, 1, 10)"},{"line_number":58,"context_line":"        instance \u003d nova.servers.get(instance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_fa5f73e2","line":55,"in_reply_to":"5a74a57a_6ba55c45","updated":"2016-11-28 10:11:22.000000000","message":"Not sure, I\u0027ve thought about that, I think I will change it","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":22405,"name":"Vitaliy Nogin","email":"shadoff1982@gmail.com","username":"vnogin"},"change_message_id":"43631cd023b65dd8811505c9154d408b0a1aa705","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        instance \u003d nova.servers.get(instance_id)"},{"line_number":51,"context_line":"        glance \u003d client_manager.get_glance()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        def condition():"},{"line_number":54,"context_line":"            instance \u003d nova.servers.get(instance_id)"},{"line_number":55,"context_line":"            return not instance.__dict__[\u0027OS-EXT-STS:task_state\u0027]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_83c5e85c","line":53,"range":{"start_line":53,"start_character":8,"end_line":53,"end_character":24},"updated":"2016-12-01 09:23:55.000000000","message":"Please use more transparent names","commit_id":"479926e5bb3b37069f1d55b909cb6ed9d5503e0d"},{"author":{"_account_id":22405,"name":"Vitaliy Nogin","email":"shadoff1982@gmail.com","username":"vnogin"},"change_message_id":"43631cd023b65dd8811505c9154d408b0a1aa705","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        image \u003d glance.images.get(image_id)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        def condition2():"},{"line_number":66,"context_line":"            image \u003d glance.images.get(image_id)"},{"line_number":67,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_2395f43f","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":25},"updated":"2016-12-01 09:23:55.000000000","message":"Please use more transparent names","commit_id":"479926e5bb3b37069f1d55b909cb6ed9d5503e0d"},{"author":{"_account_id":13940,"name":"Saad Zaher","email":"eng.szaher@gmail.com","username":"szaher"},"change_message_id":"c08eea903ce0b5d47213a815865d5036335affef","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            return not instance.__dict__[\u0027OS-EXT-STS:task_state\u0027]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        utils.wait_for(instance_finish_task, 1, 10,"},{"line_number":58,"context_line":"                       message\u003d\"Wait for task finished\")"},{"line_number":59,"context_line":"        instance \u003d nova.servers.get(instance)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        image_id \u003d nova.servers.create_image(instance,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_91e57239","line":58,"updated":"2017-01-05 15:25:51.000000000","message":"I would say \n\n\"Waiting for instance {0} to finish {1} to start the snapshot process\".format(instance_id, instance.__dict__[\u0027OS-EXT-STS:task_state\u0027]) \n\nto get better understanding on what\u0027s going on.","commit_id":"6cd044df02327c7a37270945fe66ca43cd083752"},{"author":{"_account_id":13940,"name":"Saad Zaher","email":"eng.szaher@gmail.com","username":"szaher"},"change_message_id":"c08eea903ce0b5d47213a815865d5036335affef","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            return image.status \u003d\u003d \u0027active\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        utils.wait_for(image_active, 1, 10,"},{"line_number":71,"context_line":"                       message\u003d\"Wait for image active\")"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            image \u003d glance.images.get(image_id)"},{"line_number":74,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5201f7_51c6aa9a","line":71,"updated":"2017-01-05 15:25:51.000000000","message":"\"Waiting for instnace {0} snapshot to become active\".format(instance_id)","commit_id":"6cd044df02327c7a37270945fe66ca43cd083752"}],"freezer/tests/unit/utils/test_utils.py":[{"author":{"_account_id":16768,"name":"Ruslan Aliev","email":"raliev@mirantis.com","username":"raliev"},"change_message_id":"766e8b3c43c185da91218d82bdee938750d8ac41","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# limitations under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import datetime"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import os"},{"line_number":19,"context_line":"import time"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_eb840c0c","line":17,"updated":"2016-11-28 08:19:28.000000000","message":"mock is a third-party lib, please move it to next import section","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":16768,"name":"Ruslan Aliev","email":"raliev@mirantis.com","username":"raliev"},"change_message_id":"766e8b3c43c185da91218d82bdee938750d8ac41","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from mock import patch"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from freezer.exceptions.utils import TimeoutException"},{"line_number":24,"context_line":"from freezer.openstack import osclients"},{"line_number":25,"context_line":"from freezer.tests import commons"},{"line_number":26,"context_line":"from freezer.utils import utils"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_6b71dc43","line":23,"updated":"2016-11-28 08:19:28.000000000","message":"don\u0027t import objects, only modules","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"7d45788918efb3fb3dd47a43a5bea14218e0d7fb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from mock import patch"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from freezer.exceptions.utils import TimeoutException"},{"line_number":24,"context_line":"from freezer.openstack import osclients"},{"line_number":25,"context_line":"from freezer.tests import commons"},{"line_number":26,"context_line":"from freezer.utils import utils"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_da6717b5","line":23,"in_reply_to":"5a74a57a_6b71dc43","updated":"2016-11-28 10:11:22.000000000","message":"Ok","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"}],"freezer/utils/utils.py":[{"author":{"_account_id":16768,"name":"Ruslan Aliev","email":"raliev@mirantis.com","username":"raliev"},"change_message_id":"766e8b3c43c185da91218d82bdee938750d8ac41","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from oslo_log import log"},{"line_number":30,"context_line":"from six.moves import configparser"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from freezer.exceptions.utils import TimeoutException"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_ab95b433","line":32,"updated":"2016-11-28 08:19:28.000000000","message":"don\u0027t import objects, only modules","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":16768,"name":"Ruslan Aliev","email":"raliev@mirantis.com","username":"raliev"},"change_message_id":"766e8b3c43c185da91218d82bdee938750d8ac41","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"def wait_for(condition_func, wait_interval, timeout):"},{"line_number":517,"context_line":"    while timeout \u003e 0:"},{"line_number":518,"context_line":"        if condition_func():"},{"line_number":519,"context_line":"            return"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_6b2abc91","line":518,"updated":"2016-11-28 08:19:28.000000000","message":"What if condition_func returns not only True/False?","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"7d45788918efb3fb3dd47a43a5bea14218e0d7fb","unresolved":false,"context_lines":[{"line_number":515,"context_line":""},{"line_number":516,"context_line":"def wait_for(condition_func, wait_interval, timeout):"},{"line_number":517,"context_line":"    while timeout \u003e 0:"},{"line_number":518,"context_line":"        if condition_func():"},{"line_number":519,"context_line":"            return"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":"        time.sleep(wait_interval)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_3aa9eb90","line":518,"in_reply_to":"5a74a57a_6b2abc91","updated":"2016-11-28 10:11:22.000000000","message":"I guess it must return True/False of any other analogue otherwise how we will determine satisfying of the condition?","commit_id":"d1529d0026356fe68e33c0e10495e1ab6add0440"},{"author":{"_account_id":13940,"name":"Saad Zaher","email":"eng.szaher@gmail.com","username":"szaher"},"change_message_id":"3e92096232857d91548e9386c126d79428b3f0e6","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        time.sleep(wait_interval)"},{"line_number":521,"context_line":"        timeout -\u003d wait_interval"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    raise utils.TimeoutException(\"Timeout has been elapsed\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a6eadb0_062783ca","line":523,"updated":"2016-12-15 13:53:43.000000000","message":"Do we need to provide more details from the function being called ? \nIf this code raised the exception it will be confusing to understand what happened... At least you can say Timeout: Waiting for Image to be active. Something to let the user know where this error is coming from.","commit_id":"d2c641241246cc50293a6c19b1d01f8cd94a2ffb"},{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"acfd7a536833bb6be90bbc2d58a062c94702bfec","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        time.sleep(wait_interval)"},{"line_number":521,"context_line":"        timeout -\u003d wait_interval"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    raise utils.TimeoutException(\"Timeout has been elapsed\")"}],"source_content_type":"text/x-python","patch_set":11,"id":"da4df55a_b9657ee2","line":523,"in_reply_to":"1a6eadb0_062783ca","updated":"2016-12-22 14:48:35.000000000","message":"Thanks, good point","commit_id":"d2c641241246cc50293a6c19b1d01f8cd94a2ffb"}]}
