)]}'
{"nova/api/openstack/compute/plugins/v3/extended_volumes.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":108,"context_line":"            device \u003d self.compute_api.attach_volume(context, instance,"},{"line_number":109,"context_line":"                                                    volume_id, device)"},{"line_number":110,"context_line":"        except exception.NotFound as e:"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzEA%3D","line":108,"updated":"2013-07-11 09:04:28.000000000","message":"the assignment seems to be unnecessary","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        try:"},{"line_number":107,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"},{"line_number":108,"context_line":"            device \u003d self.compute_api.attach_volume(context, instance,"},{"line_number":109,"context_line":"                                                    volume_id, device)"},{"line_number":110,"context_line":"        except exception.NotFound as e:"},{"line_number":111,"context_line":"            raise exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzAk%3D","line":108,"in_reply_to":"AAAAP3%2F%2FzEA%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def detach(self, req, id, body):"},{"line_number":123,"context_line":"        server_id \u003d id"},{"line_number":124,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":125,"context_line":"        authorize_attach(context)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        volume_id \u003d body[\u0027detach\u0027][\u0027volume_id\u0027]"},{"line_number":128,"context_line":"        LOG.audit(_(\"Detach volume %s\"), volume_id, context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzEc%3D","line":125,"updated":"2013-07-11 09:04:28.000000000","message":"authorize_detach","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    def detach(self, req, id, body):"},{"line_number":123,"context_line":"        server_id \u003d id"},{"line_number":124,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":125,"context_line":"        authorize_attach(context)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        volume_id \u003d body[\u0027detach\u0027][\u0027volume_id\u0027]"},{"line_number":128,"context_line":"        LOG.audit(_(\"Detach volume %s\"), volume_id, context\u003dcontext)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzAg%3D","line":125,"in_reply_to":"AAAAP3%2F%2FzEc%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        authorize_attach(context)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        volume_id \u003d body[\u0027detach\u0027][\u0027volume_id\u0027]"},{"line_number":128,"context_line":"        LOG.audit(_(\"Detach volume %s\"), volume_id, context\u003dcontext)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzD0%3D","line":128,"updated":"2013-07-11 09:04:28.000000000","message":"makes sense to include server_id to the log message","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        authorize_attach(context)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        volume_id \u003d body[\u0027detach\u0027][\u0027volume_id\u0027]"},{"line_number":128,"context_line":"        LOG.audit(_(\"Detach volume %s\"), volume_id, context\u003dcontext)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            instance \u003d self.compute_api.get(context, server_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzAY%3D","line":128,"in_reply_to":"AAAAP3%2F%2FzD0%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        bdms \u003d self.compute_api.get_instance_bdms(context, instance)"},{"line_number":141,"context_line":"        if not bdms:"},{"line_number":142,"context_line":"            msg \u003d _(\"Instance %(server_id)s is not attached \""},{"line_number":143,"context_line":"                    \"by volume %(volume_id)s.\") % {\u0027server_id\u0027: server_id,"},{"line_number":144,"context_line":"                                                   \u0027volume_id\u0027: volume_id}"},{"line_number":145,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzDk%3D","line":142,"updated":"2013-07-11 09:04:28.000000000","message":"Consider \"Volume is not attached to the instance\"","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        bdms \u003d self.compute_api.get_instance_bdms(context, instance)"},{"line_number":141,"context_line":"        if not bdms:"},{"line_number":142,"context_line":"            msg \u003d _(\"Instance %(server_id)s is not attached \""},{"line_number":143,"context_line":"                    \"by volume %(volume_id)s.\") % {\u0027server_id\u0027: server_id,"},{"line_number":144,"context_line":"                                                   \u0027volume_id\u0027: volume_id}"},{"line_number":145,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzAU%3D","line":142,"in_reply_to":"AAAAP3%2F%2FzDk%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            LOG.debug(msg)"},{"line_number":146,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        found \u003d False"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            for bdm in bdms:"},{"line_number":151,"context_line":"                if bdm[\u0027volume_id\u0027] !\u003d volume_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzCU%3D","line":148,"updated":"2013-07-11 09:04:28.000000000","message":"This variable won\u0027t be needed if you use \u0027else:\u0027  block of \u0027for\u0027 loop:\n\n  for bdm in bdms:\n      ...\n  else:\n      ...\n      raise exc.HTTPNotFound(explanation\u003dmsg)","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            LOG.debug(msg)"},{"line_number":146,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        found \u003d False"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            for bdm in bdms:"},{"line_number":151,"context_line":"                if bdm[\u0027volume_id\u0027] !\u003d volume_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzAQ%3D","line":148,"in_reply_to":"AAAAP3%2F%2FzCU%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"8b3861df507fa8ed91651fdf5488c18ddf25f7b9","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        found \u003d False"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            for bdm in bdms:"},{"line_number":151,"context_line":"                if bdm[\u0027volume_id\u0027] !\u003d volume_id:"},{"line_number":152,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FzB0%3D","line":149,"updated":"2013-07-11 09:04:28.000000000","message":"this try/except block is redundant. Consider catching exception.InstanceInvalidState in try block which is in the loop","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7f4b679c726f3a899a86a4bdfa75f77dd0b25c66","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            raise exc.HTTPNotFound(explanation\u003dmsg)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        found \u003d False"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            for bdm in bdms:"},{"line_number":151,"context_line":"                if bdm[\u0027volume_id\u0027] !\u003d volume_id:"},{"line_number":152,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FviI%3D","line":149,"in_reply_to":"AAAAP3%2F%2FzB0%3D","updated":"2013-07-12 04:18:51.000000000","message":"Done","commit_id":"da693d2fd2fb9897873daf467824b1372b866edd"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"10e89bcfcb37567a49890f26c30eab04d967465e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from webob import exc"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.api.openstack import common"},{"line_number":21,"context_line":"from nova.api.openstack.compute import servers"},{"line_number":22,"context_line":"from nova.api.openstack import extensions"},{"line_number":23,"context_line":"from nova.api.openstack import wsgi"},{"line_number":24,"context_line":"from nova.api.openstack import xmlutil"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fqfs%3D","line":21,"updated":"2013-07-15 00:51:29.000000000","message":"This is the v2 version, not the v3 version of servers","commit_id":"78ce97c3c4f09e6b6e26e5b45f009c5a6b7fa2f8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2f502dfa87697d7ebf4d8697bad7ea9f5d6c56e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from webob import exc"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from nova.api.openstack import common"},{"line_number":21,"context_line":"from nova.api.openstack.compute import servers"},{"line_number":22,"context_line":"from nova.api.openstack import extensions"},{"line_number":23,"context_line":"from nova.api.openstack import wsgi"},{"line_number":24,"context_line":"from nova.api.openstack import xmlutil"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FqVE%3D","line":21,"in_reply_to":"AAAAP3%2F%2Fqfs%3D","updated":"2013-07-15 02:50:56.000000000","message":"Done, thanks","commit_id":"78ce97c3c4f09e6b6e26e5b45f009c5a6b7fa2f8"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"10e89bcfcb37567a49890f26c30eab04d967465e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        authorize_attach(context)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        if not self.is_valid_body(body, \u0027attach\u0027):"},{"line_number":91,"context_line":"            raise exc.HTTPUnprocessableEntity()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        volume_id \u003d body[\u0027attach\u0027][\u0027volume_id\u0027]"},{"line_number":94,"context_line":"        device \u003d body[\u0027attach\u0027].get(\u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fqfg%3D","line":91,"updated":"2013-07-15 00:51:29.000000000","message":"I think this should be a HTTPBadRequest","commit_id":"78ce97c3c4f09e6b6e26e5b45f009c5a6b7fa2f8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c2f502dfa87697d7ebf4d8697bad7ea9f5d6c56e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        authorize_attach(context)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        if not self.is_valid_body(body, \u0027attach\u0027):"},{"line_number":91,"context_line":"            raise exc.HTTPUnprocessableEntity()"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        volume_id \u003d body[\u0027attach\u0027][\u0027volume_id\u0027]"},{"line_number":94,"context_line":"        device \u003d body[\u0027attach\u0027].get(\u0027device\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FqU8%3D","line":91,"in_reply_to":"AAAAP3%2F%2Fqfg%3D","updated":"2013-07-15 02:50:56.000000000","message":"Done","commit_id":"78ce97c3c4f09e6b6e26e5b45f009c5a6b7fa2f8"}],"nova/tests/api/openstack/compute/plugins/v3/test_extended_volumes.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"c38f7089839b5c8c4448a14ffe95f3599b8e6f4b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.stubs.Set(volume.cinder.API, \u0027get\u0027, fake_volume_get)"},{"line_number":109,"context_line":"        self.stubs.Set(compute.api.API, \u0027detach_volume\u0027, fake_detach_volume)"},{"line_number":110,"context_line":"        self.stubs.Set(compute.api.API, \u0027attach_volume\u0027, fake_attach_volume)"},{"line_number":111,"context_line":"        self.flags("},{"line_number":112,"context_line":"            osapi_compute_extension\u003d["},{"line_number":113,"context_line":"                \u0027nova.api.openstack.compute.contrib.select_extensions\u0027],"},{"line_number":114,"context_line":"            osapi_compute_ext_list\u003d[\u0027ExtendedVolumes\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqKI%3D","line":111,"updated":"2013-07-15 05:14:12.000000000","message":"Don\u0027t need to set these flags with v3","commit_id":"6c67a11cdce7a4a187cc8ee4798114da13105919"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"afd7227ee6bfb9a97b7b7b054265271554eab892","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.stubs.Set(volume.cinder.API, \u0027get\u0027, fake_volume_get)"},{"line_number":109,"context_line":"        self.stubs.Set(compute.api.API, \u0027detach_volume\u0027, fake_detach_volume)"},{"line_number":110,"context_line":"        self.stubs.Set(compute.api.API, \u0027attach_volume\u0027, fake_attach_volume)"},{"line_number":111,"context_line":"        self.flags("},{"line_number":112,"context_line":"            osapi_compute_extension\u003d["},{"line_number":113,"context_line":"                \u0027nova.api.openstack.compute.contrib.select_extensions\u0027],"},{"line_number":114,"context_line":"            osapi_compute_ext_list\u003d[\u0027ExtendedVolumes\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FqCc%3D","line":111,"in_reply_to":"AAAAP3%2F%2FqKI%3D","updated":"2013-07-15 06:22:10.000000000","message":"done, thanks","commit_id":"6c67a11cdce7a4a187cc8ee4798114da13105919"}]}
