)]}'
{"tempest/api/volume/admin/test_groups.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":339,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":340,"context_line":"            name\u003dgrp_name,"},{"line_number":341,"context_line":"            description\u003ddesc)[\u0027group\u0027]"},{"line_number":342,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":343,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_edbca2dd","line":341,"updated":"2017-07-02 07:26:31.000000000","message":"Missing addCleanup() for grp on L341","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":339,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":340,"context_line":"            name\u003dgrp_name,"},{"line_number":341,"context_line":"            description\u003ddesc)[\u0027group\u0027]"},{"line_number":342,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":343,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_632429c7","line":341,"in_reply_to":"3f1d235d_edbca2dd","updated":"2017-07-11 04:53:52.000000000","message":"Added after line 343.  If the group is not \u0027available\u0027, delete group will fail any way so cleanup isn\u0027t going to work.","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":343,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Create the 1st volume"},{"line_number":346,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":347,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":348,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":349,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":350,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":351,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":352,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":353,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # Create the 2nd volume"},{"line_number":356,"context_line":"        vol2_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":357,"context_line":"        params[\u0027name\u0027] \u003d vol2_name"},{"line_number":358,"context_line":"        vol2 \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":359,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":360,"context_line":"            self.admin_volume_client, vol2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":361,"context_line":"        grp_vols \u003d []"},{"line_number":362,"context_line":"        grp_vols.append(vol)"},{"line_number":363,"context_line":"        grp_vols.append(vol2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_0dec7ef1","line":360,"range":{"start_line":345,"start_character":8,"end_line":360,"end_character":62},"updated":"2017-07-02 07:26:31.000000000","message":"Better to do this in a for loop. That is:\n\ngrp_vols \u003d []\nfor _ in range(2):\n    do volume creation using create_volume in base volume class\n    append vol to grp_vols","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":343,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        # Create the 1st volume"},{"line_number":346,"context_line":"        vol_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":347,"context_line":"        params \u003d {\u0027name\u0027: vol_name,"},{"line_number":348,"context_line":"                  \u0027volume_type\u0027: volume_type[\u0027id\u0027],"},{"line_number":349,"context_line":"                  \u0027group_id\u0027: grp[\u0027id\u0027],"},{"line_number":350,"context_line":"                  \u0027size\u0027: CONF.volume.volume_size}"},{"line_number":351,"context_line":"        vol \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":352,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":353,"context_line":"            self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        # Create the 2nd volume"},{"line_number":356,"context_line":"        vol2_name \u003d data_utils.rand_name(\"volume\")"},{"line_number":357,"context_line":"        params[\u0027name\u0027] \u003d vol2_name"},{"line_number":358,"context_line":"        vol2 \u003d self.admin_volume_client.create_volume(**params)[\u0027volume\u0027]"},{"line_number":359,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":360,"context_line":"            self.admin_volume_client, vol2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":361,"context_line":"        grp_vols \u003d []"},{"line_number":362,"context_line":"        grp_vols.append(vol)"},{"line_number":363,"context_line":"        grp_vols.append(vol2)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_e69a87c3","line":360,"range":{"start_line":345,"start_character":8,"end_line":360,"end_character":62},"in_reply_to":"3f1d235d_0dec7ef1","updated":"2017-07-11 04:53:52.000000000","message":"Done","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":367,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":368,"context_line":"        self.assertEqual(desc, grp[\u0027description\u0027])"},{"line_number":369,"context_line":"        self.assertEqual(2, len(grp_vols))"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # Remove a volume from group and update name and description"},{"line_number":372,"context_line":"        new_grp_name \u003d \u0027new_group\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_4dcb9671","line":369,"range":{"start_line":369,"start_character":8,"end_line":369,"end_character":42},"updated":"2017-07-02 07:26:31.000000000","message":"I don\u0027t understand this assertion. Did you mean to list volumes for group first then assert then len is 2?","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":367,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":368,"context_line":"        self.assertEqual(desc, grp[\u0027description\u0027])"},{"line_number":369,"context_line":"        self.assertEqual(2, len(grp_vols))"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # Remove a volume from group and update name and description"},{"line_number":372,"context_line":"        new_grp_name \u003d \u0027new_group\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_c69d4bbc","line":369,"range":{"start_line":369,"start_character":8,"end_line":369,"end_character":42},"in_reply_to":"3f1d235d_4dcb9671","updated":"2017-07-11 04:53:52.000000000","message":"Removed.  It\u0027s not necessary.","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        self.assertEqual(1, len(grp_vols))"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        # Add a volume to the group and update name and description"},{"line_number":399,"context_line":"        new_grp_name2 \u003d \u0027new_group_2\u0027"},{"line_number":400,"context_line":"        new_desc2 \u003d \u0027This is a new group too\u0027"},{"line_number":401,"context_line":"        grp_params \u003d {\u0027name\u0027: new_grp_name2,"},{"line_number":402,"context_line":"                      \u0027description\u0027: new_desc2,"},{"line_number":403,"context_line":"                      \u0027add_volumes\u0027: vol2[\u0027id\u0027]}"},{"line_number":404,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_cda446bc","line":402,"range":{"start_line":399,"start_character":8,"end_line":402,"end_character":47},"updated":"2017-07-02 07:26:31.000000000","message":"I don\u0027t think it\u0027s necessary to test that updating name and description again. You already tested this above.","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        self.assertEqual(1, len(grp_vols))"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        # Add a volume to the group and update name and description"},{"line_number":399,"context_line":"        new_grp_name2 \u003d \u0027new_group_2\u0027"},{"line_number":400,"context_line":"        new_desc2 \u003d \u0027This is a new group too\u0027"},{"line_number":401,"context_line":"        grp_params \u003d {\u0027name\u0027: new_grp_name2,"},{"line_number":402,"context_line":"                      \u0027description\u0027: new_desc2,"},{"line_number":403,"context_line":"                      \u0027add_volumes\u0027: vol2[\u0027id\u0027]}"},{"line_number":404,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_26b87f28","line":402,"range":{"start_line":399,"start_character":8,"end_line":402,"end_character":47},"in_reply_to":"3f1d235d_cda446bc","updated":"2017-07-11 04:53:52.000000000","message":"If you insist, I can remove them, but I think it\u0027s good to test changing them together.","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # Wait for the volume to be added to group"},{"line_number":407,"context_line":"        self._wait_for_volume_group_id(vol2[\u0027id\u0027], grp[\u0027id\u0027])"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # Get the updated Group"},{"line_number":410,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":411,"context_line":"        self.assertEqual(new_grp_name2, grp[\u0027name\u0027])"},{"line_number":412,"context_line":"        self.assertEqual(new_desc2, grp[\u0027description\u0027])"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        # Get volumes in the group"},{"line_number":415,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_6d953240","line":412,"range":{"start_line":409,"start_character":8,"end_line":412,"end_character":55},"updated":"2017-07-02 07:26:31.000000000","message":"Already tested this above.","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        # Wait for the volume to be added to group"},{"line_number":407,"context_line":"        self._wait_for_volume_group_id(vol2[\u0027id\u0027], grp[\u0027id\u0027])"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"        # Get the updated Group"},{"line_number":410,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":411,"context_line":"        self.assertEqual(new_grp_name2, grp[\u0027name\u0027])"},{"line_number":412,"context_line":"        self.assertEqual(new_desc2, grp[\u0027description\u0027])"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        # Get volumes in the group"},{"line_number":415,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_26bf5ffc","line":412,"range":{"start_line":409,"start_character":8,"end_line":412,"end_character":55},"in_reply_to":"3f1d235d_6d953240","updated":"2017-07-11 04:53:52.000000000","message":"Done","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f4a1ffca3727af8210466841b102e7d5cb615b59","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":422,"context_line":"                grp_vols.append(vol)"},{"line_number":423,"context_line":"        self.assertEqual(2, len(grp_vols))"},{"line_number":424,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_4d90364f","line":424,"range":{"start_line":424,"start_character":8,"end_line":424,"end_character":54},"updated":"2017-07-02 07:26:31.000000000","message":"Should be on L341 in case anything failed before this","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"94e14e997be87c2de96898d171c5fbc67bef5658","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":422,"context_line":"                grp_vols.append(vol)"},{"line_number":423,"context_line":"        self.assertEqual(2, len(grp_vols))"},{"line_number":424,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f1d235d_83486587","line":424,"range":{"start_line":424,"start_character":8,"end_line":424,"end_character":54},"in_reply_to":"3f1d235d_4d90364f","updated":"2017-07-11 04:53:52.000000000","message":"Done","commit_id":"de92a428d7545f57aa33c1e5471de0a71e623f3e"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"a6eb3691a9f2474e996dce91bd0e9dbbae9f51b9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                               (volume_id, group_id,"},{"line_number":55,"context_line":"                                self.admin_volume_client.build_timeout))"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    message \u003d (\u0027Volume %s failed to be removd from group %s \u0027"},{"line_number":58,"context_line":"                               \u0027within the required time (%s s).\u0027 %"},{"line_number":59,"context_line":"                               (volume_id, current_group_id,"},{"line_number":60,"context_line":"                                self.admin_volume_client.build_timeout))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_80407b37","line":57,"range":{"start_line":57,"start_character":55,"end_line":57,"end_character":61},"updated":"2017-07-13 07:07:24.000000000","message":"removed","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"252608c3c526238cdafe82c0590efa341d949b0f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                               (volume_id, group_id,"},{"line_number":55,"context_line":"                                self.admin_volume_client.build_timeout))"},{"line_number":56,"context_line":"                else:"},{"line_number":57,"context_line":"                    message \u003d (\u0027Volume %s failed to be removd from group %s \u0027"},{"line_number":58,"context_line":"                               \u0027within the required time (%s s).\u0027 %"},{"line_number":59,"context_line":"                               (volume_id, current_group_id,"},{"line_number":60,"context_line":"                                self.admin_volume_client.build_timeout))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_e06da204","line":57,"range":{"start_line":57,"start_character":55,"end_line":57,"end_character":61},"in_reply_to":"1f1a1f67_80407b37","updated":"2017-07-15 04:15:06.000000000","message":"Done","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":26379,"name":"Imran Ansari","email":"imran.ansari@hpe.com","username":"imran.ansari"},"change_message_id":"eb0ab4338aa97c5b89514ed66415e8843e3f98ad","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        # Wait for the volume to be removed from group"},{"line_number":369,"context_line":"        self._wait_for_volume_group_id(vol2[\u0027id\u0027], None)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # Get the updated Group"},{"line_number":372,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_8b096f32","line":369,"updated":"2017-07-15 07:08:38.000000000","message":"Do you think we can wait here for the group to transition to \u0027available\u0027 state from \u0027updating\u0027 state instead of waiting for member volume(s) state change? \nThat way, post update, we can also use the change in group_id of volume for verification purpose rather than wait.","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"22a66ae502f7b1c3e0653486f41b34f3e520c070","unresolved":false,"context_lines":[{"line_number":366,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        # Wait for the volume to be removed from group"},{"line_number":369,"context_line":"        self._wait_for_volume_group_id(vol2[\u0027id\u0027], None)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"        # Get the updated Group"},{"line_number":372,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_643cfdbe","line":369,"in_reply_to":"1f1a1f67_8b096f32","updated":"2017-07-15 21:48:25.000000000","message":"In update_group in cinder volume manager, the group status is changed to \u0027available\u0027 before the group_id field is set in the volumes.  So we have to wait for the group_id in volumes as that happens after the group status change.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/volume/manager.py#L3586-3593","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"a6eb3691a9f2474e996dce91bd0e9dbbae9f51b9","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        grp_vols \u003d []"},{"line_number":402,"context_line":"        for vol in vols:"},{"line_number":403,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":404,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":405,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":406,"context_line":"                grp_vols.append(vol)"},{"line_number":407,"context_line":"        self.assertEqual(2, len(grp_vols))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_43ab8d1c","line":405,"range":{"start_line":404,"start_character":0,"end_line":405,"end_character":69},"updated":"2017-07-13 07:07:24.000000000","message":"I am curious what is this for? \nWill the volume status change during adding to group or removing from group?","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"252608c3c526238cdafe82c0590efa341d949b0f","unresolved":false,"context_lines":[{"line_number":401,"context_line":"        grp_vols \u003d []"},{"line_number":402,"context_line":"        for vol in vols:"},{"line_number":403,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":404,"context_line":"                waiters.wait_for_volume_resource_status("},{"line_number":405,"context_line":"                    self.admin_volume_client, vol[\u0027id\u0027], \u0027available\u0027)"},{"line_number":406,"context_line":"                grp_vols.append(vol)"},{"line_number":407,"context_line":"        self.assertEqual(2, len(grp_vols))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_a00e8a38","line":405,"range":{"start_line":404,"start_character":0,"end_line":405,"end_character":69},"in_reply_to":"1f1a1f67_43ab8d1c","updated":"2017-07-15 04:15:06.000000000","message":"Good question.  Actually the volume status won\u0027t be changed so this wait is not necessary.  Only the wait on line 396 is needed.  Removed this wait and the one on line 382.","commit_id":"86338e0a6b4d22656a27be6290581ee68c62af97"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3c6e755b46409fff626c3904e280440cf18508f8","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":326,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":327,"context_line":"            name\u003dgrp_name,"},{"line_number":328,"context_line":"            description\u003ddesc)[\u0027group\u0027]"},{"line_number":329,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":330,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":331,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_0742ca3e","line":328,"range":{"start_line":328,"start_character":12,"end_line":328,"end_character":28},"updated":"2017-07-17 19:05:28.000000000","message":"nit: Unless the description is needed for on creation (usually isn\u0027t) then it can be omitted as it\u0027s not tested here.","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eb8924b29dc85796275e65dfe2b805622e159fdf","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            group_type\u003dgroup_type[\u0027id\u0027],"},{"line_number":326,"context_line":"            volume_types\u003d[volume_type[\u0027id\u0027]],"},{"line_number":327,"context_line":"            name\u003dgrp_name,"},{"line_number":328,"context_line":"            description\u003ddesc)[\u0027group\u0027]"},{"line_number":329,"context_line":"        waiters.wait_for_volume_resource_status("},{"line_number":330,"context_line":"            self.admin_groups_client, grp[\u0027id\u0027], \u0027available\u0027)"},{"line_number":331,"context_line":"        self.addCleanup(self._delete_group, grp[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_27b826e3","line":328,"range":{"start_line":328,"start_character":12,"end_line":328,"end_character":28},"in_reply_to":"1f1a1f67_0742ca3e","updated":"2017-07-17 19:19:18.000000000","message":"Done","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3c6e755b46409fff626c3904e280440cf18508f8","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            grp_vols.append(vol)"},{"line_number":339,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        # Get a given Group"},{"line_number":342,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":343,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":344,"context_line":"        self.assertEqual(desc, grp[\u0027description\u0027])"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # Remove a volume from group and update name and description"},{"line_number":347,"context_line":"        new_grp_name \u003d \u0027new_group\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_677cde82","line":344,"range":{"start_line":341,"start_character":0,"end_line":344,"end_character":50},"updated":"2017-07-17 19:05:28.000000000","message":"This can be removed. It\u0027s already tested (or at least should be) in ``test_group_create_show_list_delete`` above. This test is dedicated to testing just the update group functionality.","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eb8924b29dc85796275e65dfe2b805622e159fdf","unresolved":false,"context_lines":[{"line_number":338,"context_line":"            grp_vols.append(vol)"},{"line_number":339,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        # Get a given Group"},{"line_number":342,"context_line":"        grp \u003d self.admin_groups_client.show_group(grp[\u0027id\u0027])[\u0027group\u0027]"},{"line_number":343,"context_line":"        self.assertEqual(grp_name, grp[\u0027name\u0027])"},{"line_number":344,"context_line":"        self.assertEqual(desc, grp[\u0027description\u0027])"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # Remove a volume from group and update name and description"},{"line_number":347,"context_line":"        new_grp_name \u003d \u0027new_group\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_a7c31657","line":344,"range":{"start_line":341,"start_character":0,"end_line":344,"end_character":50},"in_reply_to":"1f1a1f67_677cde82","updated":"2017-07-17 19:19:18.000000000","message":"Done","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"3c6e755b46409fff626c3904e280440cf18508f8","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        # Add a volume to the group and update name and description"},{"line_number":372,"context_line":"        new_grp_name2 \u003d \u0027new_group_2\u0027"},{"line_number":373,"context_line":"        new_desc2 \u003d \u0027This is a new group too\u0027"},{"line_number":374,"context_line":"        grp_params \u003d {\u0027name\u0027: new_grp_name2,"},{"line_number":375,"context_line":"                      \u0027description\u0027: new_desc2,"},{"line_number":376,"context_line":"                      \u0027add_volumes\u0027: vol2[\u0027id\u0027]}"},{"line_number":377,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_a3230bbd","line":375,"range":{"start_line":374,"start_character":22,"end_line":375,"end_character":47},"updated":"2017-07-17 19:05:28.000000000","message":"nit: The assertions that follow do not need to test whether name and description have been updated, as you already tested this functionality on L349-360, so you can remove these parameters from the request body.","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"eb8924b29dc85796275e65dfe2b805622e159fdf","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        # Add a volume to the group and update name and description"},{"line_number":372,"context_line":"        new_grp_name2 \u003d \u0027new_group_2\u0027"},{"line_number":373,"context_line":"        new_desc2 \u003d \u0027This is a new group too\u0027"},{"line_number":374,"context_line":"        grp_params \u003d {\u0027name\u0027: new_grp_name2,"},{"line_number":375,"context_line":"                      \u0027description\u0027: new_desc2,"},{"line_number":376,"context_line":"                      \u0027add_volumes\u0027: vol2[\u0027id\u0027]}"},{"line_number":377,"context_line":"        self.admin_groups_client.update_group(grp[\u0027id\u0027], **grp_params)"},{"line_number":378,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_27adc69a","line":375,"range":{"start_line":374,"start_character":22,"end_line":375,"end_character":47},"in_reply_to":"1f1a1f67_a3230bbd","updated":"2017-07-17 19:19:18.000000000","message":"Done","commit_id":"1abca89ee31fb57e71d518839497abd25437431f"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"aabd9aca7955ac9f8d8834bccdcc26764d4a624e","unresolved":false,"context_lines":[{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        # Create volumes"},{"line_number":333,"context_line":"        grp_vols \u003d []"},{"line_number":334,"context_line":"        for _ in range(2):"},{"line_number":335,"context_line":"            vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":336,"context_line":"                                     group_id\u003dgrp[\u0027id\u0027])"},{"line_number":337,"context_line":"            grp_vols.append(vol)"},{"line_number":338,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        # Remove a volume from group and update name and description"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_6cf024fe","line":337,"range":{"start_line":334,"start_character":8,"end_line":337,"end_character":32},"updated":"2017-07-18 14:02:51.000000000","message":"Can shorten to\n\n    grp_vols \u003d [self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027], group_id\u003dgrp[\u0027id\u0027]) for _ in range(2)]","commit_id":"3bdb9c8c732ad6c3b932a93c5caecf27c716ac7c"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"aabd9aca7955ac9f8d8834bccdcc26764d4a624e","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        # Get volumes in the group"},{"line_number":357,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":358,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":359,"context_line":"        grp_vols \u003d []"},{"line_number":360,"context_line":"        for vol in vols:"},{"line_number":361,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":362,"context_line":"                grp_vols.append(vol)"},{"line_number":363,"context_line":"        self.assertEqual(1, len(grp_vols))"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        # Add a volume to the group"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_ccb29849","line":362,"range":{"start_line":359,"start_character":8,"end_line":362,"end_character":36},"updated":"2017-07-18 14:02:51.000000000","message":"Could shorten this to\n\n    grp_vols \u003d [vol for vol in vols if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]]\n\nor \n\n    list(filter(lambda v: v[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027], vol))","commit_id":"3bdb9c8c732ad6c3b932a93c5caecf27c716ac7c"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"aabd9aca7955ac9f8d8834bccdcc26764d4a624e","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        # Get volumes in the group"},{"line_number":373,"context_line":"        vols \u003d self.admin_volume_client.list_volumes("},{"line_number":374,"context_line":"            detail\u003dTrue)[\u0027volumes\u0027]"},{"line_number":375,"context_line":"        grp_vols \u003d []"},{"line_number":376,"context_line":"        for vol in vols:"},{"line_number":377,"context_line":"            if vol[\u0027group_id\u0027] \u003d\u003d grp[\u0027id\u0027]:"},{"line_number":378,"context_line":"                grp_vols.append(vol)"},{"line_number":379,"context_line":"        self.assertEqual(2, len(grp_vols))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f1a1f67_ccb97815","line":378,"range":{"start_line":375,"start_character":8,"end_line":378,"end_character":36},"updated":"2017-07-18 14:02:51.000000000","message":"See above.","commit_id":"3bdb9c8c732ad6c3b932a93c5caecf27c716ac7c"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"ee3b475435d47f4fe49a83bdd3c95d41bb4e3dd5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":287,"context_line":"    def test_group_update(self):"},{"line_number":288,"context_line":"        # Create volume type"},{"line_number":289,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_0ac6a849","line":287,"range":{"start_line":287,"start_character":0,"end_line":287,"end_character":32},"updated":"2017-07-25 08:31:21.000000000","message":"this seems not admin only. if not then we should not have this tests for admin only\n\n-https://github.com/openstack/cinder/blob/e830596ae7f40b0be65245183c545af725c93f62/etc/cinder/policy.json#L135","commit_id":"7acc6dcec31a96ac0bf55f15fcc142b14650e0da"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"194d559dcc023093b02e179b414104adf7cb5778","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        self.assertEqual(grp_name2, grp2[\u0027name\u0027])"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":287,"context_line":"    def test_group_update(self):"},{"line_number":288,"context_line":"        # Create volume type"},{"line_number":289,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_ab43e912","line":287,"range":{"start_line":287,"start_character":0,"end_line":287,"end_character":32},"in_reply_to":"ff346bd7_0ac6a849","updated":"2017-07-26 14:39:48.000000000","message":"You are right.  Groups APIs are not admin-only, but GroupTypes and VolumeTypes APIs are admin-only.  In order to create a group, a group_type and volume_types have to be created first using the admin client.  That means the group and volumes will be created using the same admin client as well.  So it doesn\u0027t look like I can move test_groups out of the admin folder.\n\nPlease let me know if there is a way to do this.","commit_id":"7acc6dcec31a96ac0bf55f15fcc142b14650e0da"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"292200585329f534c3f7dfaa5913033c318f514c","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            self.groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":263,"context_line":"    def test_group_update(self):"},{"line_number":264,"context_line":"        # Create volume type"},{"line_number":265,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf3e73b7_8fc53591","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":25},"updated":"2017-08-07 12:50:33.000000000","message":"The test looks nice, but it takes 11s, which is a relatively long time for an API test.\nI understand why you remove and add a volume but both calls hit the same API endpoint, so I think it might be enough to just test one the two, or to test them in the same API call if the API allows for that. For instance create two volumes, one in the group and one not, and then update to remove the one in an add the one out.","commit_id":"96baf302e328f6f3249c0a8047ecb34191b3277b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"388e4bb09e7189cfcbc0094d3d9ddc2fc9f671f0","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            self.groups_client, grp2[\u0027id\u0027], \u0027available\u0027)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    @decorators.idempotent_id(\u00274a8a6fd2-8b3b-4641-8f54-6a6f99320006\u0027)"},{"line_number":263,"context_line":"    def test_group_update(self):"},{"line_number":264,"context_line":"        # Create volume type"},{"line_number":265,"context_line":"        volume_type \u003d self.create_volume_type()"},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bf3e73b7_35bc5604","line":263,"range":{"start_line":263,"start_character":8,"end_line":263,"end_character":25},"in_reply_to":"bf3e73b7_8fc53591","updated":"2017-08-07 14:36:47.000000000","message":"Good point!  Done.","commit_id":"96baf302e328f6f3249c0a8047ecb34191b3277b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f9494498bee8376e276eaaa018ca050e734e5d72","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # Create volumes in the group"},{"line_number":274,"context_line":"        grp_vols \u003d []"},{"line_number":275,"context_line":"        for _ in range(2):"},{"line_number":276,"context_line":"            vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":277,"context_line":"                                     group_id\u003dgrp[\u0027id\u0027])"},{"line_number":278,"context_line":"            grp_vols.append(vol)"},{"line_number":279,"context_line":"        vol1 \u003d grp_vols[0]"},{"line_number":280,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":281,"context_line":"        # Create a volume not in the group"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f436f4f_e9905951","line":278,"range":{"start_line":275,"start_character":0,"end_line":278,"end_character":32},"updated":"2017-08-08 07:05:31.000000000","message":"still 12 sec. can we try with 1 vol here and see if its update_group which is taking so much time.","commit_id":"0aa37caeaf05f6ab31a447254bff72587a7cab14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"223508029f2cb8054bb85c2466f5735ef4b34829","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # Create volumes in the group"},{"line_number":274,"context_line":"        grp_vols \u003d []"},{"line_number":275,"context_line":"        for _ in range(2):"},{"line_number":276,"context_line":"            vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":277,"context_line":"                                     group_id\u003dgrp[\u0027id\u0027])"},{"line_number":278,"context_line":"            grp_vols.append(vol)"},{"line_number":279,"context_line":"        vol1 \u003d grp_vols[0]"},{"line_number":280,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":281,"context_line":"        # Create a volume not in the group"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f436f4f_e2aaab17","line":278,"range":{"start_line":275,"start_character":0,"end_line":278,"end_character":32},"in_reply_to":"9f436f4f_315b632f","updated":"2017-08-08 12:20:08.000000000","message":"Sure.","commit_id":"0aa37caeaf05f6ab31a447254bff72587a7cab14"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"a7fc2db0433b8bf418624bd053d8e3f7b93dda3b","unresolved":false,"context_lines":[{"line_number":272,"context_line":""},{"line_number":273,"context_line":"        # Create volumes in the group"},{"line_number":274,"context_line":"        grp_vols \u003d []"},{"line_number":275,"context_line":"        for _ in range(2):"},{"line_number":276,"context_line":"            vol \u003d self.create_volume(volume_type\u003dvolume_type[\u0027id\u0027],"},{"line_number":277,"context_line":"                                     group_id\u003dgrp[\u0027id\u0027])"},{"line_number":278,"context_line":"            grp_vols.append(vol)"},{"line_number":279,"context_line":"        vol1 \u003d grp_vols[0]"},{"line_number":280,"context_line":"        vol2 \u003d grp_vols[1]"},{"line_number":281,"context_line":"        # Create a volume not in the group"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f436f4f_315b632f","line":278,"range":{"start_line":275,"start_character":0,"end_line":278,"end_character":32},"in_reply_to":"9f436f4f_e9905951","updated":"2017-08-08 09:52:46.000000000","message":"My suggestion was two create only two volumes, one in the group and one not, and then to add one volume and remove the other. This still creates three volumes as before, so it reduces the number of update calls but not the number of create calls, which are possibly the most expensive ones.","commit_id":"0aa37caeaf05f6ab31a447254bff72587a7cab14"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"cfde7e6f1cd7fa13625513786170a3782a7d4cbf","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                grp_vols.append(vol)"},{"line_number":304,"context_line":"        self.assertEqual(1, len(grp_vols))"},{"line_number":305,"context_line":"        self.assertEqual(vol2[\u0027id\u0027], grp_vols[0][\u0027id\u0027])"},{"line_number":306,"context_line":"        self.assertNotEqual(vol1[\u0027id\u0027], grp_vols[0][\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f436f4f_ddf9a580","line":306,"range":{"start_line":306,"start_character":7,"end_line":306,"end_character":58},"updated":"2017-08-09 14:39:00.000000000","message":"NIT: Given L304/305, this is redundant.","commit_id":"9ee986075935eaa10c3102af87e669618b634ee1"}]}
