)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ffb82c4131de4551014c449b261a713dd1082738","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Margarita Shakhova \u003cshakhova.margarita@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-21 12:24:28 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get list of all volumes for ensure_export"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get list of all volumes at once instead of requesting one by one."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"df7087c5_46ffbc00","line":7,"updated":"2018-03-21 14:28:54.000000000","message":"Please, mention in a commit message that is related only to the specified driver","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"098f835960917d925011a0dc935602380b91f92f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Margarita Shakhova \u003cshakhova.margarita@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-21 12:24:28 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get list of all volumes for ensure_export"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get list of all volumes at once instead of requesting one by one."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"bf659307_4a24bcc6","line":7,"in_reply_to":"df7087c5_46ffbc00","updated":"2018-04-09 06:51:23.000000000","message":"Added \u0027Storwize:\u0027 to the commit message","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"8260ca360502dafe33fec83872db7de9d074522e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Margarita Shakhova \u003cshakhova.margarita@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-21 14:33:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get list of all volumes for ensure_export"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get list of all volumes at once instead of requesting one by one."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"df7087c5_06dd4441","line":7,"updated":"2018-03-21 14:35:32.000000000","message":"This should be updated to be prepended with \"Storwize:\" or something to indicate it is specific for a driver.","commit_id":"b227cc0bb504f86587aa1004de16daf6b3b7874f"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"098f835960917d925011a0dc935602380b91f92f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Margarita Shakhova \u003cshakhova.margarita@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-03-21 14:33:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Get list of all volumes for ensure_export"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Get list of all volumes at once instead of requesting one by one."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bf659307_ea1cb078","line":7,"in_reply_to":"df7087c5_06dd4441","updated":"2018-04-09 06:51:23.000000000","message":"Changed commit message","commit_id":"b227cc0bb504f86587aa1004de16daf6b3b7874f"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"40f348f9f7b6f19e703ea227e6dfb80f932e8b7f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Storwize: get list of all volumes for ensure_export."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch solves the problem of too slow start of cinder-volume service."},{"line_number":10,"context_line":"Previously lsvdisk() was called separately for every \u0027in-use\u0027 volume in order to check if the volume exists on the storage."},{"line_number":11,"context_line":"In order to avoid problem of too long driver initiatlization lsvdisk() is called once per pool."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia84afc12a30ea7b714b287844e81ba02ce4b0f3d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"5f7c97a3_55d40320","line":10,"updated":"2018-05-11 20:26:17.000000000","message":"Please reformat this to be limited to 72 characters per line.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"40f348f9f7b6f19e703ea227e6dfb80f932e8b7f","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch solves the problem of too slow start of cinder-volume service."},{"line_number":10,"context_line":"Previously lsvdisk() was called separately for every \u0027in-use\u0027 volume in order to check if the volume exists on the storage."},{"line_number":11,"context_line":"In order to avoid problem of too long driver initiatlization lsvdisk() is called once per pool."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia84afc12a30ea7b714b287844e81ba02ce4b0f3d"},{"line_number":14,"context_line":"Closes-Bug: #1749687"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"5f7c97a3_75d9ff54","line":11,"range":{"start_line":11,"start_character":45,"end_line":11,"end_character":60},"updated":"2018-05-11 20:26:17.000000000","message":"initialization","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"}],"cinder/tests/unit/volume/drivers/ibm/test_storwize_svc.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ffb82c4131de4551014c449b261a713dd1082738","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"        self.mock_object(storwize_svc_iscsi.StorwizeSVCISCSIDriver,"},{"line_number":4592,"context_line":"                         \u0027DEFAULT_GR_SLEEP\u0027, 0)"},{"line_number":4593,"context_line":"        self._create_test_volume_types()"},{"line_number":4594,"context_line":"        self._volumes_list \u003d list()"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"    def _set_flag(self, flag, value, configuration\u003dNone):"},{"line_number":4597,"context_line":"        if not configuration:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_4676dca6","line":4594,"updated":"2018-03-21 14:28:54.000000000","message":"We don\u0027t need it here because it\u0027s used only in one test","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"098f835960917d925011a0dc935602380b91f92f","unresolved":false,"context_lines":[{"line_number":4591,"context_line":"        self.mock_object(storwize_svc_iscsi.StorwizeSVCISCSIDriver,"},{"line_number":4592,"context_line":"                         \u0027DEFAULT_GR_SLEEP\u0027, 0)"},{"line_number":4593,"context_line":"        self._create_test_volume_types()"},{"line_number":4594,"context_line":"        self._volumes_list \u003d list()"},{"line_number":4595,"context_line":""},{"line_number":4596,"context_line":"    def _set_flag(self, flag, value, configuration\u003dNone):"},{"line_number":4597,"context_line":"        if not configuration:"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_aa3d58de","line":4594,"in_reply_to":"df7087c5_4676dca6","updated":"2018-04-09 06:51:23.000000000","message":"Done","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"}],"cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2f1852283f3a314af74f4e8dac38960a2ca9c273","unresolved":false,"context_lines":[{"line_number":2559,"context_line":"        self._validate_pools_exist()"},{"line_number":2560,"context_line":""},{"line_number":2561,"context_line":"        # Get list of all volumes"},{"line_number":2562,"context_line":"        self._get_all_volumes()"},{"line_number":2563,"context_line":""},{"line_number":2564,"context_line":"        # Build the list of in-progress vdisk copy operations"},{"line_number":2565,"context_line":"        if ctxt is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa0c359_45f9b2c5","line":2562,"updated":"2018-02-22 10:23:14.000000000","message":"Please, add unit tests to cover new method","commit_id":"ebb26ee2cb98b8d6b6305b0a74efaee1757feea7"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"a41d12b67f4f1f53eed96a24b784e6a04c8f0b91","unresolved":false,"context_lines":[{"line_number":2559,"context_line":"        self._validate_pools_exist()"},{"line_number":2560,"context_line":""},{"line_number":2561,"context_line":"        # Get list of all volumes"},{"line_number":2562,"context_line":"        self._get_all_volumes()"},{"line_number":2563,"context_line":""},{"line_number":2564,"context_line":"        # Build the list of in-progress vdisk copy operations"},{"line_number":2565,"context_line":"        if ctxt is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df7087c5_23495a8a","line":2562,"in_reply_to":"3fa0c359_45f9b2c5","updated":"2018-03-21 14:26:25.000000000","message":"Done","commit_id":"ebb26ee2cb98b8d6b6305b0a74efaee1757feea7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"ffb82c4131de4551014c449b261a713dd1082738","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        self._active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027)"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        # This list is used to ensure volume export"},{"line_number":2527,"context_line":"        self._volumes_list \u003d list()"},{"line_number":2528,"context_line":""},{"line_number":2529,"context_line":"        # This dictionary is used to map each replication target to certain"},{"line_number":2530,"context_line":"        # replication manager object."}],"source_content_type":"text/x-python","patch_set":7,"id":"df7087c5_c6698cbe","line":2527,"updated":"2018-03-21 14:28:54.000000000","message":"nit: it could be changed to:\nself._volumes_list \u003d []","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"098f835960917d925011a0dc935602380b91f92f","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        self._active_backend_id \u003d kwargs.get(\u0027active_backend_id\u0027)"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"        # This list is used to ensure volume export"},{"line_number":2527,"context_line":"        self._volumes_list \u003d list()"},{"line_number":2528,"context_line":""},{"line_number":2529,"context_line":"        # This dictionary is used to map each replication target to certain"},{"line_number":2530,"context_line":"        # replication manager object."}],"source_content_type":"text/x-python","patch_set":7,"id":"bf659307_8a45f472","line":2527,"in_reply_to":"df7087c5_c6698cbe","updated":"2018-04-09 06:51:23.000000000","message":"Done","commit_id":"4eb8fa1bd07d5d869c9042bb9df810ad02fc3fce"},{"author":{"_account_id":17045,"name":"xiaoqin","email":"xiaoqin.li@hotmail.com","username":"xiaoqin"},"change_message_id":"3259b53e3a26c07484e4c138cab41e0391939ac4","unresolved":false,"context_lines":[{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def _get_all_volumes(self):"},{"line_number":2634,"context_line":"        # Get list of all volumes"},{"line_number":2635,"context_line":"        pools \u003d self.configuration.storwize_svc_volpool_name"},{"line_number":2636,"context_line":"        for pool in pools:"},{"line_number":2637,"context_line":"            try:"},{"line_number":2638,"context_line":"                pool_vols \u003d self._helpers.get_pool_volumes(pool)"},{"line_number":2639,"context_line":"                self._volumes_list.extend(pool_vols)"},{"line_number":2640,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2641,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2642,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"    def check_for_setup_error(self):"},{"line_number":2645,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_e0110206","line":2642,"range":{"start_line":2635,"start_character":0,"end_line":2642,"end_character":56},"updated":"2018-03-22 05:59:37.000000000","message":"Two concerns here. \n1. The change get_pool_volumes(pool) access all the volumes in the pool regardless it is created by cinder or not, is it necessary?\n2. This change does not consider the host failover condition. After the host failover, the pool is not got from    configuration.storwize_svc_volpool_name.","commit_id":"b227cc0bb504f86587aa1004de16daf6b3b7874f"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"098f835960917d925011a0dc935602380b91f92f","unresolved":false,"context_lines":[{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def _get_all_volumes(self):"},{"line_number":2634,"context_line":"        # Get list of all volumes"},{"line_number":2635,"context_line":"        pools \u003d self.configuration.storwize_svc_volpool_name"},{"line_number":2636,"context_line":"        for pool in pools:"},{"line_number":2637,"context_line":"            try:"},{"line_number":2638,"context_line":"                pool_vols \u003d self._helpers.get_pool_volumes(pool)"},{"line_number":2639,"context_line":"                self._volumes_list.extend(pool_vols)"},{"line_number":2640,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2641,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2642,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"    def check_for_setup_error(self):"},{"line_number":2645,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_bd27e0b6","line":2642,"range":{"start_line":2635,"start_character":0,"end_line":2642,"end_character":56},"in_reply_to":"bf659307_0acfee28","updated":"2018-04-09 06:51:23.000000000","message":"For the first concern, it is possible to get a non-cinder disk as a result but this will not lead to any error.\nFor the second concern, I changed code to obtain pool list not from config, now self._get_backend_pools() is used.","commit_id":"b227cc0bb504f86587aa1004de16daf6b3b7874f"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"292a8b16e0f00226f49d485b576629f4b37d3f38","unresolved":false,"context_lines":[{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def _get_all_volumes(self):"},{"line_number":2634,"context_line":"        # Get list of all volumes"},{"line_number":2635,"context_line":"        pools \u003d self.configuration.storwize_svc_volpool_name"},{"line_number":2636,"context_line":"        for pool in pools:"},{"line_number":2637,"context_line":"            try:"},{"line_number":2638,"context_line":"                pool_vols \u003d self._helpers.get_pool_volumes(pool)"},{"line_number":2639,"context_line":"                self._volumes_list.extend(pool_vols)"},{"line_number":2640,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2641,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2642,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2643,"context_line":""},{"line_number":2644,"context_line":"    def check_for_setup_error(self):"},{"line_number":2645,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf659307_0acfee28","line":2642,"range":{"start_line":2635,"start_character":0,"end_line":2642,"end_character":56},"in_reply_to":"df7087c5_e0110206","updated":"2018-04-04 14:50:23.000000000","message":"1. It is not necessary. Still it is much more faster compared to performing lsvdisk by name for each of 5000 disks. It would be great if there is a possibility to filter out non-cinder disk from the request, but I do not see the way.\n2. For this case I can see just one solution: get list of all pools first and than get list of all volumes in the pool.\n3. By the way, I see that ensure_export is skipped in some other drivers, for example EMC VNX. Do we need at all to perform lsvdisk for each LUN at volume service restart.","commit_id":"b227cc0bb504f86587aa1004de16daf6b3b7874f"},{"author":{"_account_id":11186,"name":"yixuan zhang","email":"yixuan_z@hotmail.com","username":"yixuanzhang"},"change_message_id":"bb10e214f27a156d2ec3fcfb9fd89f2917adfad4","unresolved":false,"context_lines":[{"line_number":2837,"context_line":"        The system does not \"export\" volumes as a Linux iSCSI target does,"},{"line_number":2838,"context_line":"        and therefore we just check that the volume exists on the storage."},{"line_number":2839,"context_line":"        \"\"\""},{"line_number":2840,"context_line":"        volume_defined \u003d volume[\u0027name\u0027] in self._volumes_list"},{"line_number":2841,"context_line":""},{"line_number":2842,"context_line":"        if not volume_defined:"},{"line_number":2843,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf659307_97a65753","line":2840,"updated":"2018-04-10 09:01:28.000000000","message":"Hi Margarita, since I prefer your patch15, I test this patch in our storwize lab. It was found the volume_defined is always be False.\nAs the result of lsvdisks_from_filter,  The element of  self._volumes_list is a dict. \nYou\u0027d better update the self._volumes_list elements to volume names in your function _get_all_volumes.","commit_id":"ca1270a758cf31da956047930f8aa1a35e0d136e"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"7e259e45fe4c34d1344dc1e328a6cc7c05b29ec6","unresolved":false,"context_lines":[{"line_number":2837,"context_line":"        The system does not \"export\" volumes as a Linux iSCSI target does,"},{"line_number":2838,"context_line":"        and therefore we just check that the volume exists on the storage."},{"line_number":2839,"context_line":"        \"\"\""},{"line_number":2840,"context_line":"        volume_defined \u003d volume[\u0027name\u0027] in self._volumes_list"},{"line_number":2841,"context_line":""},{"line_number":2842,"context_line":"        if not volume_defined:"},{"line_number":2843,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf659307_833e1227","line":2840,"in_reply_to":"bf659307_97a65753","updated":"2018-04-11 07:34:16.000000000","message":"Done. Thanks for testing.","commit_id":"ca1270a758cf31da956047930f8aa1a35e0d136e"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"7e259e45fe4c34d1344dc1e328a6cc7c05b29ec6","unresolved":false,"context_lines":[{"line_number":2687,"context_line":"            try:"},{"line_number":2688,"context_line":"                pool_vols \u003d self._helpers.get_pool_volumes(pool)"},{"line_number":2689,"context_line":"                for volume in pool_vols:"},{"line_number":2690,"context_line":"                    self._volumes_list.append(volume[\u0027name\u0027])"},{"line_number":2691,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2692,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2693,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"bf659307_08344c92","line":2690,"updated":"2018-04-11 07:34:16.000000000","message":"Append volume name to list, not volume dict.","commit_id":"896bd3c35ed621eb1f1d612d50a6bb7da5919d86"},{"author":{"_account_id":11186,"name":"yixuan zhang","email":"yixuan_z@hotmail.com","username":"yixuanzhang"},"change_message_id":"00d2b75fb0dcb6e44afc95d47a11ed1243709e22","unresolved":false,"context_lines":[{"line_number":2687,"context_line":"            try:"},{"line_number":2688,"context_line":"                pool_vols \u003d self._helpers.get_pool_volumes(pool)"},{"line_number":2689,"context_line":"                for volume in pool_vols:"},{"line_number":2690,"context_line":"                    self._volumes_list.append(volume[\u0027name\u0027])"},{"line_number":2691,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2692,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2693,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"bf659307_836d9d33","line":2690,"in_reply_to":"bf659307_08344c92","updated":"2018-04-11 08:26:30.000000000","message":"Thank you Margarita, it is OK now","commit_id":"896bd3c35ed621eb1f1d612d50a6bb7da5919d86"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"33bca8118a8f86f3f75b9bcfd032409b47fb54c6","unresolved":false,"context_lines":[{"line_number":2863,"context_line":"        The system does not \"export\" volumes as a Linux iSCSI target does,"},{"line_number":2864,"context_line":"        and therefore we just check that the volume exists on the storage."},{"line_number":2865,"context_line":"        \"\"\""},{"line_number":2866,"context_line":"        volume_defined \u003d volume[\u0027name\u0027] in self._volumes_list"},{"line_number":2867,"context_line":""},{"line_number":2868,"context_line":"        if not volume_defined:"},{"line_number":2869,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bf659307_0363e21b","line":2866,"updated":"2018-04-10 16:14:44.000000000","message":"I can see this as being an inconsistent list.   Why not get the list of all volumes at ensure_export time?   Some volumes in that list could be deleted from the backend between the time the driver starts and when this is called.","commit_id":"896bd3c35ed621eb1f1d612d50a6bb7da5919d86"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"5d70ec34cfbe8c2be6fbdd940d50f5f64fd80134","unresolved":false,"context_lines":[{"line_number":2863,"context_line":"        The system does not \"export\" volumes as a Linux iSCSI target does,"},{"line_number":2864,"context_line":"        and therefore we just check that the volume exists on the storage."},{"line_number":2865,"context_line":"        \"\"\""},{"line_number":2866,"context_line":"        volume_defined \u003d volume[\u0027name\u0027] in self._volumes_list"},{"line_number":2867,"context_line":""},{"line_number":2868,"context_line":"        if not volume_defined:"},{"line_number":2869,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"bf659307_68cce869","line":2866,"in_reply_to":"bf659307_0363e21b","updated":"2018-04-11 07:40:35.000000000","message":"We get all volumes from all pools used by cinder. I think it is not necessary to get volumes from other pools.\nYes, some volumes could be deleted during the driver setup. In case if setup lasts for 30-40 minutes it is more likely.\n\nEnsure_export does not change volume state in any case, just generates log.","commit_id":"896bd3c35ed621eb1f1d612d50a6bb7da5919d86"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"40f348f9f7b6f19e703ea227e6dfb80f932e8b7f","unresolved":false,"context_lines":[{"line_number":2584,"context_line":"        self._validate_pools_exist()"},{"line_number":2585,"context_line":""},{"line_number":2586,"context_line":"        # Get list of all volumes"},{"line_number":2587,"context_line":"        self._get_all_volumes()"},{"line_number":2588,"context_line":""},{"line_number":2589,"context_line":"        # Build the list of in-progress vdisk copy operations"},{"line_number":2590,"context_line":"        if ctxt is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_d5e7b311","line":2587,"updated":"2018-05-11 20:26:17.000000000","message":"This seems like it could cause a long delay during initialization if there are a lot of volumes defined on the array.","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"996d561b13c67be81d057b81d38d9f8a25773838","unresolved":false,"context_lines":[{"line_number":2584,"context_line":"        self._validate_pools_exist()"},{"line_number":2585,"context_line":""},{"line_number":2586,"context_line":"        # Get list of all volumes"},{"line_number":2587,"context_line":"        self._get_all_volumes()"},{"line_number":2588,"context_line":""},{"line_number":2589,"context_line":"        # Build the list of in-progress vdisk copy operations"},{"line_number":2590,"context_line":"        if ctxt is None:"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f7c97a3_4d90e195","line":2587,"in_reply_to":"5f7c97a3_d5e7b311","updated":"2018-05-14 11:40:51.000000000","message":"We are already using this patch in production, for example, if there are ~900 volumes per pool it takes about 50 seconds from \"Running cmd (SSH): svcinfo lsvdisk -bytes -delim ! -filtervalue mdisk_grp_name\u003d\u003cpool name\u003e\"  to \"Driver post RPC initialization completed successfully\". SSH request itself takes about 1-2 seconds. In case of separate requests we had to wait about 900*1.5 seconds.","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"fdce49dc966b5527d94791a179c939d7219fbafa","unresolved":false,"context_lines":[{"line_number":2665,"context_line":"                    self._volumes_list.append(volume[\u0027name\u0027])"},{"line_number":2666,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2667,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2668,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"    def check_for_setup_error(self):"},{"line_number":2671,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_2a5c6c49","line":2668,"range":{"start_line":2668,"start_character":32,"end_line":2668,"end_character":44},"updated":"2018-06-12 10:59:58.000000000","message":"InvalidInput exception should be used only inside API handlers to  check if input params are good","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"71c55d2ff1220a36359d61ed86292aa65eacf613","unresolved":false,"context_lines":[{"line_number":2665,"context_line":"                    self._volumes_list.append(volume[\u0027name\u0027])"},{"line_number":2666,"context_line":"            except exception.VolumeBackendAPIException:"},{"line_number":2667,"context_line":"                msg \u003d _(\u0027Failed getting volumes for pool %s.\u0027) % pool"},{"line_number":2668,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":2669,"context_line":""},{"line_number":2670,"context_line":"    def check_for_setup_error(self):"},{"line_number":2671,"context_line":"        \"\"\"Ensure that the flags are set properly.\"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_11518830","line":2668,"range":{"start_line":2668,"start_character":32,"end_line":2668,"end_character":44},"in_reply_to":"5f7c97a3_2a5c6c49","updated":"2018-06-13 13:29:40.000000000","message":"Done","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"2905f54a3c66b85e53e319617f2067c6a444ab27","unresolved":false,"context_lines":[{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if not volume_defined:"},{"line_number":2844,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"},{"line_number":2845,"context_line":"                      volume[\u0027name\u0027])"},{"line_number":2846,"context_line":""},{"line_number":2847,"context_line":"    def create_export(self, ctxt, volume, connector):"},{"line_number":2848,"context_line":"        model_update \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_a760ae02","line":2845,"updated":"2018-06-12 15:49:27.000000000","message":"Why does this driver have an ensure_export method that isn\u0027t just \"pass\"?\n\nThis doesn\u0027t do anything.  Drivers that implement ensure_export use it to recreate a target, etc., to _ensure_ that the volume is exported.  (Not just check and log.)\n\nSince that isn\u0027t needed here, I don\u0027t think you need to do any of this.","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"a9baa7090f92cd4c4808d8586ee13cce862a4d26","unresolved":false,"context_lines":[{"line_number":2842,"context_line":""},{"line_number":2843,"context_line":"        if not volume_defined:"},{"line_number":2844,"context_line":"            LOG.error(\u0027ensure_export: Volume %s not found on storage.\u0027,"},{"line_number":2845,"context_line":"                      volume[\u0027name\u0027])"},{"line_number":2846,"context_line":""},{"line_number":2847,"context_line":"    def create_export(self, ctxt, volume, connector):"},{"line_number":2848,"context_line":"        model_update \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5f7c97a3_89200eb2","line":2845,"in_reply_to":"5f7c97a3_a760ae02","updated":"2018-06-13 12:56:15.000000000","message":"Yes, I proposed to pass this method some time ago in patchset 16: https://review.openstack.org/#/c/546489/15..16/cinder/volume/drivers/ibm/storwize_svc/storwize_svc_common.py\nHowever, it was suggested by yixuan zhang to keep this check in order to log error for not found volumes.\n\nThe problem is that we should change the code somehow becuase now driver becomes unusable for 500+ LUNs. It should be decided somehow what variant to keep.","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"}],"releasenotes/notes/modify-ensure-export-1d56a40f5e762aa8.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"40f348f9f7b6f19e703ea227e6dfb80f932e8b7f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Storwize SVC Driver: Fixes `bug 1749687"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1749687\u003e`__"},{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every \u0027in-use\u0027 volume in order to check if the volume exists on the storage."},{"line_number":7,"context_line":"    In order to avoid problem of too long driver initiatlization lsvdisk() s called once per pool."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"5f7c97a3_95edbbf1","line":6,"updated":"2018-05-11 20:26:17.000000000","message":"Please add some line breaks in here too.","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"f1578e52805613e64eaa9b40d6b35c31a5e42af3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Storwize SVC Driver: Fixes `bug 1749687"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1749687\u003e`__"},{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every \u0027in-use\u0027 volume in order to check if the volume exists on the storage."},{"line_number":7,"context_line":"    In order to avoid problem of too long driver initiatlization lsvdisk() s called once per pool."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"5f7c97a3_addad574","line":6,"in_reply_to":"5f7c97a3_95edbbf1","updated":"2018-05-14 11:42:18.000000000","message":"Done","commit_id":"18db1a6620b3c5c69779c2be0ca869ec5677faef"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"453ae41891ddfbd05fe557622bb3bd183c0a76ec","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Storwize SVC Driver: Fixes `bug 1749687"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1749687\u003e`__"},{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every "},{"line_number":7,"context_line":"    \u0027in-use\u0027 volume in order to check if the volume exists "},{"line_number":8,"context_line":"    on the storage. "},{"line_number":9,"context_line":"    In order to avoid problem of too long driver initiatlization "}],"source_content_type":"text/x-yaml","patch_set":21,"id":"5f7c97a3_fa1cea78","line":6,"range":{"start_line":6,"start_character":56,"end_line":6,"end_character":57},"updated":"2018-05-15 09:28:38.000000000","message":"white space","commit_id":"262543c500198401d79c2577f98c73f0278002b7"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"99e4468bd62a336a1fb8c7b75ab80c6fbda95def","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Storwize SVC Driver: Fixes `bug 1749687"},{"line_number":5,"context_line":"    \u003chttps://bugs.launchpad.net/cinder/+bug/1749687\u003e`__"},{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every "},{"line_number":7,"context_line":"    \u0027in-use\u0027 volume in order to check if the volume exists "},{"line_number":8,"context_line":"    on the storage. "},{"line_number":9,"context_line":"    In order to avoid problem of too long driver initiatlization "}],"source_content_type":"text/x-yaml","patch_set":21,"id":"5f7c97a3_f8015206","line":6,"range":{"start_line":6,"start_character":56,"end_line":6,"end_character":57},"in_reply_to":"5f7c97a3_fa1cea78","updated":"2018-05-15 10:07:40.000000000","message":"Done","commit_id":"262543c500198401d79c2577f98c73f0278002b7"},{"author":{"_account_id":12670,"name":"Helen Walsh","email":"helen.walsh@emc.com","username":"walshh2"},"change_message_id":"a84810c33a5c0cdc76802924bb43c494e432f06b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every"},{"line_number":7,"context_line":"    \u0027in-use\u0027 volume in order to check if the volume exists"},{"line_number":8,"context_line":"    on the storage."},{"line_number":9,"context_line":"    In order to avoid problem of too long driver initiatlization"},{"line_number":10,"context_line":"    now lsvdisk() is called once per pool."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_8b52a111","line":9,"updated":"2018-06-08 14:56:39.000000000","message":"initialization","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"},{"author":{"_account_id":23871,"name":"MargaritaShakhova","email":"shakhova.margarita@gmail.com","username":"MargaritaShakhova"},"change_message_id":"71c55d2ff1220a36359d61ed86292aa65eacf613","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    previously lsvdisk() was called separately for every"},{"line_number":7,"context_line":"    \u0027in-use\u0027 volume in order to check if the volume exists"},{"line_number":8,"context_line":"    on the storage."},{"line_number":9,"context_line":"    In order to avoid problem of too long driver initiatlization"},{"line_number":10,"context_line":"    now lsvdisk() is called once per pool."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"5f7c97a3_1178a8be","line":9,"in_reply_to":"5f7c97a3_8b52a111","updated":"2018-06-13 13:29:40.000000000","message":"Done","commit_id":"64ecfb29f27e7de5d9b2dd83783b4735512577a2"}]}
