)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"867e3e3a2d115826db645c9b895455c606978e13","unresolved":false,"context_lines":[{"line_number":10,"context_line":"ConsistencyGroups"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3febb95bb2b3dd8f10da4f01ffa705e39cb20520"},{"line_number":13,"context_line":"Implements: blueprint cinder-objects"},{"line_number":14,"context_line":"Co-Authored-by: Daniel Tadrzak \u003cdaniel.tadrzak@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"fa32b979_32ef831f","line":13,"updated":"2015-06-24 14:45:32.000000000","message":"Partial-Implements:","commit_id":"901161a5bd7aac967f433a0d2bbd9ad4da83da3a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":14,"context_line":"Co-Authored-by: Daniel Tadrzak \u003cdaniel.tadrzak@intel.com\u003e"},{"line_number":15,"context_line":"Co-Authored-by: Michal Dulko \u003cmichal.dulko@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-by: Gorka Eguileor\u003cgeguileo@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"ba3cc151_5399adc2","line":16,"updated":"2015-07-03 13:46:11.000000000","message":"Not that I\u0027m complaining or anything ;-), but I don\u0027t think I deserve Co-Author mention.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":14,"context_line":"Co-Authored-by: Daniel Tadrzak \u003cdaniel.tadrzak@intel.com\u003e"},{"line_number":15,"context_line":"Co-Authored-by: Michal Dulko \u003cmichal.dulko@intel.com\u003e"},{"line_number":16,"context_line":"Co-Authored-by: Gorka Eguileor\u003cgeguileo@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"ba3cc151_ca0df4e9","line":16,"in_reply_to":"ba3cc151_5399adc2","updated":"2015-07-06 10:59:19.000000000","message":"I copied some parts of code from your commits. So you are co-author of this commit :)","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"393029ebc86648e804f43be2341ddbcdd2280b04","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to"},{"line_number":10,"context_line":"ConsistencyGroups"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I3febb95bb2b3dd8f10da4f01ffa705e39cb20520"},{"line_number":13,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":14,"context_line":"Co-Authored-by: Daniel Tadrzak \u003cdaniel.tadrzak@intel.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":34,"id":"ba3cc151_4ae75240","line":11,"updated":"2015-07-07 10:55:40.000000000","message":"better to put a period after \u0027ConsistencyGroups\u0027","commit_id":"c21787b53b5ed59a92cc52efd5f8c4cd0ffe5810"}],"cinder/consistencygroup/api.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def create_from_src(self, context, name, description, cgsnapshot_id):"},{"line_number":165,"context_line":"        check_policy(context, \u0027create\u0027)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"        cgsnapshot \u003d None"},{"line_number":168,"context_line":"        orig_cg \u003d None"},{"line_number":169,"context_line":"        if cgsnapshot_id:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_fa82c6c7","side":"PARENT","line":166,"updated":"2015-06-22 14:27:01.000000000","message":"This newline was actually handy. ;)","commit_id":"cb2a157f38e578fe044062c70d81a2b8aa164e1f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        except Exception:"},{"line_number":248,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":249,"context_line":"                try:"},{"line_number":250,"context_line":"                    group.destroy()"},{"line_number":251,"context_line":"                finally:"},{"line_number":252,"context_line":"                    LOG.error(_LE(\"Error occurred when creating consistency \""},{"line_number":253,"context_line":"                                  \"group %(group)s from cgsnapshot \""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_dafd823c","line":250,"updated":"2015-06-22 14:27:01.000000000","message":"Elevated context isn\u0027t passed here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        except Exception:"},{"line_number":306,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":307,"context_line":"                try:"},{"line_number":308,"context_line":"                    group \u003d objects.ConsistencyGroup.get_by_id(context,"},{"line_number":309,"context_line":"                                                               group_id)"},{"line_number":310,"context_line":"                    group.destroy()"},{"line_number":311,"context_line":"                finally:"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_7a81d68e","line":308,"updated":"2015-06-22 14:27:01.000000000","message":"Instead of doing two DB queries simply pass CG object in line 268 instead of ID.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":334,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":335,"context_line":"                try:"},{"line_number":336,"context_line":"                    group \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":337,"context_line":"                        context.elevated(), group_id)"},{"line_number":338,"context_line":"                    group.destroy()"},{"line_number":339,"context_line":"                finally:"},{"line_number":340,"context_line":"                    LOG.error(_LE(\"Failed to update quota for \""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_5a3412fa","line":337,"updated":"2015-06-22 14:27:01.000000000","message":"ditto","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    @wrap_check_policy"},{"line_number":344,"context_line":"    def delete(self, context, group, force\u003dFalse):"},{"line_number":345,"context_line":"        import pdb"},{"line_number":346,"context_line":"        pdb.set_trace()"},{"line_number":347,"context_line":"        if not group.host:"},{"line_number":348,"context_line":"            self.update_quota(context, group.id, -1, group.project_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_7a2f96a1","line":345,"updated":"2015-06-22 14:27:01.000000000","message":"A leftover from debugging I guess.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        return group"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def create_from_src(self, context, name, description, cgsnapshot_id):"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        check_policy(context, \u0027create\u0027)"},{"line_number":166,"context_line":"        cgsnapshot \u003d None"},{"line_number":167,"context_line":"        orig_cg \u003d None"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_49eceeba","line":164,"updated":"2015-06-24 09:56:44.000000000","message":"Adding this newline is unrelated to the patch.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        cgsnapshot \u003d None"},{"line_number":167,"context_line":"        orig_cg \u003d None"},{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d self.db.cgsnapshot_get(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":172,"context_line":"                    context, cgsnapshot[\u0027consistencygroup_id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_49714e0b","line":169,"updated":"2015-06-24 09:56:44.000000000","message":"This is a place where having a relation with consistency group would be handy in cgsnapshot object.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                  \u0027cgsnapshot_id\u0027: cgsnapshot_id}"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if orig_cg:"},{"line_number":182,"context_line":"            kwargs[\u0027volume_type_id\u0027] \u003d orig_cg.get(\u0027volume_type_id\u0027)"},{"line_number":183,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d orig_cg.get(\u0027availability_zone\u0027)"},{"line_number":184,"context_line":"            kwargs[\u0027host\u0027] \u003d orig_cg.get(\u0027host\u0027)"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_c96ebeff","line":182,"updated":"2015-06-24 09:56:44.000000000","message":"orig_cg is an object, so it\u0027s more readable to use object notation here:\n\n    kwargs[\u0027volume_type_id\u0027] \u003d orig_cg.volume_type_id\n\nThis also applies for 2 lines below.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                                  {\u0027host\u0027: group.get(\u0027host\u0027)})"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        self.volume_rpcapi.create_consistencygroup_from_src("},{"line_number":267,"context_line":"            context, group, group.host, cgsnapshot)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def _cast_create_consistencygroup(self, context, group,"},{"line_number":270,"context_line":"                                      request_spec_list,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_241aef6f","line":267,"updated":"2015-06-24 09:56:44.000000000","message":"Do we need to pass group.host here if it\u0027s already in group object passed?","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            LOG.debug(\"Searching by: %s\", filters)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"},{"line_number":604,"context_line":"            # Need to remove all_tenants to pass the filtering below."},{"line_number":605,"context_line":"            del filters[\u0027all_tenants\u0027]"},{"line_number":606,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all(context)"},{"line_number":607,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_e43727ae","line":604,"updated":"2015-06-24 09:56:44.000000000","message":"Actually lines 604 and 605 are not needed. You may remove it as well if you want.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"40bb5d12d3fd35eb5100be2f00aff39ec045db5e","unresolved":false,"context_lines":[{"line_number":600,"context_line":"            msg \u003d _(\u0027limit param must be an integer\u0027)"},{"line_number":601,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if filters:"},{"line_number":604,"context_line":"            LOG.debug(\"Searching by: %s\", filters)"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_30f63ffa","side":"PARENT","line":603,"updated":"2015-06-26 09:47:06.000000000","message":"Why is this block getting removed?","commit_id":"dc9a8c8f5d369eb121053fcdc362648e219d968f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        group \u003d None"},{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            kwargs \u003d {\u0027user_id\u0027: context.user_id,"},{"line_number":133,"context_line":"                      \u0027project_id\u0027: context.project_id,"},{"line_number":134,"context_line":"                      \u0027availability_zone\u0027: availability_zone,"},{"line_number":135,"context_line":"                      \u0027status\u0027: \"creating\","}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_9dc8a6a9","line":132,"updated":"2015-07-03 13:46:11.000000000","message":"Why include this inside the try? I believe it was better before, outside. Inside the try should only be things meant to be caught.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        group \u003d None"},{"line_number":131,"context_line":"        try:"},{"line_number":132,"context_line":"            kwargs \u003d {\u0027user_id\u0027: context.user_id,"},{"line_number":133,"context_line":"                      \u0027project_id\u0027: context.project_id,"},{"line_number":134,"context_line":"                      \u0027availability_zone\u0027: availability_zone,"},{"line_number":135,"context_line":"                      \u0027status\u0027: \"creating\","}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_93cf3528","line":132,"in_reply_to":"ba3cc151_9dc8a6a9","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    def update(self, context, group, name, description,"},{"line_number":397,"context_line":"               add_volumes, remove_volumes):"},{"line_number":398,"context_line":"        \"\"\"Update consistency group.\"\"\""},{"line_number":399,"context_line":"        if group.status not in [\"available\"]:"},{"line_number":400,"context_line":"            msg \u003d _(\"Consistency group status must be available, \""},{"line_number":401,"context_line":"                    \"but current status is: %s.\") % group.status"},{"line_number":402,"context_line":"            raise exception.InvalidConsistencyGroup(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_1dbd7601","line":399,"updated":"2015-07-03 13:46:11.000000000","message":"It would be nice to change this to \u003d\u003d \u0027available\u0027","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    def update(self, context, group, name, description,"},{"line_number":397,"context_line":"               add_volumes, remove_volumes):"},{"line_number":398,"context_line":"        \"\"\"Update consistency group.\"\"\""},{"line_number":399,"context_line":"        if group.status not in [\"available\"]:"},{"line_number":400,"context_line":"            msg \u003d _(\"Consistency group status must be available, \""},{"line_number":401,"context_line":"                    \"but current status is: %s.\") % group.status"},{"line_number":402,"context_line":"            raise exception.InvalidConsistencyGroup(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_f39a4113","line":399,"in_reply_to":"ba3cc151_1dbd7601","updated":"2015-07-06 10:59:19.000000000","message":"I guess that you thought about !\u003d instead of \u003d\u003d ;) Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e830bfaa66efeca1ad54c3faa9bdd4ab193f1d58","unresolved":false,"context_lines":[{"line_number":396,"context_line":"    def update(self, context, group, name, description,"},{"line_number":397,"context_line":"               add_volumes, remove_volumes):"},{"line_number":398,"context_line":"        \"\"\"Update consistency group.\"\"\""},{"line_number":399,"context_line":"        if group.status not in [\"available\"]:"},{"line_number":400,"context_line":"            msg \u003d _(\"Consistency group status must be available, \""},{"line_number":401,"context_line":"                    \"but current status is: %s.\") % group.status"},{"line_number":402,"context_line":"            raise exception.InvalidConsistencyGroup(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_2510384e","line":399,"in_reply_to":"ba3cc151_f39a4113","updated":"2015-07-06 11:16:28.000000000","message":"Yep","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            LOG.debug(\"Searching by: %s\", filters)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"},{"line_number":604,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all(context)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all_by_project("},{"line_number":607,"context_line":"                context, context.project_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_dd394ea5","line":604,"updated":"2015-07-03 13:46:11.000000000","message":"This needs to pass the filters","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e830bfaa66efeca1ad54c3faa9bdd4ab193f1d58","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            LOG.debug(\"Searching by: %s\", filters)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"},{"line_number":604,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all(context)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all_by_project("},{"line_number":607,"context_line":"                context, context.project_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_e5ba500a","line":604,"in_reply_to":"ba3cc151_8a94cc44","updated":"2015-07-06 11:16:28.000000000","message":"No you are right, I mistook this for cgsnapshot and thought that the patch that adds filtering had landed: https://review.openstack.org/#/c/197163/","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            LOG.debug(\"Searching by: %s\", filters)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"},{"line_number":604,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all(context)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all_by_project("},{"line_number":607,"context_line":"                context, context.project_id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_8a94cc44","line":604,"in_reply_to":"ba3cc151_dd394ea5","updated":"2015-07-06 10:59:19.000000000","message":"Maybe I\u0027m wrong but I think that we don\u0027t need to forward filters. Method get_all for consistency group in db/api.py doesn\u0027t have a parameter filter in contrast to methods get_all for Snapshots and Volume.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":603,"context_line":"        if (context.is_admin and \u0027all_tenants\u0027 in filters):"},{"line_number":604,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all(context)"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            groups \u003d objects.ConsistencyGroupList.get_all_by_project("},{"line_number":607,"context_line":"                context, context.project_id)"},{"line_number":608,"context_line":"        return groups"},{"line_number":609,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_9d3f4686","line":606,"updated":"2015-07-03 13:46:11.000000000","message":"Same here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"13c65ed61e3dd027158b78bf1a1e545497f0fa4e","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":389,"context_line":"        group.status \u003d \u0027deleting\u0027"},{"line_number":390,"context_line":"        group.terminated_at \u003d now"},{"line_number":391,"context_line":"        group.save()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        self.volume_rpcapi.delete_consistencygroup(context, group)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_68f5a581","line":390,"updated":"2015-07-06 17:08:25.000000000","message":"You can change this to: group.terminated_at \u003d timeutils.utcnow().  now is not used anywhere else.","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":389,"context_line":"        group.status \u003d \u0027deleting\u0027"},{"line_number":390,"context_line":"        group.terminated_at \u003d now"},{"line_number":391,"context_line":"        group.save()"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        self.volume_rpcapi.delete_consistencygroup(context, group)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_99fdbd70","line":390,"in_reply_to":"ba3cc151_68f5a581","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"64e96e5831e5879d4aff51c5890fa3dcdc7cec5d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except Exception:"},{"line_number":141,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":142,"context_line":"                LOG.error(_LE(\"Error occurred when creating consistency group\""},{"line_number":143,"context_line":"                              \" %s.\"), name)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        request_spec_list \u003d []"},{"line_number":146,"context_line":"        filter_properties_list \u003d []"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba3cc151_c508332b","line":143,"updated":"2015-07-07 11:19:18.000000000","message":"We can add resource tag to logging.\nI saw the use of logging at multiple locations.\nBelow is reference for that:\nhttps://github.com/openstack/cinder/commit/386e2858a4e76fafc1d78737154859a3c1618b20#diff-724c53b8cd580ae533b4fb301df7c3e9","commit_id":"c21787b53b5ed59a92cc52efd5f8c4cd0ffe5810"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"ac8811dce4fa986548c729c107742f892b156a2a","unresolved":false,"context_lines":[{"line_number":333,"context_line":"                                      \"volume in the process of creating \""},{"line_number":334,"context_line":"                                      \"consistency group %(group)s from \""},{"line_number":335,"context_line":"                                      \"source CG %(source_cg)s.\"),"},{"line_number":336,"context_line":"                                  {\u0027group\u0027: group[\u0027id\u0027],"},{"line_number":337,"context_line":"                                   \u0027source_cg\u0027: source_cg[\u0027id\u0027]})"},{"line_number":338,"context_line":"        except Exception:"},{"line_number":339,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":59,"id":"1a4dcd0f_c8572725","line":336,"updated":"2015-08-09 18:35:58.000000000","message":"Why isn\u0027t this group.id ?","commit_id":"22a36591c07d040312fc5d59e1da720700f1d6dd"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"58502d849ad08eb40d0c69954ea0d04fa684514a","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                                      \"consistency group %(group)s from \""},{"line_number":335,"context_line":"                                      \"source CG %(source_cg)s.\"),"},{"line_number":336,"context_line":"                                  {\u0027group\u0027: group[\u0027id\u0027],"},{"line_number":337,"context_line":"                                   \u0027source_cg\u0027: source_cg[\u0027id\u0027]})"},{"line_number":338,"context_line":"        except Exception:"},{"line_number":339,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":340,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":59,"id":"1a4dcd0f_074c3975","line":337,"updated":"2015-08-07 21:08:58.000000000","message":"I\u0027m still don\u0027t know why these changes were wrong? Could you explain me :)? In my opinion we are passing here a two objects so we should use object notation instead of dict.:)","commit_id":"22a36591c07d040312fc5d59e1da720700f1d6dd"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"e8125ae94af9c74c8b8590f76fe08ea438a2de53","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                                      \"consistency group %(group)s from \""},{"line_number":335,"context_line":"                                      \"source CG %(source_cg)s.\"),"},{"line_number":336,"context_line":"                                  {\u0027group\u0027: group[\u0027id\u0027],"},{"line_number":337,"context_line":"                                   \u0027source_cg\u0027: source_cg[\u0027id\u0027]})"},{"line_number":338,"context_line":"        except Exception:"},{"line_number":339,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":340,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":59,"id":"1a4dcd0f_0272daad","line":337,"in_reply_to":"1a4dcd0f_074c3975","updated":"2015-08-08 13:05:45.000000000","message":"I believe they should be in object notation.  Not sure what was wrong before.","commit_id":"22a36591c07d040312fc5d59e1da720700f1d6dd"}],"cinder/objects/consistencygroup.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"472a3bd3059a3470422e2d452886c5af086bf844","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    }"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":48,"context_line":"        super(ConsistencGroup, self).__init__(*args, **kwargs)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":51,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_9088e8c7","line":48,"updated":"2015-03-12 00:24:32.000000000","message":"Same question as other review, empty constructors don\u0027t seem so useful, just leave them out IMHO; also \u0027ConsistencGroup\u0027 isn\u0027t the right spelling anyway :-P","commit_id":"62e79245778cc9caf9fbe0752d1730929b9ac47f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fe172074fce303a09823dfa0f9a44d9ec01b7263","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from cinder.objects import fields"},{"line_number":23,"context_line":"from cinder import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"CONF \u003d cfg.CONF"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class ConsistencyGroup(base.CinderPersistentObject,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f215313d","line":25,"updated":"2015-03-20 09:32:50.000000000","message":"I don\u0027t think you need CONF here.","commit_id":"68381affd7cbfd83a655b2229470d8a72d2ea46c"},{"author":{"_account_id":13101,"name":"Eduard Biceri-Matei","email":"cubusbacau@yahoo.com","username":"eduardbicerimatei"},"change_message_id":"fee54e40934b01cbc30906d52b8f9cb399aa8e49","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    Version \u003d \u00271.0\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    fields \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: fields.UUIDFields(),"},{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_52fc3d72","line":34,"updated":"2015-03-20 09:53:48.000000000","message":"AttributeError: \u0027module\u0027 object has no attribute \u0027UUIDFields\u0027","commit_id":"68381affd7cbfd83a655b2229470d8a72d2ea46c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fe172074fce303a09823dfa0f9a44d9ec01b7263","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    fields \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: fields.UUIDFields(),"},{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_975f8740","line":35,"updated":"2015-03-20 09:32:50.000000000","message":"This isn\u0027t nullable in SQLAlchemy model.","commit_id":"68381affd7cbfd83a655b2229470d8a72d2ea46c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fe172074fce303a09823dfa0f9a44d9ec01b7263","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    fields \u003d {"},{"line_number":34,"context_line":"        \u0027id\u0027: fields.UUIDFields(),"},{"line_number":35,"context_line":"        \u0027user_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027project_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027availability_zone\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_d7557f1e","line":36,"updated":"2015-03-20 09:32:50.000000000","message":"Same here.","commit_id":"68381affd7cbfd83a655b2229470d8a72d2ea46c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e15d9bea2382f74fe5dd4523c094574e74c759d4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def _from_db_object(context, consistencygroup, db_consistencygroup):"},{"line_number":48,"context_line":"        for name, field in consistencygroup.fields.items():"},{"line_number":49,"context_line":"            value \u003d db_consistencygroup[name]"},{"line_number":50,"context_line":"            if isinstance(field, fields.IntegerField):"},{"line_number":51,"context_line":"                value \u003d value or 0"},{"line_number":52,"context_line":"            consistencygroup[name] \u003d value"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9b358b_9d4e20c0","line":49,"updated":"2015-03-30 09:48:00.000000000","message":"Here\u0027s the problem I think, change this line to:\n\n    value \u003d db_consistencygroup.get(name)","commit_id":"bb7584e5b7c7fef2e3037c0e5f8ffe73896c8591"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027volume_type_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027cgsnapshot_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":41,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":42,"context_line":"        \u0027deleted_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_502631bb","line":40,"updated":"2015-06-22 14:27:01.000000000","message":"created_at, updated_at and deleted_at are *probably* not needed as CinderPersistentObject already has it.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @base.remotable"},{"line_number":86,"context_line":"    def destroy(self):"},{"line_number":87,"context_line":"        db.consistencygroup_destroy(self._context, self.id)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":90,"context_line":"class ConsistencyGroupList(base.ObjectListBase, base.CinderObject):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_5082b153","line":87,"updated":"2015-06-22 14:27:01.000000000","message":"You should do it in a similar way like here: https://review.openstack.org/193828","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    @base.remotable_classmethod"},{"line_number":101,"context_line":"    def get_all(cls, context):"},{"line_number":102,"context_line":"        consistencygroups \u003d db.consistencygroup_get_all(context)"},{"line_number":103,"context_line":"        return base.obj_make_list(context, cls(), objects.ConsistencyGroup,"},{"line_number":104,"context_line":"                                  consistencygroups)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @base.remotable_classmethod"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_30f60dfa","line":103,"updated":"2015-06-22 14:27:01.000000000","message":"There should be cls(context) instead of bare cls().","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"7bc0dd9aa294a7866f7bf3860204300c76eef55f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class ConsistencyGroup(base.CinderPersistentObject,"},{"line_number":26,"context_line":"                       base.CinderObject,"},{"line_number":27,"context_line":"                       base.CinderObjectDictCompat):"},{"line_number":28,"context_line":"    Version \u003d \u00271.0\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_9a0eb63b","line":28,"updated":"2015-06-24 10:16:25.000000000","message":"This one should be called VERSION as it is in the VersionedObject base class.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":42,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":43,"context_line":"        \u0027deleted_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    }"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_c459c3fe","line":44,"updated":"2015-06-24 09:56:44.000000000","message":"You may remove this newline as well.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"7bc0dd9aa294a7866f7bf3860204300c76eef55f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":48,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":49,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @staticmethod"},{"line_number":52,"context_line":"    def _from_db_object(context, consistencygroup, db_consistencygroup):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_7cb64f3f","line":49,"updated":"2015-06-24 10:16:25.000000000","message":"What is the purpose of assigning new value to the target_version? Arguments are not passed by reference in python, so the original value won\u0027t be changed.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"867e3e3a2d115826db645c9b895455c606978e13","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        \u0027deleted_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":44,"context_line":"    }"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":47,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":48,"context_line":"        target_version \u003d utils.convert_version_to_tuple(target_version)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_32e303db","line":46,"updated":"2015-06-24 14:45:32.000000000","message":"Needs a call to the super class obj_make_compatible - \nsuper(ConsistencyGroup, self).obj_make_compatible(primitive, target_version)","commit_id":"901161a5bd7aac967f433a0d2bbd9ad4da83da3a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7906d5e3385a8e251a8f753ca3ba6225cd88ff3a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027volume_type_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027cgsnapshot_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":41,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":42,"context_line":"        \u0027deleted_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":43,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_02f18a6a","line":40,"updated":"2015-06-25 18:32:45.000000000","message":"Should these be tzinfo_aware\u003dFalse?  Based on the group IRC meeting, these persistent attributes should take the default tzinfo_aware\u003dTrue because we always assume UTC.","commit_id":"10bbad313cf8fa09199fa70ac45eccb0a2a7451f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"40bb5d12d3fd35eb5100be2f00aff39ec045db5e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027volume_type_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":39,"context_line":"        \u0027cgsnapshot_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":40,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":41,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":42,"context_line":"        \u0027deleted_at\u0027: fields.DateTimeField(nullable\u003dTrue, tzinfo_aware\u003dFalse),"},{"line_number":43,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa32b979_0d10c458","line":40,"in_reply_to":"fa32b979_02f18a6a","updated":"2015-06-26 09:47:06.000000000","message":"That\u0027s right. Please take a look at this workaround for tests failures - https://review.openstack.org/#/c/183222/7/cinder/test.py. You may use it also in this patch.","commit_id":"10bbad313cf8fa09199fa70ac45eccb0a2a7451f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027cgsnapshot_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":42,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":43,"context_line":"        super(ConsistencyGroup, self).obj_make_compatible(primitive,"},{"line_number":44,"context_line":"                                                          target_version)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_5da69eae","line":41,"updated":"2015-07-03 13:46:11.000000000","message":"We don\u0027t need this method for now if we are just calling super\u0027s method, right?","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027cgsnapshot_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":39,"context_line":"    }"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":42,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":43,"context_line":"        super(ConsistencyGroup, self).obj_make_compatible(primitive,"},{"line_number":44,"context_line":"                                                          target_version)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_3352e935","line":41,"in_reply_to":"ba3cc151_5da69eae","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _from_db_object(context, consistencygroup, db_consistencygroup):"},{"line_number":48,"context_line":"        for name, field in consistencygroup.fields.items():"},{"line_number":49,"context_line":"            value \u003d db_consistencygroup.get(name)"},{"line_number":50,"context_line":"            if isinstance(field, fields.IntegerField):"},{"line_number":51,"context_line":"                value \u003d value or 0"},{"line_number":52,"context_line":"            setattr(consistencygroup, name, value)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_ddbe2e64","line":50,"updated":"2015-07-03 13:46:11.000000000","message":"This is not needed for this object","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _from_db_object(context, consistencygroup, db_consistencygroup):"},{"line_number":48,"context_line":"        for name, field in consistencygroup.fields.items():"},{"line_number":49,"context_line":"            value \u003d db_consistencygroup.get(name)"},{"line_number":50,"context_line":"            if isinstance(field, fields.IntegerField):"},{"line_number":51,"context_line":"                value \u003d value or 0"},{"line_number":52,"context_line":"            setattr(consistencygroup, name, value)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_b3135964","line":50,"in_reply_to":"ba3cc151_ddbe2e64","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        updates \u003d self.cinder_obj_get_changes()"},{"line_number":77,"context_line":"        if updates:"},{"line_number":78,"context_line":"            db.consistencygroup_update(self._context, self.id, updates)"},{"line_number":79,"context_line":"        self.obj_reset_changes()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @base.remotable"},{"line_number":82,"context_line":"    def destroy(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_7d6b621e","line":79,"updated":"2015-07-03 13:46:11.000000000","message":"This should be inside the if, since we don\u0027t need to reset if there are no updates.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        updates \u003d self.cinder_obj_get_changes()"},{"line_number":77,"context_line":"        if updates:"},{"line_number":78,"context_line":"            db.consistencygroup_update(self._context, self.id, updates)"},{"line_number":79,"context_line":"        self.obj_reset_changes()"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @base.remotable"},{"line_number":82,"context_line":"    def destroy(self):"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_961e435d","line":79,"in_reply_to":"ba3cc151_7d6b621e","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    }"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @base.remotable_classmethod"},{"line_number":99,"context_line":"    def get_all(cls, context):"},{"line_number":100,"context_line":"        consistencygroups \u003d db.consistencygroup_get_all(context)"},{"line_number":101,"context_line":"        return base.obj_make_list(context, cls(context),"},{"line_number":102,"context_line":"                                  objects.ConsistencyGroup,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_7d528268","line":99,"updated":"2015-07-03 13:46:11.000000000","message":"This should accept filters and pass them along.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                  consistencygroups)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @base.remotable_classmethod"},{"line_number":106,"context_line":"    def get_all_by_project(cls, context, project_id):"},{"line_number":107,"context_line":"        consistencygroups \u003d db.consistencygroup_get_all_by_project(context,"},{"line_number":108,"context_line":"                                                                   project_id)"},{"line_number":109,"context_line":"        return base.obj_make_list(context, cls(context),"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_ddc94e27","line":106,"updated":"2015-07-03 13:46:11.000000000","message":"Same here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"}],"cinder/scheduler/driver.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    return db.volume_update(context, volume_id, values)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def group_update_db(context, group_id, host):"},{"line_number":56,"context_line":"    \"\"\"Set the host and the scheduled_at field of a consistencygroup."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    :returns: A Consistencygroup with the updated fields set properly."}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_503711b0","line":55,"updated":"2015-06-22 14:27:01.000000000","message":"We may think of passing object instead of group_id here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"13c65ed61e3dd027158b78bf1a1e545497f0fa4e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    :returns: A Consistencygroup with the updated fields set properly."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    now \u003d timeutils.utcnow()"},{"line_number":60,"context_line":"    values \u003d {\u0027host\u0027: host, \u0027updated_at\u0027: now}"},{"line_number":61,"context_line":"    group.update(values)"},{"line_number":62,"context_line":"    group.save()"},{"line_number":63,"context_line":"    return group"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_68d845f0","line":60,"updated":"2015-07-06 17:08:25.000000000","message":"You can change this to: {\u0027host\u0027: host, \u0027updated_at\u0027:  timeutils.utcnow()}","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    :returns: A Consistencygroup with the updated fields set properly."},{"line_number":58,"context_line":"    \"\"\""},{"line_number":59,"context_line":"    now \u003d timeutils.utcnow()"},{"line_number":60,"context_line":"    values \u003d {\u0027host\u0027: host, \u0027updated_at\u0027: now}"},{"line_number":61,"context_line":"    group.update(values)"},{"line_number":62,"context_line":"    group.save()"},{"line_number":63,"context_line":"    return group"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_b95c417e","line":60,"in_reply_to":"ba3cc151_68d845f0","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"}],"cinder/scheduler/manager.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        while self._startup_delay and not self.driver.is_ready():"},{"line_number":103,"context_line":"            eventlet.sleep(1)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def create_consistencygroup(self, context, topic,"},{"line_number":106,"context_line":"                                group_id,"},{"line_number":107,"context_line":"                                request_spec_list\u003dNone,"},{"line_number":108,"context_line":"                                filter_properties_list\u003dNone):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_70d6d528","line":105,"updated":"2015-06-22 14:27:01.000000000","message":"We should pass CG object here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11050a0284ff832a56803299b5e2a299f92fd687","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class SchedulerManager(manager.Manager):"},{"line_number":57,"context_line":"    \"\"\"Chooses a host to create volumes.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_b4ca3419","line":58,"updated":"2015-07-30 15:00:25.000000000","message":"This needs to be bumped to \u00271.8\u0027.","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"98dd5a8a1e2e4bfee4e471230eb9714b98dbfb2a","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"class SchedulerManager(manager.Manager):"},{"line_number":57,"context_line":"    \"\"\"Chooses a host to create volumes.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    RPC_API_VERSION \u003d \u00271.7\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_bd9a146d","line":58,"in_reply_to":"3a50d1a3_b4ca3419","updated":"2015-07-30 17:11:16.000000000","message":"Done","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fcb97418be479bf3b14f87701d210c5966a52c2d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        target \u003d messaging.Target(topic\u003dCONF.scheduler_topic,"},{"line_number":51,"context_line":"                                  version\u003dself.RPC_API_VERSION)"},{"line_number":52,"context_line":"        serializer \u003d objects_base.CinderObjectSerializer()"},{"line_number":53,"context_line":"        self.client \u003d rpc.get_client(target, version_cap\u003d\u00271.7\u0027,"},{"line_number":54,"context_line":"                                     serializer\u003dserializer)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def create_consistencygroup(self, ctxt, topic, group,"}],"source_content_type":"text/x-python","patch_set":51,"id":"3a50d1a3_d60c4b44","line":53,"updated":"2015-07-27 18:29:26.000000000","message":"I missed this earlier, but the RPC version should be updated to 1.8 because you are now sending objects over RPC for create_consistencygroup().","commit_id":"91a1f3415030c7ddcdfb76776fa7ed2ab0e397b0"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"6698ceade451a5c7b5a2661960727f0f4c98fba3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        target \u003d messaging.Target(topic\u003dCONF.scheduler_topic,"},{"line_number":51,"context_line":"                                  version\u003dself.RPC_API_VERSION)"},{"line_number":52,"context_line":"        serializer \u003d objects_base.CinderObjectSerializer()"},{"line_number":53,"context_line":"        self.client \u003d rpc.get_client(target, version_cap\u003d\u00271.7\u0027,"},{"line_number":54,"context_line":"                                     serializer\u003dserializer)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def create_consistencygroup(self, ctxt, topic, group,"}],"source_content_type":"text/x-python","patch_set":51,"id":"3a50d1a3_49597634","line":53,"in_reply_to":"3a50d1a3_d60c4b44","updated":"2015-07-27 22:55:31.000000000","message":"Done","commit_id":"91a1f3415030c7ddcdfb76776fa7ed2ab0e397b0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"e172566678decdb40d62c1805bdbd4ff0dac5fb3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        1.6 - Add create_consistencygroup method"},{"line_number":43,"context_line":"        1.7 - Add get_active_pools method"},{"line_number":44,"context_line":"        1.8 - Add create_consistencygroup method;"},{"line_number":45,"context_line":"              sending object over RPC"},{"line_number":46,"context_line":"    \"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_72144e4c","line":45,"updated":"2015-07-28 07:24:37.000000000","message":"I think it  should be Add sending object over RPC in create_consistencygroup method.","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"e172566678decdb40d62c1805bdbd4ff0dac5fb3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                                request_spec_list\u003dNone,"},{"line_number":60,"context_line":"                                filter_properties_list\u003dNone):"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        cctxt \u003d self.client.prepare(version\u003d\u00271.6\u0027)"},{"line_number":63,"context_line":"        request_spec_p_list \u003d []"},{"line_number":64,"context_line":"        for request_spec in request_spec_list:"},{"line_number":65,"context_line":"            request_spec_p \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_4d06571d","line":62,"updated":"2015-07-28 07:24:37.000000000","message":"You missed this version :)","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"}],"cinder/test.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"cbc49cdeb6f8852489f5495a2529f4ebce742536","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        \"\"\"Run before each test method to initialize test environment.\"\"\""},{"line_number":138,"context_line":"        super(TestCase, self).setUp()"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # NOTE(geguileo): Tests are run with sqlite, which doesn\u0027t support"},{"line_number":141,"context_line":"        # datetimes with timezones, so we need our objects to NOT be timezone"},{"line_number":142,"context_line":"        # aware for the tests; otherwise we\u0027ll end up with errors when updating"},{"line_number":143,"context_line":"        # and saving datetime fields: \"TypeError: can\u0027t compare offset-naive"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba3cc151_ade4383b","line":140,"updated":"2015-06-29 15:07:47.000000000","message":"I believe this patch should be dependent on https://review.openstack.org/#/c/196071, where geguileo fixed the tzinfo issue for all objects.  With that patch, this section would no longer be required.","commit_id":"1c66101e4a9555a94644896d63e7981bd11d8d02"}],"cinder/tests/objects/test_consistencygroup.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a0d91ace593c25251aea988ee6b4382ea11db2f1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \u0027description\u0027: \u0027fake_description\u0027,"},{"line_number":28,"context_line":"    \u0027volume_type_id\u0027: \u0027fake_volume_type_id\u0027,"},{"line_number":29,"context_line":"    \u0027status\u0027: \u0027creating\u0027,"},{"line_number":30,"context_line":"    \u0027cgsnapshot_id\u0027: \u0027fake_id\u0027,"},{"line_number":31,"context_line":"}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_b4c5858f","line":30,"updated":"2015-03-26 09:08:10.000000000","message":"deleted_at is missing here, that\u0027s why tests are failing.","commit_id":"429586748884a5dff718519ca2ce4865d04512cf"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a0d91ace593c25251aea988ee6b4382ea11db2f1","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                                                        consistencygroup.id,"},{"line_number":66,"context_line":"                                                        {\u0027status\u0027: \u0027active\u0027})"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    @mock.patch(\u0027cinder.db.consitencygroup_destroy\u0027)"},{"line_number":69,"context_line":"    def test_destroy(self, consistencygroup_destroy):"},{"line_number":70,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context,"},{"line_number":71,"context_line":"                                                    id\u003d\u00271\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a6ced46_f948d6b4","line":68,"updated":"2015-03-26 09:08:10.000000000","message":"Typo - it should be:\n\n    cinder.db.consistencygroup_destroy\n\nThat\u0027s why this test is failing.","commit_id":"429586748884a5dff718519ca2ce4865d04512cf"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context,"},{"line_number":74,"context_line":"                                                    id\u003d\u00271\u0027)"},{"line_number":75,"context_line":"        consistencygroup.destroy()"},{"line_number":76,"context_line":"        consistencygroup_destroy.assert_called_once_with(self.context, \u00271\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class TestConsistencyGroupList(test_objects._LocalTest):"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_10b429f0","line":76,"updated":"2015-06-22 14:27:01.000000000","message":"We should assert on the fact if context was elevated here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context,"},{"line_number":74,"context_line":"                                                    id\u003d\u00271\u0027)"},{"line_number":75,"context_line":"        consistencygroup.destroy()"},{"line_number":76,"context_line":"        consistencygroup_destroy.assert_called_once_with(self.context, \u00271\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class TestConsistencyGroupList(test_objects._LocalTest):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_c4e8e3b5","line":76,"updated":"2015-06-24 09:56:44.000000000","message":"We need to assert that we used admin context here. Please apply changes similar to these: https://review.openstack.org/#/c/193828/10/cinder/tests/unit/objects/test_backup.py","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"867e3e3a2d115826db645c9b895455c606978e13","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \u0027cgsnapshot_id\u0027: \u0027fake_id\u0027,"},{"line_number":31,"context_line":"    \u0027deleted_at\u0027: None,"},{"line_number":32,"context_line":"    \u0027created_at\u0027: None,"},{"line_number":33,"context_line":"    \u0027updated_at\u0027: None,"},{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_728d0bd2","line":33,"updated":"2015-06-24 14:45:32.000000000","message":"These persistent obj attributes (*_at) are not needed to be set to None, so you could remove them.","commit_id":"901161a5bd7aac967f433a0d2bbd9ad4da83da3a"}],"cinder/tests/unit/api/contrib/test_cgsnapshots.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            consistencygroup_id\u003dconsistencygroup_id)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        body \u003d {\"cgsnapshot\": {\"name\": \"cg1\","},{"line_number":357,"context_line":"                               \"description\": \"CG Snapshot 1\","},{"line_number":358,"context_line":"                               \"consistencygroup_id\": consistencygroup_id}}"},{"line_number":359,"context_line":"        req \u003d webob.Request.blank(\u0027/v2/fake/cgsnapshots\u0027)"},{"line_number":360,"context_line":"        req.method \u003d \u0027POST\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_708b351f","line":357,"updated":"2015-06-22 14:27:01.000000000","message":"Not related to the patch, I think it\u0027s better to remove this change.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        req.body \u003d json.dumps(body)"},{"line_number":363,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":364,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":365,"context_line":"        print(str(res_dict))"},{"line_number":366,"context_line":"        LOG.info(res_dict)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"        self.assertEqual(res.status_int, 202)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_d0cec182","line":365,"updated":"2015-06-22 14:27:01.000000000","message":"Leftover print.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        req.headers[\u0027Content-Type\u0027] \u003d \u0027application/json\u0027"},{"line_number":363,"context_line":"        req.body \u003d json.dumps(body)"},{"line_number":364,"context_line":"        res \u003d req.get_response(fakes.wsgi_app())"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        res_dict \u003d json.loads(res.body)"},{"line_number":367,"context_line":"        LOG.info(res_dict)"},{"line_number":368,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_a4311f5b","side":"PARENT","line":365,"updated":"2015-06-24 09:56:44.000000000","message":"This is unrelated change, please remove it.","commit_id":"5f6cbecc5ec5b6ca034290dc7bd04ab7d956cd15"}],"cinder/tests/unit/api/contrib/test_consistencygroups.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"26703eab8c8e78b42404e6805ba0f60d1c0c313b","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        self.cg_api.delete(ctxt, cg)"},{"line_number":438,"context_line":"        self.cg_api.update_quota.assert_called_once_with("},{"line_number":439,"context_line":"            ctxt, cg, -1, ctxt.project_id)"},{"line_number":440,"context_line":"        cg \u003d db.consistencygroup_get("},{"line_number":441,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":442,"context_line":"            cg.id)"},{"line_number":443,"context_line":"        self.assertEqual(cg[\u0027status\u0027], \u0027deleted\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_a8b37fe8","line":440,"updated":"2015-07-07 13:56:29.000000000","message":"You should use objects.ConsistencyGroup.get_by_id(), since you already use ConsistencyGroup object here.","commit_id":"5ea929bec9e0ec92a8fcb7983c0b971a17473a64"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"08a96746226bf2e71124fd4d28987562040b6687","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        cg \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":442,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":443,"context_line":"            cg.id)"},{"line_number":444,"context_line":"        self.assertEqual(cg[\u0027status\u0027], \u0027deleted\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_delete_consistencygroup_with_invalid_body(self):"},{"line_number":447,"context_line":"        consistencygroup_id \u003d self._create_consistencygroup(status\u003d\u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba3cc151_66603136","line":444,"updated":"2015-07-07 21:35:30.000000000","message":"If you do rebase, use cg.status.","commit_id":"3c9972d8f0747b9efeb0d028d0138c2e77d6d5a1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5fd6ab04b5ce6aa336350ab68b9adca323c97c4a","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        cg \u003d self.cg_api.create(ctxt, name, description, fake_type[\u0027name\u0027])"},{"line_number":432,"context_line":"        self.cg_api.update_quota.assert_called_once_with("},{"line_number":433,"context_line":"            ctxt, cg, 1)"},{"line_number":434,"context_line":"        self.assertEqual(cg.status, \u0027creating\u0027)"},{"line_number":435,"context_line":"        self.assertEqual(cg.host, None)"},{"line_number":436,"context_line":"        self.cg_api.update_quota.reset_mock()"},{"line_number":437,"context_line":"        cg.status \u003d \u0027error\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_1e218ffb","line":434,"updated":"2015-07-13 19:15:55.000000000","message":"Order of arguments must be expected, result\n\n self.assertEqual(\u0027creating\u0027, cg.status)","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c2580168af1a46e725ea91be954a2bc43035e6b9","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        cg \u003d self.cg_api.create(ctxt, name, description, fake_type[\u0027name\u0027])"},{"line_number":432,"context_line":"        self.cg_api.update_quota.assert_called_once_with("},{"line_number":433,"context_line":"            ctxt, cg, 1)"},{"line_number":434,"context_line":"        self.assertEqual(cg.status, \u0027creating\u0027)"},{"line_number":435,"context_line":"        self.assertEqual(cg.host, None)"},{"line_number":436,"context_line":"        self.cg_api.update_quota.reset_mock()"},{"line_number":437,"context_line":"        cg.status \u003d \u0027error\u0027"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_f2017f6b","line":434,"in_reply_to":"9a41bdd9_1e218ffb","updated":"2015-07-13 19:41:42.000000000","message":"Done","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5fd6ab04b5ce6aa336350ab68b9adca323c97c4a","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        self.cg_api.update_quota.assert_called_once_with("},{"line_number":433,"context_line":"            ctxt, cg, 1)"},{"line_number":434,"context_line":"        self.assertEqual(cg.status, \u0027creating\u0027)"},{"line_number":435,"context_line":"        self.assertEqual(cg.host, None)"},{"line_number":436,"context_line":"        self.cg_api.update_quota.reset_mock()"},{"line_number":437,"context_line":"        cg.status \u003d \u0027error\u0027"},{"line_number":438,"context_line":"        self.cg_api.delete(ctxt, cg)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_be8663d9","line":435,"updated":"2015-07-13 19:15:55.000000000","message":"It\u0027s better to use self.assertIsNone","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c2580168af1a46e725ea91be954a2bc43035e6b9","unresolved":false,"context_lines":[{"line_number":432,"context_line":"        self.cg_api.update_quota.assert_called_once_with("},{"line_number":433,"context_line":"            ctxt, cg, 1)"},{"line_number":434,"context_line":"        self.assertEqual(cg.status, \u0027creating\u0027)"},{"line_number":435,"context_line":"        self.assertEqual(cg.host, None)"},{"line_number":436,"context_line":"        self.cg_api.update_quota.reset_mock()"},{"line_number":437,"context_line":"        cg.status \u003d \u0027error\u0027"},{"line_number":438,"context_line":"        self.cg_api.delete(ctxt, cg)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_92b11392","line":435,"in_reply_to":"9a41bdd9_be8663d9","updated":"2015-07-13 19:41:42.000000000","message":"Done","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5fd6ab04b5ce6aa336350ab68b9adca323c97c4a","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        cg \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":442,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":443,"context_line":"            cg.id)"},{"line_number":444,"context_line":"        self.assertEqual(cg.status, \u0027deleted\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_delete_consistencygroup_with_invalid_body(self):"},{"line_number":447,"context_line":"        consistencygroup_id \u003d self._create_consistencygroup(status\u003d\u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_5e6e3730","line":444,"updated":"2015-07-13 19:15:55.000000000","message":"Order expected, result","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"c2580168af1a46e725ea91be954a2bc43035e6b9","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        cg \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":442,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":443,"context_line":"            cg.id)"},{"line_number":444,"context_line":"        self.assertEqual(cg.status, \u0027deleted\u0027)"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_delete_consistencygroup_with_invalid_body(self):"},{"line_number":447,"context_line":"        consistencygroup_id \u003d self._create_consistencygroup(status\u003d\u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a41bdd9_b2ac5736","line":444,"in_reply_to":"9a41bdd9_5e6e3730","updated":"2015-07-13 19:41:42.000000000","message":"Done","commit_id":"6545583594b4e4a62efbdb895f0dc7df1d48503a"}],"cinder/tests/unit/objects/test_consistencygroup.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @staticmethod"},{"line_number":45,"context_line":"    def _compare(test, db, obj):"},{"line_number":46,"context_line":"        for field, value in db.items():"},{"line_number":47,"context_line":"            test.assertEqual(db[field], obj[field])"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_get\u0027,"},{"line_number":50,"context_line":"                return_value\u003dfake_consistencygroup)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_e0334912","line":47,"updated":"2015-07-03 13:46:11.000000000","message":"Why not use assertDictEqual?","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_get\u0027,"},{"line_number":50,"context_line":"                return_value\u003dfake_consistencygroup)"},{"line_number":51,"context_line":"    def test_get_by_id(self, consistencygroup_get):"},{"line_number":52,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup.get_by_id(self, 1)"},{"line_number":53,"context_line":"        self._compare(self, fake_consistencygroup, consistencygroup)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_a010e159","line":51,"updated":"2015-07-03 13:46:11.000000000","message":"Should be another test for nonexistent ids","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_get\u0027,"},{"line_number":50,"context_line":"                return_value\u003dfake_consistencygroup)"},{"line_number":51,"context_line":"    def test_get_by_id(self, consistencygroup_get):"},{"line_number":52,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup.get_by_id(self, 1)"},{"line_number":53,"context_line":"        self._compare(self, fake_consistencygroup, consistencygroup)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_8ada8ce8","line":51,"in_reply_to":"ba3cc151_a010e159","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_create\u0027,"},{"line_number":56,"context_line":"                return_value\u003dfake_consistencygroup)"},{"line_number":57,"context_line":"    def test_create(self, consistencygroup_create):"},{"line_number":58,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context)"},{"line_number":59,"context_line":"        consistencygroup.create()"},{"line_number":60,"context_line":"        self.assertEqual(fake_consistencygroup[\u0027id\u0027], consistencygroup.id)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_733871d3","line":57,"updated":"2015-07-03 13:46:11.000000000","message":"We need a test for create with ID set","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def test_create(self, consistencygroup_create):"},{"line_number":58,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context)"},{"line_number":59,"context_line":"        consistencygroup.create()"},{"line_number":60,"context_line":"        self.assertEqual(fake_consistencygroup[\u0027id\u0027], consistencygroup.id)"},{"line_number":61,"context_line":"        self.assertEqual(fake_consistencygroup[\u0027cgsnapshot_id\u0027],"},{"line_number":62,"context_line":"                         consistencygroup.cgsnapshot_id)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_b32119a0","line":60,"updated":"2015-07-03 13:46:11.000000000","message":"We should check the whole object, not just 2 fields.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def test_create(self, consistencygroup_create):"},{"line_number":58,"context_line":"        consistencygroup \u003d objects.ConsistencyGroup(context\u003dself.context)"},{"line_number":59,"context_line":"        consistencygroup.create()"},{"line_number":60,"context_line":"        self.assertEqual(fake_consistencygroup[\u0027id\u0027], consistencygroup.id)"},{"line_number":61,"context_line":"        self.assertEqual(fake_consistencygroup[\u0027cgsnapshot_id\u0027],"},{"line_number":62,"context_line":"                         consistencygroup.cgsnapshot_id)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_0a943ce6","line":60,"in_reply_to":"ba3cc151_b32119a0","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_create\u0027,"},{"line_number":65,"context_line":"                return_value\u003dfake_consistencygroup)"},{"line_number":66,"context_line":"    def test_create(self, consistencygroup_create):"},{"line_number":67,"context_line":"        fake_cg \u003d {}"},{"line_number":68,"context_line":"        fake_cg.update(fake_consistencygroup)"},{"line_number":69,"context_line":"        del fake_cg[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_0daf647e","line":66,"updated":"2015-07-06 08:49:47.000000000","message":"We still need a test where you don\u0027t remove the \u0027id\u0027 on the creation to check that we get the exception.","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @mock.patch(\u0027cinder.db.consistencygroup_create\u0027,"},{"line_number":65,"context_line":"                return_value\u003dfake_consistencygroup)"},{"line_number":66,"context_line":"    def test_create(self, consistencygroup_create):"},{"line_number":67,"context_line":"        fake_cg \u003d {}"},{"line_number":68,"context_line":"        fake_cg.update(fake_consistencygroup)"},{"line_number":69,"context_line":"        del fake_cg[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_3f7c91b4","line":66,"in_reply_to":"ba3cc151_0daf647e","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"9fec4f4c8a6ee007235c265cb0efccfef2270a56","unresolved":false,"context_lines":[{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConsistencyGroup(test.TestCase):"},{"line_number":38,"context_line":"    def setUp(self):"},{"line_number":39,"context_line":"        super(TestConsistencyGroup, self).setUp()"},{"line_number":40,"context_line":"        # NOTE (e0ne): base tests contains original RequestContext from"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a41bdd9_3e906095","line":37,"updated":"2015-07-11 12:31:57.000000000","message":"This should be using test_objects.BaseObjectsTestCase.","commit_id":"285b2a29fa93eda3ee42bc1715684dd91a627af7"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"b4e2ff841e1d5acee5dbf1c918522cc9f3a85870","unresolved":false,"context_lines":[{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class TestConsistencyGroup(test.TestCase):"},{"line_number":38,"context_line":"    def setUp(self):"},{"line_number":39,"context_line":"        super(TestConsistencyGroup, self).setUp()"},{"line_number":40,"context_line":"        # NOTE (e0ne): base tests contains original RequestContext from"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a41bdd9_32212cfc","line":37,"in_reply_to":"9a41bdd9_3e906095","updated":"2015-07-13 17:38:59.000000000","message":"Done","commit_id":"285b2a29fa93eda3ee42bc1715684dd91a627af7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"792d77bcd177d48afb73fcf784aa3f1c8a4d0ef3","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                              is_admin\u003dFalse)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _compare(test, db, obj):"},{"line_number":49,"context_line":"        for field, value in db.items():"},{"line_number":50,"context_line":"            test.assertEqual(db[field], getattr(obj, field))"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a50d1a3_0caeee97","line":48,"updated":"2015-07-22 19:23:41.000000000","message":"This shouldn\u0027t be a static method. We can move it outside TestConsistencyGroup or make it non-static","commit_id":"ad78c113fb52d28f0269ffd87743341031cb4655"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"a76378319a4904d608e9012999dbbe3fa9d1017a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                              is_admin\u003dFalse)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _compare(test, db, obj):"},{"line_number":49,"context_line":"        for field, value in db.items():"},{"line_number":50,"context_line":"            test.assertEqual(db[field], getattr(obj, field))"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":49,"id":"3a50d1a3_0c3eeed9","line":48,"in_reply_to":"3a50d1a3_0caeee97","updated":"2015-07-22 19:28:41.000000000","message":"It needs to be static for it can be called by TestConsistencyGroupList.  Also, usually you want to customize _compare sometimes to ignore certain fields, e.g. fields that are lazy loaded.","commit_id":"ad78c113fb52d28f0269ffd87743341031cb4655"}],"cinder/tests/unit/scheduler/test_scheduler.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            original_driver \u003d self.manager.driver"},{"line_number":270,"context_line":"            consistencygroup_obj \u003d \\"},{"line_number":271,"context_line":"                fake_consistencygroup.fake_consistencyobject_obj(self.context)"},{"line_number":272,"context_line":"            consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":273,"context_line":"            self.manager.driver \u003d filter_scheduler.FilterScheduler"},{"line_number":274,"context_line":"            LOG \u003d logging.getLogger(\u0027cinder.scheduler.manager\u0027)"},{"line_number":275,"context_line":"            self.stubs.Set(LOG, \u0027error\u0027, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_c06f25c2","line":272,"updated":"2015-07-03 13:46:11.000000000","message":"Please assert that method consistencygroup_get_by_id is called with expected args.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":269,"context_line":"            original_driver \u003d self.manager.driver"},{"line_number":270,"context_line":"            consistencygroup_obj \u003d \\"},{"line_number":271,"context_line":"                fake_consistencygroup.fake_consistencyobject_obj(self.context)"},{"line_number":272,"context_line":"            consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":273,"context_line":"            self.manager.driver \u003d filter_scheduler.FilterScheduler"},{"line_number":274,"context_line":"            LOG \u003d logging.getLogger(\u0027cinder.scheduler.manager\u0027)"},{"line_number":275,"context_line":"            self.stubs.Set(LOG, \u0027error\u0027, mock.Mock())"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_0a62fc16","line":272,"in_reply_to":"ba3cc151_c06f25c2","updated":"2015-07-06 10:59:19.000000000","message":"Leftovers. We don\u0027t need to check and mock method get_by_id. We need to forward an object to tested methods( tested methods operate only on this particular object), so I will remove those leftovers.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"}],"cinder/tests/unit/test_create_volume_flow.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                      source_volid\u003dNone,"},{"line_number":53,"context_line":"                      source_replicaid\u003dNone,"},{"line_number":54,"context_line":"                      consistencygroup_id\u003dNone,"},{"line_number":55,"context_line":"\t\t\t):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.test_inst.assertEqual(self.expected_spec, request_spec)"},{"line_number":58,"context_line":"        self.test_inst.assertEqual(request_spec[\u0027source_volid\u0027], source_volid)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_1099896e","line":55,"updated":"2015-06-22 14:27:01.000000000","message":"Tabs?","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    @mock.patch(\u0027cinder.objects.ConsistencyGroup.get_by_id\u0027)"},{"line_number":97,"context_line":"    def test_cast_create_volume(self, consistencygroup_get_by_id):"},{"line_number":98,"context_line":"        #TODO(Daniel): check flow for __cast_create_volume when host is known"},{"line_number":99,"context_line":"        # but cgsnapshot_id is unknown"},{"line_number":100,"context_line":"        props \u003d {}"},{"line_number":101,"context_line":"        consistencygroup_obj \u003d \\"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_b0a8dd78","line":98,"updated":"2015-06-22 14:27:01.000000000","message":"Very vague comment, can you elaborate more here?","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":52,"context_line":"                      source_volid\u003dNone,"},{"line_number":53,"context_line":"                      source_replicaid\u003dNone,"},{"line_number":54,"context_line":"                      consistencygroup_id\u003dNone,"},{"line_number":55,"context_line":"                      ):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        self.test_inst.assertEqual(self.expected_spec, request_spec)"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_ff8d7431","line":54,"updated":"2015-06-24 09:56:44.000000000","message":"This should be object, not an id (take a look at my comments on volume.rpcapi).","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        props \u003d {}"},{"line_number":99,"context_line":"        consistencygroup_obj \u003d \\"},{"line_number":100,"context_line":"            fake_consistencygroup.fake_consistencyobject_obj(self.ctxt)"},{"line_number":101,"context_line":"        consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":102,"context_line":"        spec \u003d {\u0027volume_id\u0027: None,"},{"line_number":103,"context_line":"                \u0027source_volid\u0027: None,"},{"line_number":104,"context_line":"                \u0027snapshot_id\u0027: None,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_60e09929","line":101,"updated":"2015-07-03 13:46:11.000000000","message":"Also assert in this test that consistencygroup_get_by_id is called with right args.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        props \u003d {}"},{"line_number":99,"context_line":"        consistencygroup_obj \u003d \\"},{"line_number":100,"context_line":"            fake_consistencygroup.fake_consistencyobject_obj(self.ctxt)"},{"line_number":101,"context_line":"        consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":102,"context_line":"        spec \u003d {\u0027volume_id\u0027: None,"},{"line_number":103,"context_line":"                \u0027source_volid\u0027: None,"},{"line_number":104,"context_line":"                \u0027snapshot_id\u0027: None,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_ea3eb8d9","line":101,"in_reply_to":"ba3cc151_60e09929","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cd197fda8ee3a2a710e425df827ac98403d7bdfc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        props \u003d {}"},{"line_number":99,"context_line":"        consistencygroup_obj \u003d \\"},{"line_number":100,"context_line":"            fake_consistencygroup.fake_consistencyobject_obj("},{"line_number":101,"context_line":"                self.ctxt, **{\u0027consistencygroup_id\u0027: 1, \u0027host\u0027: None})"},{"line_number":102,"context_line":"        consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":103,"context_line":"        spec \u003d {\u0027volume_id\u0027: None,"},{"line_number":104,"context_line":"                \u0027source_volid\u0027: None,"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_1a694e8c","line":101,"updated":"2015-07-28 14:56:48.000000000","message":"This is a weird way to call it:\n\n  self.ctxt, consistencygroup_id\u003d1, host\u003dNone)","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"dfbfe2b60255bee8f3b4b799a375fa3a00a44c6c","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        props \u003d {}"},{"line_number":99,"context_line":"        consistencygroup_obj \u003d \\"},{"line_number":100,"context_line":"            fake_consistencygroup.fake_consistencyobject_obj("},{"line_number":101,"context_line":"                self.ctxt, **{\u0027consistencygroup_id\u0027: 1, \u0027host\u0027: None})"},{"line_number":102,"context_line":"        consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":103,"context_line":"        spec \u003d {\u0027volume_id\u0027: None,"},{"line_number":104,"context_line":"                \u0027source_volid\u0027: None,"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_bd50d4d5","line":101,"updated":"2015-07-30 16:54:55.000000000","message":"I still think this is a weird way of calling a method with named arguments.","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"98dd5a8a1e2e4bfee4e471230eb9714b98dbfb2a","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        props \u003d {}"},{"line_number":99,"context_line":"        consistencygroup_obj \u003d \\"},{"line_number":100,"context_line":"            fake_consistencygroup.fake_consistencyobject_obj("},{"line_number":101,"context_line":"                self.ctxt, **{\u0027consistencygroup_id\u0027: 1, \u0027host\u0027: None})"},{"line_number":102,"context_line":"        consistencygroup_get_by_id.return_value \u003d consistencygroup_obj"},{"line_number":103,"context_line":"        spec \u003d {\u0027volume_id\u0027: None,"},{"line_number":104,"context_line":"                \u0027source_volid\u0027: None,"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_fd3adc33","line":101,"in_reply_to":"3a50d1a3_bd50d4d5","updated":"2015-07-30 17:11:16.000000000","message":"Done","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":4750,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4751,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4752,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":4753,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":4754,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4755,"context_line":"            self.context,"},{"line_number":4756,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_20acd18a","line":4753,"updated":"2015-07-03 13:46:11.000000000","message":"For consistency, and because it would look nicer, it should be done the same way in all tests (like in  test_update_consistencygroup):\n\n - Create the group variable using group[\u0027id\u0027]\n - Use group.id instead of group_id","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":4750,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4751,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4752,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":4753,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":4754,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4755,"context_line":"            self.context,"},{"line_number":4756,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_6a2b8895","line":4753,"in_reply_to":"ba3cc151_20acd18a","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":4766,"context_line":"            volume_type\u003d\u0027type1,type2\u0027,"},{"line_number":4767,"context_line":"            cgsnapshot_id\u003dcgsnapshot_id)"},{"line_number":4768,"context_line":"        group2_id \u003d group2[\u0027id\u0027]"},{"line_number":4769,"context_line":"        group2 \u003d objects.ConsistencyGroup.get_by_id(self.context, group2_id)"},{"line_number":4770,"context_line":"        volume2 \u003d tests_utils.create_volume("},{"line_number":4771,"context_line":"            self.context,"},{"line_number":4772,"context_line":"            consistencygroup_id\u003dgroup2_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_40a795a6","line":4769,"updated":"2015-07-03 13:46:11.000000000","message":"Same here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":4766,"context_line":"            volume_type\u003d\u0027type1,type2\u0027,"},{"line_number":4767,"context_line":"            cgsnapshot_id\u003dcgsnapshot_id)"},{"line_number":4768,"context_line":"        group2_id \u003d group2[\u0027id\u0027]"},{"line_number":4769,"context_line":"        group2 \u003d objects.ConsistencyGroup.get_by_id(self.context, group2_id)"},{"line_number":4770,"context_line":"        volume2 \u003d tests_utils.create_volume("},{"line_number":4771,"context_line":"            self.context,"},{"line_number":4772,"context_line":"            consistencygroup_id\u003dgroup2_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_0a175c55","line":4769,"in_reply_to":"ba3cc151_40a795a6","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4920,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4921,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":4922,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":4923,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4924,"context_line":"            self.context,"},{"line_number":4925,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_00bc2db9","line":4922,"updated":"2015-07-03 13:46:11.000000000","message":"Here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4920,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4921,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":4922,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":4923,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4924,"context_line":"            self.context,"},{"line_number":4925,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_ca10945c","line":4922,"in_reply_to":"ba3cc151_00bc2db9","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":5017,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5018,"context_line":""},{"line_number":5019,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":5020,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":5021,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5022,"context_line":"            self.context,"},{"line_number":5023,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_c0b165e1","line":5020,"updated":"2015-07-03 13:46:11.000000000","message":"Here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":5017,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5018,"context_line":""},{"line_number":5019,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":5020,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":5021,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5022,"context_line":"            self.context,"},{"line_number":5023,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_8a0b6c2b","line":5020,"in_reply_to":"ba3cc151_c0b165e1","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5056,"context_line":""},{"line_number":5057,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":5058,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":5059,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5060,"context_line":"            self.context,"},{"line_number":5061,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_c0a08544","line":5058,"updated":"2015-07-03 13:46:11.000000000","message":"And here","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5056,"context_line":""},{"line_number":5057,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":5058,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":5059,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5060,"context_line":"            self.context,"},{"line_number":5061,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_6a02a80d","line":5058,"in_reply_to":"ba3cc151_c0a08544","updated":"2015-07-06 10:59:19.000000000","message":"Done","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":4750,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4751,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4752,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":4753,"context_line":"        group_id \u003d group.id"},{"line_number":4754,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4755,"context_line":"            self.context,"},{"line_number":4756,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_adee78b2","line":4753,"updated":"2015-07-06 08:49:47.000000000","message":"Why use a variable group_id when you can use directly group.id?","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":4750,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4751,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4752,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":4753,"context_line":"        group_id \u003d group.id"},{"line_number":4754,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4755,"context_line":"            self.context,"},{"line_number":4756,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_917cb121","line":4753,"in_reply_to":"ba3cc151_adee78b2","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":4766,"context_line":"            volume_type\u003d\u0027type1,type2\u0027,"},{"line_number":4767,"context_line":"            cgsnapshot_id\u003dcgsnapshot_id)"},{"line_number":4768,"context_line":"        group2 \u003d objects.ConsistencyGroup.get_by_id(self.context, group2[\u0027id\u0027])"},{"line_number":4769,"context_line":"        group2_id \u003d group2.id"},{"line_number":4770,"context_line":"        volume2 \u003d tests_utils.create_volume("},{"line_number":4771,"context_line":"            self.context,"},{"line_number":4772,"context_line":"            consistencygroup_id\u003dgroup2_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_4d2a4ce9","line":4769,"updated":"2015-07-06 08:49:47.000000000","message":"Same here with group2_id and group2.id","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":4766,"context_line":"            volume_type\u003d\u0027type1,type2\u0027,"},{"line_number":4767,"context_line":"            cgsnapshot_id\u003dcgsnapshot_id)"},{"line_number":4768,"context_line":"        group2 \u003d objects.ConsistencyGroup.get_by_id(self.context, group2[\u0027id\u0027])"},{"line_number":4769,"context_line":"        group2_id \u003d group2.id"},{"line_number":4770,"context_line":"        volume2 \u003d tests_utils.create_volume("},{"line_number":4771,"context_line":"            self.context,"},{"line_number":4772,"context_line":"            consistencygroup_id\u003dgroup2_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_5176293f","line":4769,"in_reply_to":"ba3cc151_4d2a4ce9","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4920,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4921,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":4922,"context_line":"        group_id \u003d group.id"},{"line_number":4923,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4924,"context_line":"            self.context,"},{"line_number":4925,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_6d2f10f7","line":4922,"updated":"2015-07-06 08:49:47.000000000","message":"And here","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":4919,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4920,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4921,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":4922,"context_line":"        group_id \u003d group.id"},{"line_number":4923,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4924,"context_line":"            self.context,"},{"line_number":4925,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_7171ed43","line":4922,"in_reply_to":"ba3cc151_6d2f10f7","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":5017,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5018,"context_line":""},{"line_number":5019,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":5020,"context_line":"        group_id \u003d group.id"},{"line_number":5021,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5022,"context_line":"            self.context,"},{"line_number":5023,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_0d344448","line":5020,"updated":"2015-07-06 08:49:47.000000000","message":"And here","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":5017,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5018,"context_line":""},{"line_number":5019,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":5020,"context_line":"        group_id \u003d group.id"},{"line_number":5021,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5022,"context_line":"            self.context,"},{"line_number":5023,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_d198f96c","line":5020,"in_reply_to":"ba3cc151_0d344448","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"40eb45e8cf15d4a347122a88272d5b6354402116","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5056,"context_line":""},{"line_number":5057,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":5058,"context_line":"        group_id \u003d group.id"},{"line_number":5059,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5060,"context_line":"            self.context,"},{"line_number":5061,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_cd3e5c29","line":5058,"updated":"2015-07-06 08:49:47.000000000","message":"And here","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":5055,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":5056,"context_line":""},{"line_number":5057,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group[\u0027id\u0027])"},{"line_number":5058,"context_line":"        group_id \u003d group.id"},{"line_number":5059,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":5060,"context_line":"            self.context,"},{"line_number":5061,"context_line":"            consistencygroup_id\u003dgroup_id,"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_b19e9552","line":5058,"in_reply_to":"ba3cc151_cd3e5c29","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"26703eab8c8e78b42404e6805ba0f60d1c0c313b","unresolved":false,"context_lines":[{"line_number":4674,"context_line":"        self.volume.update_consistencygroup(self.context, group,"},{"line_number":4675,"context_line":"                                            add_volumes\u003dvolume_id2,"},{"line_number":4676,"context_line":"                                            remove_volumes\u003dvolume_id)"},{"line_number":4677,"context_line":"        cg \u003d db.consistencygroup_get("},{"line_number":4678,"context_line":"            self.context,"},{"line_number":4679,"context_line":"            group.id)"},{"line_number":4680,"context_line":"        expected \u003d {"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_68225703","line":4677,"updated":"2015-07-07 13:56:29.000000000","message":"You should use objects.ConsistencyGroup.get_by_id().","commit_id":"5ea929bec9e0ec92a8fcb7983c0b971a17473a64"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cd197fda8ee3a2a710e425df827ac98403d7bdfc","unresolved":false,"context_lines":[{"line_number":4667,"context_line":"        self.assertDictMatch(expected, msg[\u0027payload\u0027])"},{"line_number":4668,"context_line":"        self.assertEqual("},{"line_number":4669,"context_line":"            group.id,"},{"line_number":4670,"context_line":"            db.consistencygroup_get(context.get_admin_context(),"},{"line_number":4671,"context_line":"                                    group.id).id)"},{"line_number":4672,"context_line":""},{"line_number":4673,"context_line":"        self.volume.delete_consistencygroup(self.context, group)"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_3aebeadd","line":4670,"updated":"2015-07-28 14:56:48.000000000","message":"Why not use objects.ConsistencyGroup.get_by_id?","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cd197fda8ee3a2a710e425df827ac98403d7bdfc","unresolved":false,"context_lines":[{"line_number":4671,"context_line":"                                    group.id).id)"},{"line_number":4672,"context_line":""},{"line_number":4673,"context_line":"        self.volume.delete_consistencygroup(self.context, group)"},{"line_number":4674,"context_line":"        cg \u003d db.consistencygroup_get("},{"line_number":4675,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":4676,"context_line":"            group.id)"},{"line_number":4677,"context_line":"        self.assertEqual(\u0027deleted\u0027, cg[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_7ae5f206","line":4674,"updated":"2015-07-28 14:56:48.000000000","message":"Same here","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cd197fda8ee3a2a710e425df827ac98403d7bdfc","unresolved":false,"context_lines":[{"line_number":4750,"context_line":"        msg \u003d self.notifier.notifications[8]"},{"line_number":4751,"context_line":"        self.assertEqual(\u0027consistencygroup.update.end\u0027, msg[\u0027event_type\u0027])"},{"line_number":4752,"context_line":"        self.assertDictMatch(expected, msg[\u0027payload\u0027])"},{"line_number":4753,"context_line":"        cgvolumes \u003d db.volume_get_all_by_group(self.context, group.id)"},{"line_number":4754,"context_line":"        cgvol_ids \u003d [cgvol[\u0027id\u0027] for cgvol in cgvolumes]"},{"line_number":4755,"context_line":"        # Verify volume is removed."},{"line_number":4756,"context_line":"        self.assertNotIn(volume_id, cgvol_ids)"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_5aa4b6a4","line":4753,"updated":"2015-07-28 14:56:48.000000000","message":"Why not use the object method?","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7e76b220edf080e8f2eefe2539ba709fff03f4e7","unresolved":false,"context_lines":[{"line_number":4667,"context_line":"        self.assertDictMatch(expected, msg[\u0027payload\u0027])"},{"line_number":4668,"context_line":"        self.assertEqual("},{"line_number":4669,"context_line":"            group.id,"},{"line_number":4670,"context_line":"            db.consistencygroup_get(context.get_admin_context(),"},{"line_number":4671,"context_line":"                                    group.id).id)"},{"line_number":4672,"context_line":""},{"line_number":4673,"context_line":"        self.volume.delete_consistencygroup(self.context, group)"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_94db7821","line":4670,"updated":"2015-07-30 14:58:00.000000000","message":"You should switch this to use objects.ConsistencyGroup.get_by_id.  But it can be done in a follow up patch.","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"98dd5a8a1e2e4bfee4e471230eb9714b98dbfb2a","unresolved":false,"context_lines":[{"line_number":4667,"context_line":"        self.assertDictMatch(expected, msg[\u0027payload\u0027])"},{"line_number":4668,"context_line":"        self.assertEqual("},{"line_number":4669,"context_line":"            group.id,"},{"line_number":4670,"context_line":"            db.consistencygroup_get(context.get_admin_context(),"},{"line_number":4671,"context_line":"                                    group.id).id)"},{"line_number":4672,"context_line":""},{"line_number":4673,"context_line":"        self.volume.delete_consistencygroup(self.context, group)"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_2fd7b1c0","line":4670,"in_reply_to":"3a50d1a3_94db7821","updated":"2015-07-30 17:11:16.000000000","message":"I have moved it out to other patch. This patch is huge enough.","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"7e76b220edf080e8f2eefe2539ba709fff03f4e7","unresolved":false,"context_lines":[{"line_number":4671,"context_line":"                                    group.id).id)"},{"line_number":4672,"context_line":""},{"line_number":4673,"context_line":"        self.volume.delete_consistencygroup(self.context, group)"},{"line_number":4674,"context_line":"        cg \u003d db.consistencygroup_get("},{"line_number":4675,"context_line":"            context.get_admin_context(read_deleted\u003d\u0027yes\u0027),"},{"line_number":4676,"context_line":"            group.id)"},{"line_number":4677,"context_line":"        self.assertEqual(\u0027deleted\u0027, cg[\u0027status\u0027])"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_f4bf5ca8","line":4674,"updated":"2015-07-30 14:58:00.000000000","message":"Ditto","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"0ad2de45f6b1461e7d4a12a89b5ed48a15af2c1e","unresolved":false,"context_lines":[{"line_number":4850,"context_line":"            \u0027consistencygroup_id\u0027: group2.id,"},{"line_number":4851,"context_line":"        }"},{"line_number":4852,"context_line":"        self.assertEqual(\u0027available\u0027, cg2.status)"},{"line_number":4853,"context_line":"        self.assertEqual(group2.id, cg2[\u0027id\u0027])"},{"line_number":4854,"context_line":"        self.assertEqual(cgsnapshot_id, cg2[\u0027cgsnapshot_id\u0027])"},{"line_number":4855,"context_line":"        self.assertIsNone(cg2[\u0027source_cgid\u0027])"},{"line_number":4856,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"1a4dcd0f_b9cc3dbc","line":4853,"updated":"2015-08-10 19:42:12.000000000","message":"cg2.id","commit_id":"08ee6c4893359ccce9eaef45034d292c32b93529"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"878046f14f99499b3f5ebe0bed74fbcf7148d2e9","unresolved":false,"context_lines":[{"line_number":4850,"context_line":"            \u0027consistencygroup_id\u0027: group2.id,"},{"line_number":4851,"context_line":"        }"},{"line_number":4852,"context_line":"        self.assertEqual(\u0027available\u0027, cg2.status)"},{"line_number":4853,"context_line":"        self.assertEqual(group2.id, cg2[\u0027id\u0027])"},{"line_number":4854,"context_line":"        self.assertEqual(cgsnapshot_id, cg2[\u0027cgsnapshot_id\u0027])"},{"line_number":4855,"context_line":"        self.assertIsNone(cg2[\u0027source_cgid\u0027])"},{"line_number":4856,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"1a4dcd0f_94b5887f","line":4853,"in_reply_to":"1a4dcd0f_b4f524ee","updated":"2015-08-10 20:06:33.000000000","message":"Sounds good.","commit_id":"08ee6c4893359ccce9eaef45034d292c32b93529"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"604fda5bfb9b47a5531b2ecdb1d415642c4c9a4c","unresolved":false,"context_lines":[{"line_number":4850,"context_line":"            \u0027consistencygroup_id\u0027: group2.id,"},{"line_number":4851,"context_line":"        }"},{"line_number":4852,"context_line":"        self.assertEqual(\u0027available\u0027, cg2.status)"},{"line_number":4853,"context_line":"        self.assertEqual(group2.id, cg2[\u0027id\u0027])"},{"line_number":4854,"context_line":"        self.assertEqual(cgsnapshot_id, cg2[\u0027cgsnapshot_id\u0027])"},{"line_number":4855,"context_line":"        self.assertIsNone(cg2[\u0027source_cgid\u0027])"},{"line_number":4856,"context_line":""}],"source_content_type":"text/x-python","patch_set":60,"id":"1a4dcd0f_b4f524ee","line":4853,"in_reply_to":"1a4dcd0f_b9cc3dbc","updated":"2015-08-10 19:52:39.000000000","message":"it\u0027s not the only, missed change. But this patch is already huge enough. So we decide that all changes connected with test will be fixed in follow-up patch. https://review.openstack.org/#/c/207544/","commit_id":"08ee6c4893359ccce9eaef45034d292c32b93529"}],"cinder/volume/api.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"13c65ed61e3dd027158b78bf1a1e545497f0fa4e","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                msg \u003d _(\"volume_type must be provided when creating \""},{"line_number":214,"context_line":"                        \"a volume in a consistency group.\")"},{"line_number":215,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":216,"context_line":"            cg_voltypeids \u003d consistencygroup.get(\u0027volume_type_id\u0027, None)"},{"line_number":217,"context_line":"            if volume_type.get(\u0027id\u0027) not in cg_voltypeids:"},{"line_number":218,"context_line":"                msg \u003d _(\"Invalid volume_type provided: %s (requested \""},{"line_number":219,"context_line":"                        \"type must be supported by this consistency \""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_e303160c","line":216,"updated":"2015-07-06 17:08:25.000000000","message":"The default return is None, so you do not need to specify it here.","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":213,"context_line":"                msg \u003d _(\"volume_type must be provided when creating \""},{"line_number":214,"context_line":"                        \"a volume in a consistency group.\")"},{"line_number":215,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"},{"line_number":216,"context_line":"            cg_voltypeids \u003d consistencygroup.get(\u0027volume_type_id\u0027, None)"},{"line_number":217,"context_line":"            if volume_type.get(\u0027id\u0027) not in cg_voltypeids:"},{"line_number":218,"context_line":"                msg \u003d _(\"Invalid volume_type provided: %s (requested \""},{"line_number":219,"context_line":"                        \"type must be supported by this consistency \""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_f4e96bb8","line":216,"in_reply_to":"ba3cc151_e303160c","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":672,"context_line":"            cgroup \u003d objects.ConsistencyGroup.get_by_id(context, cgroup_id)"},{"line_number":673,"context_line":"            if cgroup:"},{"line_number":674,"context_line":"                host \u003d cgroup.get(\u0027host\u0027, None)"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        elif snapshot_id and CONF.snapshot_same_host:"},{"line_number":677,"context_line":"            # NOTE(Rongze Zhu): A simple solution for bug 1008866."},{"line_number":678,"context_line":"            #"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_30ea8dad","line":675,"updated":"2015-06-22 14:27:01.000000000","message":"I don\u0027t think this newline is necessary.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                    snapshot_id\u003dsnapshot_id,"},{"line_number":718,"context_line":"                    image_id\u003dimage_id,"},{"line_number":719,"context_line":"                    source_volid\u003dsource_volid,"},{"line_number":720,"context_line":"                    source_replicaid\u003dsource_replicaid,"},{"line_number":721,"context_line":"                    consistencygroup_id\u003dcgroup_id)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def execute(self, context, **kwargs):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_7fd964f2","line":720,"updated":"2015-06-24 09:56:44.000000000","message":"Related to my volume.rpcapi comments - pass cgroup here.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"792d77bcd177d48afb73fcf784aa3f1c8a4d0ef3","unresolved":false,"context_lines":[{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        if cgroup_id:"},{"line_number":674,"context_line":"            cgroup \u003d objects.ConsistencyGroup.get_by_id(context, cgroup_id)"},{"line_number":675,"context_line":"            if cgroup:"},{"line_number":676,"context_line":"                host \u003d cgroup.host"},{"line_number":677,"context_line":"        elif snapshot_id and CONF.snapshot_same_host:"},{"line_number":678,"context_line":"            # NOTE(Rongze Zhu): A simple solution for bug 1008866."}],"source_content_type":"text/x-python","patch_set":49,"id":"3a50d1a3_6c1e92bc","line":675,"updated":"2015-07-22 19:23:41.000000000","message":"If I didn\u0027t miss anything, this always will be True. It invokes db_api. consistencygroup_get. If nothing is found, exception.ConsistencyGroupNotFound will be raised","commit_id":"ad78c113fb52d28f0269ffd87743341031cb4655"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5364369f170afde813cdcfe7a55dfff12e372c49","unresolved":false,"context_lines":[{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        if cgroup_id:"},{"line_number":674,"context_line":"            cgroup \u003d objects.ConsistencyGroup.get_by_id(context, cgroup_id)"},{"line_number":675,"context_line":"            if cgroup:"},{"line_number":676,"context_line":"                host \u003d cgroup.host"},{"line_number":677,"context_line":"        elif snapshot_id and CONF.snapshot_same_host:"},{"line_number":678,"context_line":"            # NOTE(Rongze Zhu): A simple solution for bug 1008866."}],"source_content_type":"text/x-python","patch_set":49,"id":"3a50d1a3_cbc8c557","line":675,"in_reply_to":"3a50d1a3_6c1e92bc","updated":"2015-07-23 11:21:17.000000000","message":"Seems that you\u0027re right, fixing it in the next patchset.","commit_id":"ad78c113fb52d28f0269ffd87743341031cb4655"}],"cinder/volume/manager.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":1897,"context_line":"    def create_consistencygroup(self, context, group_id):"},{"line_number":1898,"context_line":"        \"\"\"Creates the consistency group.\"\"\""},{"line_number":1899,"context_line":"        context \u003d context.elevated()"},{"line_number":1900,"context_line":"        group_ref \u003d objects.ConsistencyGroup.get_by_id(context, group_id)"},{"line_number":1901,"context_line":"        group_ref.host \u003d self.host"},{"line_number":1902,"context_line":""},{"line_number":1903,"context_line":"        status \u003d \u0027available\u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_90f27999","line":1900,"updated":"2015-06-22 14:27:01.000000000","message":"_ref suffix normally describes SQLAlchemy object. Probably group_obj or plain group would be better.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":1914,"context_line":"                                                               group_ref)"},{"line_number":1915,"context_line":""},{"line_number":1916,"context_line":"            if model_update:"},{"line_number":1917,"context_line":"                group_ref \u003d objects.ConsistencyGroup.get_by_id(context,"},{"line_number":1918,"context_line":"                                                               group_id)"},{"line_number":1919,"context_line":"                group_ref.update(model_update)"},{"line_number":1920,"context_line":"                group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_b0445db7","line":1917,"updated":"2015-06-22 14:27:01.000000000","message":"Aren\u0027t we already having the object in group_ref var?","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":1920,"context_line":"                group_ref.save()"},{"line_number":1921,"context_line":"        except Exception:"},{"line_number":1922,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1923,"context_line":"                group_ref \u003d objects.ConsistencyGroup.get_by_id(context,"},{"line_number":1924,"context_line":"                                                               group_id)"},{"line_number":1925,"context_line":"                group_ref.status \u003d \u0027error\u0027"},{"line_number":1926,"context_line":"                group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_100c2993","line":1923,"updated":"2015-06-22 14:27:01.000000000","message":"ditto","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":1928,"context_line":"                          group_ref.name)"},{"line_number":1929,"context_line":""},{"line_number":1930,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":1931,"context_line":"        group_ref \u003d objects.ConsistencyGroup.get_by_id(context, group_id)"},{"line_number":1932,"context_line":"        group_ref.status \u003d status"},{"line_number":1933,"context_line":"        group_ref.created_at \u003d now"},{"line_number":1934,"context_line":"        group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_b01bfdc9","line":1931,"updated":"2015-06-22 14:27:01.000000000","message":"ditto","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":1943,"context_line":"                           \u0027id\u0027: group_ref.id})"},{"line_number":1944,"context_line":"        return group_ref.id"},{"line_number":1945,"context_line":""},{"line_number":1946,"context_line":"    def create_consistencygroup_from_src(self, context, group_id,"},{"line_number":1947,"context_line":"                                         cgsnapshot_id\u003dNone):"},{"line_number":1948,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":1949,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_305dad79","line":1946,"updated":"2015-06-22 14:27:01.000000000","message":"It would be best to pass object instead of id here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":2001,"context_line":"                    self.db.volume_update(context, update[\u0027id\u0027], update)"},{"line_number":2002,"context_line":""},{"line_number":2003,"context_line":"            if model_update:"},{"line_number":2004,"context_line":"                group_ref \u003d objects.ConsistencyGroup.get_by_id(context,"},{"line_number":2005,"context_line":"                                                               group_id)"},{"line_number":2006,"context_line":"                group_ref.update(model_update)"},{"line_number":2007,"context_line":"                group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_d0db21ec","line":2004,"updated":"2015-06-22 14:27:01.000000000","message":"We already have group_ref.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":2008,"context_line":""},{"line_number":2009,"context_line":"        except Exception:"},{"line_number":2010,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2011,"context_line":"                group_ref \u003d objects.ConsistencyGroup.get_by_id(context,"},{"line_number":2012,"context_line":"                                                               group_id)"},{"line_number":2013,"context_line":"                group_ref.status \u003d \u0027error\u0027"},{"line_number":2014,"context_line":"                group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_f0d665c2","line":2011,"updated":"2015-06-22 14:27:01.000000000","message":"ditto","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":2030,"context_line":"                                         group_id\u003dgroup_id)"},{"line_number":2031,"context_line":"            self._update_allocated_capacity(vol)"},{"line_number":2032,"context_line":""},{"line_number":2033,"context_line":"        group_ref \u003d objects.ConsistencyGroup.get_by_id(context, group_id)"},{"line_number":2034,"context_line":"        group_ref.status \u003d status"},{"line_number":2035,"context_line":"        group_ref.created_at \u003d now"},{"line_number":2036,"context_line":"        group_ref.save()"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_10e8a97b","line":2033,"updated":"2015-06-22 14:27:01.000000000","message":"ditto","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"            sorted_snapshots.extend(found_snaps)"},{"line_number":2068,"context_line":""},{"line_number":2069,"context_line":"        return sorted_snapshots"},{"line_number":2070,"context_line":""},{"line_number":2071,"context_line":"    def _update_volume_from_src(self, context, vol, update, group_id\u003dNone):"},{"line_number":2072,"context_line":"        try:"},{"line_number":2073,"context_line":"            snapshot \u003d objects.Snapshot.get_by_id(context, vol[\u0027snapshot_id\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_b08e9dce","line":2070,"updated":"2015-06-22 14:27:01.000000000","message":"Can we pass object here instead of id?","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a005172191e67caeefb46b89b71c384212c3a408","unresolved":false,"context_lines":[{"line_number":2132,"context_line":"            self.stats[\u0027pools\u0027][pool] \u003d dict("},{"line_number":2133,"context_line":"                allocated_capacity_gb\u003dvol[\u0027size\u0027])"},{"line_number":2134,"context_line":""},{"line_number":2135,"context_line":"    def delete_consistencygroup(self, context, group_id):"},{"line_number":2136,"context_line":"        \"\"\"Deletes consistency group and the volumes in the group.\"\"\""},{"line_number":2137,"context_line":"        context \u003d context.elevated()"},{"line_number":2138,"context_line":"        group_ref \u003d objects.ConsistencyGroup.get_by_id(context, group_id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa32b979_3047ed78","line":2135,"updated":"2015-06-22 14:27:01.000000000","message":"It would be probably best to pass group here.","commit_id":"101b706e281a20329cfb70ecdd27a535b1e4316a"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":1935,"context_line":"        LOG.info(_LI(\"Create consistency group completed successfully.\"),"},{"line_number":1936,"context_line":"                 resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":1937,"context_line":"                           \u0027id\u0027: group.id})"},{"line_number":1938,"context_line":"        return group"},{"line_number":1939,"context_line":""},{"line_number":1940,"context_line":"    def create_consistencygroup_from_src(self, context, group,"},{"line_number":1941,"context_line":"                                         cgsnapshot_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_bade1a3c","line":1938,"updated":"2015-06-24 09:56:44.000000000","message":"Fun fact - this is a cast in volume.rpcapi so it seems that this return is ignored and non-necessary... You may safely remove it.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":2015,"context_line":"        for vol in volumes:"},{"line_number":2016,"context_line":"            update \u003d {\u0027status\u0027: status, \u0027created_at\u0027: now}"},{"line_number":2017,"context_line":"            self._update_volume_from_src(context, vol, update,"},{"line_number":2018,"context_line":"                                         group\u003dgroup)"},{"line_number":2019,"context_line":"            self._update_allocated_capacity(vol)"},{"line_number":2020,"context_line":""},{"line_number":2021,"context_line":"        group.status \u003d status"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_1f55b81c","line":2018,"updated":"2015-06-24 09:56:44.000000000","message":"Simple nit - you don\u0027t need to wrap this line.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":2372,"context_line":""},{"line_number":2373,"context_line":"        return True"},{"line_number":2374,"context_line":""},{"line_number":2375,"context_line":"    def create_cgsnapshot(self, context, group_id, cgsnapshot_id):"},{"line_number":2376,"context_line":"        \"\"\"Creates the cgsnapshot.\"\"\""},{"line_number":2377,"context_line":"        caller_context \u003d context"},{"line_number":2378,"context_line":"        context \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_7d492230","line":2375,"updated":"2015-07-03 13:46:11.000000000","message":"s/group_id/group\n\nSince you changed it in rpcapi","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"13c65ed61e3dd027158b78bf1a1e545497f0fa4e","unresolved":false,"context_lines":[{"line_number":1928,"context_line":""},{"line_number":1929,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":1930,"context_line":"        group.status \u003d status"},{"line_number":1931,"context_line":"        group.created_at \u003d now"},{"line_number":1932,"context_line":"        group.save()"},{"line_number":1933,"context_line":"        LOG.info(_LI(\"Consistency group %s: created successfully\"),"},{"line_number":1934,"context_line":"                 group.name)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_23b6de3d","line":1931,"updated":"2015-07-06 17:08:25.000000000","message":"group.created_at \u003d timeutils.utcnow()","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"8414bce35a65beaed04b7d1f2240149dee33e424","unresolved":false,"context_lines":[{"line_number":1928,"context_line":""},{"line_number":1929,"context_line":"        now \u003d timeutils.utcnow()"},{"line_number":1930,"context_line":"        group.status \u003d status"},{"line_number":1931,"context_line":"        group.created_at \u003d now"},{"line_number":1932,"context_line":"        group.save()"},{"line_number":1933,"context_line":"        LOG.info(_LI(\"Consistency group %s: created successfully\"),"},{"line_number":1934,"context_line":"                 group.name)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba3cc151_1131810b","line":1931,"in_reply_to":"ba3cc151_23b6de3d","updated":"2015-07-07 10:30:45.000000000","message":"Done","commit_id":"4d83b32444eda208a291059b59460dee50fd6ab4"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"26703eab8c8e78b42404e6805ba0f60d1c0c313b","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"        Update consistency group by adding volumes to the group,"},{"line_number":2258,"context_line":"        or removing volumes from the group."},{"line_number":2259,"context_line":"        \"\"\""},{"line_number":2260,"context_line":"        group \u003d self.db.consistencygroup_get(context, group_id)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        add_volumes_ref \u003d []"},{"line_number":2263,"context_line":"        remove_volumes_ref \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_a847ff75","side":"PARENT","line":2260,"updated":"2015-07-07 13:56:29.000000000","message":"This is probably here for a reason, like to refresh the object.  It might be a good idea to add a refresh method into your ConsistencyGroup and call it here.\n\n    @base.remotable\n    def refresh(self):\n        current \u003d self.__class__.get_by_id(self._context, self.id)\n\n        for field in self.fields:\n            # NOTE(thangp): Only update attributes that are already set. We \n            # do not want to unexpectedly trigger a lazy-load.\n            if self.obj_attr_is_set(field):\n                if self[field] !\u003d current[field]:\n                    self[field] \u003d current[field]\n        self.obj_reset_changes()","commit_id":"fc9cf5c5067fadd6f23ea131a2b3da770a5cb71d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c1b80884087fc14ef36704fa384c17bb1d8a55eb","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"        Update consistency group by adding volumes to the group,"},{"line_number":2258,"context_line":"        or removing volumes from the group."},{"line_number":2259,"context_line":"        \"\"\""},{"line_number":2260,"context_line":"        group \u003d self.db.consistencygroup_get(context, group_id)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        add_volumes_ref \u003d []"},{"line_number":2263,"context_line":"        remove_volumes_ref \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_b12e83f8","side":"PARENT","line":2260,"in_reply_to":"ba3cc151_5e35c643","updated":"2015-07-07 15:27:41.000000000","message":"The db model could have changed and I believe it was put here to refresh the data, so that the latest consistencygroup is passed to L2319 - self.driver.update_consistencygroup.  I believe it should still be there or at least a refresh should be called.","commit_id":"fc9cf5c5067fadd6f23ea131a2b3da770a5cb71d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e47b0c3cd50ba842aa5337ab3923866f617f61f3","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"        Update consistency group by adding volumes to the group,"},{"line_number":2258,"context_line":"        or removing volumes from the group."},{"line_number":2259,"context_line":"        \"\"\""},{"line_number":2260,"context_line":"        group \u003d self.db.consistencygroup_get(context, group_id)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        add_volumes_ref \u003d []"},{"line_number":2263,"context_line":"        remove_volumes_ref \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_5e35c643","side":"PARENT","line":2260,"in_reply_to":"ba3cc151_a847ff75","updated":"2015-07-07 15:13:28.000000000","message":"This was not done to refresh the ORM object, since we didn\u0027t have the object in the first place.  This method gets here from an RPC call that used to send only the ID, so we needed to get the ORM object to pass it to the notification method.  Now that we get the object in the call we don\u0027t need to retrieve it anymore.\n\nThis is OK as it is now.","commit_id":"fc9cf5c5067fadd6f23ea131a2b3da770a5cb71d"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"d1c828f93bdbf553827f6d4d2b758d5d319c3e91","unresolved":false,"context_lines":[{"line_number":2257,"context_line":"        Update consistency group by adding volumes to the group,"},{"line_number":2258,"context_line":"        or removing volumes from the group."},{"line_number":2259,"context_line":"        \"\"\""},{"line_number":2260,"context_line":"        group \u003d self.db.consistencygroup_get(context, group_id)"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"        add_volumes_ref \u003d []"},{"line_number":2263,"context_line":"        remove_volumes_ref \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba3cc151_71155b47","side":"PARENT","line":2260,"in_reply_to":"ba3cc151_b12e83f8","updated":"2015-07-07 15:33:32.000000000","message":"Actually, nevermind.  You are correct.","commit_id":"fc9cf5c5067fadd6f23ea131a2b3da770a5cb71d"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53d7ddcdb26fb8dc74357cad93b13b89c7a7db65","unresolved":false,"context_lines":[{"line_number":2375,"context_line":""},{"line_number":2376,"context_line":"        return True"},{"line_number":2377,"context_line":""},{"line_number":2378,"context_line":"    def create_cgsnapshot(self, context, group, cgsnapshot_id):"},{"line_number":2379,"context_line":"        \"\"\"Creates the cgsnapshot.\"\"\""},{"line_number":2380,"context_line":"        caller_context \u003d context"},{"line_number":2381,"context_line":"        context \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a41bdd9_59d5d5b6","line":2378,"updated":"2015-07-14 10:07:38.000000000","message":"Group is unused here, maybe we can remove it?","commit_id":"db461624deaa15585970e7083b83fb26bc5a892c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1c1f6a11880d77f59a3f6cb526b782aed455834a","unresolved":false,"context_lines":[{"line_number":2375,"context_line":""},{"line_number":2376,"context_line":"        return True"},{"line_number":2377,"context_line":""},{"line_number":2378,"context_line":"    def create_cgsnapshot(self, context, group, cgsnapshot_id):"},{"line_number":2379,"context_line":"        \"\"\"Creates the cgsnapshot.\"\"\""},{"line_number":2380,"context_line":"        caller_context \u003d context"},{"line_number":2381,"context_line":"        context \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a41bdd9_02e4b10a","line":2378,"in_reply_to":"9a41bdd9_59d5d5b6","updated":"2015-07-14 12:42:40.000000000","message":"The CGSnapshot object patch removes it","commit_id":"db461624deaa15585970e7083b83fb26bc5a892c"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"11050a0284ff832a56803299b5e2a299f92fd687","unresolved":false,"context_lines":[{"line_number":187,"context_line":""},{"line_number":188,"context_line":"class VolumeManager(manager.SchedulerDependentManager):"},{"line_number":189,"context_line":"    \"\"\"Manages attachable block storage devices.\"\"\""},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    RPC_API_VERSION \u003d \u00271.24\u0027"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":53,"id":"3a50d1a3_945e1878","line":190,"updated":"2015-07-30 15:00:25.000000000","message":"This needs to be bumped to \u00271.25\u0027.","commit_id":"6f8305963e2666fbdf8a6c3faac75e80feac64cb"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"c63ce0af2d0926ff3e3bb2773b1ac28cbae60460","unresolved":false,"context_lines":[{"line_number":1921,"context_line":"        try:"},{"line_number":1922,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":1923,"context_line":""},{"line_number":1924,"context_line":"            LOG.info(_LI(\"Consistency group %s: creating\"), group.name)"},{"line_number":1925,"context_line":"            model_update \u003d self.driver.create_consistencygroup(context,"},{"line_number":1926,"context_line":"                                                               group)"},{"line_number":1927,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"1a4dcd0f_6bf6fb90","line":1924,"updated":"2015-08-04 11:44:34.000000000","message":"Missing . after creating.","commit_id":"8f4b3f9a735e3d7b9dd8b2cdbb18cfe4bed3037f"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"c63ce0af2d0926ff3e3bb2773b1ac28cbae60460","unresolved":false,"context_lines":[{"line_number":1932,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":1933,"context_line":"                group.status \u003d \u0027error\u0027"},{"line_number":1934,"context_line":"                group.save()"},{"line_number":1935,"context_line":"                LOG.error(_LE(\"Consistency group %s: create failed\"),"},{"line_number":1936,"context_line":"                          group.name)"},{"line_number":1937,"context_line":""},{"line_number":1938,"context_line":"        group.status \u003d status"}],"source_content_type":"text/x-python","patch_set":55,"id":"1a4dcd0f_eb30cb58","line":1935,"updated":"2015-08-04 11:44:34.000000000","message":"Missing . after failed.","commit_id":"8f4b3f9a735e3d7b9dd8b2cdbb18cfe4bed3037f"},{"author":{"_account_id":16883,"name":"huyang","email":"huyang1@huawei.com","username":"huyang"},"change_message_id":"c63ce0af2d0926ff3e3bb2773b1ac28cbae60460","unresolved":false,"context_lines":[{"line_number":1938,"context_line":"        group.status \u003d status"},{"line_number":1939,"context_line":"        group.created_at \u003d timeutils.utcnow()"},{"line_number":1940,"context_line":"        group.save()"},{"line_number":1941,"context_line":"        LOG.info(_LI(\"Consistency group %s: created successfully\"),"},{"line_number":1942,"context_line":"                 group.name)"},{"line_number":1943,"context_line":""},{"line_number":1944,"context_line":"        self._notify_about_consistencygroup_usage("}],"source_content_type":"text/x-python","patch_set":55,"id":"1a4dcd0f_0b2177fb","line":1941,"updated":"2015-08-04 11:44:34.000000000","message":"Missing . after successfully. Keep consistent with other LOG.info, such as line 1947.","commit_id":"8f4b3f9a735e3d7b9dd8b2cdbb18cfe4bed3037f"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                      allow_reschedule\u003dTrue,"},{"line_number":127,"context_line":"                      snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":128,"context_line":"                      source_replicaid\u003dNone,"},{"line_number":129,"context_line":"                      source_volid\u003dNone,"},{"line_number":130,"context_line":"                      consistencygroup_id\u003dNone,"},{"line_number":131,"context_line":"                      cgsnapshot_id\u003dNone):"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_1fbb7810","line":129,"updated":"2015-06-24 09:56:44.000000000","message":"We should pass consistency group object here as well. I\u0027ve checked that this is quite easy to do - everywhere this method is used an object is available.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"360f6b115a58d9575f91fb38810e2eda941e5e10","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                   snapshot_id\u003dsnapshot_id,"},{"line_number":142,"context_line":"                   image_id\u003dimage_id,"},{"line_number":143,"context_line":"                   source_replicaid\u003dsource_replicaid,"},{"line_number":144,"context_line":"                   source_volid\u003dsource_volid,"},{"line_number":145,"context_line":"                   consistencygroup_id\u003dconsistencygroup_id,"},{"line_number":146,"context_line":"                   cgsnapshot_id\u003dcgsnapshot_id)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"fa32b979_dfa190aa","line":144,"updated":"2015-06-24 09:56:44.000000000","message":"Same here.","commit_id":"7f5032a51f4a811d5233d98c1809016433048afa"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"f119fc58ab9fc6b5f1383dafffbb56251954c22a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        1.21 - Adds update_consistencygroup."},{"line_number":65,"context_line":"        1.22 - Adds create_consistencygroup_from_src."},{"line_number":66,"context_line":"        1.23 - Adds attachment_id to detach_volume"},{"line_number":67,"context_line":"        1.24 - Adds support for sending objects over RPC in"},{"line_number":68,"context_line":"               create_consistencygroup(), create_consistencygroup_from_src(),"},{"line_number":69,"context_line":"               update_consistencygroup() and delete_consistencygroup()"},{"line_number":70,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_fd63f2ae","line":67,"updated":"2015-07-03 13:46:11.000000000","message":"s/objects/ConsistencyGroup objects\n\nSince you are not sending cgsnapshot objects in this patch","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"93ce64a4cdc58fbff77217e34348933a00763a45","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        1.21 - Adds update_consistencygroup."},{"line_number":65,"context_line":"        1.22 - Adds create_consistencygroup_from_src."},{"line_number":66,"context_line":"        1.23 - Adds attachment_id to detach_volume"},{"line_number":67,"context_line":"        1.24 - Adds support for sending objects over RPC in"},{"line_number":68,"context_line":"               create_consistencygroup(), create_consistencygroup_from_src(),"},{"line_number":69,"context_line":"               update_consistencygroup() and delete_consistencygroup()"},{"line_number":70,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_fd80c04b","line":67,"in_reply_to":"ba3cc151_fd63f2ae","updated":"2015-07-06 10:59:19.000000000","message":"Done. By the way shouldn\u0027t we remove a group argument? It\u0027s not used.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e830bfaa66efeca1ad54c3faa9bdd4ab193f1d58","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        1.21 - Adds update_consistencygroup."},{"line_number":65,"context_line":"        1.22 - Adds create_consistencygroup_from_src."},{"line_number":66,"context_line":"        1.23 - Adds attachment_id to detach_volume"},{"line_number":67,"context_line":"        1.24 - Adds support for sending objects over RPC in"},{"line_number":68,"context_line":"               create_consistencygroup(), create_consistencygroup_from_src(),"},{"line_number":69,"context_line":"               update_consistencygroup() and delete_consistencygroup()"},{"line_number":70,"context_line":"    \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba3cc151_45dc5c46","line":67,"in_reply_to":"ba3cc151_fd80c04b","updated":"2015-07-06 11:16:28.000000000","message":"The patch that implements cgsnapshot objects is doing that.","commit_id":"b22d055614f72306594c4eb7d02bb50375b43f4f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53d7ddcdb26fb8dc74357cad93b13b89c7a7db65","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        host \u003d utils.extract_host(group[\u0027host\u0027])"},{"line_number":112,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.18\u0027)"},{"line_number":113,"context_line":"        cctxt.cast(ctxt, \u0027create_cgsnapshot\u0027,"},{"line_number":114,"context_line":"                   group\u003dgroup[\u0027id\u0027],"},{"line_number":115,"context_line":"                   cgsnapshot_id\u003dcgsnapshot[\u0027id\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, host):"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a41bdd9_79ef7987","line":114,"updated":"2015-07-14 10:07:38.000000000","message":"We just changed parameter name here. Turns out it\u0027s unused in the manager, so best idea is probably to remove it and add proper comment to API version history comment.","commit_id":"db461624deaa15585970e7083b83fb26bc5a892c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1c1f6a11880d77f59a3f6cb526b782aed455834a","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        host \u003d utils.extract_host(group[\u0027host\u0027])"},{"line_number":112,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.18\u0027)"},{"line_number":113,"context_line":"        cctxt.cast(ctxt, \u0027create_cgsnapshot\u0027,"},{"line_number":114,"context_line":"                   group\u003dgroup[\u0027id\u0027],"},{"line_number":115,"context_line":"                   cgsnapshot_id\u003dcgsnapshot[\u0027id\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, host):"}],"source_content_type":"text/x-python","patch_set":44,"id":"9a41bdd9_22e8d5b3","line":114,"in_reply_to":"9a41bdd9_79ef7987","updated":"2015-07-14 12:42:40.000000000","message":"That\u0027s been removed as well in the CGSnapshot Object patch.","commit_id":"db461624deaa15585970e7083b83fb26bc5a892c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cd197fda8ee3a2a710e425df827ac98403d7bdfc","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        host \u003d utils.extract_host(group[\u0027host\u0027])"},{"line_number":116,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.18\u0027)"},{"line_number":117,"context_line":"        cctxt.cast(ctxt, \u0027create_cgsnapshot\u0027,"},{"line_number":118,"context_line":"                   group\u003dgroup[\u0027id\u0027],"},{"line_number":119,"context_line":"                   cgsnapshot_id\u003dcgsnapshot[\u0027id\u0027])"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, host):"}],"source_content_type":"text/x-python","patch_set":52,"id":"3a50d1a3_1017edee","line":118,"updated":"2015-07-28 14:56:48.000000000","message":"It should be group, not group[\u0027id\u0027], but since group is not being used, and cgsnapshot versioned object patch removes it, it doesn\u0027t matter.","commit_id":"ce65a575d7c386cc7f89a5fe1af9b907da4bec93"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"992fe9e38c2cffa3764bb79d6d067fcee3146220","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def create_cgsnapshot(self, ctxt, group, cgsnapshot):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        host \u003d utils.extract_host(group[\u0027host\u0027])"},{"line_number":116,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.18\u0027)"},{"line_number":117,"context_line":"        cctxt.cast(ctxt, \u0027create_cgsnapshot\u0027,"},{"line_number":118,"context_line":"                   group\u003dgroup,"},{"line_number":119,"context_line":"                   cgsnapshot_id\u003dcgsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":54,"id":"1a4dcd0f_fe517463","line":116,"updated":"2015-08-04 08:47:37.000000000","message":"This version should be bumped up as well, but as it will be bumped up again in dependent CGSnapshot patch I don\u0027t find that blocking.","commit_id":"175589a34fcd6da8657d19d8055790dea3580f2b"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"86e83c5a695c2c24c4bbb7548e3f3e17eac0e6d2","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    def create_cgsnapshot(self, ctxt, group, cgsnapshot):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        host \u003d utils.extract_host(group[\u0027host\u0027])"},{"line_number":116,"context_line":"        cctxt \u003d self.client.prepare(server\u003dhost, version\u003d\u00271.18\u0027)"},{"line_number":117,"context_line":"        cctxt.cast(ctxt, \u0027create_cgsnapshot\u0027,"},{"line_number":118,"context_line":"                   group\u003dgroup,"},{"line_number":119,"context_line":"                   cgsnapshot_id\u003dcgsnapshot[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":54,"id":"1a4dcd0f_5773abb1","line":116,"in_reply_to":"1a4dcd0f_fe517463","updated":"2015-08-04 09:14:27.000000000","message":"Let\u0027s not make exception here, next patch updates version to 1.26.","commit_id":"175589a34fcd6da8657d19d8055790dea3580f2b"}]}
