)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"13ff38f9a3d39b5ce9aca82fc47100a6c5e3fffc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     anastasia-karpinska \u003cakarpinska@griddynamics.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-28 17:28:48 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Crate_volume api works with TaskFlow 0.1"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create volume api command was reworked to work with TaskFlow 0.1"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAATn%2F%2Fx2c%3D","line":7,"updated":"2013-10-29 07:22:48.000000000","message":"create","commit_id":"44acf45c24579c3d3e49a911dc51c138f20764e0"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"18b39c98ec5c84daa295b9c5d20741dea86d7013","unresolved":false,"context_lines":[{"line_number":13,"context_line":"were reimplemented to work with TaskFlow 0.1.1"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"VolumeManager.create_volume was implemented as four separate"},{"line_number":16,"context_line":"flows to create volume: from snaphot, from image, from source"},{"line_number":17,"context_line":"volume and from nothing."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Implements: blueprint create-volume-flow"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAATn%2F%2BdyM%3D","line":16,"updated":"2013-11-25 19:28:00.000000000","message":"snaphot -\u003e snapshot","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"}],"cinder/flow_base.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"db1c9168491b783632cbac1a6307499482b4d0bb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                         **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def attach_debug_listeners(flow_engine):"},{"line_number":48,"context_line":"    \"\"\"Sets up a nice set of debug listeners for the flow."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    These listeners will log when tasks/flows are transitioning from state to"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BkUY%3D","line":47,"updated":"2013-11-23 02:34:22.000000000","message":"Is this still needed.\n\nI think https://github.com/stackforge/taskflow/blob/master/taskflow/listeners/logging.py can serve this purpose?","commit_id":"780d89975ef163f0575fc5354c88f4aaaf413424"},{"author":{"_account_id":7349,"name":"Anastasia Karpinska","email":"akarpinska@griddynamics.com","username":"anastasia-karpinska"},"change_message_id":"b457dd7f39fb816b363b146ededcea373a26ac0a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                         **kwargs)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def attach_debug_listeners(flow_engine):"},{"line_number":48,"context_line":"    \"\"\"Sets up a nice set of debug listeners for the flow."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    These listeners will log when tasks/flows are transitioning from state to"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2Bfrw%3D","line":47,"in_reply_to":"AAAATn%2F%2BkUY%3D","updated":"2013-11-25 14:16:09.000000000","message":"Removed","commit_id":"780d89975ef163f0575fc5354c88f4aaaf413424"}],"cinder/volume/flows/create_volume.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"3aef98f1d62c186b87a21788e3153fb3a9824135","unresolved":false,"context_lines":[{"line_number":526,"context_line":"    it does appear like the quota will never be rolled back). This makes"},{"line_number":527,"context_line":"    software upgrades hard (inflight operations will need to be stopped or"},{"line_number":528,"context_line":"    allowed to complete before the upgrade can occur). *In the future* when"},{"line_number":529,"context_line":"    taskflow has persistence built-in this should be easier to correct via"},{"line_number":530,"context_line":"    an automated or manual process."},{"line_number":531,"context_line":"    \"\"\""},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Ffyg%3D","line":529,"updated":"2013-11-04 14:01:36.000000000","message":"Taskflow now has persistence built-in.","commit_id":"e74ccc24889a5551abbed59fa9a795086ea38dea"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"3aef98f1d62c186b87a21788e3153fb3a9824135","unresolved":false,"context_lines":[{"line_number":564,"context_line":"    This which will signal a transition of the api workflow to another child"},{"line_number":565,"context_line":"    and/or related workflow on another component."},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    Reversion strategy: N/A"},{"line_number":568,"context_line":"    \"\"\""},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    def __init__(self, scheduler_rpcapi, volume_rpcapi, db):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2FfyY%3D","line":567,"updated":"2013-11-04 14:01:36.000000000","message":"But there is \u0027revert\u0027 method here. Is this comment relevant?","commit_id":"e74ccc24889a5551abbed59fa9a795086ea38dea"}],"cinder/volume/flows/manager_create_volume.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":46,"context_line":")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class GetVolumeRefAndStatusTask(flow_base.CinderTask):"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    default_provides \u003d [\u0027volume_ref\u0027, \u0027status\u0027]"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Bdq4%3D","line":49,"updated":"2013-11-25 20:09:30.000000000","message":"Comments as to what this task does would be great.\n\nI think the pattern @ https://github.com/openstack/cinder/blob/master/cinder/volume/flows/create_volume/__init__.py#L164 is a good one to follow.","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                                                        **kwargs)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def execute(self, context, volume_id, host):"},{"line_number":59,"context_line":"        \"\"\"Extracts volume_ref for given volume_id."},{"line_number":60,"context_line":"           Notifies about volume usage."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Bdvc%3D","line":59,"updated":"2013-11-25 20:09:30.000000000","message":"Extracts the volume ref and status, can we also include as to what is notified in this comment.","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            return"},{"line_number":83,"context_line":"        volume_ref \u003d result[0]"},{"line_number":84,"context_line":"        volume_ref[\u0027status\u0027] \u003d \u0027error\u0027"},{"line_number":85,"context_line":"        self.db.volume_update(context,"},{"line_number":86,"context_line":"                              volume_ref[\u0027id\u0027],"},{"line_number":87,"context_line":"                              {\u0027status\u0027: volume_ref[\u0027status\u0027]})"},{"line_number":88,"context_line":"        volume_utils.notify_about_volume_usage("}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BdrI%3D","line":85,"updated":"2013-11-25 20:09:30.000000000","message":"Can we make sure to wrap this in a try: except: so that updating or notifying can not cause this reverting process to fail. Thanks.","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"class GetSnapshotRefTask(flow_base.CinderTask):"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    default_provides \u003d \u0027snapshot_ref\u0027"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def __init__(self, db, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Bdqg%3D","line":95,"updated":"2013-11-25 20:09:30.000000000","message":"Add on basic information about this.","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"class GetSourceVolumeRefTask(flow_base.CinderTask):"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    default_provides \u003d \u0027sourcevol_ref\u0027"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __init__(self, db, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BdqU%3D","line":109,"updated":"2013-11-25 20:09:30.000000000","message":"Same as above.","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":220,"context_line":"class CreateVolumeTask(CreateVolumeBaseTask):"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def execute(self, volume_ref):"},{"line_number":223,"context_line":"        \"\"\"Creates volume. \"\"\""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        self._print_log_message(volume_ref)"},{"line_number":226,"context_line":"        model_update \u003d self.driver.create_volume(volume_ref)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Bdk0%3D","line":223,"updated":"2013-11-25 20:09:30.000000000","message":"More detail comment would be nice ;)","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"}],"cinder/volume/flows/utils.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"db1c9168491b783632cbac1a6307499482b4d0bb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    return flow"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def exception_to_unicode(exc):"},{"line_number":60,"context_line":"    try:"},{"line_number":61,"context_line":"        return unicode(exc)"},{"line_number":62,"context_line":"    except UnicodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BkUU%3D","line":59,"updated":"2013-11-23 02:34:22.000000000","message":"Shouldnt these 2 functions belong in cinder/utils.py??","commit_id":"780d89975ef163f0575fc5354c88f4aaaf413424"},{"author":{"_account_id":7349,"name":"Anastasia Karpinska","email":"akarpinska@griddynamics.com","username":"anastasia-karpinska"},"change_message_id":"b457dd7f39fb816b363b146ededcea373a26ac0a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    return flow"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def exception_to_unicode(exc):"},{"line_number":60,"context_line":"    try:"},{"line_number":61,"context_line":"        return unicode(exc)"},{"line_number":62,"context_line":"    except UnicodeError:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2BfqM%3D","line":59,"in_reply_to":"AAAATn%2F%2BkUU%3D","updated":"2013-11-25 14:16:09.000000000","message":"Done\nexception_to_unicode was removed because it never used","commit_id":"780d89975ef163f0575fc5354c88f4aaaf413424"}],"cinder/volume/manager.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"253eae210b27ce8285ac8a6d30d1e4474b7c7b75","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        except exception.ImageCopyFailure:"},{"line_number":272,"context_line":"            return"},{"line_number":273,"context_line":"        except Exception:"},{"line_number":274,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":275,"context_line":"            rescheduled \u003d False"},{"line_number":276,"context_line":"            # try to re-schedule volume:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2Bdzg%3D","line":273,"updated":"2013-11-25 20:09:30.000000000","message":"Can we hook-in to the notification system that an engine provides to do this instead? That would seem like a good usage of that. This \u0027listener\u0027 would be listening for activities that would cause it to fire (the failure of the flow). This except Exception: block is doing that, what do u think? Maybe that will make it worse?","commit_id":"887e71e8f36e784c934637c0f1fea1c416a24a8c"}]}
