)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"1b13f518738e6740d8642e8cf3dbdacf5da9f42d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"in volume/manager.py where it will be called)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ib6fcf27051f45e60aa3ba5f599e88c1421db753e"},{"line_number":16,"context_line":"Implements: bp volume-migration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAPn%2F%2F3pc%3D","line":16,"updated":"2013-06-19 12:47:20.000000000","message":"change-id should be on last line","commit_id":"2cfb39d1213c21f1d8dd48ab41b577c576357f78"}],"cinder/brick/initiator/connector.py":[{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3da97e024e5a148d7870c0085344ff7b4f2578b1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    # NOTE(vish) openiscsi stores initiator name in a file that"},{"line_number":41,"context_line":"    #            needs root permission to read."},{"line_number":42,"context_line":"    try:"},{"line_number":43,"context_line":"        lines \u003d utils.read_file_as_root(\u0027/etc/iscsi/initiatorname.iscsi\u0027)"},{"line_number":44,"context_line":"    except exception.FileNotFound:"},{"line_number":45,"context_line":"        return None"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FiiY%3D","line":43,"updated":"2013-07-16 20:13:00.000000000","message":"This has to work while in Nova as well....\n\nI\u0027m going to move this into the InitiatorConnector object and implement what\u0027s in cinder\u0027s util.py locally so it\u0027s project agnostic.","commit_id":"b17834ca96d0b895afce50b219a59d01f8b24441"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"3da97e024e5a148d7870c0085344ff7b4f2578b1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"def get_connection_properties():"},{"line_number":53,"context_line":"    properties \u003d {}"},{"line_number":54,"context_line":"    properties[\u0027ip\u0027] \u003d CONF.my_ip"},{"line_number":55,"context_line":"    properties[\u0027host\u0027] \u003d CONF.host"},{"line_number":56,"context_line":"    properties[\u0027initiator\u0027] \u003d _get_iscsi_initiator()"},{"line_number":57,"context_line":"    return properties"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAP3%2F%2FiiU%3D","line":55,"updated":"2013-07-16 20:13:00.000000000","message":"Does nova and glance have CONF.my_ip and CONF.host ?","commit_id":"b17834ca96d0b895afce50b219a59d01f8b24441"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"05b6c9076b1196ff3a377f057dcc88834143a230","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":32,"context_line":"from cinder.openstack.common import loopingcall"},{"line_number":33,"context_line":"from cinder.openstack.common import processutils as putils"},{"line_number":34,"context_line":"from cinder import utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAQn%2F%2F0A0%3D","line":34,"updated":"2013-07-22 21:11:07.000000000","message":"we should not be using cinder.utils here, because it needs to eventually work outside of cinder. \n\nAlso, this is an unused import.","commit_id":"133926536b8a1b1a4770e2ccf05c48e54f16f261"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ae038ea61c62660adbe86548b5892ad5671e6753","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":32,"context_line":"from cinder.openstack.common import loopingcall"},{"line_number":33,"context_line":"from cinder.openstack.common import processutils as putils"},{"line_number":34,"context_line":"from cinder import utils"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAQn%2F%2FzEI%3D","line":34,"in_reply_to":"AAAAQn%2F%2F0A0%3D","updated":"2013-07-23 02:35:24.000000000","message":"Right, it\u0027s left-over code - thanks!","commit_id":"133926536b8a1b1a4770e2ccf05c48e54f16f261"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":86,"context_line":"    name_id_internal \u003d Column(String(36))  # Don\u0027t access/modify this directly!"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @hybrid_property"},{"line_number":89,"context_line":"    def name_id(self):"},{"line_number":90,"context_line":"        return self.id if not self.name_id_internal else self.name_id_internal"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fva0%3D","line":88,"updated":"2013-07-12 04:17:33.000000000","message":"Where are we taking advantage of this being a hybrid_property? I missed it.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":86,"context_line":"    name_id_internal \u003d Column(String(36))  # Don\u0027t access/modify this directly!"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @hybrid_property"},{"line_number":89,"context_line":"    def name_id(self):"},{"line_number":90,"context_line":"        return self.id if not self.name_id_internal else self.name_id_internal"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FptE%3D","line":88,"in_reply_to":"AAAAP3%2F%2Fva0%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"}],"cinder/scheduler/driver.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import utils"},{"line_number":30,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scheduler_driver_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fxp8%3D","line":32,"updated":"2013-07-12 04:17:33.000000000","message":"Move this import up with the rest of cinder module imports.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from cinder import utils"},{"line_number":30,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scheduler_driver_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fpuc%3D","line":32,"in_reply_to":"AAAAP3%2F%2Fxp8%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def host_passes_filters(self, context, volume_id, host, filter_properties):"},{"line_number":90,"context_line":"        \"\"\"Check if the specified host passes the filters.\"\"\""},{"line_number":91,"context_line":"        raise NotImplementedError(_(\"Must implement schedule_create_volume\"))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def schedule(self, context, topic, method, *_args, **_kwargs):"},{"line_number":94,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fxps%3D","line":91,"updated":"2013-07-12 04:17:33.000000000","message":"Must implement schedule_host_passes_filters.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def host_passes_filters(self, context, volume_id, host, filter_properties):"},{"line_number":90,"context_line":"        \"\"\"Check if the specified host passes the filters.\"\"\""},{"line_number":91,"context_line":"        raise NotImplementedError(_(\"Must implement schedule_create_volume\"))"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def schedule(self, context, topic, method, *_args, **_kwargs):"},{"line_number":94,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FpuY%3D","line":91,"in_reply_to":"AAAAP3%2F%2Fxps%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d068060444133ea04673b385ef70421f2c75ab4c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scheduler_driver_opts \u003d ["},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027scheduler_host_manager\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fy4E%3D","line":33,"updated":"2013-07-23 05:00:11.000000000","message":"unused imports and LOG.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from cinder import utils"},{"line_number":31,"context_line":"from cinder.volume import rpcapi as volume_rpcapi"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"scheduler_driver_opts \u003d ["},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027scheduler_host_manager\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FyuA%3D","line":33,"in_reply_to":"AAAAQn%2F%2Fy4E%3D","updated":"2013-07-24 11:26:31.000000000","message":"Done","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"}],"cinder/scheduler/manager.py":[{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d068060444133ea04673b385ef70421f2c75ab4c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                               filter_properties\u003dNone):"},{"line_number":152,"context_line":"        \"\"\"Ensure that the host exists and can accept the volume.\"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            host \u003d self.driver.host_passes_filters(context, host, request_spec,"},{"line_number":155,"context_line":"                                                   filter_properties)"},{"line_number":156,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":157,"context_line":"                self._migrate_volume_set_error(context, ex, request_spec)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fy3s%3D","line":154,"updated":"2013-07-23 05:00:11.000000000","message":"it seems to me that the data structure returned from chance/filter_scheduler is different, is that expected?","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                               filter_properties\u003dNone):"},{"line_number":152,"context_line":"        \"\"\"Ensure that the host exists and can accept the volume.\"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            host \u003d self.driver.host_passes_filters(context, host, request_spec,"},{"line_number":155,"context_line":"                                                   filter_properties)"},{"line_number":156,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":157,"context_line":"                self._migrate_volume_set_error(context, ex, request_spec)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FysA%3D","line":154,"in_reply_to":"AAAAQn%2F%2Fy3s%3D","updated":"2013-07-24 11:26:31.000000000","message":"Good point!","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d068060444133ea04673b385ef70421f2c75ab4c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\"Ensure that the host exists and can accept the volume.\"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            host \u003d self.driver.host_passes_filters(context, host, request_spec,"},{"line_number":155,"context_line":"                                                   filter_properties)"},{"line_number":156,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":157,"context_line":"                self._migrate_volume_set_error(context, ex, request_spec)"},{"line_number":158,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fy3o%3D","line":155,"updated":"2013-07-23 05:00:11.000000000","message":"Also, the host_passes_filters() is missing in simple scheduler.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        \"\"\"Ensure that the host exists and can accept the volume.\"\"\""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            host \u003d self.driver.host_passes_filters(context, host, request_spec,"},{"line_number":155,"context_line":"                                                   filter_properties)"},{"line_number":156,"context_line":"        except exception.NoValidHost as ex:"},{"line_number":157,"context_line":"                self._migrate_volume_set_error(context, ex, request_spec)"},{"line_number":158,"context_line":"        except Exception as ex:"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fyrw%3D","line":155,"in_reply_to":"AAAAQn%2F%2Fy3o%3D","updated":"2013-07-24 11:26:31.000000000","message":"Simple should inherit from Chance","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"}],"cinder/tests/db/test_finish_migration.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(FinishVolumeMigrationTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.ctxt \u003d context.RequestContext(user_id\u003d\u0027user_id\u0027,"},{"line_number":30,"context_line":"                                           project_id\u003d\u0027project_id\u0027,"},{"line_number":31,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FvcY%3D","line":29,"updated":"2013-07-12 04:17:33.000000000","message":"Do we need to setup the context for each test?","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(FinishVolumeMigrationTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.ctxt \u003d context.RequestContext(user_id\u003d\u0027user_id\u0027,"},{"line_number":30,"context_line":"                                           project_id\u003d\u0027project_id\u0027,"},{"line_number":31,"context_line":"                                           is_admin\u003dTrue)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fpuw%3D","line":29,"in_reply_to":"AAAAP3%2F%2FvcY%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def tearDown(self):"},{"line_number":34,"context_line":"        super(FinishVolumeMigrationTestCase, self).tearDown()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _create_volume(self,"},{"line_number":37,"context_line":"                       host\u003d\u0027test_host\u0027,"},{"line_number":38,"context_line":"                       status\u003d\u0027available\u0027):"},{"line_number":39,"context_line":"        \"\"\"Create a volume object.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fvcg%3D","line":36,"updated":"2013-07-12 04:17:33.000000000","message":"nit: could all fit on one line.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def tearDown(self):"},{"line_number":34,"context_line":"        super(FinishVolumeMigrationTestCase, self).tearDown()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _create_volume(self,"},{"line_number":37,"context_line":"                       host\u003d\u0027test_host\u0027,"},{"line_number":38,"context_line":"                       status\u003d\u0027available\u0027):"},{"line_number":39,"context_line":"        \"\"\"Create a volume object.\"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fpu8%3D","line":36,"in_reply_to":"AAAAP3%2F%2Fvcg%3D","updated":"2013-07-15 11:11:41.000000000","message":"Removed function","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"}],"cinder/tests/db/test_name_id.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def tearDown(self):"},{"line_number":36,"context_line":"        super(NameIDsTestCase, self).tearDown()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _create_volume(self,"},{"line_number":39,"context_line":"                       display_name\u003d\u0027test_volume\u0027,"},{"line_number":40,"context_line":"                       display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":41,"context_line":"                       status\u003d\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fvbs%3D","line":38,"updated":"2013-07-12 04:17:33.000000000","message":"This pretty similar to _create_volume in test_finish_migration.py. Perhaps we can use that and have it in a more appropriate location for different tests to import?","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def tearDown(self):"},{"line_number":36,"context_line":"        super(NameIDsTestCase, self).tearDown()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def _create_volume(self,"},{"line_number":39,"context_line":"                       display_name\u003d\u0027test_volume\u0027,"},{"line_number":40,"context_line":"                       display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":41,"context_line":"                       status\u003d\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp2s%3D","line":38,"in_reply_to":"AAAAP3%2F%2Fvbs%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"}],"cinder/tests/test_volume.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"            self.volume.delete_volume(self.context, volume_id)"},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"class LVMVolumeDriverTestCase(DriverTestCase):"},{"line_number":1511,"context_line":"    \"\"\"Test case for VolumeDriver\"\"\""},{"line_number":1512,"context_line":"    driver_name \u003d \"cinder.volume.drivers.lvm.LVMISCSIDriver\""},{"line_number":1513,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fv5o%3D","line":1510,"updated":"2013-07-12 04:17:33.000000000","message":"Did you still want this to be LVMVolumeDriver instead of LVMISCSIDriver as well?","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"            self.volume.delete_volume(self.context, volume_id)"},{"line_number":1508,"context_line":""},{"line_number":1509,"context_line":""},{"line_number":1510,"context_line":"class LVMVolumeDriverTestCase(DriverTestCase):"},{"line_number":1511,"context_line":"    \"\"\"Test case for VolumeDriver\"\"\""},{"line_number":1512,"context_line":"    driver_name \u003d \"cinder.volume.drivers.lvm.LVMISCSIDriver\""},{"line_number":1513,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp3U%3D","line":1510,"in_reply_to":"AAAAP3%2F%2Fv5o%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"}],"cinder/volume/api.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                        return False"},{"line_number":436,"context_line":"                return True"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            def _check_migration_target(volume, searchdict):"},{"line_number":439,"context_line":"                if volume[\u0027status\u0027] !\u003d \u0027migration_target\u0027:"},{"line_number":440,"context_line":"                    return True"},{"line_number":441,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fx4E%3D","line":438,"updated":"2013-07-12 04:17:33.000000000","message":"searchdict never gets used.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                        return False"},{"line_number":436,"context_line":"                return True"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            def _check_migration_target(volume, searchdict):"},{"line_number":439,"context_line":"                if volume[\u0027status\u0027] !\u003d \u0027migration_target\u0027:"},{"line_number":440,"context_line":"                    return True"},{"line_number":441,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp4M%3D","line":438,"in_reply_to":"AAAAP3%2F%2Fx4E%3D","updated":"2013-07-15 11:11:41.000000000","message":"It\u0027s never used but it\u0027s passed by the call on line 457.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                return True"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            def _check_migration_target(volume, searchdict):"},{"line_number":439,"context_line":"                if volume[\u0027status\u0027] !\u003d \u0027migration_target\u0027:"},{"line_number":440,"context_line":"                    return True"},{"line_number":441,"context_line":"                return False"},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fx2w%3D","line":439,"updated":"2013-07-12 04:17:33.000000000","message":"Maybe just move additions from line 420 in here, so this is overriding the admin context check setting?","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                return True"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"            def _check_migration_target(volume, searchdict):"},{"line_number":439,"context_line":"                if volume[\u0027status\u0027] !\u003d \u0027migration_target\u0027:"},{"line_number":440,"context_line":"                    return True"},{"line_number":441,"context_line":"                return False"},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp3s%3D","line":439,"in_reply_to":"AAAAP3%2F%2Fx2w%3D","updated":"2013-07-15 11:11:41.000000000","message":"I thought it would be better for the admin case to skip everything in the \u0027if\u0027 statement on line 424.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"            # search_option to filter_name mapping."},{"line_number":444,"context_line":"            filter_mapping \u003d {\u0027metadata\u0027: _check_metadata_match,"},{"line_number":445,"context_line":"                              \u0027no_migration_targets\u0027: _check_migration_target}"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"            result \u003d []"},{"line_number":448,"context_line":"            not_found \u003d object()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fx4Q%3D","line":445,"updated":"2013-07-12 04:17:33.000000000","message":"Pass volume to _check_migration_target.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":442,"context_line":""},{"line_number":443,"context_line":"            # search_option to filter_name mapping."},{"line_number":444,"context_line":"            filter_mapping \u003d {\u0027metadata\u0027: _check_metadata_match,"},{"line_number":445,"context_line":"                              \u0027no_migration_targets\u0027: _check_migration_target}"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"            result \u003d []"},{"line_number":448,"context_line":"            not_found \u003d object()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp3o%3D","line":445,"in_reply_to":"AAAAP3%2F%2Fx4Q%3D","updated":"2013-07-15 11:11:41.000000000","message":"volume is passed when the function is called on line 457.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        self.update(context, volume, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def migrate_volume(self, context, volume, host, force_host_copy):"},{"line_number":862,"context_line":"        \"\"\"Migrate the volume to the specified host\"\"\""},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"        # We only handle \"available\" volumes for now"},{"line_number":865,"context_line":"        if volume[\u0027status\u0027] !\u003d \"available\":"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FxpI%3D","line":862,"updated":"2013-07-12 04:17:33.000000000","message":"Nit: Period at the end.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":859,"context_line":"        self.update(context, volume, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def migrate_volume(self, context, volume, host, force_host_copy):"},{"line_number":862,"context_line":"        \"\"\"Migrate the volume to the specified host\"\"\""},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"        # We only handle \"available\" volumes for now"},{"line_number":865,"context_line":"        if volume[\u0027status\u0027] !\u003d \"available\":"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fp8Q%3D","line":862,"in_reply_to":"AAAAP3%2F%2FxpI%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"}],"cinder/volume/driver.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"e5098afd9a2897a527bf26aee8b058937950c1aa","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                msg \u003d _(\"Failed to attach volume %(vol)s\")"},{"line_number":220,"context_line":"                LOG.error(msg % {\u0027vol\u0027: dest_vol[\u0027id\u0027]})"},{"line_number":221,"context_line":"                self.db.volume_update(context, dest_vol[\u0027id\u0027],"},{"line_number":222,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            src_attach_info \u003d self._attach_volume(context,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FxoA%3D","line":222,"updated":"2013-07-23 13:51:31.000000000","message":"In planing ahead, we should make this do a get of the volume-status prior to the _attach and set it back to whatever state it was in prior.\n\nFew other spots where IMO that would be good to implement now.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                msg \u003d _(\"Failed to attach volume %(vol)s\")"},{"line_number":220,"context_line":"                LOG.error(msg % {\u0027vol\u0027: dest_vol[\u0027id\u0027]})"},{"line_number":221,"context_line":"                self.db.volume_update(context, dest_vol[\u0027id\u0027],"},{"line_number":222,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            src_attach_info \u003d self._attach_volume(context,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FxVc%3D","line":222,"in_reply_to":"AAAAQn%2F%2FxoA%3D","updated":"2013-07-24 11:26:31.000000000","message":"Will do that for this instance now.  Will have to keep an eye out for the other spots.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"0ee756a99fe49121b778a9191cdae870d6cdd3fa","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def _detach_volume(self, attach_info):"},{"line_number":321,"context_line":"        \"\"\"Disconnect the volume from the host.\"\"\""},{"line_number":322,"context_line":"        protocol \u003d attach_info[\u0027conn\u0027][\u0027driver_volume_type\u0027]"},{"line_number":323,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":324,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":325,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAQn%2F%2FvKs%3D","line":322,"updated":"2013-07-24 06:51:58.000000000","message":"protocol is not needed anymore.","commit_id":"37ea56f9560d010e9160f3fd76d43921e05314e8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"1198ecf2eed7b7582537084074bf07eaf460cadf","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    def _detach_volume(self, attach_info):"},{"line_number":321,"context_line":"        \"\"\"Disconnect the volume from the host.\"\"\""},{"line_number":322,"context_line":"        protocol \u003d attach_info[\u0027conn\u0027][\u0027driver_volume_type\u0027]"},{"line_number":323,"context_line":"        # Use Brick\u0027s code to do attach/detach"},{"line_number":324,"context_line":"        connector \u003d attach_info[\u0027connector\u0027]"},{"line_number":325,"context_line":"        connector.disconnect_volume(attach_info[\u0027conn\u0027][\u0027data\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAQn%2F%2Fu0I%3D","line":322,"in_reply_to":"AAAAQn%2F%2FvKs%3D","updated":"2013-07-24 08:50:04.000000000","message":"Done","commit_id":"37ea56f9560d010e9160f3fd76d43921e05314e8"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b3ac4dca55a27e71619a38dd6bb077d2ca627b59","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                backup_service.restore(backup, volume[\u0027id\u0027], volume_file)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def migrate_volume(self, volume, host):"},{"line_number":310,"context_line":"        \"\"\"Optimize the migration if the destination is on the same server."},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        If the specified host is another back-end on the same server, and"},{"line_number":313,"context_line":"        the volume is not attached, we can do the migration locally without"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F1bA%3D","line":310,"updated":"2013-06-20 05:54:38.000000000","message":"I didn\u0027t quite follow the idea here and the addition of the vg-name parameter above.  I get it though, multi-back-end LVM\u0027s on the same host, migrate from one to the other.\n\nI didn\u0027t really think of this use case, but that could be really handy for things like PV replacements etc I guess?","commit_id":"079772df7588c03ae77dcb85232f12829abe8585"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b3ac4dca55a27e71619a38dd6bb077d2ca627b59","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":737,"context_line":"        data[\u0027total_capacity_gb\u0027] \u003d \u0027infinite\u0027"},{"line_number":738,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d \u0027infinite\u0027"},{"line_number":739,"context_line":"        data[\u0027location_info\u0027] \u003d (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027 %"},{"line_number":740,"context_line":"                                 {\u0027hostname\u0027: self.hostname,"},{"line_number":741,"context_line":"                                 \u0027vg\u0027: self.configuration.volume_group})"},{"line_number":742,"context_line":"        self._stats \u003d data"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F1a0%3D","line":739,"updated":"2013-06-20 05:54:38.000000000","message":"cool... another thought was to try and glob the volume-service string somehow for this.","commit_id":"079772df7588c03ae77dcb85232f12829abe8585"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"89cd26093356f689e4ae10ec06a6276500983fa4","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d 0"},{"line_number":605,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.configuration.reserved_percentage"},{"line_number":606,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":607,"context_line":"        data[\u0027location_info\u0027] \u003d (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027 %"},{"line_number":608,"context_line":"                                 {\u0027hostname\u0027: self.hostname,"},{"line_number":609,"context_line":"                                 \u0027vg\u0027: self.configuration.volume_group})"},{"line_number":610,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2F0AY%3D","line":607,"updated":"2013-07-11 02:33:28.000000000","message":"I don\u0027t understand what location_info is used for. Is it related to migration?","commit_id":"15d2390be82abd55e073d6ebe12b3bfff169af1c"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"050332368086cebf99b7a30f3dd4e3cd560bf3cc","unresolved":false,"context_lines":[{"line_number":604,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d 0"},{"line_number":605,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.configuration.reserved_percentage"},{"line_number":606,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":607,"context_line":"        data[\u0027location_info\u0027] \u003d (\u0027LVMVolumeDriver:%(hostname)s:%(vg)s\u0027 %"},{"line_number":608,"context_line":"                                 {\u0027hostname\u0027: self.hostname,"},{"line_number":609,"context_line":"                                 \u0027vg\u0027: self.configuration.volume_group})"},{"line_number":610,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fy34%3D","line":607,"in_reply_to":"AAAAP3%2F%2F0AY%3D","updated":"2013-07-11 10:23:12.000000000","message":"Yes, the driver uses it to determine information about the destination of the migration.  In this case, to make sure that the destination is an LVM driver, that the source and destination are on the same host, and the destination volume group.  Basically this is everything the source needs to perform the migration.\n\nFor a storage controller driver, this will be something like \u0027FooDriver:StorageSerialNumber:PoolName\u0027.","commit_id":"15d2390be82abd55e073d6ebe12b3bfff169af1c"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"e5098afd9a2897a527bf26aee8b058937950c1aa","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            (dest_type, dest_hostname, dest_vg) \u003d info.split(\u0027:\u0027)"},{"line_number":554,"context_line":"        except ValueError:"},{"line_number":555,"context_line":"            return false_ret"},{"line_number":556,"context_line":"        if (dest_type !\u003d \u0027LVMVolumeDriver\u0027 or dest_hostname !\u003d self.hostname):"},{"line_number":557,"context_line":"            return false_ret"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        self.remove_export(ctxt, volume)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FxlY%3D","line":556,"updated":"2013-07-23 13:51:31.000000000","message":"if it has to be another LVM and it has to be on the same host what\u0027s the point in the migration?","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            (dest_type, dest_hostname, dest_vg) \u003d info.split(\u0027:\u0027)"},{"line_number":554,"context_line":"        except ValueError:"},{"line_number":555,"context_line":"            return false_ret"},{"line_number":556,"context_line":"        if (dest_type !\u003d \u0027LVMVolumeDriver\u0027 or dest_hostname !\u003d self.hostname):"},{"line_number":557,"context_line":"            return false_ret"},{"line_number":558,"context_line":""},{"line_number":559,"context_line":"        self.remove_export(ctxt, volume)"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FxTM%3D","line":556,"in_reply_to":"AAAAQn%2F%2FxlY%3D","updated":"2013-07-24 11:26:31.000000000","message":"Discussed in IRC.  This is an unlikely use case, but serves as an example where the driver can more optimally migrate the volume, without outside intervention.  In this case, if the volume is detached and source\u0026dest are on the same server, we can \u0027dd\u0027 without going over the network.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"e5098afd9a2897a527bf26aee8b058937950c1aa","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        self._delete_volume(volume)"},{"line_number":568,"context_line":"        self._create_export(ctxt, volume, vg\u003ddest_vg)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return (True, {})"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def rename_volume(self, volume, orig_name):"},{"line_number":573,"context_line":"        self._execute(\u0027lvrename\u0027, self.configuration.volume_group,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fy3c%3D","line":570,"updated":"2013-07-23 13:51:31.000000000","message":"Returning an empty dict here, guess I\u0027m not following why we wouldn\u0027t return the new model update in this case.  Regardless we probably shouldn\u0027t pass around empty dicts.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        self._delete_volume(volume)"},{"line_number":568,"context_line":"        self._create_export(ctxt, volume, vg\u003ddest_vg)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        return (True, {})"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    def rename_volume(self, volume, orig_name):"},{"line_number":573,"context_line":"        self._execute(\u0027lvrename\u0027, self.configuration.volume_group,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2FxTI%3D","line":570,"in_reply_to":"AAAAQn%2F%2Fy3c%3D","updated":"2013-07-24 11:26:31.000000000","message":"Done","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"}],"cinder/volume/manager.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"b3ac4dca55a27e71619a38dd6bb077d2ca627b59","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                          volume_ref[\u0027id\u0027],"},{"line_number":740,"context_line":"                                          {\u0027status\u0027: \u0027error_migrating\u0027})"},{"line_number":741,"context_line":"        if not moved:"},{"line_number":742,"context_line":"            LOG.debug(\u0027generic copy function call to brick goes here\u0027)"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        updates \u003d {\u0027host\u0027: host[\u0027host\u0027]}"},{"line_number":745,"context_line":"        if model_update:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPn%2F%2F1ag%3D","line":742,"updated":"2013-06-20 05:54:38.000000000","message":":)","commit_id":"079772df7588c03ae77dcb85232f12829abe8585"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"import socket"},{"line_number":42,"context_line":"import sys"},{"line_number":43,"context_line":"import time"},{"line_number":44,"context_line":"import traceback"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2FxkQ%3D","line":41,"updated":"2013-07-12 04:17:33.000000000","message":"socket is never used.","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\"\"\""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"import socket"},{"line_number":42,"context_line":"import sys"},{"line_number":43,"context_line":"import time"},{"line_number":44,"context_line":"import traceback"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fq6E%3D","line":41,"in_reply_to":"AAAAP3%2F%2FxkQ%3D","updated":"2013-07-15 11:11:41.000000000","message":"Done","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d66ad2dd141c4fee6de2275842d3b2fe3ec64c1b","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        # If deleting the source volume in a migration, we want to skip quotas"},{"line_number":484,"context_line":"        # and other database updates."},{"line_number":485,"context_line":"        if volume_ref[\u0027status\u0027] \u003d\u003d \u0027migrating\u0027:"},{"line_number":486,"context_line":"            return True"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        # Get reservations"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fxj8%3D","line":485,"updated":"2013-07-12 04:17:33.000000000","message":"log this maybe? Should we be raising instead?","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"de0c2ecb1d28495f1f1f6ec0e6f164e04774896b","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        # If deleting the source volume in a migration, we want to skip quotas"},{"line_number":484,"context_line":"        # and other database updates."},{"line_number":485,"context_line":"        if volume_ref[\u0027status\u0027] \u003d\u003d \u0027migrating\u0027:"},{"line_number":486,"context_line":"            return True"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        # Get reservations"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAP3%2F%2Fq5Y%3D","line":485,"in_reply_to":"AAAAP3%2F%2Fxj8%3D","updated":"2013-07-15 11:11:41.000000000","message":"This isn\u0027t an error - if we\u0027re deleting a volume that is the source of a migration, we don\u0027t want to do any of the stuff below (e.g., quotas, database operations to delete, etc.).","commit_id":"6c1a1435fd0364e0bee124f383ad01ce19a25a26"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"d068060444133ea04673b385ef70421f2c75ab4c","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        self.driver.accept_transfer(volume_ref)"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"    def _migrate_volume_generic(self, ctxt, volume, host):"},{"line_number":786,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        # Create new volume on remote host"},{"line_number":789,"context_line":"        new_vol_values \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fy44%3D","line":786,"updated":"2013-07-23 05:00:11.000000000","message":"personally, I prefer do the migration on dest host mostly because i am not a fan of calling RPC API between back-ends.  So far it seems unavoidable but if we do migration in dest host, we may use less RPC calls.  Here\u0027s the steps to do migration:\n1) create vol on dest host;\n2) attach src/dest vol;\n3) copy data;\n4) del src vol;\n5) rename dest vol;\n\nIf migration is done in dest, we have to call RPC API in step 2 and 4; but if migration is done in src host, we save one RPC call.\n\nJust a suggestion and I\u0027m open to learn your intention for doing migration in src host.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"506aa837a3a488d2f2e762ca2326ad006a07b7e3","unresolved":false,"context_lines":[{"line_number":783,"context_line":"        self.driver.accept_transfer(volume_ref)"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"    def _migrate_volume_generic(self, ctxt, volume, host):"},{"line_number":786,"context_line":"        rpcapi \u003d volume_rpcapi.VolumeAPI()"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        # Create new volume on remote host"},{"line_number":789,"context_line":"        new_vol_values \u003d {}"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAQn%2F%2Fx2Q%3D","line":786,"in_reply_to":"AAAAQn%2F%2Fy44%3D","updated":"2013-07-24 11:26:31.000000000","message":"So there\u0027s a step #0 in the migration - the call to driver.migrate_volume, which allows the backend to migrate the volume entirely on its own if it can do so.  From what I\u0027ve seen in controller APIs (I\u0027ve tried to check some variety), it either doesn\u0027t matter where you do the migration (source or dest), or it must be source.  I haven\u0027t seen any practical cases where the destination driver could do the migration alone.  If a use case like this pops up we can add an RPC call to the dest, but if we go with your suggestion now we will have to add an RPC call to the source now, making it 3 vs. 3.  And if it\u0027s the same number of RPC calls, I\u0027d rather do the shorter create_volume call remotely than the longer migrate_volume call.\n\nI\u0027d be happy to hear your and others opinions.","commit_id":"ce94bbbdd4793ca2048583623b5bc212f8d28ab8"}]}
