)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13527,"name":"Bharat Kumar Kobagana","email":"bkobagan@redhat.com","username":"BharatKumar","inactive":true},"change_message_id":"44f1f3565769aa05acae2cd7f74a3a09f680afaa","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-17 22:22:04 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IBM Storwize driver Consistency Group Implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_d2825d51","line":8,"updated":"2014-12-18 09:21:36.000000000","message":"Long description is missing as per below standards.\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-17 22:22:04 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IBM Storwize driver Consistency Group Implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_7cdb737d","line":8,"in_reply_to":"3a961159_a64ff069","updated":"2014-12-30 06:25:06.000000000","message":"It will be updated in next patch","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"f4e865f6722c5f7acddbbfe8383c077079639a42","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-17 22:22:04 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IBM Storwize driver Consistency Group Implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_f2667928","line":8,"in_reply_to":"3a961159_d2825d51","updated":"2014-12-22 07:04:03.000000000","message":"You are right, I should add more information, it\u0027s just draft version.\n\nThanks for your comments","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-17 22:22:04 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"IBM Storwize driver Consistency Group Implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_a64ff069","line":8,"in_reply_to":"3a961159_f2667928","updated":"2014-12-23 18:53:40.000000000","message":"Please reference your blueprint here.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d43fbc9a5010fa6b2e916952c06f3152e19447d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is IBM Storwize Driver implementation for Consistency Group"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"blueprint: consistency-groups"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a961159_6646dd22","line":11,"updated":"2015-01-16 15:53:27.000000000","message":"Please, change to:\nImplements: blueprint consistency-groups\nAlso, looks like need to create blueprint for IBM Storwize Driver","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"00120ddb9b3e60e57f4a545cb192744ac57b44a4","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is IBM Storwize Driver implementation for Consistency Group"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"blueprint: consistency-groups"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a961159_7c73cc15","line":11,"in_reply_to":"3a961159_6646dd22","updated":"2015-01-16 16:48:06.000000000","message":"Hi Ivan\n\nI have discussed with Jay that, when driver implement the feature which blueprint already implemented by general, the driver not need to create another one, just share the same one.\n\nComments updated","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"5d923cde4c4b471e941ff96bbf439a00ace369f6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is IBM Storwize Driver implementation for Consistency Group"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint consistency-groups"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"1a930d6b_8219f523","line":11,"updated":"2015-01-27 13:10:15.000000000","message":"not a valid blueprint.","commit_id":"1e35ebd5ff086bf93e3ceede49ad0e9d7960c247"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6b825909f8520902e8849accd7fd06e8a8843c6e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch is IBM Storwize Driver implementation for Consistency Group"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Implements: blueprint consistency-groups"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id25c32d93f1c8d8a2986904058a9556e98bbdbe2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fa81d914_f395e988","line":11,"in_reply_to":"1a930d6b_8219f523","updated":"2015-01-28 08:00:33.000000000","message":"Hi Mike\nIn fact, I wanted it link to Xing\u0027s bp, but seems it\u0027s the problem of auto link.\nhttps://blueprints.launchpad.net/cinder/+spec/consistency-groups","commit_id":"1e35ebd5ff086bf93e3ceede49ad0e9d7960c247"}],"cinder/tests/test_storwize_svc.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"        fcmap_info[\u0027autodelete\u0027] \u003d True if \u0027autodelete\u0027 in kwargs else False"},{"line_number":1108,"context_line":"        fcmap_info[\u0027status\u0027] \u003d \u0027idle_or_copied\u0027"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"        # add fcmap to consistency group"},{"line_number":1111,"context_line":"        if \u0027consistgrp\u0027 in kwargs:"},{"line_number":1112,"context_line":"            consistgrp \u003d kwargs[\u0027consistgrp\u0027]"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_dea12a3b","line":1110,"updated":"2015-01-16 03:50:37.000000000","message":"Capital first letter","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"        fcmap_info[\u0027autodelete\u0027] \u003d True if \u0027autodelete\u0027 in kwargs else False"},{"line_number":1108,"context_line":"        fcmap_info[\u0027status\u0027] \u003d \u0027idle_or_copied\u0027"},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"        # add fcmap to consistency group"},{"line_number":1111,"context_line":"        if \u0027consistgrp\u0027 in kwargs:"},{"line_number":1112,"context_line":"            consistgrp \u003d kwargs[\u0027consistgrp\u0027]"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_cad7a4ec","line":1110,"in_reply_to":"3a961159_dea12a3b","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"            cg_id \u003d 0"},{"line_number":1116,"context_line":"            if not consistgrp.isdigit():"},{"line_number":1117,"context_line":"                for consistgrp_key in self._fcconsistgrp_list.keys():"},{"line_number":1118,"context_line":"                    if self._fcconsistgrp_list[consistgrp_key][\u0027name\u0027] \\"},{"line_number":1119,"context_line":"                            \u003d\u003d consistgrp:"},{"line_number":1120,"context_line":"                        cg_id \u003d consistgrp_key"},{"line_number":1121,"context_line":"                        fcmap_info[\u0027consistgrp\u0027] \u003d consistgrp_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_9eab221d","line":1118,"updated":"2015-01-16 03:50:37.000000000","message":"Use () instead of \\.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"            cg_id \u003d 0"},{"line_number":1116,"context_line":"            if not consistgrp.isdigit():"},{"line_number":1117,"context_line":"                for consistgrp_key in self._fcconsistgrp_list.keys():"},{"line_number":1118,"context_line":"                    if self._fcconsistgrp_list[consistgrp_key][\u0027name\u0027] \\"},{"line_number":1119,"context_line":"                            \u003d\u003d consistgrp:"},{"line_number":1120,"context_line":"                        cg_id \u003d consistgrp_key"},{"line_number":1121,"context_line":"                        fcmap_info[\u0027consistgrp\u0027] \u003d consistgrp_key"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_6a35d043","line":1118,"in_reply_to":"3a961159_9eab221d","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"            fcmap_info[\u0027consistgrp\u0027] \u003d cg_id"},{"line_number":1132,"context_line":"            # Add fcmap to consistgrp"},{"line_number":1133,"context_line":"            self._fcconsistgrp_list[cg_id][\u0027fcmaps\u0027][fcmap_info[\u0027id\u0027]] \u003d \\"},{"line_number":1134,"context_line":"                fcmap_info[\u0027name\u0027]"},{"line_number":1135,"context_line":"            self._fc_cg_state_transition(\u0027add\u0027,"},{"line_number":1136,"context_line":"                                         self._fcconsistgrp_list[cg_id])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bea61e52","line":1133,"updated":"2015-01-16 03:50:37.000000000","message":"Here too.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":"            fcmap_info[\u0027consistgrp\u0027] \u003d cg_id"},{"line_number":1132,"context_line":"            # Add fcmap to consistgrp"},{"line_number":1133,"context_line":"            self._fcconsistgrp_list[cg_id][\u0027fcmaps\u0027][fcmap_info[\u0027id\u0027]] \u003d \\"},{"line_number":1134,"context_line":"                fcmap_info[\u0027name\u0027]"},{"line_number":1135,"context_line":"            self._fc_cg_state_transition(\u0027add\u0027,"},{"line_number":1136,"context_line":"                                         self._fcconsistgrp_list[cg_id])"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ea40e0a3","line":1133,"in_reply_to":"3a961159_bea61e52","updated":"2015-01-16 07:51:20.000000000","message":"updated, thanks","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d43fbc9a5010fa6b2e916952c06f3152e19447d","unresolved":false,"context_lines":[{"line_number":3414,"context_line":""},{"line_number":3415,"context_line":"        model_update \u003d self.driver.create_consistencygroup(self.ctxt, cg)"},{"line_number":3416,"context_line":""},{"line_number":3417,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":3418,"context_line":"                         \u0027available\u0027,"},{"line_number":3419,"context_line":"                         \"CG created failed\")"},{"line_number":3420,"context_line":"        # Add volumes to CG"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_46200149","line":3417,"updated":"2015-01-16 15:53:27.000000000","message":"Please, change assert params to (expected, actual, msg) here and below","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"00120ddb9b3e60e57f4a545cb192744ac57b44a4","unresolved":false,"context_lines":[{"line_number":3414,"context_line":""},{"line_number":3415,"context_line":"        model_update \u003d self.driver.create_consistencygroup(self.ctxt, cg)"},{"line_number":3416,"context_line":""},{"line_number":3417,"context_line":"        self.assertEqual(model_update[\u0027status\u0027],"},{"line_number":3418,"context_line":"                         \u0027available\u0027,"},{"line_number":3419,"context_line":"                         \"CG created failed\")"},{"line_number":3420,"context_line":"        # Add volumes to CG"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_fce41ca9","line":3417,"in_reply_to":"3a961159_46200149","updated":"2015-01-16 16:48:06.000000000","message":"Done","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"}],"cinder/tests/utils.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0f54bef1e1aa653813057f799574db61e530229e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    volume_id,"},{"line_number":66,"context_line":"                    display_name\u003d\u0027test_snapshot\u0027,"},{"line_number":67,"context_line":"                    display_description\u003d\u0027this is a test snapshot\u0027,"},{"line_number":68,"context_line":"                    cgsnapshot_id \u003d None,"},{"line_number":69,"context_line":"                    status\u003d\u0027creating\u0027):"},{"line_number":70,"context_line":"    vol \u003d db.volume_get(ctxt, volume_id)"},{"line_number":71,"context_line":"    snap \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_e1e505a5","line":68,"updated":"2015-01-12 15:10:09.000000000","message":"PEP8 error","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"4aca90f4db6618ff10526cb29cb0eaca74b815e6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                    volume_id,"},{"line_number":66,"context_line":"                    display_name\u003d\u0027test_snapshot\u0027,"},{"line_number":67,"context_line":"                    display_description\u003d\u0027this is a test snapshot\u0027,"},{"line_number":68,"context_line":"                    cgsnapshot_id \u003d None,"},{"line_number":69,"context_line":"                    status\u003d\u0027creating\u0027):"},{"line_number":70,"context_line":"    vol \u003d db.volume_get(ctxt, volume_id)"},{"line_number":71,"context_line":"    snap \u003d {}"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_a1b4c182","line":68,"in_reply_to":"3a961159_e1e505a5","updated":"2015-01-15 08:43:01.000000000","message":"Hi Ivan\n\nMy pep8 version too old to check it out, I just update it.\n\nThanks\n\nTao","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"}],"cinder/volume/drivers/ibm/storwize_svc/__init__.py":[{"author":{"_account_id":8587,"name":"Li Min Liu","email":"liulm@certusnet.com.cn","username":"LarryLiu"},"change_message_id":"1525ff00a326d0f1664e65b2bccff5da0a6897bc","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    1.2.6 - Added QoS support in terms of I/O throttling rate"},{"line_number":141,"context_line":"    1.3.1 - Added support for volume replication"},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    VERSION \u003d \"1.3.1\""},{"line_number":145,"context_line":"    VDISKCOPYOPS_INTERVAL \u003d 600"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_db32315d","line":143,"updated":"2014-12-22 01:15:38.000000000","message":"change driver version for new feature.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"f4e865f6722c5f7acddbbfe8383c077079639a42","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    1.2.6 - Added QoS support in terms of I/O throttling rate"},{"line_number":141,"context_line":"    1.3.1 - Added support for volume replication"},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    VERSION \u003d \"1.3.1\""},{"line_number":145,"context_line":"    VDISKCOPYOPS_INTERVAL \u003d 600"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6770be40","line":143,"in_reply_to":"3a961159_db32315d","updated":"2014-12-22 07:04:03.000000000","message":"Thanks, you are right, I should update it. :p","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":13527,"name":"Bharat Kumar Kobagana","email":"bkobagan@redhat.com","username":"BharatKumar","inactive":true},"change_message_id":"cc3e85e707e053b0e17a89676b951d88accfdbe4","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        return self._stats"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2fd5feb8","line":1007,"updated":"2014-12-18 09:17:39.000000000","message":"May I know what for this function is?","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        return self._stats"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_9c91ff9c","line":1007,"in_reply_to":"3a961159_0ca533a1","updated":"2014-12-30 06:25:06.000000000","message":"Thanks for you point out, it\u0027s addressed in next patch","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"f4e865f6722c5f7acddbbfe8383c077079639a42","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        return self._stats"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_b28eb1ce","line":1007,"in_reply_to":"3a961159_2fd5feb8","updated":"2014-12-22 07:04:03.000000000","message":"Hi Bharat, Ivan\n\nIn fact, for storwize, driver no need special action.The Cinder general part will maintain the CG creation.For storwize driver, we only create a new CG on hardware when Cinder creates CGsnapshot.\n\nFor this function,I will add some general DB check in the next patch. \n\nIt\u0027s just the first version, only basic function implemmentation.\n\nThanks \n\nTao","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0d47addddfa6cb631cf43be73894b85fab25ea02","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        return self._stats"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_1733ccab","line":1007,"in_reply_to":"3a961159_2fd5feb8","updated":"2014-12-19 11:13:17.000000000","message":"It is not a valid code","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":1004,"context_line":""},{"line_number":1005,"context_line":"        return self._stats"},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0ca533a1","line":1007,"in_reply_to":"3a961159_b28eb1ce","updated":"2014-12-23 18:53:40.000000000","message":"This needs to return a model_update to tell the manager it is successful if you don\u0027t need do anything on your backend.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":13527,"name":"Bharat Kumar Kobagana","email":"bkobagan@redhat.com","username":"BharatKumar","inactive":true},"change_message_id":"cc3e85e707e053b0e17a89676b951d88accfdbe4","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"    def create_consistencygroup(self, context, group):"},{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":1011,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":1012,"context_line":"        #self._helpers.delete_fc_consistgrp(group)"},{"line_number":1013,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_eff1366b","line":1010,"updated":"2014-12-18 09:17:39.000000000","message":"Same as above...","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":1011,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":1012,"context_line":"        #self._helpers.delete_fc_consistgrp(group)"},{"line_number":1013,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot):"},{"line_number":1014,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0c28d3e0","line":1011,"updated":"2014-12-23 18:53:40.000000000","message":"You still need to delete the volumes in CG here and return \"model_update, volumes\". Otherwise, where do you delete the volumes?  The common framework will only remove entries from the db. You still need to delete the volumes from your array.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"        \"\"\"Create a consistency group.\"\"\""},{"line_number":1009,"context_line":"        #self._helpers.create_fc_consistgrp(group)"},{"line_number":1010,"context_line":"    def delete_consistencygroup(self, context, group):"},{"line_number":1011,"context_line":"        \"\"\"Deletes a consistency group.\"\"\""},{"line_number":1012,"context_line":"        #self._helpers.delete_fc_consistgrp(group)"},{"line_number":1013,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot):"},{"line_number":1014,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_bc8ebb77","line":1011,"in_reply_to":"3a961159_0c28d3e0","updated":"2014-12-30 06:25:06.000000000","message":"Hi Xing \n\nThanks for you point it out. It is addressed in next patch. I have though the CLI need to force user to remove volumes before delete CG.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        if ctxt is None:"},{"line_number":1021,"context_line":"            admin_context \u003d ctxt.get_admin_context()"},{"line_number":1022,"context_line":"        else:"},{"line_number":1023,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot("},{"line_number":1026,"context_line":"            admin_context, cgsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4c4c9bc8","line":1023,"updated":"2014-12-23 18:53:40.000000000","message":"You don\u0027t need admin_context to call db.snapshot_get_all_for_cgsnapshot.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"        if ctxt is None:"},{"line_number":1021,"context_line":"            admin_context \u003d ctxt.get_admin_context()"},{"line_number":1022,"context_line":"        else:"},{"line_number":1023,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot("},{"line_number":1026,"context_line":"            admin_context, cgsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_fce76344","line":1023,"in_reply_to":"3a961159_4c4c9bc8","updated":"2014-12-30 06:25:06.000000000","message":"thanks, it\u0027s addressed in next patch","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot("},{"line_number":1026,"context_line":"            admin_context, cgsnapshot[\u0027id\u0027])"},{"line_number":1027,"context_line":"        timeout \u003d self.configuration.storwize_svc_flashcopy_timeout"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        self._helpers.create_fc_consistgrp_snapshot(cg_name, snapshots,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_cc9deb0b","line":1026,"updated":"2014-12-23 18:53:40.000000000","message":"admin_context is not necessary. The input ctxt is enough.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"            admin_context \u003d ctxt.elevated()"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot("},{"line_number":1026,"context_line":"            admin_context, cgsnapshot[\u0027id\u0027])"},{"line_number":1027,"context_line":"        timeout \u003d self.configuration.storwize_svc_flashcopy_timeout"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        self._helpers.create_fc_consistgrp_snapshot(cg_name, snapshots,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_1ced0f26","line":1026,"in_reply_to":"3a961159_cc9deb0b","updated":"2014-12-30 06:25:06.000000000","message":"Xing, thanks. It\u0027s addressed in next patch","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":8587,"name":"Li Min Liu","email":"liulm@certusnet.com.cn","username":"LarryLiu"},"change_message_id":"f0cd9ee3a35bbdddb3931d9cbf6da4f0cee29c4d","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        self._helpers.delete_fc_consistgrp_and_fc(cg_name, snapshots)"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        for snapshot in snapshots:"},{"line_number":1049,"context_line":"            #self._helpers.delete_vdisk(snapshot[\u0027name\u0027], True)"},{"line_number":1050,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_28f6b0f9","line":1049,"updated":"2014-12-19 08:16:05.000000000","message":"no need to push commented line to gerrit, the same for line 1009 and 1013.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"f4e865f6722c5f7acddbbfe8383c077079639a42","unresolved":false,"context_lines":[{"line_number":1046,"context_line":"        self._helpers.delete_fc_consistgrp_and_fc(cg_name, snapshots)"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"        for snapshot in snapshots:"},{"line_number":1049,"context_line":"            #self._helpers.delete_vdisk(snapshot[\u0027name\u0027], True)"},{"line_number":1050,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_87892a28","line":1049,"in_reply_to":"3a961159_28f6b0f9","updated":"2014-12-22 07:04:03.000000000","message":"Hi Limin\n\nwill be addressed in next patch\n\nThanks","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1032,"context_line":"            except Exception:"},{"line_number":1033,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1034,"context_line":"                msg \u003d (_(\u0027delete cg volume %s failed.\u0027)"},{"line_number":1035,"context_line":"                       % volume[\u0027name\u0027])"},{"line_number":1036,"context_line":"                LOG.error(msg)"},{"line_number":1037,"context_line":"        return model_update, volumes"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_724e09c4","line":1034,"updated":"2015-01-04 07:36:09.000000000","message":"_LE","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":1047,"context_line":"            ctxt, cgsnapshot[\u0027id\u0027])"},{"line_number":1048,"context_line":"        timeout \u003d self.configuration.storwize_svc_flashcopy_timeout"},{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"        snapshots \u003d self._helpers.run_consistgrp_snapshots(cg_name,"},{"line_number":1051,"context_line":"                                                           snapshots,"},{"line_number":1052,"context_line":"                                                           self._state,"},{"line_number":1053,"context_line":"                                                           self.configuration,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_92a9b526","line":1050,"updated":"2015-01-04 07:36:09.000000000","message":"Should rename \"snapshots\" on the left-hand-side to be different from the input parameter \"snapshots\" on the right-hand-side.","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0f54bef1e1aa653813057f799574db61e530229e","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        IBM Storwize will create CG until cg-snapshot creation,"},{"line_number":1013,"context_line":"        db will maintain the volumes and CG relationship."},{"line_number":1014,"context_line":"        \"\"\""},{"line_number":1015,"context_line":"        LOG.debug(\"creating consistency group\")"},{"line_number":1016,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1017,"context_line":"        return model_update"},{"line_number":1018,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_01a2114b","line":1015,"updated":"2015-01-12 15:10:09.000000000","message":"Please, start all log and error messages with upper-case letter","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"4aca90f4db6618ff10526cb29cb0eaca74b815e6","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"        IBM Storwize will create CG until cg-snapshot creation,"},{"line_number":1013,"context_line":"        db will maintain the volumes and CG relationship."},{"line_number":1014,"context_line":"        \"\"\""},{"line_number":1015,"context_line":"        LOG.debug(\"creating consistency group\")"},{"line_number":1016,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1017,"context_line":"        return model_update"},{"line_number":1018,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_2156112b","line":1015,"in_reply_to":"3a961159_01a2114b","updated":"2015-01-15 08:43:01.000000000","message":"Done","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0f54bef1e1aa653813057f799574db61e530229e","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"            try:"},{"line_number":1031,"context_line":"                self._helpers.delete_vdisk(volume[\u0027name\u0027], True)"},{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except Exception:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027delete cg volume %s failed.\u0027)"},{"line_number":1036,"context_line":"                       % volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_c1be4964","line":1033,"updated":"2015-01-12 15:10:09.000000000","message":"Could we handle more specific exception here?","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"4aca90f4db6618ff10526cb29cb0eaca74b815e6","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"            try:"},{"line_number":1031,"context_line":"                self._helpers.delete_vdisk(volume[\u0027name\u0027], True)"},{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except Exception:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027delete cg volume %s failed.\u0027)"},{"line_number":1036,"context_line":"                       % volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_01a91525","line":1033,"in_reply_to":"3a961159_c1be4964","updated":"2015-01-15 08:43:01.000000000","message":"Done, thanks","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":8587,"name":"Li Min Liu","email":"liulm@certusnet.com.cn","username":"LarryLiu"},"change_message_id":"f1d41b65925589ed3e75dd5b5bcd941ff04fe96b","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"            try:"},{"line_number":1031,"context_line":"                self._helpers.delete_vdisk(volume[\u0027name\u0027], True)"},{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except Exception:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027delete cg volume %s failed.\u0027)"},{"line_number":1036,"context_line":"                       % volume[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_8b61a63a","line":1033,"updated":"2015-01-13 06:32:57.000000000","message":"general exception, should specify a special exception, such as VolumeBackendAPIException?","commit_id":"7a0b36f26102f5632c700dbeface5781f90ebcc8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":1054,"context_line":"                                                     snapshots,"},{"line_number":1055,"context_line":"                                                     self._state,"},{"line_number":1056,"context_line":"                                                     self.configuration,"},{"line_number":1057,"context_line":"                                                     timeout)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1060,"context_line":"        return model_update, snapshots_model"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5eb0dadb","line":1057,"updated":"2015-01-16 03:50:37.000000000","message":"It is recommended to use () instead of \\.\n\nsnapshots_model \u003d (\n    self._helpers.run_consistgrp_snapshots(cg_name,\n                                           snapshots,\n                                           ........\n                                           timeout))","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":1054,"context_line":"                                                     snapshots,"},{"line_number":1055,"context_line":"                                                     self._state,"},{"line_number":1056,"context_line":"                                                     self.configuration,"},{"line_number":1057,"context_line":"                                                     timeout)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1060,"context_line":"        return model_update, snapshots_model"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_8acafc4c","line":1057,"in_reply_to":"3a961159_5eb0dadb","updated":"2015-01-16 07:51:20.000000000","message":"thanks, done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                self._helpers.delete_vdisk(volume[\u0027name\u0027], True)"},{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as error:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027Delete volume\u003d %(vol)s failed. Error %(msg)s\u0027),"},{"line_number":1036,"context_line":"                       {\u0027vol\u0027: volume[\u0027name\u0027], \u0027msg\u0027: error.message})"},{"line_number":1037,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_7fee208d","line":1034,"updated":"2015-01-21 14:59:23.000000000","message":"\u0027status\u0027 in model_update should also be changed to \u0027error_deleting\u0027 if it is not changed yet.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                self._helpers.delete_vdisk(volume[\u0027name\u0027], True)"},{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as error:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027Delete volume\u003d %(vol)s failed. Error %(msg)s\u0027),"},{"line_number":1036,"context_line":"                       {\u0027vol\u0027: volume[\u0027name\u0027], \u0027msg\u0027: error.message})"},{"line_number":1037,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_6ab0048c","line":1034,"in_reply_to":"1a930d6b_7fee208d","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"aa23ee0865a38d83de143eb8e51d0296ca8140f0","unresolved":false,"context_lines":[{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as error:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027Delete volume\u003d %(vol)s failed. Error %(msg)s\u0027),"},{"line_number":1036,"context_line":"                       {\u0027vol\u0027: volume[\u0027name\u0027], \u0027msg\u0027: error.message})"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"                LOG.error(msg)"},{"line_number":1039,"context_line":"        return model_update, volumes"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_0a542920","line":1036,"updated":"2015-01-17 15:56:38.000000000","message":"This message will not be printed out properly. The string won\u0027t be substituted.  Give a try and you\u0027ll see what I meant.  Do this:\n\nLOG.error(_LE(\u0027Delete volume\u003d %(vol)s failed. Error %(msg)s\u0027),\t\n\t\t{\u0027vol\u0027: volume[\u0027name\u0027], \u0027msg\u0027: error.message})","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as error:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                msg \u003d (_LE(\u0027Delete volume\u003d %(vol)s failed. Error %(msg)s\u0027),"},{"line_number":1036,"context_line":"                       {\u0027vol\u0027: volume[\u0027name\u0027], \u0027msg\u0027: error.message})"},{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"                LOG.error(msg)"},{"line_number":1039,"context_line":"        return model_update, volumes"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_63266f18","line":1036,"in_reply_to":"3a961159_0a542920","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"                                                   self.configuration,"},{"line_number":1057,"context_line":"                                                   timeout))"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1060,"context_line":"        return model_update, snapshots_model"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_1aac4aed","line":1059,"updated":"2015-01-21 14:59:23.000000000","message":"There should be error checking in this function. If an error happened in any of the above operations, model_update\u0027s \u0027status\u0027 should be set to \u0027error\u0027.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":1056,"context_line":"                                                   self.configuration,"},{"line_number":1057,"context_line":"                                                   timeout))"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027available\u0027}"},{"line_number":1060,"context_line":"        return model_update, snapshots_model"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    def delete_cgsnapshot(self, context, cgsnapshot):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_79f53c82","line":1059,"in_reply_to":"1a930d6b_1aac4aed","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot(context,"},{"line_number":1068,"context_line":"                                                            cgsnapshot_id)"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        snapshots \u003d self._helpers.delete_consistgrp_snapshots(cg_name,"},{"line_number":1071,"context_line":"                                                              snapshots)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_3a4bc65a","line":1070,"updated":"2015-01-21 14:59:23.000000000","message":"Please rename \"snapshots\" on the left hand side to shanpshots_model to differentiate from the input parameter name.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"        snapshots \u003d self.db.snapshot_get_all_for_cgsnapshot(context,"},{"line_number":1068,"context_line":"                                                            cgsnapshot_id)"},{"line_number":1069,"context_line":""},{"line_number":1070,"context_line":"        snapshots \u003d self._helpers.delete_consistgrp_snapshots(cg_name,"},{"line_number":1071,"context_line":"                                                              snapshots)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_59f8807c","line":1070,"in_reply_to":"1a930d6b_3a4bc65a","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"        snapshots \u003d self._helpers.delete_consistgrp_snapshots(cg_name,"},{"line_number":1071,"context_line":"                                                              snapshots)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"},{"line_number":1074,"context_line":"        return model_update, snapshots"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_9a175aa3","line":1073,"updated":"2015-01-21 14:59:23.000000000","message":"There should be error checking in this function. If an error happened in any of the above operations, model_update\u0027s \u0027status\u0027 should be set to \u0027error_deleting\u0027.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"        snapshots \u003d self._helpers.delete_consistgrp_snapshots(cg_name,"},{"line_number":1071,"context_line":"                                                              snapshots)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"        model_update \u003d {\u0027status\u0027: \u0027deleted\u0027}"},{"line_number":1074,"context_line":"        return model_update, snapshots"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    def _update_volume_stats(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_d9ee308b","line":1073,"in_reply_to":"1a930d6b_9a175aa3","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"20923751a06000c76cfa4be37cd94e06cc3a9dbb","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"                volume[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as err:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                model_update[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1036,"context_line":"                LOG.error(err)"},{"line_number":1037,"context_line":"        return model_update, volumes"},{"line_number":1038,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_35cc506a","line":1035,"updated":"2015-01-23 22:21:07.000000000","message":"if model_update[\u0027status\u0027] !\u003d \u0027error_deleting\u0027:\n    model_update[\u0027status\u0027] \u003d \u0027error_deleting\u0027","commit_id":"028ea0f9d8e0c867bbc5cf397d99566e0d78010e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"20923751a06000c76cfa4be37cd94e06cc3a9dbb","unresolved":false,"context_lines":[{"line_number":1033,"context_line":"            except exception.VolumeBackendAPIException as err:"},{"line_number":1034,"context_line":"                volume[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1035,"context_line":"                model_update[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":1036,"context_line":"                LOG.error(err)"},{"line_number":1037,"context_line":"        return model_update, volumes"},{"line_number":1038,"context_line":""},{"line_number":1039,"context_line":"    def create_cgsnapshot(self, ctxt, cgsnapshot):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_159d9459","line":1036,"updated":"2015-01-23 22:21:07.000000000","message":"This will throw an exception because the exception object could contain non-ascii characters. _LE should be used.  Also please add some explanation to the message like in other places.","commit_id":"028ea0f9d8e0c867bbc5cf397d99566e0d78010e"}],"cinder/volume/drivers/ibm/storwize_svc/helpers.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76c37913bab7c9a68caabdfe4945a37fef7a105c","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                          \u0027attr\u0027: mapping_attrs})"},{"line_number":755,"context_line":"                LOG.error(msg)"},{"line_number":756,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":757,"context_line":"            greenthread.sleep(wait_time)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        if not mapping_ready:"},{"line_number":760,"context_line":"            msg \u003d (_(\u0027FlashCopy Consisgroup %(id)s prepare failed to complete\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2c74afcd","line":757,"updated":"2014-12-23 18:53:40.000000000","message":"Can you use loopingcall.FixedIntervalLoopingCall instead? I see that is already used in many places in this file.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"6573acbb5754edad106483d2eac80680d6ece037","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                          \u0027attr\u0027: mapping_attrs})"},{"line_number":755,"context_line":"                LOG.error(msg)"},{"line_number":756,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":757,"context_line":"            greenthread.sleep(wait_time)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        if not mapping_ready:"},{"line_number":760,"context_line":"            msg \u003d (_(\u0027FlashCopy Consisgroup %(id)s prepare failed to complete\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_5cf797f5","line":757,"in_reply_to":"3a961159_2c74afcd","updated":"2014-12-30 06:25:06.000000000","message":"You are right, I will use loopingcall to replace this logic","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                LOG.debug(\u0027Helper.\u0027"},{"line_number":558,"context_line":"                          \u0027_wait_for_condition: %(method_name)s \u0027"},{"line_number":559,"context_line":"                          \u0027execution failed for %(exception)s\u0027"},{"line_number":560,"context_line":"                          % {\u0027method_name\u0027: testmethod.__name__,"},{"line_number":561,"context_line":"                             \u0027exception\u0027: ex.message})"},{"line_number":562,"context_line":"            if testValue:"},{"line_number":563,"context_line":"                raise loopingcall.LoopingCallDone()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_92761505","line":560,"updated":"2015-01-04 07:36:09.000000000","message":"It\u0027s recommended to use \",\" instead of \"%\".","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        self.start_fc_consistgrp(fc_consistgrp)"},{"line_number":757,"context_line":"        # There is CG limitation that could not create more 128 CGs."},{"line_number":758,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":759,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":760,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"},{"line_number":761,"context_line":"        return snapshots"},{"line_number":762,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_125a2583","line":759,"updated":"2015-01-04 07:36:09.000000000","message":"I don\u0027t understand this. If you delete this on your array, how can CG still work?","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"34d4225f121b49792c5cdf4e928d46f1a517c56e","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        self.start_fc_consistgrp(fc_consistgrp)"},{"line_number":757,"context_line":"        # There is CG limitation that could not create more 128 CGs."},{"line_number":758,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":759,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":760,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"},{"line_number":761,"context_line":"        return snapshots"},{"line_number":762,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_f9b81cc9","line":759,"in_reply_to":"3a961159_125a2583","updated":"2015-01-05 03:11:53.000000000","message":"Hi Xing\n\nIBM Storwize put fcmap(flash copy mapping) in to CG, not the source volumes.\nFcmap could be seems as the snapshot copying relationship between source volume and target volume.\n\nWe use CG to start fcmaps together. After we delete the CG, the fcmaps still exist and still works. And even CG deleted, but we already achieve the goal that, all the snapshots are started at \"one time window\"\n\nTo be honest, this solution is sent to Storwize Product Owner to review whether there is negative impact on storage side, but not get response yet because of the holiday.\n\nHoping it answered your question.\n\nThanks\nTao","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":8587,"name":"Li Min Liu","email":"liulm@certusnet.com.cn","username":"LarryLiu"},"change_message_id":"6dd632f59cf6e05dd54d186a49019637102b072d","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        def _wait_for_sync_status():"},{"line_number":799,"context_line":"            lun_list \u003d (\u0027lun\u0027, \u0027-list\u0027, \u0027-name\u0027, smp_name,"},{"line_number":800,"context_line":"                        \u0027-attachedSnapshot\u0027)"},{"line_number":801,"context_line":"            out, rc \u003d self.command_execute(*lun_list)"},{"line_number":802,"context_line":"            if rc \u003d\u003d 0:"},{"line_number":803,"context_line":"                vol_details \u003d out.split(\u0027\\n\u0027)"},{"line_number":804,"context_line":"                snap_name \u003d vol_details[2].split(\u0027:\u0027)[1].strip()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_a3701e41","line":801,"updated":"2015-01-05 09:40:02.000000000","message":"Instance of \u0027StorwizeHelpers\u0027 has no \u0027command_execute\u0027 member","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        self.ssh.startfcmap(fc_map_id)"},{"line_number":820,"context_line":""},{"line_number":821,"context_line":"        LOG.debug(\u0027leave: run_flashcopy: FlashCopy started from \u0027"},{"line_number":822,"context_line":"                  \u0027%(source)s to %(target)s\u0027 %"},{"line_number":823,"context_line":"                  {\u0027source\u0027: source, \u0027target\u0027: target})"},{"line_number":824,"context_line":""},{"line_number":825,"context_line":"    def create_flashcopy_to_consistgrp(self, source, target, consistgrp,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_325d617a","line":822,"updated":"2015-01-04 07:36:09.000000000","message":"% -\u003e ,","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7385bd2294e30e07fdab6adca6df02c79780eb53","unresolved":false,"context_lines":[{"line_number":828,"context_line":"        \"\"\"Create a FlashCopy mapping and add to consistent group.\"\"\""},{"line_number":829,"context_line":"        LOG.debug(\u0027enter: create_flashcopy_to_consistgrp: create FlashCopy\u0027"},{"line_number":830,"context_line":"                  \u0027 from source %(source)s to target %(target)s\u0027"},{"line_number":831,"context_line":"                  \u0027Then add the flashcopy to %(cg)s\u0027 %"},{"line_number":832,"context_line":"                  {\u0027source\u0027: source, \u0027target\u0027: target, \u0027cg\u0027: consistgrp})"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        src_attrs \u003d self.get_vdisk_attributes(source)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_5253cd6b","line":831,"updated":"2015-01-04 07:36:09.000000000","message":",","commit_id":"bd3cdad82166f1f402185b58c99547129a0ca238"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"0f54bef1e1aa653813057f799574db61e530229e","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        def _inner():"},{"line_number":553,"context_line":"            try:"},{"line_number":554,"context_line":"                testValue \u003d testmethod()"},{"line_number":555,"context_line":"            except Exception as ex:"},{"line_number":556,"context_line":"                testValue \u003d False"},{"line_number":557,"context_line":"                LOG.debug(\u0027Helper.\u0027"},{"line_number":558,"context_line":"                          \u0027_wait_for_condition: %(method_name)s \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_e10fc537","line":555,"updated":"2015-01-12 15:10:09.000000000","message":"Too general exception","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"4aca90f4db6618ff10526cb29cb0eaca74b815e6","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        def _inner():"},{"line_number":553,"context_line":"            try:"},{"line_number":554,"context_line":"                testValue \u003d testmethod()"},{"line_number":555,"context_line":"            except Exception as ex:"},{"line_number":556,"context_line":"                testValue \u003d False"},{"line_number":557,"context_line":"                LOG.debug(\u0027Helper.\u0027"},{"line_number":558,"context_line":"                          \u0027_wait_for_condition: %(method_name)s \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_417a3dbb","line":555,"in_reply_to":"3a961159_e10fc537","updated":"2015-01-15 08:43:01.000000000","message":"This function will be an basic library for waiting .It will be used more than this place. And could be called more than one time.So it\u0027s hard to decide what\u0027s the exception will be.\n\nThanks\n\nTao","commit_id":"2bad1086efcaa15f2868136de55cb7233c9c2d42"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def __init__(self, run_ssh):"},{"line_number":54,"context_line":"        self.ssh \u003d storwize_ssh.StorwizeSSH(run_ssh)"},{"line_number":55,"context_line":"        self.check_fcmapping_interval \u003d 3"},{"line_number":56,"context_line":"        self.timeout \u003d 15"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @staticmethod"},{"line_number":59,"context_line":"    def handle_keyerror(cmd, out):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_1e2f32f7","line":56,"updated":"2015-01-16 03:50:37.000000000","message":"Can you use a constant and call it something like DEFAULT_TIMEOUT?","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def __init__(self, run_ssh):"},{"line_number":54,"context_line":"        self.ssh \u003d storwize_ssh.StorwizeSSH(run_ssh)"},{"line_number":55,"context_line":"        self.check_fcmapping_interval \u003d 3"},{"line_number":56,"context_line":"        self.timeout \u003d 15"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @staticmethod"},{"line_number":59,"context_line":"    def handle_keyerror(cmd, out):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_6a823000","line":56,"in_reply_to":"3a961159_1e2f32f7","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"    def start_fc_consistgrp(self, fc_consistgrp):"},{"line_number":734,"context_line":"        self.ssh.startfcconsistgrp(fc_consistgrp)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    def create_fc_consistgrp(self, fc_consistgrp):"},{"line_number":737,"context_line":"        self.ssh.mkfcconsistgrp(fc_consistgrp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_3e0f8e3a","line":734,"updated":"2015-01-16 03:50:37.000000000","message":"You don\u0027t have error checking for many of these functions in ssh.  How do you know if they fail?","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"    def start_fc_consistgrp(self, fc_consistgrp):"},{"line_number":734,"context_line":"        self.ssh.startfcconsistgrp(fc_consistgrp)"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    def create_fc_consistgrp(self, fc_consistgrp):"},{"line_number":737,"context_line":"        self.ssh.mkfcconsistgrp(fc_consistgrp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2aa588b4","line":734,"in_reply_to":"3a961159_3e0f8e3a","updated":"2015-01-16 07:51:20.000000000","message":"if this cmd failed, it will return fail messsage.\n\nIf succeed, it will return nothing, so that\u0027s the reason we use \nrun_ssh_assert_no_output(ssh_cmd)  to checkout whether there is message output","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        self.prepare_fc_consistgrp(fc_consistgrp, timeout)"},{"line_number":757,"context_line":"        self.start_fc_consistgrp(fc_consistgrp)"},{"line_number":758,"context_line":"        # There is CG limitation that could not create more 128 CGs."},{"line_number":759,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":760,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":761,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_3e094e84","line":758,"updated":"2015-01-16 03:50:37.000000000","message":"more than","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        self.prepare_fc_consistgrp(fc_consistgrp, timeout)"},{"line_number":757,"context_line":"        self.start_fc_consistgrp(fc_consistgrp)"},{"line_number":758,"context_line":"        # There is CG limitation that could not create more 128 CGs."},{"line_number":759,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":760,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":761,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_8a959c41","line":758,"in_reply_to":"3a961159_3e094e84","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            elif mapping_attrs[\u0027status\u0027] \u003d\u003d \u0027stopped\u0027:"},{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_LE(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                           \u0027%(id)s. Attributes: %(attr)s\u0027),"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_7e6d9631","line":786,"updated":"2015-01-16 03:50:37.000000000","message":"This message shouldn\u0027t have _LE as it is passed to an exception.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            elif mapping_attrs[\u0027status\u0027] \u003d\u003d \u0027stopped\u0027:"},{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_LE(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                           \u0027%(id)s. Attributes: %(attr)s\u0027),"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_8a7cbc21","line":786,"in_reply_to":"3a961159_7e6d9631","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_LE(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                           \u0027%(id)s. Attributes: %(attr)s\u0027),"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"},{"line_number":790,"context_line":"                        \u0027attr\u0027: mapping_attrs})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5e5a9a82","line":787,"updated":"2015-01-16 03:50:37.000000000","message":"Change \",\" back to \"%\" as you are formatting the message for the exception.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_LE(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                           \u0027%(id)s. Attributes: %(attr)s\u0027),"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"},{"line_number":790,"context_line":"                        \u0027attr\u0027: mapping_attrs})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ca724449","line":787,"in_reply_to":"3a961159_5e5a9a82","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        src_attrs \u003d self.get_vdisk_attributes(source)"},{"line_number":820,"context_line":"        if src_attrs is None:"},{"line_number":821,"context_line":"            msg \u003d (_LE(\u0027create_copy: Source vdisk %(src)s \u0027"},{"line_number":822,"context_line":"                       \u0027does not exist\u0027), {\u0027src\u0027: source})"},{"line_number":823,"context_line":"            LOG.error(msg)"},{"line_number":824,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_9e4fa2bd","line":822,"updated":"2015-01-16 03:50:37.000000000","message":"Same as above.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        src_attrs \u003d self.get_vdisk_attributes(source)"},{"line_number":820,"context_line":"        if src_attrs is None:"},{"line_number":821,"context_line":"            msg \u003d (_LE(\u0027create_copy: Source vdisk %(src)s \u0027"},{"line_number":822,"context_line":"                       \u0027does not exist\u0027), {\u0027src\u0027: source})"},{"line_number":823,"context_line":"            LOG.error(msg)"},{"line_number":824,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"},{"line_number":825,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2a8ca834","line":822,"in_reply_to":"3a961159_9e4fa2bd","updated":"2015-01-16 07:51:20.000000000","message":"Done","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"2d43fbc9a5010fa6b2e916952c06f3152e19447d","unresolved":false,"context_lines":[{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        src_attrs \u003d self.get_vdisk_attributes(source)"},{"line_number":820,"context_line":"        if src_attrs is None:"},{"line_number":821,"context_line":"            msg \u003d ((\u0027create_copy: Source vdisk %(src)s \u0027"},{"line_number":822,"context_line":"                    \u0027does not exist\u0027) % {\u0027src\u0027: source})"},{"line_number":823,"context_line":"            LOG.error(msg)"},{"line_number":824,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_06a8b98a","line":821,"updated":"2015-01-16 15:53:27.000000000","message":"Please, use _ for localization","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"00120ddb9b3e60e57f4a545cb192744ac57b44a4","unresolved":false,"context_lines":[{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        src_attrs \u003d self.get_vdisk_attributes(source)"},{"line_number":820,"context_line":"        if src_attrs is None:"},{"line_number":821,"context_line":"            msg \u003d ((\u0027create_copy: Source vdisk %(src)s \u0027"},{"line_number":822,"context_line":"                    \u0027does not exist\u0027) % {\u0027src\u0027: source})"},{"line_number":823,"context_line":"            LOG.error(msg)"},{"line_number":824,"context_line":"            raise exception.VolumeDriverException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_1c9f2803","line":821,"in_reply_to":"3a961159_06a8b98a","updated":"2015-01-16 16:48:06.000000000","message":"Done","commit_id":"39c8c203716434fe6c69d81dfc9f440b94829459"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            self.create_flashcopy_to_consistgrp(snapshot[\u0027volume_name\u0027],"},{"line_number":751,"context_line":"                                                snapshot[\u0027name\u0027],"},{"line_number":752,"context_line":"                                                fc_consistgrp,"},{"line_number":753,"context_line":"                                                config, opts)"},{"line_number":754,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        self.prepare_fc_consistgrp(fc_consistgrp, timeout)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_1a860aba","line":753,"updated":"2015-01-21 14:59:23.000000000","message":"There should be error checking or exception handling here. If some error happens, status should be set to \u0027error\u0027.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            self.create_flashcopy_to_consistgrp(snapshot[\u0027volume_name\u0027],"},{"line_number":751,"context_line":"                                                snapshot[\u0027name\u0027],"},{"line_number":752,"context_line":"                                                fc_consistgrp,"},{"line_number":753,"context_line":"                                                config, opts)"},{"line_number":754,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027available\u0027"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"        self.prepare_fc_consistgrp(fc_consistgrp, timeout)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_340f3b32","line":753,"in_reply_to":"1a930d6b_1a860aba","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        # There is CG limitation that could not create more than 128 CGs."},{"line_number":759,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":760,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":761,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"},{"line_number":762,"context_line":"        return snapshots"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"    def delete_consistgrp_snapshots(self, fc_consistgrp, snapshots):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_b5ca699f","line":761,"updated":"2015-01-21 14:59:23.000000000","message":"I think I added comments in the caller of this function as well. If any of the above operations fails, it should affect the status of the cg snapshot.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":758,"context_line":"        # There is CG limitation that could not create more than 128 CGs."},{"line_number":759,"context_line":"        # After start CG, we delete CG to avoid CG limitation."},{"line_number":760,"context_line":"        # Cinder general will maintain the CG and snapshots relationship."},{"line_number":761,"context_line":"        self.delete_fc_consistgrp(fc_consistgrp)"},{"line_number":762,"context_line":"        return snapshots"},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"    def delete_consistgrp_snapshots(self, fc_consistgrp, snapshots):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_743e23ba","line":761,"in_reply_to":"1a930d6b_b5ca699f","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":764,"context_line":"    def delete_consistgrp_snapshots(self, fc_consistgrp, snapshots):"},{"line_number":765,"context_line":"        \"\"\"Delete flashcopy maps and consistent group.\"\"\""},{"line_number":766,"context_line":"        for snapshot in snapshots:"},{"line_number":767,"context_line":"            self.ssh.rmvdisk(snapshot[\u0027name\u0027], True)"},{"line_number":768,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":769,"context_line":"        return snapshots"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_f5f871c6","line":767,"updated":"2015-01-21 14:59:23.000000000","message":"If ssh.rmvdisk fails, status should be error_deleting.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":764,"context_line":"    def delete_consistgrp_snapshots(self, fc_consistgrp, snapshots):"},{"line_number":765,"context_line":"        \"\"\"Delete flashcopy maps and consistent group.\"\"\""},{"line_number":766,"context_line":"        for snapshot in snapshots:"},{"line_number":767,"context_line":"            self.ssh.rmvdisk(snapshot[\u0027name\u0027], True)"},{"line_number":768,"context_line":"            snapshot[\u0027status\u0027] \u003d \u0027deleted\u0027"},{"line_number":769,"context_line":"        return snapshots"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_d4e9971b","line":767,"in_reply_to":"1a930d6b_f5f871c6","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            elif mapping_attrs[\u0027status\u0027] \u003d\u003d \u0027stopped\u0027:"},{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                         \u0027%(id)s. Attributes: %(attr)s\u0027) %"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_9a4f5a92","line":786,"updated":"2015-01-21 14:59:23.000000000","message":"Typo: Unexpected","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            elif mapping_attrs[\u0027status\u0027] \u003d\u003d \u0027stopped\u0027:"},{"line_number":784,"context_line":"                self.ssh.prestartfcconsistgrp(fc_consistgrp)"},{"line_number":785,"context_line":"            elif mapping_attrs[\u0027status\u0027] !\u003d \u0027preparing\u0027:"},{"line_number":786,"context_line":"                msg \u003d (_(\u0027Unexecpted mapping status %(status)s for mapping\u0027"},{"line_number":787,"context_line":"                         \u0027%(id)s. Attributes: %(attr)s\u0027) %"},{"line_number":788,"context_line":"                       {\u0027status\u0027: mapping_attrs[\u0027status\u0027],"},{"line_number":789,"context_line":"                        \u0027id\u0027: fc_consistgrp,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_bee22a9d","line":786,"in_reply_to":"1a930d6b_9a4f5a92","updated":"2015-01-22 11:07:25.000000000","message":"Done","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":829,"context_line":"            pool \u003d config.storwize_svc_volpool_name"},{"line_number":830,"context_line":"        self.create_vdisk(target, src_size, \u0027b\u0027, pool, opts)"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"        self.ssh.mkfcmap(source, target, full_copy, consistgrp)"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        LOG.debug(\u0027leave: create_flashcopy_to_consistgrp: \u0027"},{"line_number":835,"context_line":"                  \u0027FlashCopy started from  %(source)s to %(target)s\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_b56ee9c7","line":832,"updated":"2015-01-21 14:59:23.000000000","message":"If an error occurred in create_vdisk or ssh.mkfcmap, that will affect the status of the snapshot.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":829,"context_line":"            pool \u003d config.storwize_svc_volpool_name"},{"line_number":830,"context_line":"        self.create_vdisk(target, src_size, \u0027b\u0027, pool, opts)"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"        self.ssh.mkfcmap(source, target, full_copy, consistgrp)"},{"line_number":833,"context_line":""},{"line_number":834,"context_line":"        LOG.debug(\u0027leave: create_flashcopy_to_consistgrp: \u0027"},{"line_number":835,"context_line":"                  \u0027FlashCopy started from  %(source)s to %(target)s\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_be030a0e","line":832,"updated":"2015-01-22 11:07:25.000000000","message":"If error happen, expection will be raise. So no need to handle it here, but is upper function","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def _get_flashcopy_consistgrp_attr(self, fc_map_id):"},{"line_number":853,"context_line":"        resp \u003d self.ssh.lsfcconsistgrp(fc_map_id)"},{"line_number":854,"context_line":"        if not len(resp):"},{"line_number":855,"context_line":"            return None"},{"line_number":856,"context_line":"        return resp"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_d5aa95d3","line":854,"updated":"2015-01-21 14:59:23.000000000","message":"\"if not resp\" should be sufficient.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":851,"context_line":""},{"line_number":852,"context_line":"    def _get_flashcopy_consistgrp_attr(self, fc_map_id):"},{"line_number":853,"context_line":"        resp \u003d self.ssh.lsfcconsistgrp(fc_map_id)"},{"line_number":854,"context_line":"        if not len(resp):"},{"line_number":855,"context_line":"            return None"},{"line_number":856,"context_line":"        return resp"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_7492a358","line":854,"in_reply_to":"1a930d6b_d5aa95d3","updated":"2015-01-22 11:07:25.000000000","message":"Changed resp \u003d self.ssh.lsfcconsistgrp(fc_map_id)\n\nkeep this function the same","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"20923751a06000c76cfa4be37cd94e06cc3a9dbb","unresolved":false,"context_lines":[{"line_number":768,"context_line":""},{"line_number":769,"context_line":"            # Release cg"},{"line_number":770,"context_line":"            self.delete_fc_consistgrp(fc_consistgrp)"},{"line_number":771,"context_line":"            LOG.error(err)"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        return cgsnapshot, snapshots"},{"line_number":774,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_b50760c9","line":771,"updated":"2015-01-23 22:21:07.000000000","message":"This will throw an exception because the exception object could contain non-ascii characters. _LE should be used.  Also please add some explanation to the message like in other places.","commit_id":"028ea0f9d8e0c867bbc5cf397d99566e0d78010e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"20923751a06000c76cfa4be37cd94e06cc3a9dbb","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            for snapshot in snapshots:"},{"line_number":784,"context_line":"                snapshot[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":785,"context_line":"            cgsnapshot[\u0027status\u0027] \u003d \u0027error_deleting\u0027"},{"line_number":786,"context_line":"            LOG.error(err)"},{"line_number":787,"context_line":"        return cgsnapshot, snapshots"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    def prepare_fc_consistgrp(self, fc_consistgrp, timeout):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_b5a3e0b0","line":786,"updated":"2015-01-23 22:21:07.000000000","message":"Same here.","commit_id":"028ea0f9d8e0c867bbc5cf397d99566e0d78010e"}],"cinder/volume/drivers/ibm/storwize_svc/ssh.py":[{"author":{"_account_id":13527,"name":"Bharat Kumar Kobagana","email":"bkobagan@redhat.com","username":"BharatKumar","inactive":true},"change_message_id":"cc3e85e707e053b0e17a89676b951d88accfdbe4","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                   target, \u0027-autodelete\u0027]"},{"line_number":247,"context_line":"        if not full_copy:"},{"line_number":248,"context_line":"            ssh_cmd.extend([\u0027-copyrate\u0027, \u00270\u0027])"},{"line_number":249,"context_line":"        if consistgrp is not None:"},{"line_number":250,"context_line":"            ssh_cmd.extend([\u0027-consistgrp\u0027, consistgrp])"},{"line_number":251,"context_line":"        out, err \u003d self._ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":252,"context_line":"        if \u0027successfully created\u0027 not in out:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_523aedcd","line":249,"updated":"2014-12-18 09:17:39.000000000","message":"if consistgrp:\n\nIs enough it guess.","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":8587,"name":"Li Min Liu","email":"liulm@certusnet.com.cn","username":"LarryLiu"},"change_message_id":"f0cd9ee3a35bbdddb3931d9cbf6da4f0cee29c4d","unresolved":false,"context_lines":[{"line_number":246,"context_line":"                   target, \u0027-autodelete\u0027]"},{"line_number":247,"context_line":"        if not full_copy:"},{"line_number":248,"context_line":"            ssh_cmd.extend([\u0027-copyrate\u0027, \u00270\u0027])"},{"line_number":249,"context_line":"        if consistgrp is not None:"},{"line_number":250,"context_line":"            ssh_cmd.extend([\u0027-consistgrp\u0027, consistgrp])"},{"line_number":251,"context_line":"        out, err \u003d self._ssh(ssh_cmd, check_exit_code\u003dFalse)"},{"line_number":252,"context_line":"        if \u0027successfully created\u0027 not in out:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_48de9c6e","line":249,"in_reply_to":"3a961159_523aedcd","updated":"2014-12-19 08:16:05.000000000","message":"+1","commit_id":"07609a45d5f67910a42a73254c542c01a621d7e2"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def prestartfcconsistgrp(self, fc_consist_group):"},{"line_number":284,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027prestartfcconsistgrp\u0027, fc_consist_group]"},{"line_number":285,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_feeee689","line":285,"updated":"2015-01-16 03:50:37.000000000","message":"You are not checking the output of the command. How do you know whether it is successful or not?","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def prestartfcconsistgrp(self, fc_consist_group):"},{"line_number":284,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027prestartfcconsistgrp\u0027, fc_consist_group]"},{"line_number":285,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_6ab4f0f0","line":285,"in_reply_to":"3a961159_feeee689","updated":"2015-01-16 07:51:20.000000000","message":"if this cmd failed, it will return fail message.\n\nIf succeed, it will return nothing, so that\u0027s the reason we use \nrun_ssh_assert_no_output(ssh_cmd)  to checkout whether there is message output","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"},{"line_number":289,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def stopfcconsistgrp(self, fc_consist_group):"},{"line_number":292,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027stopfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_1ef2d26e","line":289,"updated":"2015-01-16 03:50:37.000000000","message":"Same comment here.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"},{"line_number":289,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def stopfcconsistgrp(self, fc_consist_group):"},{"line_number":292,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027stopfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_4ab1f4ff","line":289,"in_reply_to":"3a961159_1ef2d26e","updated":"2015-01-16 07:51:20.000000000","message":"The same reason as above","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0d792724b1680e650a83574b5c3bc1d0c55c1833","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def stopfcconsistgrp(self, fc_consist_group):"},{"line_number":292,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027stopfcconsistgrp\u0027, fc_consist_group]"},{"line_number":293,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def chfcmap(self, fc_map_id, copyrate\u003d\u002750\u0027, autodel\u003d\u0027on\u0027):"},{"line_number":296,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027chfcmap\u0027, \u0027-copyrate\u0027, copyrate,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5ee8da7a","line":293,"updated":"2015-01-16 03:50:37.000000000","message":"Here too.","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"a00f3c152e8d7f9f6e4e1da64ba9813ddff1c8a8","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    def stopfcconsistgrp(self, fc_consist_group):"},{"line_number":292,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027stopfcconsistgrp\u0027, fc_consist_group]"},{"line_number":293,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    def chfcmap(self, fc_map_id, copyrate\u003d\u002750\u0027, autodel\u003d\u0027on\u0027):"},{"line_number":296,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027chfcmap\u0027, \u0027-copyrate\u0027, copyrate,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_2abe68d4","line":293,"in_reply_to":"3a961159_5ee8da7a","updated":"2015-01-16 07:51:20.000000000","message":"the same reason","commit_id":"57b6dc9f9575852d5cae4b1787939626d1730c66"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"f71fb726d7dfb1f7f5954c1c79544bb13acd390d","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def prestartfcconsistgrp(self, fc_consist_group):"},{"line_number":284,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027prestartfcconsistgrp\u0027, fc_consist_group]"},{"line_number":285,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_35dbd91c","line":285,"updated":"2015-01-21 14:59:23.000000000","message":"On line 253, the code parses the output and determines whether it succeeds or fails.  In the 6 new functions added in this file, there\u0027s no output.  I don\u0027t see how you can tell whether it succeeds or fails. In the caller of these functions, I also don\u0027t see error checking on these functions.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"},{"author":{"_account_id":11079,"name":"TaoBai","email":"baitao5@huawei.com","username":"TaoBai"},"change_message_id":"cbc5151a553f9da3e3835aad7610e6ccf21939f6","unresolved":false,"context_lines":[{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def prestartfcconsistgrp(self, fc_consist_group):"},{"line_number":284,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027prestartfcconsistgrp\u0027, fc_consist_group]"},{"line_number":285,"context_line":"        self.run_ssh_assert_no_output(ssh_cmd)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def startfcconsistgrp(self, fc_consist_group):"},{"line_number":288,"context_line":"        ssh_cmd \u003d [\u0027svctask\u0027, \u0027startfcconsistgrp\u0027, fc_consist_group]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_0a9b0019","line":285,"in_reply_to":"1a930d6b_35dbd91c","updated":"2015-01-22 11:07:25.000000000","message":"Hi Xing\n\n\nIn fact, for IBM storwize, some \"status change command\" do not have any output as success. But some \"creation command\" will report a success create message such like \"XXXX successfully created.\"\n\n\nPlease see the implementation of the two method:\n1. run_ssh_assert_no_output Line: 55\n2. run_ssh_check_created. Line:60\n\nThe two function already embeded failure check, if failed, will throw out exception.\n\n\nLet me know if it still not answer your question.","commit_id":"0a1a1d6ab5d285fe7008a39ebcf5337d06552ae9"}]}
