)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"just re-use the CG implementations, and if the group"},{"line_number":12,"context_line":"being created isn\u0027t a CG then we bail out and allow"},{"line_number":13,"context_line":"the generic group handling to take care of it."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I02080a1c2eddf93513793ae13adf88d869770a2e"},{"line_number":16,"context_line":"Implements: blueprint pure-generic-volume-groups"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5a3905b3_fe04d24a","line":14,"updated":"2017-01-23 05:15:27.000000000","message":"Please add a DocImpact flag","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"}],"cinder/tests/unit/volume/drivers/test_pure.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":97,"context_line":"}"},{"line_number":98,"context_line":"VOLUME_PURITY_NAME \u003d VOLUME[\u0027name\u0027] + \u0027-cinder\u0027"},{"line_number":99,"context_line":"VOLUME_WITH_CGROUP \u003d VOLUME.copy()"},{"line_number":100,"context_line":"VOLUME_WITH_CGROUP[\u0027group_id\u0027] \u003d \\"},{"line_number":101,"context_line":"    \"4a2f7e3a-312a-40c5-96a8-536b8a0fe074\""},{"line_number":102,"context_line":"VOLUME_WITH_CGROUP[\u0027consistencygroup_id\u0027] \u003d \\"},{"line_number":103,"context_line":"    \"4a2f7e3a-312a-40c5-96a8-536b8a0fe074\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_5ee16699","line":100,"range":{"start_line":100,"start_character":33,"end_line":100,"end_character":34},"updated":"2017-01-23 05:15:27.000000000","message":"nit: use () instead of \\","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"}],"cinder/volume/drivers/pure.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7430c4069104a597224f381e78121b9a98d2613","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):"},{"line_number":291,"context_line":"        \"\"\"Creates a volume from a snapshot.\"\"\""},{"line_number":292,"context_line":"        vol_name \u003d self._get_vol_name(volume)"},{"line_number":293,"context_line":"        if snapshot[\u0027group_snapshot\u0027]:"},{"line_number":294,"context_line":"            snap_name \u003d self._get_pgroup_snap_name_from_snapshot(snapshot)"},{"line_number":295,"context_line":"        else:"},{"line_number":296,"context_line":"            snap_name \u003d self._get_snap_name(snapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_ca52bd66","line":293,"updated":"2017-01-18 04:37:49.000000000","message":"Are you not handling CG commands any more?  The code on the left hand side should still be there to support CG commands.  We won\u0027t remove support of CG CLIs and APIs yet.  So for now we need to keep both.","commit_id":"1db3e1cda93ef8f330e621f131ef69c94b295b14"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b7430c4069104a597224f381e78121b9a98d2613","unresolved":false,"context_lines":[{"line_number":741,"context_line":"    def create_cgsnapshot(self, context, cgsnapshot, snapshots):"},{"line_number":742,"context_line":"        \"\"\"Creates a cgsnapshot.\"\"\""},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        cg_id \u003d cgsnapshot[\u0027group_id\u0027]"},{"line_number":745,"context_line":"        pgroup_name \u003d self._get_pgroup_name_from_id(cg_id)"},{"line_number":746,"context_line":"        pgsnap_suffix \u003d self._get_pgroup_snap_suffix(cgsnapshot)"},{"line_number":747,"context_line":"        current_array \u003d self._get_current_array()"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_6ad0e9c9","line":744,"updated":"2017-01-18 04:37:49.000000000","message":"Same here.  We should still handle CG.","commit_id":"1db3e1cda93ef8f330e621f131ef69c94b295b14"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"fd616f3a1cfab6eae5c43b6f8bd967790c863ca8","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":826,"context_line":"            # If the query blows up just let it raise up the stack, the volume"},{"line_number":827,"context_line":"            # should be put into an error state"},{"line_number":828,"context_line":"            group \u003d self.db.group_get(ctxt, volume[\u0027group_id\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"            if self._is_group_a_cg_type(group):"},{"line_number":831,"context_line":"                self._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_8163d3b0","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":63},"updated":"2017-01-19 22:22:06.000000000","message":"We need to be poking the db directly to work with groups?","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"0641e5c13cd9fa9f26598447f09bc12359af4675","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":826,"context_line":"            # If the query blows up just let it raise up the stack, the volume"},{"line_number":827,"context_line":"            # should be put into an error state"},{"line_number":828,"context_line":"            group \u003d self.db.group_get(ctxt, volume[\u0027group_id\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"            if self._is_group_a_cg_type(group):"},{"line_number":831,"context_line":"                self._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_ed5d0a7a","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":63},"in_reply_to":"5a3905b3_5237fbaf","updated":"2017-01-23 03:50:34.000000000","message":"Done","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b305139fa09afae8f85432b96ebe87aca1763a88","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":826,"context_line":"            # If the query blows up just let it raise up the stack, the volume"},{"line_number":827,"context_line":"            # should be put into an error state"},{"line_number":828,"context_line":"            group \u003d self.db.group_get(ctxt, volume[\u0027group_id\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"            if self._is_group_a_cg_type(group):"},{"line_number":831,"context_line":"                self._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_c1031b72","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":63},"in_reply_to":"5a3905b3_8163d3b0","updated":"2017-01-19 22:33:16.000000000","message":"That\u0027s because he\u0027s checking the group type specs.  We should make a common utils function to do that.","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"0641e5c13cd9fa9f26598447f09bc12359af4675","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":826,"context_line":"            # If the query blows up just let it raise up the stack, the volume"},{"line_number":827,"context_line":"            # should be put into an error state"},{"line_number":828,"context_line":"            group \u003d self.db.group_get(ctxt, volume[\u0027group_id\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"            if self._is_group_a_cg_type(group):"},{"line_number":831,"context_line":"                self._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_cd584e8d","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":63},"in_reply_to":"5a3905b3_c1031b72","updated":"2017-01-23 03:50:34.000000000","message":"Done","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":12112,"name":"Tom Swanson","email":"tom_swanson@dell.com","username":"tomswanson"},"change_message_id":"7d19605b7825cb466c67dda4ebb95ef82e67875c","unresolved":false,"context_lines":[{"line_number":825,"context_line":"            ctxt \u003d context.get_admin_context()"},{"line_number":826,"context_line":"            # If the query blows up just let it raise up the stack, the volume"},{"line_number":827,"context_line":"            # should be put into an error state"},{"line_number":828,"context_line":"            group \u003d self.db.group_get(ctxt, volume[\u0027group_id\u0027])"},{"line_number":829,"context_line":""},{"line_number":830,"context_line":"            if self._is_group_a_cg_type(group):"},{"line_number":831,"context_line":"                self._add_volume_to_consistency_group("}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_5237fbaf","line":828,"range":{"start_line":828,"start_character":11,"end_line":828,"end_character":63},"in_reply_to":"5a3905b3_c1031b72","updated":"2017-01-19 23:29:06.000000000","message":"That\u0027s what I was thinking. If the driver needs it it should be wrapped.","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"b305139fa09afae8f85432b96ebe87aca1763a88","unresolved":false,"context_lines":[{"line_number":833,"context_line":"                    vol_name"},{"line_number":834,"context_line":"                )"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"    def _is_group_a_cg_type(self, group_or_snap):"},{"line_number":837,"context_line":"        LOG.debug(\"Checking if %s is a consistent snapshot group\","},{"line_number":838,"context_line":"                  group_or_snap)"},{"line_number":839,"context_line":"        if group_or_snap[\"group_type_id\"] is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_21dcdf11","line":836,"updated":"2017-01-19 22:33:16.000000000","message":"Might be good to make this a utility function in utils so that every one can use it?  This way you don\u0027t need to directly accessing db in the driver.  Can you rename this to is_group_a_cg_snapshot_type?  Thinking we may have cg_replication or group_replication in the future.","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"0641e5c13cd9fa9f26598447f09bc12359af4675","unresolved":false,"context_lines":[{"line_number":833,"context_line":"                    vol_name"},{"line_number":834,"context_line":"                )"},{"line_number":835,"context_line":""},{"line_number":836,"context_line":"    def _is_group_a_cg_type(self, group_or_snap):"},{"line_number":837,"context_line":"        LOG.debug(\"Checking if %s is a consistent snapshot group\","},{"line_number":838,"context_line":"                  group_or_snap)"},{"line_number":839,"context_line":"        if group_or_snap[\"group_type_id\"] is not None:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_8d62c63c","line":836,"in_reply_to":"5a3905b3_21dcdf11","updated":"2017-01-23 03:50:34.000000000","message":"Done","commit_id":"4f951e290d7412b1fc05b4ca8b7b97dcdd32745d"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":839,"context_line":"        \"\"\"Creates a group."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param ctxt: the context of the caller."},{"line_number":842,"context_line":"        :param group: the dictionary of the group to be created."},{"line_number":843,"context_line":"        :returns: model_update"},{"line_number":844,"context_line":"        \"\"\""},{"line_number":845,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_deb396e7","line":842,"range":{"start_line":842,"start_character":26,"end_line":842,"end_character":49},"updated":"2017-01-23 05:15:27.000000000","message":"should be a group object","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"d78f62ee0aae7405490fe76ba29c54c32517902f","unresolved":false,"context_lines":[{"line_number":839,"context_line":"        \"\"\"Creates a group."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param ctxt: the context of the caller."},{"line_number":842,"context_line":"        :param group: the dictionary of the group to be created."},{"line_number":843,"context_line":"        :returns: model_update"},{"line_number":844,"context_line":"        \"\"\""},{"line_number":845,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_54ecbdf2","line":842,"range":{"start_line":842,"start_character":26,"end_line":842,"end_character":49},"in_reply_to":"5a3905b3_61a57945","updated":"2017-01-23 19:59:23.000000000","message":"The latest version of the code fixes them too.","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"dec35d1e57f70849c53d540d1a6ea78b6809b184","unresolved":false,"context_lines":[{"line_number":839,"context_line":"        \"\"\"Creates a group."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param ctxt: the context of the caller."},{"line_number":842,"context_line":"        :param group: the dictionary of the group to be created."},{"line_number":843,"context_line":"        :returns: model_update"},{"line_number":844,"context_line":"        \"\"\""},{"line_number":845,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_61a57945","line":842,"range":{"start_line":842,"start_character":26,"end_line":842,"end_character":49},"in_reply_to":"5a3905b3_6a29d389","updated":"2017-01-23 19:47:14.000000000","message":"I should fix them there.  Thanks!","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":839,"context_line":"        \"\"\"Creates a group."},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        :param ctxt: the context of the caller."},{"line_number":842,"context_line":"        :param group: the dictionary of the group to be created."},{"line_number":843,"context_line":"        :returns: model_update"},{"line_number":844,"context_line":"        \"\"\""},{"line_number":845,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_6a29d389","line":842,"range":{"start_line":842,"start_character":26,"end_line":842,"end_character":49},"in_reply_to":"5a3905b3_deb396e7","updated":"2017-01-23 19:39:35.000000000","message":"Side note... these are copied directly from the base driver, so those are wrong too...","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        \"\"\"Deletes a group."},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        :param ctxt: the context of the caller."},{"line_number":856,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":857,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":858,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":859,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_9ee4aee1","line":856,"range":{"start_line":856,"start_character":26,"end_line":856,"end_character":49},"updated":"2017-01-23 05:15:27.000000000","message":"group object","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":853,"context_line":"        \"\"\"Deletes a group."},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        :param ctxt: the context of the caller."},{"line_number":856,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":857,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":858,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":859,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_4a46d74f","line":856,"range":{"start_line":856,"start_character":26,"end_line":856,"end_character":49},"in_reply_to":"5a3905b3_9ee4aee1","updated":"2017-01-23 19:39:35.000000000","message":"Done","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        :param ctxt: the context of the caller."},{"line_number":856,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":857,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":858,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":859,"context_line":"        \"\"\""},{"line_number":860,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_deeab6ab","line":857,"range":{"start_line":857,"start_character":41,"end_line":857,"end_character":53},"updated":"2017-01-23 05:15:27.000000000","message":"objects","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":854,"context_line":""},{"line_number":855,"context_line":"        :param ctxt: the context of the caller."},{"line_number":856,"context_line":"        :param group: the dictionary of the group to be deleted."},{"line_number":857,"context_line":"        :param volumes: a list of volume dictionaries in the group."},{"line_number":858,"context_line":"        :returns: model_update, volumes_model_update"},{"line_number":859,"context_line":"        \"\"\""},{"line_number":860,"context_line":"        if volume_utils.is_group_a_cg_snapshot_type(group):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_6a7713a0","line":857,"range":{"start_line":857,"start_character":41,"end_line":857,"end_character":53},"in_reply_to":"5a3905b3_deeab6ab","updated":"2017-01-23 19:39:35.000000000","message":"Done","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        \"\"\"Updates a group."},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_3edada17","line":872,"range":{"start_line":872,"start_character":26,"end_line":872,"end_character":49},"updated":"2017-01-23 05:15:27.000000000","message":"group object","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        \"\"\"Updates a group."},{"line_number":870,"context_line":""},{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_caa72709","line":872,"range":{"start_line":872,"start_character":26,"end_line":872,"end_character":49},"in_reply_to":"5a3905b3_3edada17","updated":"2017-01-23 19:39:35.000000000","message":"Done","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":870,"context_line":""},{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":876,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_9e0bce8d","line":873,"range":{"start_line":873,"start_character":45,"end_line":873,"end_character":57},"updated":"2017-01-23 05:15:27.000000000","message":"objects","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":870,"context_line":""},{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":876,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_0aae8fe5","line":873,"range":{"start_line":873,"start_character":45,"end_line":873,"end_character":57},"in_reply_to":"5a3905b3_9e0bce8d","updated":"2017-01-23 19:39:35.000000000","message":"Done","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b89ac030590f88f12f38013aa39bbc2c28900d7","unresolved":false,"context_lines":[{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":876,"context_line":"        \"\"\""},{"line_number":877,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_fefa1274","line":874,"range":{"start_line":874,"start_character":48,"end_line":874,"end_character":60},"updated":"2017-01-23 05:15:27.000000000","message":"objects","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"239544c62e67875b7af72d2d735ca056c5a5cc0a","unresolved":false,"context_lines":[{"line_number":871,"context_line":"        :param ctxt: the context of the caller."},{"line_number":872,"context_line":"        :param group: the dictionary of the group to be updated."},{"line_number":873,"context_line":"        :param add_volumes: a list of volume dictionaries to be added."},{"line_number":874,"context_line":"        :param remove_volumes: a list of volume dictionaries to be removed."},{"line_number":875,"context_line":"        :returns: model_update, add_volumes_update, remove_volumes_update"},{"line_number":876,"context_line":"        \"\"\""},{"line_number":877,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a3905b3_2ab98b2e","line":874,"range":{"start_line":874,"start_character":48,"end_line":874,"end_character":60},"in_reply_to":"5a3905b3_fefa1274","updated":"2017-01-23 19:39:35.000000000","message":"Done","commit_id":"5aee6d5d321644a7cb682d5b87c0e02004a4eba9"}]}
