)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"86b560c53554f94a93170390f7bf1c22663150be","unresolved":false,"context_lines":[{"line_number":24,"context_line":"2. encryption settings."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Subsequent patches can address these cases."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I2dc99b4fa64d611d2bb936fc3890ca334e08bb55"},{"line_number":29,"context_line":"Implements: blueprint volume-retype"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAATn%2F%2BWHo%3D","line":27,"updated":"2013-11-27 05:53:05.000000000","message":"DocImpact. Having the different scheduler hints would be good to know.","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"2f6d723fb310de3abf095b5020c120bb10c84955","unresolved":false,"context_lines":[{"line_number":24,"context_line":"2. encryption settings."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Subsequent patches can address these cases."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: I2dc99b4fa64d611d2bb936fc3890ca334e08bb55"},{"line_number":29,"context_line":"Implements: blueprint volume-retype"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"AAAATn%2F%2BVqc%3D","line":27,"in_reply_to":"AAAATn%2F%2BWHo%3D","updated":"2013-11-27 08:47:23.000000000","message":"Done","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"}],"cinder/api/contrib/volume_actions.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"c518c7e1de3f11aab1b63aba56e5f905c6d4b816","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        self.volume_api.update_readonly_flag(context, volume, readonly_flag)"},{"line_number":250,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    @wsgi.action(\u0027os-retype\u0027)"},{"line_number":253,"context_line":"    def _retype(self, req, id, body):"},{"line_number":254,"context_line":"        \"\"\"Change type of existing volume.\"\"\""},{"line_number":255,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2FjbY%3D","line":252,"updated":"2013-09-03 15:34:02.000000000","message":"Please make sure this can be disabled via policy","commit_id":"f696348f015e8a4a42d10ca339a02895c9bffff0"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"86b560c53554f94a93170390f7bf1c22663150be","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BWLQ%3D","line":313,"updated":"2013-11-27 05:53:05.000000000","message":"We should catch exceptions here and raise the appropriate webob exception.","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"2f6d723fb310de3abf095b5020c120bb10c84955","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BVkY%3D","line":313,"in_reply_to":"AAAATn%2F%2BWLQ%3D","updated":"2013-11-27 08:47:23.000000000","message":"This is being done automatically based on the exceptions being raised.  I test it in the unit tests as well.  For example, over quota gives 413, volume type not found gives 404, etc.  Did I miss something?","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":303,"context_line":"        volume \u003d self.volume_api.get(context, id)"},{"line_number":304,"context_line":"        try:"},{"line_number":305,"context_line":"            new_type \u003d body[\u0027os-retype\u0027][\u0027new_type\u0027]"},{"line_number":306,"context_line":"        except KeyError:"},{"line_number":307,"context_line":"            msg \u003d _(\"New volume type must be specified.\")"},{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F92n8%3D","line":305,"updated":"2013-12-05 22:24:15.000000000","message":"In case new_type equals the original type by accident, we should check here to save us from doing any more things to the volume.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":303,"context_line":"        volume \u003d self.volume_api.get(context, id)"},{"line_number":304,"context_line":"        try:"},{"line_number":305,"context_line":"            new_type \u003d body[\u0027os-retype\u0027][\u0027new_type\u0027]"},{"line_number":306,"context_line":"        except KeyError:"},{"line_number":307,"context_line":"            msg \u003d _(\"New volume type must be specified.\")"},{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r4Y%3D","line":305,"in_reply_to":"AAAATn%2F92n8%3D","updated":"2013-12-11 14:24:55.000000000","message":"Added this check in volume/api.py as well as unit tests","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":309,"context_line":"        hints \u003d {}"},{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9yUU%3D","line":311,"updated":"2013-12-05 22:24:15.000000000","message":"It seems we are using mostly identical \u0027scheduler_hints\u0027 the way the \u0027scheduler_hints\u0027 extension does for volume create(). It\u0027s useful but the problem is the \u0027scheduler_hints\u0027 can be turned off for volume create() and in that case, \u0027scheduler_hints\u0027 is still available for retype, which is kinda inconsistent behavior.  I\u0027d suggest for \u0027migration_policy\u0027 we explicitly add a key in request body and leave the rest \u0027hints\u0027 in \u0027scheduler_hints\u0027 and have to come up with a plan to make that optional like the other extension.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":309,"context_line":"        hints \u003d {}"},{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r4U%3D","line":311,"in_reply_to":"AAAATn%2F9yUU%3D","updated":"2013-12-11 14:24:55.000000000","message":"Done","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F92hE%3D","line":313,"updated":"2013-12-05 22:24:15.000000000","message":"we should handle InvalidVolumeType, InvalidVolume, InvalidInput exceptions here or even validating those conditions here before passing it to volume API.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        if \u0027scheduler_hints\u0027 in body[\u0027os-retype\u0027]:"},{"line_number":311,"context_line":"            hints \u003d body[\u0027os-retype\u0027][\u0027scheduler_hints\u0027]"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        self.volume_api.retype(context, volume, new_type, hints)"},{"line_number":314,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r4I%3D","line":313,"in_reply_to":"AAAATn%2F92hE%3D","updated":"2013-12-11 14:24:55.000000000","message":"volume/api.py checks those and raises.  Those exceptions are automatically converted into proper webob exceptions, and are included in the unit tests.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"1906067fb9862b4b6e2fa4ca02c2a502c803e88d","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":309,"context_line":"        policy \u003d body[\u0027os-retype\u0027].get(\u0027migration_policy\u0027)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        self.volume_api.retype(context, volume, new_type, policy)"},{"line_number":312,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F%2B%2B0%3D","line":311,"updated":"2013-12-25 14:19:25.000000000","message":"question: when wsgi module catches the exception, would it leave anything in log? If it\u0027s not, I\u0027m OK to let it do the convert.","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"88c746bbd5a3eea42a639cad8144afe8b6fea8fd","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":309,"context_line":"        policy \u003d body[\u0027os-retype\u0027].get(\u0027migration_policy\u0027)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        self.volume_api.retype(context, volume, new_type, policy)"},{"line_number":312,"context_line":"        return webob.Response(status_int\u003d202)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F9h4%3D","line":311,"in_reply_to":"AAAAT3%2F%2F%2B%2B0%3D","updated":"2013-12-26 09:38:05.000000000","message":"Yes, it\u0027s handled the same way by cinder/openstack/api/wsgi.py","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"}],"cinder/quota_utils.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"86b560c53554f94a93170390f7bf1c22663150be","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_volume_type_reservation(ctxt, volume, type_id):"},{"line_number":26,"context_line":"    # First we need to the quotas for the updated type"},{"line_number":27,"context_line":"    try:"},{"line_number":28,"context_line":"        reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: volume[\u0027size\u0027]}"},{"line_number":29,"context_line":"        QUOTAS.add_volume_type_opts(ctxt,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BWJ0%3D","line":26,"updated":"2013-11-27 05:53:05.000000000","message":"What?","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"2f6d723fb310de3abf095b5020c120bb10c84955","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_volume_type_reservation(ctxt, volume, type_id):"},{"line_number":26,"context_line":"    # First we need to the quotas for the updated type"},{"line_number":27,"context_line":"    try:"},{"line_number":28,"context_line":"        reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: volume[\u0027size\u0027]}"},{"line_number":29,"context_line":"        QUOTAS.add_volume_type_opts(ctxt,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BVmg%3D","line":26,"in_reply_to":"AAAATn%2F%2BWJ0%3D","updated":"2013-11-27 08:47:23.000000000","message":"Exactly. :)\n\nDone.","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                    requested\u003ds_size, quota\u003dd_quota, consumed\u003dd_consumed)"},{"line_number":55,"context_line":"            elif \u0027volumes\u0027 in over:"},{"line_number":56,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":57,"context_line":"                        \"volume (%(d_consumed)d volumes\""},{"line_number":58,"context_line":"                        \"already consumed)\")"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"                LOG.warn(msg % {\u0027s_pid\u0027: ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Z2o%3D","line":57,"updated":"2013-12-11 22:23:46.000000000","message":"Missing space at the end of this line.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                    requested\u003ds_size, quota\u003dd_quota, consumed\u003dd_consumed)"},{"line_number":55,"context_line":"            elif \u0027volumes\u0027 in over:"},{"line_number":56,"context_line":"                msg \u003d _(\"Quota exceeded for %(s_pid)s, tried to create \""},{"line_number":57,"context_line":"                        \"volume (%(d_consumed)d volumes\""},{"line_number":58,"context_line":"                        \"already consumed)\")"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"                LOG.warn(msg % {\u0027s_pid\u0027: ctxt.project_id,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XYE%3D","line":57,"in_reply_to":"AAAATn%2F9Z2o%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"}],"cinder/scheduler/chance.py":[{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        Accepts scheduler_hints in filter_properties:"},{"line_number":111,"context_line":"        migrate\u003dnever : choose current host, fail if not suitable"},{"line_number":112,"context_line":"        migrate\u003ddemand : migrate if necessary (default)"},{"line_number":113,"context_line":"        migrate\u003dhost : migrate if necessary forcing host-based copy"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        migration_policy \u003d \u0027demand\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX4k%3D","line":112,"updated":"2013-11-08 00:59:17.000000000","message":"Should this be \"on-demand\" ? I think it might be clearer at first glance.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        Accepts scheduler_hints in filter_properties:"},{"line_number":111,"context_line":"        migrate\u003dnever : choose current host, fail if not suitable"},{"line_number":112,"context_line":"        migrate\u003ddemand : migrate if necessary (default)"},{"line_number":113,"context_line":"        migrate\u003dhost : migrate if necessary forcing host-based copy"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        migration_policy \u003d \u0027demand\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FWm0%3D","line":112,"in_reply_to":"AAAATn%2F%2FX4k%3D","updated":"2013-11-10 14:12:25.000000000","message":"Agreed.  Done.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        migrate\u003dnever : choose current host, fail if not suitable"},{"line_number":112,"context_line":"        migrate\u003ddemand : migrate if necessary (default)"},{"line_number":113,"context_line":"        migrate\u003dhost : migrate if necessary forcing host-based copy"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        migration_policy \u003d \u0027demand\u0027"},{"line_number":116,"context_line":"        hints \u003d {}"},{"line_number":117,"context_line":"        if \u0027scheduler_hints\u0027 in filter_properties:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX4o%3D","line":114,"updated":"2013-11-08 00:59:17.000000000","message":"Should we document the tuple that is returned?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        migrate\u003dnever : choose current host, fail if not suitable"},{"line_number":112,"context_line":"        migrate\u003ddemand : migrate if necessary (default)"},{"line_number":113,"context_line":"        migrate\u003dhost : migrate if necessary forcing host-based copy"},{"line_number":114,"context_line":"        \"\"\""},{"line_number":115,"context_line":"        migration_policy \u003d \u0027demand\u0027"},{"line_number":116,"context_line":"        hints \u003d {}"},{"line_number":117,"context_line":"        if \u0027scheduler_hints\u0027 in filter_properties:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVLw%3D","line":114,"in_reply_to":"AAAATn%2F%2FX4o%3D","updated":"2013-11-10 14:12:25.000000000","message":"More documentation never hurts :)\nDone.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            request_spec,"},{"line_number":126,"context_line":"            filter_properties\u003dfilter_properties)"},{"line_number":127,"context_line":"        if not weighed_hosts:"},{"line_number":128,"context_line":"            msg \u003d (_(\u0027cannot find host to retype volume %(id)s\u0027)"},{"line_number":129,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027]})"},{"line_number":130,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX5E%3D","line":128,"updated":"2013-11-08 00:59:17.000000000","message":"Should the msg start with uppercase, and also mention the desired type like the message in the filter_scheduler?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            request_spec,"},{"line_number":126,"context_line":"            filter_properties\u003dfilter_properties)"},{"line_number":127,"context_line":"        if not weighed_hosts:"},{"line_number":128,"context_line":"            msg \u003d (_(\u0027cannot find host to retype volume %(id)s\u0027)"},{"line_number":129,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027]})"},{"line_number":130,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVLs%3D","line":128,"in_reply_to":"AAAATn%2F%2FX5E%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                host_states \u003d self.host_manager.get_all_host_states(elevated)"},{"line_number":137,"context_line":"                for host_state in host_states:"},{"line_number":138,"context_line":"                    if host_state.host \u003d\u003d current_host:"},{"line_number":139,"context_line":"                        return (host_state, migration_policy)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if migration_policy \u003d\u003d \u0027never\u0027:"},{"line_number":142,"context_line":"            msg \u003d (_(\u0027Current host not valid for volume %(id)s with type \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX4c%3D","line":139,"updated":"2013-11-08 00:59:17.000000000","message":"Shouldn\u0027t we return weighted_host here instead of host_state to match what is returned in line 148?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                host_states \u003d self.host_manager.get_all_host_states(elevated)"},{"line_number":137,"context_line":"                for host_state in host_states:"},{"line_number":138,"context_line":"                    if host_state.host \u003d\u003d current_host:"},{"line_number":139,"context_line":"                        return (host_state, migration_policy)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if migration_policy \u003d\u003d \u0027never\u0027:"},{"line_number":142,"context_line":"            msg \u003d (_(\u0027Current host not valid for volume %(id)s with type \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVKs%3D","line":139,"in_reply_to":"AAAATn%2F%2FX4c%3D","updated":"2013-11-10 14:12:25.000000000","message":"Good catch!  Fixed and added scheduler unit tests, which caught some other bugs.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"}],"cinder/scheduler/driver.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"698a9f05cb5678ee7dfd628b9106e4fa88228b11","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        services \u003d db.service_get_all_by_topic(context, topic)"},{"line_number":74,"context_line":"        return [service[\u0027host\u0027]"},{"line_number":75,"context_line":"                for service in services"},{"line_number":76,"context_line":"                if utils.service_is_up(service) and not service[\u0027disabled\u0027]]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def host_passes_filters(self, context, volume_id, host, filter_properties):"},{"line_number":79,"context_line":"        \"\"\"Check if the specified host passes the filters.\"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F8uc%3D","line":76,"updated":"2013-12-26 14:00:23.000000000","message":"Why filter node whose service is disabled? The volume node should still be able to accept new request even if service is disabled.\n\nIn Cinder, there is no filter like compute_filter.py, so I think that we can remove this check.","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"957e8f548f140a200048155bceb6770d0b9561eb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        services \u003d db.service_get_all_by_topic(context, topic)"},{"line_number":74,"context_line":"        return [service[\u0027host\u0027]"},{"line_number":75,"context_line":"                for service in services"},{"line_number":76,"context_line":"                if utils.service_is_up(service) and not service[\u0027disabled\u0027]]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def host_passes_filters(self, context, volume_id, host, filter_properties):"},{"line_number":79,"context_line":"        \"\"\"Check if the specified host passes the filters.\"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F4Fo%3D","line":76,"in_reply_to":"AAAAT3%2F%2F8uc%3D","updated":"2013-12-28 18:06:16.000000000","message":"I don\u0027t remember the logic behind this change.  Reverted.","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        current_host \u003d request_spec[\u0027volume_properties\u0027][\u0027host\u0027]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # The volume already exists on this host, and so we shouldn\u0027t check if"},{"line_number":117,"context_line":"        # it can accept the volume again in the CapacityFilter."},{"line_number":118,"context_line":"        filter_properties[\u0027vol_exists_on\u0027] \u003d current_host"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        weighed_hosts \u003d self._get_weighted_candidates(context, request_spec,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9y88%3D","line":117,"updated":"2013-12-05 22:24:15.000000000","message":"Is this assumption always true with all back-ends?  I can think of some corner cases may cause retype failure.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        current_host \u003d request_spec[\u0027volume_properties\u0027][\u0027host\u0027]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # The volume already exists on this host, and so we shouldn\u0027t check if"},{"line_number":117,"context_line":"        # it can accept the volume again in the CapacityFilter."},{"line_number":118,"context_line":"        filter_properties[\u0027vol_exists_on\u0027] \u003d current_host"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        weighed_hosts \u003d self._get_weighted_candidates(context, request_spec,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r2w%3D","line":117,"in_reply_to":"AAAATn%2F9y88%3D","updated":"2013-12-11 14:24:55.000000000","message":"I think in terms of CapacityFilter this should be OK - it doesn\u0027t do anything different today for different types.  When the volume was created the CapacityFilter said it was OK, so I think it should say the same now.  Do you agree?  Other suggestions?","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            msg \u003d (_(\u0027No valid hosts for volume %(id)s with type %(type)s\u0027)"},{"line_number":124,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027],"},{"line_number":125,"context_line":"                      \u0027type\u0027: request_spec[\u0027volume_type\u0027]})"},{"line_number":126,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        for weighed_host in weighed_hosts:"},{"line_number":129,"context_line":"            host_state \u003d weighed_host.obj"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ykk%3D","line":126,"updated":"2013-12-05 22:24:15.000000000","message":"What about the reservation made in volume api?  Should we give it back?","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            msg \u003d (_(\u0027No valid hosts for volume %(id)s with type %(type)s\u0027)"},{"line_number":124,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027],"},{"line_number":125,"context_line":"                      \u0027type\u0027: request_spec[\u0027volume_type\u0027]})"},{"line_number":126,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        for weighed_host in weighed_hosts:"},{"line_number":129,"context_line":"            host_state \u003d weighed_host.obj"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r24%3D","line":126,"in_reply_to":"AAAATn%2F9ykk%3D","updated":"2013-12-11 14:24:55.000000000","message":"Changed the code to pass quota reservations onward in case we need to roll back.  Added rollback to scheduler/manager.py.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                     \u0027%(type)s, migration not allowed\u0027)"},{"line_number":136,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027],"},{"line_number":137,"context_line":"                      \u0027type\u0027: request_spec[\u0027volume_type\u0027]})"},{"line_number":138,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        top_host \u003d self._choose_top_host(weighed_hosts, request_spec)"},{"line_number":141,"context_line":"        return (top_host.obj, migration_policy)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9ykg%3D","line":138,"updated":"2013-12-05 22:24:15.000000000","message":"ditto","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                     \u0027%(type)s, migration not allowed\u0027)"},{"line_number":136,"context_line":"                   % {\u0027id\u0027: request_spec[\u0027volume_id\u0027],"},{"line_number":137,"context_line":"                      \u0027type\u0027: request_spec[\u0027volume_type\u0027]})"},{"line_number":138,"context_line":"            raise exception.NoValidHost(reason\u003dmsg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        top_host \u003d self._choose_top_host(weighed_hosts, request_spec)"},{"line_number":141,"context_line":"        return (top_host.obj, migration_policy)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r20%3D","line":138,"in_reply_to":"AAAATn%2F9ykg%3D","updated":"2013-12-11 14:24:55.000000000","message":"Ditto","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"}],"cinder/scheduler/host_manager.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"1906067fb9862b4b6e2fa4ca02c2a502c803e88d","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        capab_copy[\"timestamp\"] \u003d timeutils.utcnow()  # Reported time"},{"line_number":252,"context_line":"        self.service_states[host] \u003d capab_copy"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_all_host_states(self, context, iterator\u003dTrue):"},{"line_number":255,"context_line":"        \"\"\"Returns a dict of all the hosts the HostManager"},{"line_number":256,"context_line":"          knows about. Also, each of the consumable resources in HostState"},{"line_number":257,"context_line":"          are pre-populated and adjusted based on data in the db."}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F%2B9U%3D","line":254,"updated":"2013-12-25 14:19:25.000000000","message":"Is this change necessary?  I don\u0027t see any caller using new argument.","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"88c746bbd5a3eea42a639cad8144afe8b6fea8fd","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        capab_copy[\"timestamp\"] \u003d timeutils.utcnow()  # Reported time"},{"line_number":252,"context_line":"        self.service_states[host] \u003d capab_copy"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_all_host_states(self, context, iterator\u003dTrue):"},{"line_number":255,"context_line":"        \"\"\"Returns a dict of all the hosts the HostManager"},{"line_number":256,"context_line":"          knows about. Also, each of the consumable resources in HostState"},{"line_number":257,"context_line":"          are pre-populated and adjusted based on data in the db."}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F9hg%3D","line":254,"in_reply_to":"AAAAT3%2F%2F%2B9U%3D","updated":"2013-12-26 09:38:05.000000000","message":"Leftover from a previous version - thanks!","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"}],"cinder/scheduler/manager.py":[{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    {\u0027type_id\u0027: new_type[\u0027id\u0027], \u0027volume_id\u0027: volume_id})"},{"line_number":142,"context_line":"            orig_status \u003d volume_ref[\u0027status\u0027].replace(\u0027retyping-\u0027, \u0027\u0027)"},{"line_number":143,"context_line":"            volume_state \u003d {\u0027volume_state\u0027: {\u0027status\u0027: orig_status}}"},{"line_number":144,"context_line":"            self._set_volume_state_and_notify(\u0027retype\u0027, volume_state,"},{"line_number":145,"context_line":"                                              context, ex, request_spec, mesg)"},{"line_number":146,"context_line":"        except Exception as ex:"},{"line_number":147,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2w%3D","line":144,"updated":"2013-11-08 00:59:17.000000000","message":"Should you include a new method _retype_volume_set_error analogous to _migrate_volume_set_error, to handle the code in these two excepts?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                    {\u0027type_id\u0027: new_type[\u0027id\u0027], \u0027volume_id\u0027: volume_id})"},{"line_number":142,"context_line":"            orig_status \u003d volume_ref[\u0027status\u0027].replace(\u0027retyping-\u0027, \u0027\u0027)"},{"line_number":143,"context_line":"            volume_state \u003d {\u0027volume_state\u0027: {\u0027status\u0027: orig_status}}"},{"line_number":144,"context_line":"            self._set_volume_state_and_notify(\u0027retype\u0027, volume_state,"},{"line_number":145,"context_line":"                                              context, ex, request_spec, mesg)"},{"line_number":146,"context_line":"        except Exception as ex:"},{"line_number":147,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVCY%3D","line":144,"in_reply_to":"AAAATn%2F%2FX2w%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                                     force_host_copy)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def retype(self, context, topic, volume_id,"},{"line_number":124,"context_line":"               request_spec, filter_properties\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Schedule the modification of a volume\u0027s type.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        def _retype_volume_set_error(self, context, ex, request_spec,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Zx0%3D","line":124,"updated":"2013-12-11 22:23:46.000000000","message":"Given the number of parameters here I think we should include a parameter list.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                                     force_host_copy)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def retype(self, context, topic, volume_id,"},{"line_number":124,"context_line":"               request_spec, filter_properties\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Schedule the modification of a volume\u0027s type.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        def _retype_volume_set_error(self, context, ex, request_spec,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XPg%3D","line":124,"in_reply_to":"AAAATn%2F9Zx0%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \"\"\"Schedule the modification of a volume\u0027s type.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        def _retype_volume_set_error(self, context, ex, request_spec,"},{"line_number":128,"context_line":"                                     volume_ref, mesg, reservations):"},{"line_number":129,"context_line":"            if reservations:"},{"line_number":130,"context_line":"                QUOTAS.rollback(context, reservations)"},{"line_number":131,"context_line":"            if (volume_ref[\u0027instance_uuid\u0027] is None and"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9ZxA%3D","line":128,"updated":"2013-12-11 22:23:46.000000000","message":"Ok, this is really picky, but everywhere else you we are using msg for messages but here you use mesg.  When I was reading through the code it threw me off.  Could we change this?","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \"\"\"Schedule the modification of a volume\u0027s type.\"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        def _retype_volume_set_error(self, context, ex, request_spec,"},{"line_number":128,"context_line":"                                     volume_ref, mesg, reservations):"},{"line_number":129,"context_line":"            if reservations:"},{"line_number":130,"context_line":"                QUOTAS.rollback(context, reservations)"},{"line_number":131,"context_line":"            if (volume_ref[\u0027instance_uuid\u0027] is None and"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XPY%3D","line":128,"in_reply_to":"AAAATn%2F9ZxA%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        volume_ref \u003d db.volume_get(context, volume_id)"},{"line_number":141,"context_line":"        new_type \u003d request_spec.get(\u0027volume_type\u0027)"},{"line_number":142,"context_line":"        if new_type is None:"},{"line_number":143,"context_line":"            LOG.error(_(\u0027New volume type not specified in request_spec\u0027))"},{"line_number":144,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027volume_type\u0027)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Default migration policy is \u0027on-demand\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9ZxY%3D","line":143,"updated":"2013-12-11 22:23:46.000000000","message":"This should end with a \u0027.\u0027","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        volume_ref \u003d db.volume_get(context, volume_id)"},{"line_number":141,"context_line":"        new_type \u003d request_spec.get(\u0027volume_type\u0027)"},{"line_number":142,"context_line":"        if new_type is None:"},{"line_number":143,"context_line":"            LOG.error(_(\u0027New volume type not specified in request_spec\u0027))"},{"line_number":144,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027volume_type\u0027)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Default migration policy is \u0027on-demand\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XPA%3D","line":143,"in_reply_to":"AAAATn%2F9ZxY%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                                                    filter_properties,"},{"line_number":156,"context_line":"                                                    migration_policy)"},{"line_number":157,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":158,"context_line":"            mesg \u003d ((\"Could not find a host for volume %(volume_id)s with \""},{"line_number":159,"context_line":"                     \"type %(type_id)s\") %"},{"line_number":160,"context_line":"                    {\u0027type_id\u0027: new_type[\u0027id\u0027], \u0027volume_id\u0027: volume_id})"},{"line_number":161,"context_line":"            _retype_volume_set_error(self, context, ex, request_spec,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Zw0%3D","line":158,"updated":"2013-12-11 22:23:46.000000000","message":"Need _( here.  Also recommend using msg to be consistent with other places as I noted above.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                                                    filter_properties,"},{"line_number":156,"context_line":"                                                    migration_policy)"},{"line_number":157,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":158,"context_line":"            mesg \u003d ((\"Could not find a host for volume %(volume_id)s with \""},{"line_number":159,"context_line":"                     \"type %(type_id)s\") %"},{"line_number":160,"context_line":"                    {\u0027type_id\u0027: new_type[\u0027id\u0027], \u0027volume_id\u0027: volume_id})"},{"line_number":161,"context_line":"            _retype_volume_set_error(self, context, ex, request_spec,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XO8%3D","line":158,"in_reply_to":"AAAATn%2F9Zw0%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                                             migration_policy, reservations)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _set_volume_state_and_notify(self, method, updates, context, ex,"},{"line_number":173,"context_line":"                                     request_spec, mesg\u003dNone):"},{"line_number":174,"context_line":"        # TODO(harlowja): move into a task that just does this later."},{"line_number":175,"context_line":"        if not mesg:"},{"line_number":176,"context_line":"            mesg \u003d (_(\"Failed to schedule_%(method)s: %(ex)s\") %"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9ZwU%3D","line":173,"updated":"2013-12-11 22:23:46.000000000","message":"Suggest msg here too.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":170,"context_line":"                                             migration_policy, reservations)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _set_volume_state_and_notify(self, method, updates, context, ex,"},{"line_number":173,"context_line":"                                     request_spec, mesg\u003dNone):"},{"line_number":174,"context_line":"        # TODO(harlowja): move into a task that just does this later."},{"line_number":175,"context_line":"        if not mesg:"},{"line_number":176,"context_line":"            mesg \u003d (_(\"Failed to schedule_%(method)s: %(ex)s\") %"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XO4%3D","line":173,"in_reply_to":"AAAATn%2F9ZwU%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"1906067fb9862b4b6e2fa4ca02c2a502c803e88d","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        new_type \u003d request_spec.get(\u0027volume_type\u0027)"},{"line_number":148,"context_line":"        if new_type is None:"},{"line_number":149,"context_line":"            LOG.error(_(\u0027New volume type not specified in request_spec.\u0027))"},{"line_number":150,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027volume_type\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # Default migration policy is \u0027on-demand\u0027"},{"line_number":153,"context_line":"        migration_policy \u003d request_spec.get(\u0027migration_policy\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F%2B%2Bs%3D","line":150,"updated":"2013-12-25 14:19:25.000000000","message":"retype RPC API is a cast, therefore, volume API won\u0027t be able to catch this exception.  please do the cleanup using _retype_volume_set_error() here as well.","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"88c746bbd5a3eea42a639cad8144afe8b6fea8fd","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        new_type \u003d request_spec.get(\u0027volume_type\u0027)"},{"line_number":148,"context_line":"        if new_type is None:"},{"line_number":149,"context_line":"            LOG.error(_(\u0027New volume type not specified in request_spec.\u0027))"},{"line_number":150,"context_line":"            raise exception.ParameterNotFound(param\u003d\u0027volume_type\u0027)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        # Default migration policy is \u0027on-demand\u0027"},{"line_number":153,"context_line":"        migration_policy \u003d request_spec.get(\u0027migration_policy\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F9g8%3D","line":150,"in_reply_to":"AAAAT3%2F%2F%2B%2Bs%3D","updated":"2013-12-26 09:38:05.000000000","message":"Done","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"}],"cinder/tests/api/contrib/test_volume_actions.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"698a9f05cb5678ee7dfd628b9106e4fa88228b11","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import json"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":"import webob"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F8uE%3D","line":19,"updated":"2013-12-26 14:00:23.000000000","message":"mock is third party imports and should be put between standard library imports and local application/library specific imports","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"957e8f548f140a200048155bceb6770d0b9561eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"import json"},{"line_number":19,"context_line":"import mock"},{"line_number":20,"context_line":"import uuid"},{"line_number":21,"context_line":"import webob"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F4Fk%3D","line":19,"in_reply_to":"AAAAT3%2F%2F8uE%3D","updated":"2013-12-28 18:06:16.000000000","message":"Done","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"698a9f05cb5678ee7dfd628b9106e4fa88228b11","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.mock_volume_get.return_value \u003d vol"},{"line_number":54,"context_line":"        self.update_patcher \u003d mock.patch(\u0027cinder.volume.API.update\u0027)"},{"line_number":55,"context_line":"        self.mock_volume_update \u003d self.update_patcher.start()"},{"line_number":56,"context_line":"        self.mock_volume_update.return_value \u003d vol"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.flags(rpc_backend\u003d\u0027cinder.openstack.common.rpc.impl_fake\u0027)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F8uA%3D","line":56,"updated":"2013-12-26 14:00:23.000000000","message":"I like this test with mock","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"5f03217c05517352a4068b026d8154c2bec69b75","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.mock_volume_get.return_value \u003d vol"},{"line_number":54,"context_line":"        self.update_patcher \u003d mock.patch(\u0027cinder.volume.API.update\u0027)"},{"line_number":55,"context_line":"        self.mock_volume_update \u003d self.update_patcher.start()"},{"line_number":56,"context_line":"        self.mock_volume_update.return_value \u003d vol"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.flags(rpc_backend\u003d\u0027cinder.openstack.common.rpc.impl_fake\u0027)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F37A%3D","line":56,"in_reply_to":"AAAAT3%2F%2F4Fg%3D","updated":"2013-12-28 22:35:28.000000000","message":"Sorry for unclear, I mean I like this test ;-)","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"957e8f548f140a200048155bceb6770d0b9561eb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        self.mock_volume_get.return_value \u003d vol"},{"line_number":54,"context_line":"        self.update_patcher \u003d mock.patch(\u0027cinder.volume.API.update\u0027)"},{"line_number":55,"context_line":"        self.mock_volume_update \u003d self.update_patcher.start()"},{"line_number":56,"context_line":"        self.mock_volume_update.return_value \u003d vol"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        self.flags(rpc_backend\u003d\u0027cinder.openstack.common.rpc.impl_fake\u0027)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F4Fg%3D","line":56,"in_reply_to":"AAAAT3%2F%2F8uA%3D","updated":"2013-12-28 18:06:16.000000000","message":"I\u0027m not sure I understand - is there a change necessary or are you just stating that you like it?","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"}],"cinder/tests/scheduler/test_filter_scheduler.py":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"698a9f05cb5678ee7dfd628b9106e4fa88228b11","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    @mock.patch(\u0027cinder.db.service_get_all_by_topic\u0027)"},{"line_number":233,"context_line":"    def test_retype_policy_never_migrate_pass(self, _mock_service_get_topic):"},{"line_number":234,"context_line":"        # Retype should pass if current host passes filters and"},{"line_number":235,"context_line":"        # policy\u003dnever.  host4 doesn\u0027t have enough space to hold an additional"},{"line_number":236,"context_line":"        # 200GB, but it is already the host of this volume and should not be"},{"line_number":237,"context_line":"        # counted twice."},{"line_number":238,"context_line":"        sched, ctx \u003d self._host_passes_filters_setup("}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F8t8%3D","line":235,"updated":"2013-12-26 14:00:23.000000000","message":"Please remove one blank space here","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"957e8f548f140a200048155bceb6770d0b9561eb","unresolved":false,"context_lines":[{"line_number":232,"context_line":"    @mock.patch(\u0027cinder.db.service_get_all_by_topic\u0027)"},{"line_number":233,"context_line":"    def test_retype_policy_never_migrate_pass(self, _mock_service_get_topic):"},{"line_number":234,"context_line":"        # Retype should pass if current host passes filters and"},{"line_number":235,"context_line":"        # policy\u003dnever.  host4 doesn\u0027t have enough space to hold an additional"},{"line_number":236,"context_line":"        # 200GB, but it is already the host of this volume and should not be"},{"line_number":237,"context_line":"        # counted twice."},{"line_number":238,"context_line":"        sched, ctx \u003d self._host_passes_filters_setup("}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAT3%2F%2F4Fc%3D","line":235,"in_reply_to":"AAAAT3%2F%2F8t8%3D","updated":"2013-12-28 18:06:16.000000000","message":"Done","commit_id":"024a2ca55c7ca415bb90a5580ea76295f2677628"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"53bf85535f08c00dabbeb41bc2f2266a806da902","unresolved":false,"context_lines":[{"line_number":1801,"context_line":"                                 exc\u003dexception.VolumeMigrationFailed)"},{"line_number":1802,"context_line":""},{"line_number":1803,"context_line":"    def test_retype_volume_migration_with_snaps(self):"},{"line_number":1804,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1805,"context_line":"        self._retype_volume_exec(False, snap\u003dTrue, exc\u003dexception.InvalidVolume)"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    def test_retype_volume_migration_failed(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Bn%2FM%3D","line":1804,"updated":"2013-11-22 10:01:25.000000000","message":"Misleading comment","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"15764da5213007d8c0c4a94dca97a4a2eca46780","unresolved":false,"context_lines":[{"line_number":1801,"context_line":"                                 exc\u003dexception.VolumeMigrationFailed)"},{"line_number":1802,"context_line":""},{"line_number":1803,"context_line":"    def test_retype_volume_migration_with_snaps(self):"},{"line_number":1804,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1805,"context_line":"        self._retype_volume_exec(False, snap\u003dTrue, exc\u003dexception.InvalidVolume)"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    def test_retype_volume_migration_failed(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Be9Q%3D","line":1804,"in_reply_to":"AAAATn%2F%2Bn%2FM%3D","updated":"2013-11-25 16:05:35.000000000","message":"Done","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"53bf85535f08c00dabbeb41bc2f2266a806da902","unresolved":false,"context_lines":[{"line_number":1805,"context_line":"        self._retype_volume_exec(False, snap\u003dTrue, exc\u003dexception.InvalidVolume)"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    def test_retype_volume_migration_failed(self):"},{"line_number":1808,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1809,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dTrue, exc\u003dKeyError)"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"    def test_retype_volume_migration_success(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Bn%2FI%3D","line":1808,"updated":"2013-11-22 10:01:25.000000000","message":"Misleading comment","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"15764da5213007d8c0c4a94dca97a4a2eca46780","unresolved":false,"context_lines":[{"line_number":1805,"context_line":"        self._retype_volume_exec(False, snap\u003dTrue, exc\u003dexception.InvalidVolume)"},{"line_number":1806,"context_line":""},{"line_number":1807,"context_line":"    def test_retype_volume_migration_failed(self):"},{"line_number":1808,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1809,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dTrue, exc\u003dKeyError)"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"    def test_retype_volume_migration_success(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Be9M%3D","line":1808,"in_reply_to":"AAAATn%2F%2Bn%2FI%3D","updated":"2013-11-25 16:05:35.000000000","message":"Done","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"53bf85535f08c00dabbeb41bc2f2266a806da902","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dTrue, exc\u003dKeyError)"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"    def test_retype_volume_migration_success(self):"},{"line_number":1812,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1813,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dFalse, exc\u003dNone)"},{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"    def test_update_volume_readonly_flag(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Bn%2FA%3D","line":1812,"updated":"2013-11-22 10:01:25.000000000","message":"Misleading comment","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"15764da5213007d8c0c4a94dca97a4a2eca46780","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dTrue, exc\u003dKeyError)"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"    def test_retype_volume_migration_success(self):"},{"line_number":1812,"context_line":"        # Test volume retype that requires migration by not allowed"},{"line_number":1813,"context_line":"        self._retype_volume_exec(False, migrate_exc\u003dFalse, exc\u003dNone)"},{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"    def test_update_volume_readonly_flag(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F%2Be9I%3D","line":1812,"in_reply_to":"AAAATn%2F%2Bn%2FA%3D","updated":"2013-11-25 16:05:35.000000000","message":"Done","commit_id":"1d716fb46b09a92f20c28546f225b4fce1ac4b49"}],"cinder/volume/api.py":[{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                                          {\u0027readonly\u0027: str(flag)})"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _check_new_type_quotas(self, context, volume, type_id):"},{"line_number":854,"context_line":"        # First we need to the quotas for the updated type"},{"line_number":855,"context_line":"        try:"},{"line_number":856,"context_line":"            reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: volume[\u0027size\u0027]}"},{"line_number":857,"context_line":"            QUOTAS.add_volume_type_opts(context,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2s%3D","line":854,"updated":"2013-11-08 00:59:17.000000000","message":"... need to ?? the quotas ...","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                                          {\u0027readonly\u0027: str(flag)})"},{"line_number":852,"context_line":""},{"line_number":853,"context_line":"    def _check_new_type_quotas(self, context, volume, type_id):"},{"line_number":854,"context_line":"        # First we need to the quotas for the updated type"},{"line_number":855,"context_line":"        try:"},{"line_number":856,"context_line":"            reserve_opts \u003d {\u0027volumes\u0027: 1, \u0027gigabytes\u0027: volume[\u0027size\u0027]}"},{"line_number":857,"context_line":"            QUOTAS.add_volume_type_opts(context,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVB4%3D","line":854,"in_reply_to":"AAAATn%2F%2FX2s%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":858,"context_line":"                                        reserve_opts,"},{"line_number":859,"context_line":"                                        type_id)"},{"line_number":860,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":861,"context_line":"        except exception.OverQuota as e:"},{"line_number":862,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":863,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":864,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2Y%3D","line":861,"updated":"2013-11-08 00:59:17.000000000","message":"I would have thought that a retype would not affect the quotas.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":858,"context_line":"                                        reserve_opts,"},{"line_number":859,"context_line":"                                        type_id)"},{"line_number":860,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":861,"context_line":"        except exception.OverQuota as e:"},{"line_number":862,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":863,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":864,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVB0%3D","line":861,"in_reply_to":"AAAATn%2F%2FX2Y%3D","updated":"2013-11-10 14:12:25.000000000","message":"There are quotas per volume type, so this operation will reduce the quota for the original type and add for the new.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        # NOTE(jdg): We\u0027re checking here, but never committing"},{"line_number":943,"context_line":"        # reason being is there are a number of things that can go"},{"line_number":944,"context_line":"        # wrong in the filtering (is the current host able to support"},{"line_number":945,"context_line":"        # the requested type. This way we can give a quota error"},{"line_number":946,"context_line":"        # back if that\u0027s going to be a problem before we send the thread out"},{"line_number":947,"context_line":"        self._check_new_type_quotas(context, volume, vol_type_id)"},{"line_number":948,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2o%3D","line":945,"updated":"2013-11-08 00:59:17.000000000","message":"Close parens?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":942,"context_line":"        # NOTE(jdg): We\u0027re checking here, but never committing"},{"line_number":943,"context_line":"        # reason being is there are a number of things that can go"},{"line_number":944,"context_line":"        # wrong in the filtering (is the current host able to support"},{"line_number":945,"context_line":"        # the requested type. This way we can give a quota error"},{"line_number":946,"context_line":"        # back if that\u0027s going to be a problem before we send the thread out"},{"line_number":947,"context_line":"        self._check_new_type_quotas(context, volume, vol_type_id)"},{"line_number":948,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVBs%3D","line":945,"in_reply_to":"AAAATn%2F%2FX2o%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"0f372bbff81e8f10eeb87932826dadf54f8443ea","unresolved":false,"context_lines":[{"line_number":864,"context_line":"    @wrap_check_policy"},{"line_number":865,"context_line":"    def retype(self, context, volume, new_type, scheduler_hints):"},{"line_number":866,"context_line":"        \"\"\"Attempt to modify the type associated with an existing volume.\"\"\""},{"line_number":867,"context_line":"        if volume[\u0027status\u0027] not in [\u0027available\u0027, \u0027in-use\u0027]:"},{"line_number":868,"context_line":"            msg \u003d _(\u0027Unable to update type due to incorrect status \u0027"},{"line_number":869,"context_line":"                    \u0027on volume: %s\u0027) % volume[\u0027id\u0027]"},{"line_number":870,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F%2BTI0%3D","line":867,"updated":"2013-11-27 18:02:30.000000000","message":"So available and in-use seems reasonable, and if the driver can do it in place great, if not return False, but that brings up another case that we may want to consider before migrating.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"30704fdadd96434c8b5f282afdce829ca4b10951","unresolved":false,"context_lines":[{"line_number":864,"context_line":"    @wrap_check_policy"},{"line_number":865,"context_line":"    def retype(self, context, volume, new_type, scheduler_hints):"},{"line_number":866,"context_line":"        \"\"\"Attempt to modify the type associated with an existing volume.\"\"\""},{"line_number":867,"context_line":"        if volume[\u0027status\u0027] not in [\u0027available\u0027, \u0027in-use\u0027]:"},{"line_number":868,"context_line":"            msg \u003d _(\u0027Unable to update type due to incorrect status \u0027"},{"line_number":869,"context_line":"                    \u0027on volume: %s\u0027) % volume[\u0027id\u0027]"},{"line_number":870,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F%2BRKs%3D","line":867,"in_reply_to":"AAAATn%2F%2BTI0%3D","updated":"2013-11-28 06:00:24.000000000","message":"You mean that we should check at this point if the driver can do it via a capability, and fail if policy\u003dnever?  Right now we do that check at the manager...we could move it up to the scheduler if it helps, but moving it to API takes some more code (API needs to query scheduler for this).  Can do it if you think it\u0027s important.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4cfe441343b736c3167ff7f27e5cceb73e62b218","unresolved":false,"context_lines":[{"line_number":908,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"        # We don\u0027t support changing QoS at the front-end yet"},{"line_number":911,"context_line":"        if old_vol_type_qos_id !\u003d vol_type_qos_id:"},{"line_number":912,"context_line":"            for qos_id in [old_vol_type_qos_id, vol_type_qos_id]:"},{"line_number":913,"context_line":"                if qos_id:"},{"line_number":914,"context_line":"                    specs \u003d qos_specs.get_qos_specs(context.elevated(), qos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F92dM%3D","line":911,"updated":"2013-12-05 22:24:15.000000000","message":"we can add a check for volume\u0027s status to narrow this limit only to \u0027in-use\u0027 volumes.","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5308990d6499bfa52713c25c4df0f10985f7597a","unresolved":false,"context_lines":[{"line_number":908,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"        # We don\u0027t support changing QoS at the front-end yet"},{"line_number":911,"context_line":"        if old_vol_type_qos_id !\u003d vol_type_qos_id:"},{"line_number":912,"context_line":"            for qos_id in [old_vol_type_qos_id, vol_type_qos_id]:"},{"line_number":913,"context_line":"                if qos_id:"},{"line_number":914,"context_line":"                    specs \u003d qos_specs.get_qos_specs(context.elevated(), qos_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAATn%2F9r2o%3D","line":911,"in_reply_to":"AAAATn%2F92dM%3D","updated":"2013-12-11 14:24:55.000000000","message":"Done","commit_id":"e4c9a828a4b53eb526dac7ce4b7531576388f2e5"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":877,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        if volume[\u0027migration_status\u0027] !\u003d None:"},{"line_number":880,"context_line":"            msg \u003d _(\"Volume is already part of an active migration\")"},{"line_number":881,"context_line":"            LOG.error(msg)"},{"line_number":882,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Zqg%3D","line":880,"updated":"2013-12-11 22:23:46.000000000","message":"This should end with a period.  Seems like this should also include the volume.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":877,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        if volume[\u0027migration_status\u0027] !\u003d None:"},{"line_number":880,"context_line":"            msg \u003d _(\"Volume is already part of an active migration\")"},{"line_number":881,"context_line":"            LOG.error(msg)"},{"line_number":882,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":883,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XOg%3D","line":880,"in_reply_to":"AAAATn%2F9Zqg%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"564f29663f7f92c32e678c8ddf9fecf6558f7d67","unresolved":false,"context_lines":[{"line_number":866,"context_line":"            LOG.error(msg)"},{"line_number":867,"context_line":"            raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":868,"context_line":""},{"line_number":869,"context_line":"        if volume[\u0027migration_status\u0027] !\u003d None:"},{"line_number":870,"context_line":"            msg \u003d (_(\"Volume %s is already part of an active migration.\")"},{"line_number":871,"context_line":"                   % volume[\u0027id\u0027])"},{"line_number":872,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAUH%2F%2F%2BKc%3D","line":869,"updated":"2014-01-06 09:04:56.000000000","message":"is not None","commit_id":"16fd1ede9f515e634794b4fe31217b4ed9af1732"}],"cinder/volume/driver.py":[{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        :param host: A dictionary describing the host to migrate to, where"},{"line_number":470,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":471,"context_line":"                     dictionary of its reported capabilities."},{"line_number":472,"context_line":"        :param new_type_id: If we are modifying the volume\u0027s type during the"},{"line_number":473,"context_line":"                            migration, this is the new type."},{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":"        return (False, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2U%3D","line":472,"updated":"2013-11-08 00:59:17.000000000","message":"Para not in arguments above.","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        :param host: A dictionary describing the host to migrate to, where"},{"line_number":470,"context_line":"                     host[\u0027host\u0027] is its name, and host[\u0027capabilities\u0027] is a"},{"line_number":471,"context_line":"                     dictionary of its reported capabilities."},{"line_number":472,"context_line":"        :param new_type_id: If we are modifying the volume\u0027s type during the"},{"line_number":473,"context_line":"                            migration, this is the new type."},{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":"        return (False, None)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVBk%3D","line":472,"in_reply_to":"AAAATn%2F%2FX2U%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":"        return (False, None)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def retype(self, context, volume, new_type, host):"},{"line_number":478,"context_line":"        msg \u003d _(\"Retype volume not implemented\")"},{"line_number":479,"context_line":"        raise NotImplementedError(msg)"},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2Q%3D","line":477,"updated":"2013-11-08 00:59:17.000000000","message":"Needs docs","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":474,"context_line":"        \"\"\""},{"line_number":475,"context_line":"        return (False, None)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"    def retype(self, context, volume, new_type, host):"},{"line_number":478,"context_line":"        msg \u003d _(\"Retype volume not implemented\")"},{"line_number":479,"context_line":"        raise NotImplementedError(msg)"},{"line_number":480,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVBY%3D","line":477,"in_reply_to":"AAAATn%2F%2FX2Q%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"0e946ea423689e64d27f839ec3481937938ca76d","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    def retype(self, context, volume, new_type, diff, host):"},{"line_number":482,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        Returns a boolean indicating whether the migration occurred."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        :param ctxt: Context"},{"line_number":487,"context_line":"        :param volume: A dictionary describing the volume to migrate"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9X6E%3D","line":484,"updated":"2013-12-12 06:25:35.000000000","message":"nit: comment needs fix.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":481,"context_line":"    def retype(self, context, volume, new_type, diff, host):"},{"line_number":482,"context_line":"        \"\"\"Convert the volume to be of the new type."},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        Returns a boolean indicating whether the migration occurred."},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"        :param ctxt: Context"},{"line_number":487,"context_line":"        :param volume: A dictionary describing the volume to migrate"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XOU%3D","line":484,"in_reply_to":"AAAATn%2F9X6E%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"}],"cinder/volume/manager.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"5ca3956c0c688ac08ea0c38f88037937be3f3e36","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                    _retype_error(context, volume_id, old_reservations,"},{"line_number":1012,"context_line":"                                  status_update)"},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":"        new_type \u003d volume_types.get_volume_type(context, new_type_id)"},{"line_number":1015,"context_line":"        self.db.volume_update(context, volume_id,"},{"line_number":1016,"context_line":"                              {\u0027volume_type_id\u0027: new_type_id,"},{"line_number":1017,"context_line":"                               \u0027status\u0027: status_update[\u0027status\u0027]})"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATH%2F%2FkYk%3D","line":1014,"updated":"2013-10-14 12:51:32.000000000","message":"no need for this, already on line 978, and also not used","commit_id":"3e7b7da06688c395cd2b1e7f0d10298ac17b5b0f"},{"author":{"_account_id":7996,"name":"Luis A. Garcia","email":"luis@linux.vnet.ibm.com","username":"luisg"},"change_message_id":"91f1a8d6df23637a7b7ef68bddba9fb4eeb7db22","unresolved":false,"context_lines":[{"line_number":931,"context_line":"                                        reserve_opts,"},{"line_number":932,"context_line":"                                        new_type_id)"},{"line_number":933,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":934,"context_line":"        except exception.OverQuota as e:"},{"line_number":935,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":936,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":937,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FX2A%3D","line":934,"updated":"2013-11-08 00:59:17.000000000","message":"Should this go in a utils class somewhere, since it\u0027s dupe from the api code?","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"fb4ebfa739ae80a4f3c1ec2520cb3516db38b4ac","unresolved":false,"context_lines":[{"line_number":931,"context_line":"                                        reserve_opts,"},{"line_number":932,"context_line":"                                        new_type_id)"},{"line_number":933,"context_line":"            reservations \u003d QUOTAS.reserve(context, **reserve_opts)"},{"line_number":934,"context_line":"        except exception.OverQuota as e:"},{"line_number":935,"context_line":"            overs \u003d e.kwargs[\u0027overs\u0027]"},{"line_number":936,"context_line":"            usages \u003d e.kwargs[\u0027usages\u0027]"},{"line_number":937,"context_line":"            quotas \u003d e.kwargs[\u0027quotas\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAATn%2F%2FVAs%3D","line":934,"in_reply_to":"AAAATn%2F%2FX2A%3D","updated":"2013-11-10 14:12:25.000000000","message":"Done","commit_id":"e0916183288f7c0f32d245457b38538f82bc3aba"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"86b560c53554f94a93170390f7bf1c22663150be","unresolved":false,"context_lines":[{"line_number":952,"context_line":"                                              **reserve_opts)"},{"line_number":953,"context_line":"        except Exception:"},{"line_number":954,"context_line":"            old_reservations \u003d None"},{"line_number":955,"context_line":"            LOG.exception(_(\"Failed to update usages retyping volume\"))"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"        # Now get the new reservations"},{"line_number":958,"context_line":"        new_reservations \u003d quota_utils.get_volume_type_reservation(context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BWA8%3D","line":955,"updated":"2013-11-27 05:53:05.000000000","message":"If we can\u0027t decrement the old vol type, shouldn\u0027t we stop?","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"2f6d723fb310de3abf095b5020c120bb10c84955","unresolved":false,"context_lines":[{"line_number":952,"context_line":"                                              **reserve_opts)"},{"line_number":953,"context_line":"        except Exception:"},{"line_number":954,"context_line":"            old_reservations \u003d None"},{"line_number":955,"context_line":"            LOG.exception(_(\"Failed to update usages retyping volume\"))"},{"line_number":956,"context_line":""},{"line_number":957,"context_line":"        # Now get the new reservations"},{"line_number":958,"context_line":"        new_reservations \u003d quota_utils.get_volume_type_reservation(context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2BVis%3D","line":955,"in_reply_to":"AAAATn%2F%2BWA8%3D","updated":"2013-11-27 08:47:23.000000000","message":"Yep, we should.  Done.","commit_id":"45eeec4b2e5ae75d27ec791089b0c275a0a5d993"},{"author":{"_account_id":7948,"name":"Subbu","email":"subramanian.neelakantan@gmail.com","username":"subbu"},"change_message_id":"0e946ea423689e64d27f839ec3481937938ca76d","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.db.volume_update(ctxt, volume_id, {\u0027migration_status\u0027: None})"},{"line_number":843,"context_line":"        return volume[\u0027id\u0027]"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    @utils.require_driver_initialized"},{"line_number":846,"context_line":"    def migrate_volume(self, ctxt, volume_id, host, force_host_copy\u003dFalse):"},{"line_number":847,"context_line":"        \"\"\"Migrate the volume to the specified host (called on source host).\"\"\""},{"line_number":848,"context_line":"        volume_ref \u003d self.db.volume_get(ctxt, volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Xzw%3D","side":"PARENT","line":845,"updated":"2013-12-12 06:25:35.000000000","message":"Was this removed by mistake?","commit_id":"89703a5496f4b8914cccdf80d1e5ac8fa270402e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":842,"context_line":"        self.db.volume_update(ctxt, volume_id, {\u0027migration_status\u0027: None})"},{"line_number":843,"context_line":"        return volume[\u0027id\u0027]"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"    @utils.require_driver_initialized"},{"line_number":846,"context_line":"    def migrate_volume(self, ctxt, volume_id, host, force_host_copy\u003dFalse):"},{"line_number":847,"context_line":"        \"\"\"Migrate the volume to the specified host (called on source host).\"\"\""},{"line_number":848,"context_line":"        volume_ref \u003d self.db.volume_get(ctxt, volume_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XOA%3D","side":"PARENT","line":845,"in_reply_to":"AAAATn%2F9Xzw%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"89703a5496f4b8914cccdf80d1e5ac8fa270402e"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"                                              **reserve_opts)"},{"line_number":1041,"context_line":"        except Exception:"},{"line_number":1042,"context_line":"            old_reservations \u003d None"},{"line_number":1043,"context_line":"            LOG.exception(_(\"Failed to update usages retyping volume\"))"},{"line_number":1044,"context_line":"            raise exception.CinderException(_(\"Failed to get old volume type\""},{"line_number":1045,"context_line":"                                              \" quota reservations\"))"},{"line_number":1046,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9ZoQ%3D","line":1043,"updated":"2013-12-11 22:23:46.000000000","message":"This is confusing ... Do you mean \"Failed to update usages while retyping volume.\" ?","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"                                              **reserve_opts)"},{"line_number":1041,"context_line":"        except Exception:"},{"line_number":1042,"context_line":"            old_reservations \u003d None"},{"line_number":1043,"context_line":"            LOG.exception(_(\"Failed to update usages retyping volume\"))"},{"line_number":1044,"context_line":"            raise exception.CinderException(_(\"Failed to get old volume type\""},{"line_number":1045,"context_line":"                                              \" quota reservations\"))"},{"line_number":1046,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XNw%3D","line":1043,"in_reply_to":"AAAATn%2F9ZoQ%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"                    LOG.info(_(\"Volume %s: retyped succesfully\"), volume_id)"},{"line_number":1065,"context_line":"            except Exception:"},{"line_number":1066,"context_line":"                retyped \u003d False"},{"line_number":1067,"context_line":"                LOG.info(_(\"Volume %s: driver error when tyring to retype, \""},{"line_number":1068,"context_line":"                           \"falling back to generic mechanism\"),"},{"line_number":1069,"context_line":"                         volume_ref[\u0027id\u0027])"},{"line_number":1070,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Zn8%3D","line":1067,"updated":"2013-12-11 22:23:46.000000000","message":"Typo \u0027tyring\u0027 -\u003e \u0027trying\u0027","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"                    LOG.info(_(\"Volume %s: retyped succesfully\"), volume_id)"},{"line_number":1065,"context_line":"            except Exception:"},{"line_number":1066,"context_line":"                retyped \u003d False"},{"line_number":1067,"context_line":"                LOG.info(_(\"Volume %s: driver error when tyring to retype, \""},{"line_number":1068,"context_line":"                           \"falling back to generic mechanism\"),"},{"line_number":1069,"context_line":"                         volume_ref[\u0027id\u0027])"},{"line_number":1070,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XM4%3D","line":1067,"in_reply_to":"AAAATn%2F9Zn8%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"            except Exception:"},{"line_number":1066,"context_line":"                retyped \u003d False"},{"line_number":1067,"context_line":"                LOG.info(_(\"Volume %s: driver error when tyring to retype, \""},{"line_number":1068,"context_line":"                           \"falling back to generic mechanism\"),"},{"line_number":1069,"context_line":"                         volume_ref[\u0027id\u0027])"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        # We could not change the type, so we need to migrate the volume, where"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Zn4%3D","line":1068,"updated":"2013-12-11 22:23:46.000000000","message":"End with \u0027.\u0027.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"            except Exception:"},{"line_number":1066,"context_line":"                retyped \u003d False"},{"line_number":1067,"context_line":"                LOG.info(_(\"Volume %s: driver error when tyring to retype, \""},{"line_number":1068,"context_line":"                           \"falling back to generic mechanism\"),"},{"line_number":1069,"context_line":"                         volume_ref[\u0027id\u0027])"},{"line_number":1070,"context_line":""},{"line_number":1071,"context_line":"        # We could not change the type, so we need to migrate the volume, where"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XM0%3D","line":1068,"in_reply_to":"AAAATn%2F9Zn4%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"            if snaps:"},{"line_number":1083,"context_line":"                _retype_error(context, volume_id, old_reservations,"},{"line_number":1084,"context_line":"                              new_reservations, status_update)"},{"line_number":1085,"context_line":"                msg \u003d _(\"volume must not have snapshots\")"},{"line_number":1086,"context_line":"                LOG.error(msg)"},{"line_number":1087,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":1088,"context_line":"            self.db.volume_update(context, volume_ref[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9Znc%3D","line":1085,"updated":"2013-12-11 22:23:46.000000000","message":"This should end with \u0027.\u0027.","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"            if snaps:"},{"line_number":1083,"context_line":"                _retype_error(context, volume_id, old_reservations,"},{"line_number":1084,"context_line":"                              new_reservations, status_update)"},{"line_number":1085,"context_line":"                msg \u003d _(\"volume must not have snapshots\")"},{"line_number":1086,"context_line":"                LOG.error(msg)"},{"line_number":1087,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":1088,"context_line":"            self.db.volume_update(context, volume_ref[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F9XMw%3D","line":1085,"in_reply_to":"AAAATn%2F9Znc%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"babcc8929d9d43b778f3699e745a7410ea7ca066"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"1906067fb9862b4b6e2fa4ca02c2a502c803e88d","unresolved":false,"context_lines":[{"line_number":1044,"context_line":"        except Exception:"},{"line_number":1045,"context_line":"            old_reservations \u003d None"},{"line_number":1046,"context_line":"            LOG.exception(_(\"Failed to update usages while retyping volume.\"))"},{"line_number":1047,"context_line":"            raise exception.CinderException(_(\"Failed to get old volume type\""},{"line_number":1048,"context_line":"                                              \" quota reservations\"))"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        # We already got the new reservations"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F%2B8A%3D","line":1047,"updated":"2013-12-25 14:19:25.000000000","message":"do some clean up here before raising exception?","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"88c746bbd5a3eea42a639cad8144afe8b6fea8fd","unresolved":false,"context_lines":[{"line_number":1044,"context_line":"        except Exception:"},{"line_number":1045,"context_line":"            old_reservations \u003d None"},{"line_number":1046,"context_line":"            LOG.exception(_(\"Failed to update usages while retyping volume.\"))"},{"line_number":1047,"context_line":"            raise exception.CinderException(_(\"Failed to get old volume type\""},{"line_number":1048,"context_line":"                                              \" quota reservations\"))"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        # We already got the new reservations"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAT3%2F%2F9gk%3D","line":1047,"in_reply_to":"AAAAT3%2F%2F%2B8A%3D","updated":"2013-12-26 09:38:05.000000000","message":"Added a line to reset the status of the volume, but this should never really fail - we\u0027re reserving a negative quantity (i.e., giving back the old quota).","commit_id":"2641d694e4a071b689a856950ce98b5c525eb236"}],"cinder/volume/volume_types.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"a681feb08fe07101226029cf3c197946bf68c2c6","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        qos_specs1.pop(\u0027name\u0027, None)"},{"line_number":237,"context_line":"        specs1 \u003d qos_specs1.pop(\u0027specs\u0027, {})"},{"line_number":238,"context_line":"        qos_specs1.update(specs1)"},{"line_number":239,"context_line":"    qos_specs2 \u003d get_volume_type_qos_specs(vol_type_id2).get(\u0027qos_specs\u0027)"},{"line_number":240,"context_line":"    if qos_specs2:"},{"line_number":241,"context_line":"        qos_specs2.pop(\u0027id\u0027, None)"},{"line_number":242,"context_line":"        qos_specs2.pop(\u0027name\u0027, None)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAATn%2F8%2BEc%3D","line":239,"updated":"2013-12-18 10:58:49.000000000","message":"(minor) slight code duplication, can be abstracted out into a method.","commit_id":"5e97735767fdc592c2dbaf6276ad50022017a26a"}],"tox.ini":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4a90f51375605c44e5ee7dd9fbbf84ba069b5dee","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d"},{"line_number":17,"context_line":"  python setup.py testr --slowest --testr-args\u003d\u0027--concurrency 1 {posargs}\u0027"},{"line_number":18,"context_line":"  {toxinidir}/tools/conf/check_uptodate.sh"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[tox:jenkins]"},{"line_number":21,"context_line":"downloadcache \u003d ~/cache/pip"}],"source_content_type":"text/x-properties","patch_set":16,"id":"AAAATn%2F9ZmU%3D","side":"PARENT","line":18,"updated":"2013-12-11 22:23:46.000000000","message":"What is the reason for removing this?","commit_id":"89703a5496f4b8914cccdf80d1e5ac8fa270402e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"12662c5d5d147c59be8b7c2ab45ef00e22d75e66","unresolved":false,"context_lines":[{"line_number":15,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":16,"context_line":"commands \u003d"},{"line_number":17,"context_line":"  python setup.py testr --slowest --testr-args\u003d\u0027--concurrency 1 {posargs}\u0027"},{"line_number":18,"context_line":"  {toxinidir}/tools/conf/check_uptodate.sh"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"[tox:jenkins]"},{"line_number":21,"context_line":"downloadcache \u003d ~/cache/pip"}],"source_content_type":"text/x-properties","patch_set":16,"id":"AAAATn%2F9XMo%3D","side":"PARENT","line":18,"in_reply_to":"AAAATn%2F9ZmU%3D","updated":"2013-12-12 08:39:56.000000000","message":"Done","commit_id":"89703a5496f4b8914cccdf80d1e5ac8fa270402e"}]}
