)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"change the design of CG in DS8K driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the old design of CG in DS8K driver, there is a problem that"},{"line_number":10,"context_line":"when making flashcopy, it will freeze the whole LSS which holds"},{"line_number":11,"context_line":"volumes, so it may affect volumes not belong to CG if they are in"},{"line_number":12,"context_line":"this LSS too, in order to dedicate LSS to CG, we need to allocate"},{"line_number":13,"context_line":"volume not belong to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1655841"},{"line_number":16,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_807ef616","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":38},"updated":"2017-02-08 08:06:01.000000000","message":"In the old design of CG for DS8K, when making flashcopy, it will freeze the whole LSS which holds the volumes. So it can affect volumes not belonging to the CG if they are in the same LSS. In order to dedicate LSS to CG, we need to allocate volume not belonging to CG in other LSSs.","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"change the design of CG in DS8K driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In the old design of CG in DS8K driver, there is a problem that"},{"line_number":10,"context_line":"when making flashcopy, it will freeze the whole LSS which holds"},{"line_number":11,"context_line":"volumes, so it may affect volumes not belong to CG if they are in"},{"line_number":12,"context_line":"this LSS too, in order to dedicate LSS to CG, we need to allocate"},{"line_number":13,"context_line":"volume not belong to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1655841"},{"line_number":16,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_06013e05","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":38},"in_reply_to":"1a430d35_807ef616","updated":"2017-02-08 08:34:40.000000000","message":"Thanks, I will fix it","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"volumes, so it may affect volumes not belong to CG if they are in"},{"line_number":12,"context_line":"this LSS too, in order to dedicate LSS to CG, we need to allocate"},{"line_number":13,"context_line":"volume not belong to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1655841"},{"line_number":16,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_e0edfab7","line":14,"updated":"2017-02-08 08:06:01.000000000","message":"you should mention that this change deals with volume groups","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"volumes, so it may affect volumes not belong to CG if they are in"},{"line_number":12,"context_line":"this LSS too, in order to dedicate LSS to CG, we need to allocate"},{"line_number":13,"context_line":"volume not belong to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: #1655841"},{"line_number":16,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1a430d35_86152e41","line":14,"in_reply_to":"1a430d35_e0edfab7","updated":"2017-02-08 08:34:40.000000000","message":"Yes, I need to add it.","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"551de468f85283528c53483d1ab1398a907d188c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"volumes belonging to CG. In order to dedicate LSS to CG, we need"},{"line_number":13,"context_line":"to allocate volume not belonging to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"On the other hand, this change switches to generic volume group"},{"line_number":16,"context_line":"from consistency group."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1655841"},{"line_number":19,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1a1ced50_170cc441","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":23},"updated":"2017-03-16 18:01:18.000000000","message":"There is no implementation of the generic volume group driver interfaces in your driver (it was in patch set 16 but you reverted it).  This mixed code will be error prone.  So the above statement needs to be modified.  Please state your plan to make those changes in future patches.","commit_id":"f3dbb5bda31e9f1041e50eb41905b781de54ebc6"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"045252c28c7472e7fd14a6e321668576213978df","unresolved":false,"context_lines":[{"line_number":12,"context_line":"volumes belonging to CG. In order to dedicate LSS to CG, we need"},{"line_number":13,"context_line":"to allocate volume not belonging to CG in other LSSs."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"On the other hand, this change switches to generic volume group"},{"line_number":16,"context_line":"from consistency group."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: #1655841"},{"line_number":19,"context_line":"Change-Id: Ic6406a558c035ebb34177f87076adaec55b08f65"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1a1ced50_3b40bd56","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":23},"in_reply_to":"1a1ced50_170cc441","updated":"2017-03-17 02:36:07.000000000","message":"Thanks xyang, I add more information in the new patch.","commit_id":"f3dbb5bda31e9f1041e50eb41905b781de54ebc6"}],"cinder/tests/unit/volume/drivers/ibm/test_ds8k_proxy.py":[{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":1344,"context_line":"            {\u0027consistent_group_snapshot_enabled\u0027: \u0027\u003cis\u003e True\u0027}"},{"line_number":1345,"context_line":"        )"},{"line_number":1346,"context_line":"        group \u003d self._create_group(group_type_id\u003dgroup_type.id)"},{"line_number":1347,"context_line":"        location \u003d six.text_type({\u0027vol_hex_id\u0027: \u00272000\u0027})"},{"line_number":1348,"context_line":"        self._create_volume(group_id\u003dgroup.id,"},{"line_number":1349,"context_line":"                            provider_location\u003dlocation)"},{"line_number":1350,"context_line":"        volume \u003d self._create_volume(group_id\u003dgroup.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_e08edace","line":1347,"range":{"start_line":1347,"start_character":19,"end_line":1347,"end_character":32},"updated":"2017-02-08 08:06:01.000000000","message":"do you really need this?","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":1344,"context_line":"            {\u0027consistent_group_snapshot_enabled\u0027: \u0027\u003cis\u003e True\u0027}"},{"line_number":1345,"context_line":"        )"},{"line_number":1346,"context_line":"        group \u003d self._create_group(group_type_id\u003dgroup_type.id)"},{"line_number":1347,"context_line":"        location \u003d six.text_type({\u0027vol_hex_id\u0027: \u00272000\u0027})"},{"line_number":1348,"context_line":"        self._create_volume(group_id\u003dgroup.id,"},{"line_number":1349,"context_line":"                            provider_location\u003dlocation)"},{"line_number":1350,"context_line":"        volume \u003d self._create_volume(group_id\u003dgroup.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_8b27f7c8","line":1347,"range":{"start_line":1347,"start_character":19,"end_line":1347,"end_character":32},"in_reply_to":"1a430d35_e08edace","updated":"2017-02-08 08:34:40.000000000","message":"Thanks Alon, the type of provider_location is string.\n\n277     provider_location \u003d Column(String(255))","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"}],"cinder/volume/drivers/ibm/ibm_storage/ds8k_helper.py":[{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"db91263a7667f043ebf0a92285e26e93e51b8bdd","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            lss \u003d sorted(existing_lss, key\u003dlambda k: int(k[\u0027configvols\u0027]))[0]"},{"line_number":321,"context_line":"            if int(lss[\u0027configvols\u0027]) \u003c LSS_VOL_SLOTS:"},{"line_number":322,"context_line":"                lss_id \u003d lss[\u0027id\u0027]"},{"line_number":323,"context_line":"                msg \u003d _LI(\u0027_find_from_existing_lss: choose %(lss)s. \u0027"},{"line_number":324,"context_line":"                          \u0027now it has %(num)s volumes.\u0027)"},{"line_number":325,"context_line":"                LOG.info(msg, {\u0027lss\u0027: lss_id, \u0027num\u0027: lss[\u0027configvols\u0027]})"},{"line_number":326,"context_line":"        return lss_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_cc64644b","line":323,"range":{"start_line":323,"start_character":27,"end_line":323,"end_character":50},"updated":"2017-01-25 16:53:29.000000000","message":"The user don\u0027t know what is _find_from_existing_lss.\nEither edit this log.info or change it to log.debug","commit_id":"87d407aaeec83e7501b25e334d8ef84a78fb4246"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"220a858fe124cdc814a09a4d563643035ed72e9c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            lss \u003d sorted(existing_lss, key\u003dlambda k: int(k[\u0027configvols\u0027]))[0]"},{"line_number":321,"context_line":"            if int(lss[\u0027configvols\u0027]) \u003c LSS_VOL_SLOTS:"},{"line_number":322,"context_line":"                lss_id \u003d lss[\u0027id\u0027]"},{"line_number":323,"context_line":"                msg \u003d _LI(\u0027_find_from_existing_lss: choose %(lss)s. \u0027"},{"line_number":324,"context_line":"                          \u0027now it has %(num)s volumes.\u0027)"},{"line_number":325,"context_line":"                LOG.info(msg, {\u0027lss\u0027: lss_id, \u0027num\u0027: lss[\u0027configvols\u0027]})"},{"line_number":326,"context_line":"        return lss_id"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_d9ac0bf0","line":323,"range":{"start_line":323,"start_character":27,"end_line":323,"end_character":50},"in_reply_to":"3a461143_cc64644b","updated":"2017-01-26 01:55:43.000000000","message":"Thanks Isaac for your review.\n\nthis function is so important for developer to find out what\u0027s wrong when user come into problems, but they usually don\u0027t turn on debug option in cinder.conf, because their environment is a production one, so here I use LOG.info instead of LOG.debug. \n\nOn the other hand, if we try to let user know why find LSS from existing LSS here, then we need tell to them the background and knowledge about DS8K,I think there will be so much information.","commit_id":"87d407aaeec83e7501b25e334d8ef84a78fb4246"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"db91263a7667f043ebf0a92285e26e93e51b8bdd","unresolved":false,"context_lines":[{"line_number":340,"context_line":"               lss not in cglss):"},{"line_number":341,"context_line":"                lss_id \u003d (\"%02x\" % lss).upper()"},{"line_number":342,"context_line":"                break"},{"line_number":343,"context_line":"        msg \u003d _LI(\u0027_find_from_unexisting_lss: choose %s.\u0027)"},{"line_number":344,"context_line":"        LOG.info(msg, lss_id)"},{"line_number":345,"context_line":"        return lss_id"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_6ce530a7","line":343,"range":{"start_line":343,"start_character":19,"end_line":343,"end_character":44},"updated":"2017-01-25 16:53:29.000000000","message":"Same as above.\nEither edit this, or change to log.debug","commit_id":"87d407aaeec83e7501b25e334d8ef84a78fb4246"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"220a858fe124cdc814a09a4d563643035ed72e9c","unresolved":false,"context_lines":[{"line_number":340,"context_line":"               lss not in cglss):"},{"line_number":341,"context_line":"                lss_id \u003d (\"%02x\" % lss).upper()"},{"line_number":342,"context_line":"                break"},{"line_number":343,"context_line":"        msg \u003d _LI(\u0027_find_from_unexisting_lss: choose %s.\u0027)"},{"line_number":344,"context_line":"        LOG.info(msg, lss_id)"},{"line_number":345,"context_line":"        return lss_id"},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_f990e797","line":343,"range":{"start_line":343,"start_character":19,"end_line":343,"end_character":44},"in_reply_to":"3a461143_6ce530a7","updated":"2017-01-26 01:55:43.000000000","message":"check the comments above, thanks.","commit_id":"87d407aaeec83e7501b25e334d8ef84a78fb4246"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            msg \u003d _(\"Can\u0027t connect to %(host)s\") % {\u0027host\u0027: san_ip}"},{"line_number":145,"context_line":"            raise restclient.APIException(data\u003dmsg)"},{"line_number":146,"context_line":"        self.backend[\u0027rest_version\u0027] \u003d self._get_version()[\u0027bundle_version\u0027]"},{"line_number":147,"context_line":"        msg \u003d _LI(\"Connection to DS8K storage system %(host)s has been \""},{"line_number":148,"context_line":"                  \"established successfully, the version of REST is %(rest)s.\")"},{"line_number":149,"context_line":"        LOG.info(msg, {\u0027host\u0027: san_ip, \u0027rest\u0027: self.backend[\u0027rest_version\u0027]})"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _get_storage_information(self):"},{"line_number":152,"context_line":"        storage_info \u003d self.get_systems()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_603e6adb","line":149,"range":{"start_line":147,"start_character":8,"end_line":149,"end_character":77},"updated":"2017-02-08 08:06:01.000000000","message":"put text in LOG command","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            msg \u003d _(\"Can\u0027t connect to %(host)s\") % {\u0027host\u0027: san_ip}"},{"line_number":145,"context_line":"            raise restclient.APIException(data\u003dmsg)"},{"line_number":146,"context_line":"        self.backend[\u0027rest_version\u0027] \u003d self._get_version()[\u0027bundle_version\u0027]"},{"line_number":147,"context_line":"        msg \u003d _LI(\"Connection to DS8K storage system %(host)s has been \""},{"line_number":148,"context_line":"                  \"established successfully, the version of REST is %(rest)s.\")"},{"line_number":149,"context_line":"        LOG.info(msg, {\u0027host\u0027: san_ip, \u0027rest\u0027: self.backend[\u0027rest_version\u0027]})"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def _get_storage_information(self):"},{"line_number":152,"context_line":"        storage_info \u003d self.get_systems()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_e6d6f2ef","line":149,"range":{"start_line":147,"start_character":8,"end_line":149,"end_character":77},"in_reply_to":"1a430d35_603e6adb","updated":"2017-02-08 08:34:40.000000000","message":"Thanks Alon, I still can not figure out is it necessary to put text into LOG command. if yes, i will fix all of them in next patch.","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                begin \u003d int(lss_range[0], 16)"},{"line_number":166,"context_line":"                end \u003d int(lss_range[1], 16)"},{"line_number":167,"context_line":"            if begin \u003e 0xFF or end \u003e 0xFF or begin \u003e end:"},{"line_number":168,"context_line":"                err \u003d _(\u0027Param [lss_range_for_cg] is invalid, it should be\u0027"},{"line_number":169,"context_line":"                        \u0027within 00-FF.\u0027)"},{"line_number":170,"context_line":"                raise exception.InvalidParameterValue(err\u003derr)"},{"line_number":171,"context_line":"            self.backend[\u0027lss_ids_for_cg\u0027] \u003d set("},{"line_number":172,"context_line":"                (\u0027%02x\u0027 % i).upper() for i in range(begin, end + 1))"},{"line_number":173,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_4b07cf17","line":170,"range":{"start_line":168,"start_character":16,"end_line":170,"end_character":62},"updated":"2017-02-08 08:06:01.000000000","message":"put text in exception","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":629,"context_line":"            try:"},{"line_number":630,"context_line":"                self.delete_lun(snapshots)"},{"line_number":631,"context_line":"            except restclient.APIException as e:"},{"line_number":632,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":633,"context_line":"                msg \u003d _LE(\"Failed to delete cg snapshots. Exception\u003d %s\")"},{"line_number":634,"context_line":"                LOG.error(msg, e)"},{"line_number":635,"context_line":"        for snapshot in snapshots:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_6b71eba7","line":632,"range":{"start_line":632,"start_character":41,"end_line":632,"end_character":59},"updated":"2017-02-08 08:06:01.000000000","message":"is there a GroupSnapshotStatus?","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":629,"context_line":"            try:"},{"line_number":630,"context_line":"                self.delete_lun(snapshots)"},{"line_number":631,"context_line":"            except restclient.APIException as e:"},{"line_number":632,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":633,"context_line":"                msg \u003d _LE(\"Failed to delete cg snapshots. Exception\u003d %s\")"},{"line_number":634,"context_line":"                LOG.error(msg, e)"},{"line_number":635,"context_line":"        for snapshot in snapshots:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_2619dad7","line":632,"range":{"start_line":632,"start_character":41,"end_line":632,"end_character":59},"in_reply_to":"1a430d35_6b71eba7","updated":"2017-02-08 08:34:40.000000000","message":"I think we can move to GroupStatus and abandon GroupSnapshotStatus now, especially base cinder has switched consistency group to generic volume group.","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                self.delete_lun(snapshots)"},{"line_number":631,"context_line":"            except restclient.APIException as e:"},{"line_number":632,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":633,"context_line":"                msg \u003d _LE(\"Failed to delete cg snapshots. Exception\u003d %s\")"},{"line_number":634,"context_line":"                LOG.error(msg, e)"},{"line_number":635,"context_line":"        for snapshot in snapshots:"},{"line_number":636,"context_line":"            snapshots_model_update.append({"},{"line_number":637,"context_line":"                \u0027id\u0027: snapshot.os_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_8bb1b749","line":634,"range":{"start_line":633,"start_character":16,"end_line":634,"end_character":33},"updated":"2017-02-08 08:06:01.000000000","message":"text in LOG","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                })"},{"line_number":585,"context_line":"        return model_update, volumes_model_update"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def update_group(self, ctxt, group, add_volumes, remove_volumes):"},{"line_number":588,"context_line":"        return None, None, None"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def _delete_lun(self, lun_ids_str):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_d9d2825b","side":"PARENT","line":587,"updated":"2017-02-09 04:18:47.000000000","message":"Why did you remove update_group?","commit_id":"e41e552f394cc8fd7f072b109306ddc9a90c3dfb"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":584,"context_line":"                })"},{"line_number":585,"context_line":"        return model_update, volumes_model_update"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"    def update_group(self, ctxt, group, add_volumes, remove_volumes):"},{"line_number":588,"context_line":"        return None, None, None"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def _delete_lun(self, lun_ids_str):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_99e47aac","side":"PARENT","line":587,"in_reply_to":"1a430d35_d9d2825b","updated":"2017-02-09 04:59:57.000000000","message":"Thanks xyang, because in this new design, update_group needs to do a lot of things, and it is moved to ds8k_proxy.py. only\nsomething that is common for different helpers in this file is put in this file.","commit_id":"e41e552f394cc8fd7f072b109306ddc9a90c3dfb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. Exception\u003d %s\"),"},{"line_number":624,"context_line":"                          six.text_type(e))"},{"line_number":625,"context_line":"        for snapshot in snapshots:"},{"line_number":626,"context_line":"            snapshots_model_update.append({"},{"line_number":627,"context_line":"                \u0027id\u0027: snapshot.os_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_19a40a06","line":624,"range":{"start_line":624,"start_character":26,"end_line":624,"end_character":39},"updated":"2017-02-09 04:18:47.000000000","message":"No need for six.text_type here.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. Exception\u003d %s\"),"},{"line_number":624,"context_line":"                          six.text_type(e))"},{"line_number":625,"context_line":"        for snapshot in snapshots:"},{"line_number":626,"context_line":"            snapshots_model_update.append({"},{"line_number":627,"context_line":"                \u0027id\u0027: snapshot.os_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_79f6ee8f","line":624,"range":{"start_line":624,"start_character":26,"end_line":624,"end_character":39},"in_reply_to":"1a430d35_19a40a06","updated":"2017-02-09 04:59:57.000000000","message":"Thanks xyang, I will fix it in next patch.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"                    raise exception.VolumeDriverException("},{"line_number":1001,"context_line":"                        message\u003d((_(\u0027Can not create lcu %(lcu)s, \u0027"},{"line_number":1002,"context_line":"                                    \u0027Exception\u003d %(e)s.\u0027)"},{"line_number":1003,"context_line":"                                  % {\u0027lcu\u0027: lcu, \u0027e\u0027: six.text_type(e)})))"},{"line_number":1004,"context_line":"        return dev_mapping"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"    def _format_pools(self, pools):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_79942e8a","line":1003,"range":{"start_line":1003,"start_character":73,"end_line":1003,"end_character":74},"updated":"2017-02-09 04:18:47.000000000","message":"You can remove the outmost ().","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"                    raise exception.VolumeDriverException("},{"line_number":1001,"context_line":"                        message\u003d((_(\u0027Can not create lcu %(lcu)s, \u0027"},{"line_number":1002,"context_line":"                                    \u0027Exception\u003d %(e)s.\u0027)"},{"line_number":1003,"context_line":"                                  % {\u0027lcu\u0027: lcu, \u0027e\u0027: six.text_type(e)})))"},{"line_number":1004,"context_line":"        return dev_mapping"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":"    def _format_pools(self, pools):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_b9ecd6bb","line":1003,"range":{"start_line":1003,"start_character":73,"end_line":1003,"end_character":74},"in_reply_to":"1a430d35_79942e8a","updated":"2017-02-09 04:59:57.000000000","message":"Thanks xyang, I will fix it.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1a430d35_d939a2a5","line":1120,"updated":"2017-02-09 04:18:47.000000000","message":"Where is create_group_from_src?","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1a430d35_793d0e2a","line":1120,"in_reply_to":"1a430d35_d939a2a5","updated":"2017-02-09 04:59:57.000000000","message":"Thanks xyang, it is in ds8k_proxy.py","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    def _classify_lss_for_cg(self, existing_lss):"},{"line_number":305,"context_line":"        existing_lss_ids \u003d set(lss[\u0027id\u0027] for lss in existing_lss)"},{"line_number":306,"context_line":"        existing_lss_cg \u003d existing_lss_ids \u0026 self.backend[\u0027lss_ids_for_cg\u0027]"},{"line_number":307,"context_line":"        unexisting_lss_cg \u003d self.backend[\u0027lss_ids_for_cg\u0027] - existing_lss_cg"},{"line_number":308,"context_line":"        return existing_lss_cg, unexisting_lss_cg"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _find_from_existing_lss(self, node, existing_lss):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_5243c66b","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":18},"updated":"2017-02-25 23:32:22.000000000","message":"s/unexisting/nonexistent","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    def _classify_lss_for_cg(self, existing_lss):"},{"line_number":305,"context_line":"        existing_lss_ids \u003d set(lss[\u0027id\u0027] for lss in existing_lss)"},{"line_number":306,"context_line":"        existing_lss_cg \u003d existing_lss_ids \u0026 self.backend[\u0027lss_ids_for_cg\u0027]"},{"line_number":307,"context_line":"        unexisting_lss_cg \u003d self.backend[\u0027lss_ids_for_cg\u0027] - existing_lss_cg"},{"line_number":308,"context_line":"        return existing_lss_cg, unexisting_lss_cg"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _find_from_existing_lss(self, node, existing_lss):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_744a4329","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":18},"in_reply_to":"da36d5c6_5243c66b","updated":"2017-02-28 04:26:44.000000000","message":"Thanks xyang, done","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                         {\u0027lss\u0027: lss_id, \u0027num\u0027: lss[\u0027configvols\u0027]})"},{"line_number":328,"context_line":"        return lss_id"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def _find_from_unexisting_lss(self, node, existing_lss, lss_cg\u003dNone):"},{"line_number":331,"context_line":"        addrgrps \u003d set(int(lss[\u0027addrgrp\u0027], 16) for lss in existing_lss if"},{"line_number":332,"context_line":"                       lss[\u0027type\u0027] \u003d\u003d \u0027ckd\u0027 and int(lss[\u0027group\u0027]) \u003d\u003d node)"},{"line_number":333,"context_line":"        fulllss \u003d set(int(lss[\u0027id\u0027], 16) for lss in existing_lss if"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_9261be07","line":330,"range":{"start_line":330,"start_character":19,"end_line":330,"end_character":29},"updated":"2017-02-25 23:32:22.000000000","message":"nonexistent","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                         {\u0027lss\u0027: lss_id, \u0027num\u0027: lss[\u0027configvols\u0027]})"},{"line_number":328,"context_line":"        return lss_id"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def _find_from_unexisting_lss(self, node, existing_lss, lss_cg\u003dNone):"},{"line_number":331,"context_line":"        addrgrps \u003d set(int(lss[\u0027addrgrp\u0027], 16) for lss in existing_lss if"},{"line_number":332,"context_line":"                       lss[\u0027type\u0027] \u003d\u003d \u0027ckd\u0027 and int(lss[\u0027group\u0027]) \u003d\u003d node)"},{"line_number":333,"context_line":"        fulllss \u003d set(int(lss[\u0027id\u0027], 16) for lss in existing_lss if"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_34b36b0c","line":330,"range":{"start_line":330,"start_character":19,"end_line":330,"end_character":29},"in_reply_to":"da36d5c6_9261be07","updated":"2017-02-28 04:26:44.000000000","message":"Thanks xyang, done","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":342,"context_line":"               lss not in cglss):"},{"line_number":343,"context_line":"                lss_id \u003d (\"%02x\" % lss).upper()"},{"line_number":344,"context_line":"                break"},{"line_number":345,"context_line":"        LOG.info(_LI(\u0027_find_from_unexisting_lss: choose %s.\u0027), lss_id)"},{"line_number":346,"context_line":"        return lss_id"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def create_lun(self, lun):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_d257b623","line":345,"range":{"start_line":345,"start_character":33,"end_line":345,"end_character":43},"updated":"2017-02-25 23:32:22.000000000","message":"nonexistent","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":342,"context_line":"               lss not in cglss):"},{"line_number":343,"context_line":"                lss_id \u003d (\"%02x\" % lss).upper()"},{"line_number":344,"context_line":"                break"},{"line_number":345,"context_line":"        LOG.info(_LI(\u0027_find_from_unexisting_lss: choose %s.\u0027), lss_id)"},{"line_number":346,"context_line":"        return lss_id"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def create_lun(self, lun):"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_cfc0b62d","line":345,"range":{"start_line":345,"start_character":33,"end_line":345,"end_character":43},"in_reply_to":"da36d5c6_d257b623","updated":"2017-02-28 04:26:44.000000000","message":"Thanks xyang, done.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":618,"context_line":"        if snapshots:"},{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self.delete_lun(snapshots)"},{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. \""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_b20a4224","line":620,"range":{"start_line":620,"start_character":16,"end_line":620,"end_character":42},"updated":"2017-02-25 23:32:22.000000000","message":"I found this very confusing.  After reading delete_lun, I understood now delete_lun replaced the input snapshots with the driver defined Lun class.  That\u0027s why you have snapshot.os_id on line 627.\n\nI suggest that you submit a followup patch to rewrite delete_lun so that it returns a list of driver defined Lun\u0027s instead of modifying the input snapshots.\n\nIn this patch, please add some comments to explain that delete_lun(snapshots) will change snapshots and replace it with driver defined Lun\u0027s.  That\u0027s why we have os_id in the snapshot field later.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"3674222487ec0c4a856cc82dbfb01e1b1804ded1","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":618,"context_line":"        if snapshots:"},{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self.delete_lun(snapshots)"},{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. \""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_98a6c851","line":620,"range":{"start_line":620,"start_character":16,"end_line":620,"end_character":42},"in_reply_to":"ba2be162_09837405","updated":"2017-03-02 07:12:51.000000000","message":"Thanks xyang, you are right, using variable named snapshots here as the input one confuses people that think driver change the input snapshots. I have changed this variable in the new patch, thank you very much.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"a52ab5e5431979d106654b9085d9873e4b318227","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":618,"context_line":"        if snapshots:"},{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self.delete_lun(snapshots)"},{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. \""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_eeb0dedf","line":620,"range":{"start_line":620,"start_character":16,"end_line":620,"end_character":42},"in_reply_to":"ba2be162_98a6c851","updated":"2017-03-02 08:01:33.000000000","message":"add one more comment. :-)\n\ndelete_lun doesn\u0027t replace the input snapshots with the driver defined Lun class. input snapshots in #L615 is already a Lun instance, but it is named snapshots really confuses people, so in the patch I rename it.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":618,"context_line":"        if snapshots:"},{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self.delete_lun(snapshots)"},{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. \""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_f448f38c","line":620,"range":{"start_line":620,"start_character":16,"end_line":620,"end_character":42},"in_reply_to":"da36d5c6_b20a4224","updated":"2017-02-28 04:26:44.000000000","message":"Thanks for your carefully review.\n\nActually driver returns a list of driver defined Lun instead of modifying the input snapshots. please refer to the #L1101 in ds8k_proxy.py. and all volume/volumes/snapshot/snapshots object in cinder driver APIs will be replaced with the driver defined Lun(Lun class already has a simple comment about it, but maybe not enough)\n\nBTW, ds8k_proxy is the entrance of the driver, and ds8k_helper.py abstracts common operations between different helpers(ds8k_helper.py has a lot of helpers) \n\n1098     @proxy.logger\n1099     def delete_group_snapshot(self, ctxt, group_snapshot, snapshots):\n1100         \"\"\"Delete volume group snapshot.\"\"\"\n1101         snapshots \u003d [Lun(s, is_snapshot\u003dTrue) for s in snapshots]\n1102         if Group(group_snapshot, True).consisgroup_enabled:\n1103             return self._delete_group_snapshot_with_lock(\n1104                 group_snapshot, snapshots)\n1105         else:\n1106             return self._helper.delete_group_snapshot(\n1107                 group_snapshot, snapshots)","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6668028c4c5a7988bd33dc50b3e1e135b9b82de5","unresolved":false,"context_lines":[{"line_number":617,"context_line":"        model_update \u003d {\u0027status\u0027: fields.GroupStatus.DELETED}"},{"line_number":618,"context_line":"        if snapshots:"},{"line_number":619,"context_line":"            try:"},{"line_number":620,"context_line":"                self.delete_lun(snapshots)"},{"line_number":621,"context_line":"            except restclient.APIException as e:"},{"line_number":622,"context_line":"                model_update[\u0027status\u0027] \u003d fields.GroupStatus.ERROR_DELETING"},{"line_number":623,"context_line":"                LOG.error(_LE(\"Failed to delete cg snapshots. \""}],"source_content_type":"text/x-python","patch_set":13,"id":"ba2be162_09837405","line":620,"range":{"start_line":620,"start_character":16,"end_line":620,"end_character":42},"in_reply_to":"da36d5c6_f448f38c","updated":"2017-03-02 04:42:05.000000000","message":"What I meant is line 620 should be changed to this:\n\nibm_snapshots \u003d self.delete_lun(snapshots)\n\nAfter this, you just reference ibm_snapshots instead to avoid confusion.  However that means delete_lun needs to be changed.  That\u0027s why I suggest that you make that change in a future patch.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"}],"cinder/volume/drivers/ibm/ibm_storage/ds8k_proxy.py":[{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"7dd865c7bcfb6d6df2f81fc197f996aed9409aeb","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            available_lss \u003d lss_in_cg - excluded_lss"},{"line_number":495,"context_line":"        else:"},{"line_number":496,"context_line":"            available_lss \u003d lss_in_cache - excluded_lss"},{"line_number":497,"context_line":"        if not available_lss:"},{"line_number":498,"context_line":"            lss_sets \u003d set()"},{"line_number":499,"context_line":"            for lss_set in self.consisgroup_cache.values():"},{"line_number":500,"context_line":"                lss_sets \u003d lss_sets | lss_set"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_057e4f69","line":497,"range":{"start_line":497,"start_character":15,"end_line":497,"end_character":28},"updated":"2017-02-01 11:25:37.000000000","message":"You did not initialize available_lss to empty set() before the if statement above","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"613c14330536aa919f590f21ed4de4ccc0471700","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            available_lss \u003d lss_in_cg - excluded_lss"},{"line_number":495,"context_line":"        else:"},{"line_number":496,"context_line":"            available_lss \u003d lss_in_cache - excluded_lss"},{"line_number":497,"context_line":"        if not available_lss:"},{"line_number":498,"context_line":"            lss_sets \u003d set()"},{"line_number":499,"context_line":"            for lss_set in self.consisgroup_cache.values():"},{"line_number":500,"context_line":"                lss_sets \u003d lss_sets | lss_set"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_1bb22e4c","line":497,"range":{"start_line":497,"start_character":15,"end_line":497,"end_character":28},"in_reply_to":"3a461143_057e4f69","updated":"2017-02-01 11:41:51.000000000","message":"Thanks Isaac for your review.\navailable_lss is initialized in #L494 or #L496, and the type of lss_in_cg, lss_in_cache and excluded_lss is set.","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"7dd865c7bcfb6d6df2f81fc197f996aed9409aeb","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"        finished \u003d False"},{"line_number":1011,"context_line":"        try:"},{"line_number":1012,"context_line":"            vol_pairs \u003d []"},{"line_number":1013,"context_line":"            for src_lun, tgt_lun in zip(src_luns, tgt_luns):"},{"line_number":1014,"context_line":"                pool \u003d self._helper.get_pool(src_lun.ds_id[0:2])"},{"line_number":1015,"context_line":"                if tgt_lun.ds_id is None:"},{"line_number":1016,"context_line":"                    self._create_lun_helper(tgt_lun, pool)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_40ada5e7","line":1013,"range":{"start_line":1013,"start_character":36,"end_line":1013,"end_character":39},"updated":"2017-02-01 11:25:37.000000000","message":"Don\u0027t you want to verify that src_luns and tgt_luns are the same length?","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"34dfd656398c89d63db0488190b309b7b16a953a","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"        finished \u003d False"},{"line_number":1011,"context_line":"        try:"},{"line_number":1012,"context_line":"            vol_pairs \u003d []"},{"line_number":1013,"context_line":"            for src_lun, tgt_lun in zip(src_luns, tgt_luns):"},{"line_number":1014,"context_line":"                pool \u003d self._helper.get_pool(src_lun.ds_id[0:2])"},{"line_number":1015,"context_line":"                if tgt_lun.ds_id is None:"},{"line_number":1016,"context_line":"                    self._create_lun_helper(tgt_lun, pool)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_194e9a96","line":1013,"range":{"start_line":1013,"start_character":36,"end_line":1013,"end_character":39},"in_reply_to":"3a461143_40ada5e7","updated":"2017-02-02 01:59:51.000000000","message":"Thanks Isaac, _sort_source_vols in manage.py has made sure the length of source volumes equal to the length of target volumes.\n\n2950         if not volumes or not source_vols or len(volumes) !\u003d len(source_vols):","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"7dd865c7bcfb6d6df2f81fc197f996aed9409aeb","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"    @proxy.logger"},{"line_number":1040,"context_line":"    def create_group(self, ctxt, group):"},{"line_number":1041,"context_line":"        \"\"\"Create generic volume group.\"\"\""},{"line_number":1042,"context_line":"        if Group(group).type_cg_snapshot:"},{"line_number":1043,"context_line":"            self._assert(self._helper.backend[\u0027lss_ids_for_cg\u0027],"},{"line_number":1044,"context_line":"                         \u0027No LSS(s) for CG, please make sure you have \u0027"},{"line_number":1045,"context_line":"                         \u0027reserved LSS for CG via param lss_range_for_cg.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_2528ab99","line":1042,"range":{"start_line":1042,"start_character":17,"end_line":1042,"end_character":22},"updated":"2017-02-01 11:25:37.000000000","message":"See comment in line 1082","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"34dfd656398c89d63db0488190b309b7b16a953a","unresolved":false,"context_lines":[{"line_number":1039,"context_line":"    @proxy.logger"},{"line_number":1040,"context_line":"    def create_group(self, ctxt, group):"},{"line_number":1041,"context_line":"        \"\"\"Create generic volume group.\"\"\""},{"line_number":1042,"context_line":"        if Group(group).type_cg_snapshot:"},{"line_number":1043,"context_line":"            self._assert(self._helper.backend[\u0027lss_ids_for_cg\u0027],"},{"line_number":1044,"context_line":"                         \u0027No LSS(s) for CG, please make sure you have \u0027"},{"line_number":1045,"context_line":"                         \u0027reserved LSS for CG via param lss_range_for_cg.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_b9058615","line":1042,"range":{"start_line":1042,"start_character":17,"end_line":1042,"end_character":22},"in_reply_to":"3a461143_2528ab99","updated":"2017-02-02 01:59:51.000000000","message":"check the comment below, thanks","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"7dd865c7bcfb6d6df2f81fc197f996aed9409aeb","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"    @proxy.logger"},{"line_number":1066,"context_line":"    def update_group(self, ctxt, group, add_volumes, remove_volumes):"},{"line_number":1067,"context_line":"        \"\"\"Update generic volume group.\"\"\""},{"line_number":1068,"context_line":"        if Group(group).type_cg_snapshot:"},{"line_number":1069,"context_line":"            return self._update_consisgroup(group, add_volumes, remove_volumes)"},{"line_number":1070,"context_line":"        else:"},{"line_number":1071,"context_line":"            return None, None, None"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_257a6bbd","line":1068,"range":{"start_line":1068,"start_character":17,"end_line":1068,"end_character":22},"updated":"2017-02-01 11:25:37.000000000","message":"Why you need to instantiate a Group object here.\nAlternatively, you can change the type_cg_snapshot to a class method\nand call it without instantiate the Group object (as you don\u0027t refer to the other data members)","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"34dfd656398c89d63db0488190b309b7b16a953a","unresolved":false,"context_lines":[{"line_number":1065,"context_line":"    @proxy.logger"},{"line_number":1066,"context_line":"    def update_group(self, ctxt, group, add_volumes, remove_volumes):"},{"line_number":1067,"context_line":"        \"\"\"Update generic volume group.\"\"\""},{"line_number":1068,"context_line":"        if Group(group).type_cg_snapshot:"},{"line_number":1069,"context_line":"            return self._update_consisgroup(group, add_volumes, remove_volumes)"},{"line_number":1070,"context_line":"        else:"},{"line_number":1071,"context_line":"            return None, None, None"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_f9162e57","line":1068,"range":{"start_line":1068,"start_character":17,"end_line":1068,"end_character":22},"in_reply_to":"3a461143_257a6bbd","updated":"2017-02-02 01:59:51.000000000","message":"Thanks Isaac, I add a Group class here is because it may has other attributes in the future, for example, attributes for replication-cg, so I need it to manage all things related to generic volume group.","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"7dd865c7bcfb6d6df2f81fc197f996aed9409aeb","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"    def delete_group_snapshot(self, ctxt, group_snapshot, snapshots):"},{"line_number":1080,"context_line":"        \"\"\"Delete volume group snapshot.\"\"\""},{"line_number":1081,"context_line":"        snapshots \u003d [Lun(s, is_snapshot\u003dTrue) for s in snapshots]"},{"line_number":1082,"context_line":"        if Group(group_snapshot).type_cg_snapshot:"},{"line_number":1083,"context_line":"            return self._delete_group_snapshot_with_lock("},{"line_number":1084,"context_line":"                group_snapshot, snapshots)"},{"line_number":1085,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_05464f7a","line":1082,"range":{"start_line":1082,"start_character":11,"end_line":1082,"end_character":16},"updated":"2017-02-01 11:25:37.000000000","message":"See the comment above about type_cg_snapshot","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"34dfd656398c89d63db0488190b309b7b16a953a","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"    def delete_group_snapshot(self, ctxt, group_snapshot, snapshots):"},{"line_number":1080,"context_line":"        \"\"\"Delete volume group snapshot.\"\"\""},{"line_number":1081,"context_line":"        snapshots \u003d [Lun(s, is_snapshot\u003dTrue) for s in snapshots]"},{"line_number":1082,"context_line":"        if Group(group_snapshot).type_cg_snapshot:"},{"line_number":1083,"context_line":"            return self._delete_group_snapshot_with_lock("},{"line_number":1084,"context_line":"                group_snapshot, snapshots)"},{"line_number":1085,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_59166256","line":1082,"range":{"start_line":1082,"start_character":11,"end_line":1082,"end_character":16},"in_reply_to":"3a461143_05464f7a","updated":"2017-02-02 01:59:51.000000000","message":"check the comment above, thanks","commit_id":"31d81a6ab65b194f4a16075cd4ab1049b9113f7c"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        self.meta[\u0027stat\u0027] \u003d stats"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def _assert(self, assert_condition, exception_message\u003d\u0027\u0027):"},{"line_number":422,"context_line":"        if not assert_condition:"},{"line_number":423,"context_line":"            LOG.error(exception_message)"},{"line_number":424,"context_line":"            raise exception.VolumeDriverException(message\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_8b7e1717","line":421,"range":{"start_line":421,"start_character":4,"end_line":421,"end_character":62},"updated":"2017-02-08 08:06:01.000000000","message":"Should go throughout the file and check that the exception messages have _()","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"0e880811060fbc7144fc7285cf83e136a76ac7e3","unresolved":false,"context_lines":[{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        self.meta[\u0027stat\u0027] \u003d stats"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def _assert(self, assert_condition, exception_message\u003d\u0027\u0027):"},{"line_number":422,"context_line":"        if not assert_condition:"},{"line_number":423,"context_line":"            LOG.error(exception_message)"},{"line_number":424,"context_line":"            raise exception.VolumeDriverException(message\u003dexception_message)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_c64c96ca","line":421,"range":{"start_line":421,"start_character":4,"end_line":421,"end_character":62},"in_reply_to":"1a430d35_8b7e1717","updated":"2017-02-08 08:34:40.000000000","message":"Thanks","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":483,"context_line":"            lss_in_cache.add(lss)"},{"line_number":484,"context_line":"            self.consisgroup_cache[lun.group.id] \u003d lss_in_cache"},{"line_number":485,"context_line":"        else:"},{"line_number":486,"context_line":"            msg \u003d _(\u0027There are still some available LSSs for CG, \u0027"},{"line_number":487,"context_line":"                    \u0027but they are not in the same node as pool.\u0027)"},{"line_number":488,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":489,"context_line":"        return (pid, lss)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _get_lss_in_cg(self, group, is_snapshot\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_abf833c4","line":488,"range":{"start_line":486,"start_character":12,"end_line":488,"end_character":62},"updated":"2017-02-08 08:06:01.000000000","message":"text in exception","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"64be85e8e5e1870ed18c5696247dc1ca401125a5","unresolved":false,"context_lines":[{"line_number":636,"context_line":"                self._replication.extend_replica(lun, param)"},{"line_number":637,"context_line":"                self._replication.create_pprc_pairs(lun)"},{"line_number":638,"context_line":"            else:"},{"line_number":639,"context_line":"                msg \u003d (_(\"The volume %s has been failed over, it is \""},{"line_number":640,"context_line":"                         \"not suggested to extend it.\") % lun.ds_id)"},{"line_number":641,"context_line":"                raise exception.CinderException(message\u003dmsg)"},{"line_number":642,"context_line":"        else:"},{"line_number":643,"context_line":"            self._helper.change_lun(lun.ds_id, param)"},{"line_number":644,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_cbc65f67","line":641,"range":{"start_line":639,"start_character":16,"end_line":641,"end_character":60},"updated":"2017-02-08 08:06:01.000000000","message":"text in exception. this should be changed through the file","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"2909794ce5decb3c1909bf512cdedb0cf6cae11c","unresolved":false,"context_lines":[{"line_number":772,"context_line":"                else:"},{"line_number":773,"context_line":"                    msg \u003d (_(\"The volume %s is in replication relationship, \""},{"line_number":774,"context_line":"                             \"it is not supported to retype from thin to \""},{"line_number":775,"context_line":"                             \"thick or vice versus.\") % lun.ds_id)"},{"line_number":776,"context_line":"                    raise exception.CinderException(message\u003dmsg)"},{"line_number":777,"context_line":"            else:"},{"line_number":778,"context_line":"                lun \u003d _convert_thin_and_thick(lun, new_type_thin)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_d3a8d179","line":775,"range":{"start_line":775,"start_character":39,"end_line":775,"end_character":50},"updated":"2017-02-08 10:57:47.000000000","message":"typo: vice versa","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"1e75de14d133b9a206b8d3c17626520c8595caff","unresolved":false,"context_lines":[{"line_number":772,"context_line":"                else:"},{"line_number":773,"context_line":"                    msg \u003d (_(\"The volume %s is in replication relationship, \""},{"line_number":774,"context_line":"                             \"it is not supported to retype from thin to \""},{"line_number":775,"context_line":"                             \"thick or vice versus.\") % lun.ds_id)"},{"line_number":776,"context_line":"                    raise exception.CinderException(message\u003dmsg)"},{"line_number":777,"context_line":"            else:"},{"line_number":778,"context_line":"                lun \u003d _convert_thin_and_thick(lun, new_type_thin)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_73bc78bb","line":775,"range":{"start_line":775,"start_character":39,"end_line":775,"end_character":50},"in_reply_to":"1a430d35_d3a8d179","updated":"2017-02-08 11:15:54.000000000","message":"thank you very much, i will fix it in next patch.","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":13047,"name":"Isaac Beckman","email":"beckmani@gmail.com","username":"isaacb"},"change_message_id":"2909794ce5decb3c1909bf512cdedb0cf6cae11c","unresolved":false,"context_lines":[{"line_number":998,"context_line":"            for vol in volumes:"},{"line_number":999,"context_line":"                found_vols \u003d [v for v in group.volumes if v[\u0027id\u0027] \u003d\u003d vol[\u0027id\u0027]]"},{"line_number":1000,"context_line":"                sorted_volumes.extend(found_vols)"},{"line_number":1001,"context_line":"            volumes \u003d sorted_volumes"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"            tgt_luns \u003d [Lun(volume) for volume in volumes]"},{"line_number":1004,"context_line":"            if src_luns and tgt_luns:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_ae32fcef","line":1001,"range":{"start_line":1001,"start_character":22,"end_line":1001,"end_character":36},"updated":"2017-02-08 10:57:47.000000000","message":"This list is not sorted by \u0027id\u0027.\nOnce you add the volumes to a flat list you need to sort them","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"1e75de14d133b9a206b8d3c17626520c8595caff","unresolved":false,"context_lines":[{"line_number":998,"context_line":"            for vol in volumes:"},{"line_number":999,"context_line":"                found_vols \u003d [v for v in group.volumes if v[\u0027id\u0027] \u003d\u003d vol[\u0027id\u0027]]"},{"line_number":1000,"context_line":"                sorted_volumes.extend(found_vols)"},{"line_number":1001,"context_line":"            volumes \u003d sorted_volumes"},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"            tgt_luns \u003d [Lun(volume) for volume in volumes]"},{"line_number":1004,"context_line":"            if src_luns and tgt_luns:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_93c9e4ae","line":1001,"range":{"start_line":1001,"start_character":22,"end_line":1001,"end_character":36},"in_reply_to":"1a430d35_ae32fcef","updated":"2017-02-08 11:15:54.000000000","message":"Thanks Isaac, the order of elements in list is persistent and list extends the arguments given to the end of the list. so considering parameters \u0027snapshots\u0027 and \u0027sorted_source_vols\u0027 have the same order as \u0027volumes\u0027, here just need to make sure the volumes get from group.volumes can have the same order as \u0027volumes\u0027","commit_id":"f05118a766269fcb37f9c9fe8aba2e9b6f13cf05"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                            lun.lss_pair[\u0027source\u0027][1])"},{"line_number":466,"context_line":"                excluded_lss.add(lun.lss_pair[\u0027source\u0027][1])"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":469,"context_line":"    def _find_available_lss_for_cg(self, lun, excluded_lss):"},{"line_number":470,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":471,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_562901e5","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":17},"updated":"2017-02-09 04:18:47.000000000","message":"Do you want to use @coordination.synchronized now?","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                            lun.lss_pair[\u0027source\u0027][1])"},{"line_number":466,"context_line":"                excluded_lss.add(lun.lss_pair[\u0027source\u0027][1])"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":469,"context_line":"    def _find_available_lss_for_cg(self, lun, excluded_lss):"},{"line_number":470,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":471,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_f9c1fee4","line":468,"range":{"start_line":468,"start_character":4,"end_line":468,"end_character":17},"in_reply_to":"1a430d35_562901e5","updated":"2017-02-09 04:59:57.000000000","message":"Thanks xyang, I will do it in another patch for HA issues.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":500,"context_line":"    def _find_lss_for_cg(self):"},{"line_number":501,"context_line":"        lss_used \u003d set()"},{"line_number":502,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":503,"context_line":"        existing_cgs \u003d objects.ConsistencyGroupList.get_all(ctxt)"},{"line_number":504,"context_line":"        for group in existing_cgs:"},{"line_number":505,"context_line":"            lss_used \u003d lss_used | self._get_lss_in_cg(group)"},{"line_number":506,"context_line":"        existing_cgsnapshots \u003d objects.CGSnapshotList.get_all(ctxt)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_b9177643","line":503,"range":{"start_line":503,"start_character":23,"end_line":503,"end_character":59},"updated":"2017-02-09 04:18:47.000000000","message":"This will get all CGs in the db, including CGs created by other backends if there are multiple backends in the setup.  Your driver should only operate on the CGs created by itself.\n\nSame comments to the other get_all in this function.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":500,"context_line":"    def _find_lss_for_cg(self):"},{"line_number":501,"context_line":"        lss_used \u003d set()"},{"line_number":502,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":503,"context_line":"        existing_cgs \u003d objects.ConsistencyGroupList.get_all(ctxt)"},{"line_number":504,"context_line":"        for group in existing_cgs:"},{"line_number":505,"context_line":"            lss_used \u003d lss_used | self._get_lss_in_cg(group)"},{"line_number":506,"context_line":"        existing_cgsnapshots \u003d objects.CGSnapshotList.get_all(ctxt)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_749995c3","line":503,"range":{"start_line":503,"start_character":23,"end_line":503,"end_character":59},"in_reply_to":"1a430d35_b9177643","updated":"2017-02-09 04:59:57.000000000","message":"Thank you very much, great catch, I need to filter CG using volume backend here. I will fix it.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3a06eaddacec7f8f905df21f7598ad68e1455634","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                            lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":461,"context_line":"                excluded_lss.add(lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":464,"context_line":"    def _find_pool_lss_pair_for_cg(self, lun, excluded_lss):"},{"line_number":465,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":466,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_8ddf1368","line":463,"range":{"start_line":463,"start_character":4,"end_line":463,"end_character":17},"updated":"2017-02-14 19:27:24.000000000","message":"Use @coordination.synchronized?","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2e3d8102121b82ba3a1bd82c5e7d76edd0b3652d","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                            lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":461,"context_line":"                excluded_lss.add(lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":464,"context_line":"    def _find_pool_lss_pair_for_cg(self, lun, excluded_lss):"},{"line_number":465,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":466,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_ad5ca54b","line":463,"range":{"start_line":463,"start_character":4,"end_line":463,"end_character":17},"in_reply_to":"fa31d9ce_68663f2b","updated":"2017-02-15 17:49:18.000000000","message":"Ok, that\u0027s fine.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"a2818507d374ae4f8d7e654796ae4aa785403a6e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                            lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":461,"context_line":"                excluded_lss.add(lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":464,"context_line":"    def _find_pool_lss_pair_for_cg(self, lun, excluded_lss):"},{"line_number":465,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":466,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_68663f2b","line":463,"range":{"start_line":463,"start_character":4,"end_line":463,"end_character":17},"in_reply_to":"fa31d9ce_8ddf1368","updated":"2017-02-15 02:54:24.000000000","message":"Thanks xyang, this driver uses a lot of synchronized in other places too, so I plan to fix all of them in another patch for HA. BTW, in this patch, coordination.synchronized may can not address the problem of sharing self.consisgroup_cache between different hosts. so temporally this driver doesn\u0027t consider distributed lock.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"554767555fc060d40b52340d62f9b7054187d901","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        lss_used \u003d set()"},{"line_number":511,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":512,"context_line":"        existing_groups \u003d objects.GroupList.get_all("},{"line_number":513,"context_line":"            ctxt, filters\u003d{\u0027status\u0027: \u0027available\u0027})"},{"line_number":514,"context_line":"        for group in existing_groups:"},{"line_number":515,"context_line":"            if Group(group).consisgroup_enabled:"},{"line_number":516,"context_line":"                lss_used \u003d lss_used | self._get_lss_in_cg(group)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_e14ed36d","line":513,"updated":"2017-02-14 21:37:13.000000000","message":"So, this could take a long time because it fetches every single Group in Cinder.   Is there another way to filter this least before the query is made?  I understand that this driver has to find all Groups that have an LSS assigned so it knows how to properly create and assign a new one.  The backend can\u0027t query the existing LSS\u0027s to find out who is assigned to what.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"a2818507d374ae4f8d7e654796ae4aa785403a6e","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        lss_used \u003d set()"},{"line_number":511,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":512,"context_line":"        existing_groups \u003d objects.GroupList.get_all("},{"line_number":513,"context_line":"            ctxt, filters\u003d{\u0027status\u0027: \u0027available\u0027})"},{"line_number":514,"context_line":"        for group in existing_groups:"},{"line_number":515,"context_line":"            if Group(group).consisgroup_enabled:"},{"line_number":516,"context_line":"                lss_used \u003d lss_used | self._get_lss_in_cg(group)"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_086ce333","line":513,"in_reply_to":"fa31d9ce_e14ed36d","updated":"2017-02-15 02:54:24.000000000","message":"Thanks Walter,\n\nGroupList in group.py only has two interfaces get_all and get_all_by_project, but driver can not use get_all_by_project because it doesn\u0027t know the information of tenants, and maybe user want to share DS8K between different tenants, so driver only can use get_all.\n\nIt isn\u0027t a good idea to add {\u0027host\u0027: \u0027host@backend#pool\u0027} into filters parameter either, because driver is hard to know the value of host especially when user use HA which host will be set by user to make it all hosts running cinder-volume service have the same host.\n \nIn all, I don\u0027t have a good way to filter it least. if you have\nany suggestion, please tell me, thank you very much.\n\nBTW, I thought about putting the information of CG in the cache before,so that driver doesn\u0027t need to query all Groups in Cinder, but this cache must be put in a permanent place in case cinder-volume service down. Putting it in the storage is a good choice but DS8K doesn\u0027t have such a place and unwilling to add one for this purpose. (NOTE: self.consistency_cache in this design is to hold the decision made by driver during create volume for consistency group, it can lost all of its data because actually driver depends on Cinder to get the information of CG from DB.)","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"3a06eaddacec7f8f905df21f7598ad68e1455634","unresolved":false,"context_lines":[{"line_number":823,"context_line":"        return self._helper.create_group(group)"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    @proxy.logger"},{"line_number":826,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":827,"context_line":"    def delete_consistencygroup(self, ctxt, group, volumes):"},{"line_number":828,"context_line":"        \"\"\"Delete a consistency group.\"\"\""},{"line_number":829,"context_line":"        luns \u003d [Lun(volume) for volume in volumes]"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa31d9ce_0d2ec342","line":826,"range":{"start_line":826,"start_character":4,"end_line":826,"end_character":17},"updated":"2017-02-14 19:27:24.000000000","message":"@coordination.synchronized?","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":998,"context_line":"        try:"},{"line_number":999,"context_line":"            # Don\u0027t use paramter volumes because it has DetachedInstanceError"},{"line_number":1000,"context_line":"            # issue frequently. here tries to get and sort new volumes, a lot"},{"line_number":1001,"context_line":"            # of cases have been guranteed by the _sort_source_vols in"},{"line_number":1002,"context_line":"            # manange.py, so not verify again."},{"line_number":1003,"context_line":"            sorted_volumes \u003d []"},{"line_number":1004,"context_line":"            for vol in volumes:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_f2a4ba4b","line":1001,"range":{"start_line":1001,"start_character":33,"end_line":1001,"end_character":42},"updated":"2017-02-25 23:32:22.000000000","message":"s/guranteed/guaranteed","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":998,"context_line":"        try:"},{"line_number":999,"context_line":"            # Don\u0027t use paramter volumes because it has DetachedInstanceError"},{"line_number":1000,"context_line":"            # issue frequently. here tries to get and sort new volumes, a lot"},{"line_number":1001,"context_line":"            # of cases have been guranteed by the _sort_source_vols in"},{"line_number":1002,"context_line":"            # manange.py, so not verify again."},{"line_number":1003,"context_line":"            sorted_volumes \u003d []"},{"line_number":1004,"context_line":"            for vol in volumes:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_143587f6","line":1001,"range":{"start_line":1001,"start_character":33,"end_line":1001,"end_character":42},"in_reply_to":"da36d5c6_f2a4ba4b","updated":"2017-02-28 04:26:44.000000000","message":"Thanks xyang, done.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                                                 force, **kwargs)"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    @proxy.logger"},{"line_number":818,"context_line":"    def create_consistencygroup(self, ctxt, group):"},{"line_number":819,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":820,"context_line":"        self._assert(self._helper.backend[\u0027lss_ids_for_cg\u0027],"},{"line_number":821,"context_line":"                     \u0027No LSS(s) for CG, please make sure you have \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_40ccb988","line":818,"range":{"start_line":818,"start_character":8,"end_line":818,"end_character":31},"updated":"2017-03-13 17:57:01.000000000","message":"There\u0027s no need to support consistency group interface any more because all users will have to migrate to the new groups tables once upgrading to Pike.  Please remove this function and make sure you only have create_group.","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                                                 force, **kwargs)"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"    @proxy.logger"},{"line_number":818,"context_line":"    def create_consistencygroup(self, ctxt, group):"},{"line_number":819,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":820,"context_line":"        self._assert(self._helper.backend[\u0027lss_ids_for_cg\u0027],"},{"line_number":821,"context_line":"                     \u0027No LSS(s) for CG, please make sure you have \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_ee8753d5","line":818,"range":{"start_line":818,"start_character":8,"end_line":818,"end_character":31},"in_reply_to":"9a30ddce_40ccb988","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    @proxy.logger"},{"line_number":826,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":827,"context_line":"    def delete_consistencygroup(self, ctxt, group, volumes):"},{"line_number":828,"context_line":"        \"\"\"Delete a consistency group.\"\"\""},{"line_number":829,"context_line":"        luns \u003d [Lun(volume) for volume in volumes]"},{"line_number":830,"context_line":"        model_update, volumes_model_update \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_e0a92d91","line":827,"range":{"start_line":827,"start_character":8,"end_line":827,"end_character":31},"updated":"2017-03-13 17:57:01.000000000","message":"Same","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    @proxy.logger"},{"line_number":826,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":827,"context_line":"    def delete_consistencygroup(self, ctxt, group, volumes):"},{"line_number":828,"context_line":"        \"\"\"Delete a consistency group.\"\"\""},{"line_number":829,"context_line":"        luns \u003d [Lun(volume) for volume in volumes]"},{"line_number":830,"context_line":"        model_update, volumes_model_update \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_2e6a4b1b","line":827,"range":{"start_line":827,"start_character":8,"end_line":827,"end_character":31},"in_reply_to":"9a30ddce_e0a92d91","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":846,"context_line":"                self.consisgroup_cache.pop(group_id)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    @proxy._trace_time"},{"line_number":849,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot, snapshots):"},{"line_number":850,"context_line":"        \"\"\"Create a consistency group snapshot.\"\"\""},{"line_number":851,"context_line":"        return self._create_group_snapshot(cgsnapshot, snapshots)"},{"line_number":852,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_8099517b","line":849,"range":{"start_line":849,"start_character":8,"end_line":849,"end_character":25},"updated":"2017-03-13 17:57:01.000000000","message":"Same","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":846,"context_line":"                self.consisgroup_cache.pop(group_id)"},{"line_number":847,"context_line":""},{"line_number":848,"context_line":"    @proxy._trace_time"},{"line_number":849,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot, snapshots):"},{"line_number":850,"context_line":"        \"\"\"Create a consistency group snapshot.\"\"\""},{"line_number":851,"context_line":"        return self._create_group_snapshot(cgsnapshot, snapshots)"},{"line_number":852,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_4e778702","line":849,"range":{"start_line":849,"start_character":8,"end_line":849,"end_character":25},"in_reply_to":"9a30ddce_8099517b","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":876,"context_line":""},{"line_number":877,"context_line":"    @proxy._trace_time"},{"line_number":878,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":879,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, snapshots):"},{"line_number":880,"context_line":"        \"\"\"Delete a consistency group snapshot.\"\"\""},{"line_number":881,"context_line":"        tgt_luns \u003d [Lun(s, is_snapshot\u003dTrue) for s in snapshots]"},{"line_number":882,"context_line":"        model_update, snapshots_model_update \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_c08d0932","line":879,"range":{"start_line":879,"start_character":8,"end_line":879,"end_character":25},"updated":"2017-03-13 17:57:01.000000000","message":"Same","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":876,"context_line":""},{"line_number":877,"context_line":"    @proxy._trace_time"},{"line_number":878,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":879,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, snapshots):"},{"line_number":880,"context_line":"        \"\"\"Delete a consistency group snapshot.\"\"\""},{"line_number":881,"context_line":"        tgt_luns \u003d [Lun(s, is_snapshot\u003dTrue) for s in snapshots]"},{"line_number":882,"context_line":"        model_update, snapshots_model_update \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_6e7443fd","line":879,"range":{"start_line":879,"start_character":8,"end_line":879,"end_character":25},"in_reply_to":"9a30ddce_c08d0932","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        return model_update, snapshots_model_update"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    @proxy.logger"},{"line_number":889,"context_line":"    def update_consistencygroup(self, ctxt, group,"},{"line_number":890,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":891,"context_line":"        \"\"\"Add or remove volume(s) to/from an existing consistency group.\"\"\""},{"line_number":892,"context_line":"        return self._update_group_with_lock(group, add_volumes,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_e0804df9","line":889,"range":{"start_line":889,"start_character":8,"end_line":889,"end_character":32},"updated":"2017-03-13 17:57:01.000000000","message":"Same","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":886,"context_line":"        return model_update, snapshots_model_update"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    @proxy.logger"},{"line_number":889,"context_line":"    def update_consistencygroup(self, ctxt, group,"},{"line_number":890,"context_line":"                                add_volumes, remove_volumes):"},{"line_number":891,"context_line":"        \"\"\"Add or remove volume(s) to/from an existing consistency group.\"\"\""},{"line_number":892,"context_line":"        return self._update_group_with_lock(group, add_volumes,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_ce59b790","line":889,"range":{"start_line":889,"start_character":8,"end_line":889,"end_character":32},"in_reply_to":"9a30ddce_e0804df9","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"6bcae6c5ed882781b750886af138b300b2a7ccad","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        if len(remove_volumes) \u003d\u003d len(group.volumes) + len(add_volumes):"},{"line_number":958,"context_line":"            self._update_consisgroup_cache(group.id)"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"    @proxy._trace_time"},{"line_number":961,"context_line":"    def create_consistencygroup_from_src(self, ctxt, group, volumes,"},{"line_number":962,"context_line":"                                         cgsnapshot, snapshots,"},{"line_number":963,"context_line":"                                         source_cg, sorted_source_vols):"},{"line_number":964,"context_line":"        \"\"\"Create a consistencygroup from source."}],"source_content_type":"text/x-python","patch_set":15,"id":"9a30ddce_c0942938","line":961,"range":{"start_line":960,"start_character":8,"end_line":961,"end_character":40},"updated":"2017-03-13 17:57:01.000000000","message":"Same","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"01db33aac6a3d2a8fd334c3dd53315156fec2575","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        if len(remove_volumes) \u003d\u003d len(group.volumes) + len(add_volumes):"},{"line_number":958,"context_line":"            self._update_consisgroup_cache(group.id)"},{"line_number":959,"context_line":""},{"line_number":960,"context_line":"    @proxy._trace_time"},{"line_number":961,"context_line":"    def create_consistencygroup_from_src(self, ctxt, group, volumes,"},{"line_number":962,"context_line":"                                         cgsnapshot, snapshots,"},{"line_number":963,"context_line":"                                         source_cg, sorted_source_vols):"},{"line_number":964,"context_line":"        \"\"\"Create a consistencygroup from source."}],"source_content_type":"text/x-python","patch_set":15,"id":"5a22e58a_0e54af52","line":961,"range":{"start_line":960,"start_character":8,"end_line":961,"end_character":40},"in_reply_to":"9a30ddce_c0942938","updated":"2017-03-14 07:43:10.000000000","message":"Thanks xing-yang, done","commit_id":"1b15bb142eeee9be07a9dd52180f1b7e1d5816ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"551de468f85283528c53483d1ab1398a907d188c","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            \"free_capacity_gb\": self._b2gb("},{"line_number":408,"context_line":"                sum(p[\u0027capavail\u0027] for p in storage_pools.values())),"},{"line_number":409,"context_line":"            \"reserved_percentage\": self.configuration.reserved_percentage,"},{"line_number":410,"context_line":"            \"consistencygroup_support\": True,"},{"line_number":411,"context_line":"            \"consistent_group_snapshot_enabled\": True,"},{"line_number":412,"context_line":"            \"multiattach\": True"},{"line_number":413,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a1ced50_d2f23a06","line":410,"range":{"start_line":410,"start_character":12,"end_line":410,"end_character":45},"updated":"2017-03-16 18:01:18.000000000","message":"This can be removed now.  It won\u0027t be used any more.","commit_id":"f3dbb5bda31e9f1041e50eb41905b781de54ebc6"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"045252c28c7472e7fd14a6e321668576213978df","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            \"free_capacity_gb\": self._b2gb("},{"line_number":408,"context_line":"                sum(p[\u0027capavail\u0027] for p in storage_pools.values())),"},{"line_number":409,"context_line":"            \"reserved_percentage\": self.configuration.reserved_percentage,"},{"line_number":410,"context_line":"            \"consistencygroup_support\": True,"},{"line_number":411,"context_line":"            \"consistent_group_snapshot_enabled\": True,"},{"line_number":412,"context_line":"            \"multiattach\": True"},{"line_number":413,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a1ced50_db30890a","line":410,"range":{"start_line":410,"start_character":12,"end_line":410,"end_character":45},"in_reply_to":"1a1ced50_d2f23a06","updated":"2017-03-17 02:36:07.000000000","message":"Thank you very much, done.","commit_id":"f3dbb5bda31e9f1041e50eb41905b781de54ebc6"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"0538b9894959f63c6c443274834ef131e0f4fb8c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.configuration \u003d driver.configuration"},{"line_number":324,"context_line":"        self.configuration.append_config_values(ds8k_opts)"},{"line_number":325,"context_line":"        # cache hurts HA, will find whether is it possible to store it"},{"line_number":326,"context_line":"        # in storage."},{"line_number":327,"context_line":"        self.consisgroup_cache \u003d {}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    @proxy._trace_time"}],"source_content_type":"text/x-python","patch_set":24,"id":"ffe62b97_7be1919a","line":326,"updated":"2017-03-27 15:25:35.000000000","message":"should be marked as TODO:","commit_id":"ea82ca1e6c7b427b738e425adaf11949b53b5927"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"e29dc7e6064c0ba35b58d02f5bf86b310167b3dc","unresolved":false,"context_lines":[{"line_number":323,"context_line":"        self.configuration \u003d driver.configuration"},{"line_number":324,"context_line":"        self.configuration.append_config_values(ds8k_opts)"},{"line_number":325,"context_line":"        # cache hurts HA, will find whether is it possible to store it"},{"line_number":326,"context_line":"        # in storage."},{"line_number":327,"context_line":"        self.consisgroup_cache \u003d {}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    @proxy._trace_time"}],"source_content_type":"text/x-python","patch_set":24,"id":"ffe62b97_f290cd4c","line":326,"in_reply_to":"ffe62b97_7be1919a","updated":"2017-03-28 02:51:39.000000000","message":"Thanks Walt, done","commit_id":"ea82ca1e6c7b427b738e425adaf11949b53b5927"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"0538b9894959f63c6c443274834ef131e0f4fb8c","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                            lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":455,"context_line":"                excluded_lss.add(lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":458,"context_line":"    def _find_pool_lss_pair_for_cg(self, lun, excluded_lss):"},{"line_number":459,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":460,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ffe62b97_6a03bdb9","line":457,"updated":"2017-03-27 15:25:35.000000000","message":"Shouldn\u0027t we use the coordination engine instead for this, so it\u0027s not just a local file lock, but a potentially global lock when being used in Active/Active HA mode ?","commit_id":"ea82ca1e6c7b427b738e425adaf11949b53b5927"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"e29dc7e6064c0ba35b58d02f5bf86b310167b3dc","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                            lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":455,"context_line":"                excluded_lss.add(lun.pool_lss_pair[\u0027source\u0027][1])"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @synchronized(\u0027OpenStackCinderIBMDS8KMutex-CG-\u0027, external\u003dTrue)"},{"line_number":458,"context_line":"    def _find_pool_lss_pair_for_cg(self, lun, excluded_lss):"},{"line_number":459,"context_line":"        lss_in_cache \u003d self.consisgroup_cache.get(lun.group.id, set())"},{"line_number":460,"context_line":"        if not lss_in_cache:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ffe62b97_cd59aa35","line":457,"in_reply_to":"ffe62b97_6a03bdb9","updated":"2017-03-28 02:51:39.000000000","message":"Thanks Walt, because distributed lock can not solve the problem of consistency group cache for AA, and there are local file locks for attach, detach and replication too. so I planed to switch to distributed lock in another patch which will change all of them. but now considering that both of you and xyang have this question, I think I should change it for CG first. thank you.","commit_id":"ea82ca1e6c7b427b738e425adaf11949b53b5927"}],"cinder/volume/drivers/ibm/ibm_storage/ds8k_replication.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b24ff50a37870a0b339b5d34a7429a63d1251b22","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        except restclient.TimeoutException as e:"},{"line_number":92,"context_line":"            LOG.info(_LI(\"REST request time out, backend may be not \""},{"line_number":93,"context_line":"                         \"available any more. Exception: %s\"),"},{"line_number":94,"context_line":"                     six.text_type(e))"},{"line_number":95,"context_line":"            return False"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_56cd8164","line":94,"range":{"start_line":94,"start_character":21,"end_line":94,"end_character":34},"updated":"2017-02-09 04:18:47.000000000","message":"six.text_type is not needed here.  Logger will do it.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"61bfe914be188ea900b2dd0dcbce05a6cfc9b655","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        except restclient.TimeoutException as e:"},{"line_number":92,"context_line":"            LOG.info(_LI(\"REST request time out, backend may be not \""},{"line_number":93,"context_line":"                         \"available any more. Exception: %s\"),"},{"line_number":94,"context_line":"                     six.text_type(e))"},{"line_number":95,"context_line":"            return False"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_b48f7d73","line":94,"range":{"start_line":94,"start_character":21,"end_line":94,"end_character":34},"in_reply_to":"1a430d35_56cd8164","updated":"2017-02-09 04:59:57.000000000","message":"Thanks, I will fix it.","commit_id":"afe348816fd0018454b3a042f9e7f8404806d8b3"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"fa20b1cf7a2a11a183547b1b8c2f54b8c32d20df","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                       \"is invalid.\") % connection_type))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        self._target_helper.backend[\u0027lss_ids_for_cg\u0027] \u003d ("},{"line_number":387,"context_line":"            self._source_helper.backend[\u0027lss_ids_for_cg\u0027])"},{"line_number":388,"context_line":"        self._mm_manager \u003d MetroMirrorManager(self._source_helper,"},{"line_number":389,"context_line":"                                              self._target_helper)"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_92cd3e68","line":387,"range":{"start_line":387,"start_character":41,"end_line":387,"end_character":55},"updated":"2017-02-25 23:32:22.000000000","message":"You have referenced this string in multiple places. Please use a constant.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"ebf6718fb6b4cf4e9d041ebe7017a09d87dc87e8","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                       \"is invalid.\") % connection_type))"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"        self._target_helper.backend[\u0027lss_ids_for_cg\u0027] \u003d ("},{"line_number":387,"context_line":"            self._source_helper.backend[\u0027lss_ids_for_cg\u0027])"},{"line_number":388,"context_line":"        self._mm_manager \u003d MetroMirrorManager(self._source_helper,"},{"line_number":389,"context_line":"                                              self._target_helper)"},{"line_number":390,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da36d5c6_4faf6694","line":387,"range":{"start_line":387,"start_character":41,"end_line":387,"end_character":55},"in_reply_to":"da36d5c6_92cd3e68","updated":"2017-02-28 04:26:44.000000000","message":"Thanks xyang, this value is from the parameter user set in the backend section of cinder.conf, and user may add more LSSes into it when LSSes in this parameter have been exhausted, so using a constant maybe not a good choice. but this line should be changed in the future for replication-cg if user want to reserve different LSSes in primary and secondary.","commit_id":"a4cb055245403d1c49a3de5a586bd06c12c4fec4"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d393df0138885f4799ad3be200a6248737153bf4","unresolved":false,"context_lines":[{"line_number":454,"context_line":"    def enable_replication(self, lun, delete_source\u003dFalse):"},{"line_number":455,"context_line":"        state, lun.pool_lss_pair \u003d ("},{"line_number":456,"context_line":"            self._mm_manager.find_from_pprc_paths(lun.ds_id[0:2]))"},{"line_number":457,"context_line":"        LOG.debug(\"enable_replication: pool_lss_pair is %s.\" %"},{"line_number":458,"context_line":"                  lun.pool_lss_pair)"},{"line_number":459,"context_line":"        if state \u003d\u003d PPRC_PATH_UNHEALTHY:"},{"line_number":460,"context_line":"            raise restclient.APIException("}],"source_content_type":"text/x-python","patch_set":22,"id":"1a1ced50_62f1b395","line":457,"range":{"start_line":457,"start_character":61,"end_line":457,"end_character":62},"updated":"2017-03-23 18:57:33.000000000","message":"Should be \",\".","commit_id":"bb2b5402c7a5b9d99cea1c083755c14b4b366b15"},{"author":{"_account_id":17564,"name":"jiamin","email":"shljia@cn.ibm.com","username":"jiamin"},"change_message_id":"a3b966b5ce38949bfeeadc13b2a44cd0f0893bd4","unresolved":false,"context_lines":[{"line_number":454,"context_line":"    def enable_replication(self, lun, delete_source\u003dFalse):"},{"line_number":455,"context_line":"        state, lun.pool_lss_pair \u003d ("},{"line_number":456,"context_line":"            self._mm_manager.find_from_pprc_paths(lun.ds_id[0:2]))"},{"line_number":457,"context_line":"        LOG.debug(\"enable_replication: pool_lss_pair is %s.\" %"},{"line_number":458,"context_line":"                  lun.pool_lss_pair)"},{"line_number":459,"context_line":"        if state \u003d\u003d PPRC_PATH_UNHEALTHY:"},{"line_number":460,"context_line":"            raise restclient.APIException("}],"source_content_type":"text/x-python","patch_set":22,"id":"ffe62b97_c25fb70c","line":457,"range":{"start_line":457,"start_character":61,"end_line":457,"end_character":62},"in_reply_to":"1a1ced50_62f1b395","updated":"2017-03-24 01:53:36.000000000","message":"Thank you very much, done","commit_id":"bb2b5402c7a5b9d99cea1c083755c14b4b366b15"}]}
