)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","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":"CGSnapshots"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"ba3cc151_e77efbe2","line":11,"updated":"2015-07-03 15:36:34.000000000","message":"It should mention that it doesn\u0027t update drivers to use new objects.","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"8405eb2e8ba2a491f626aa95fcaee972e3749787","unresolved":false,"context_lines":[{"line_number":7,"context_line":"CGSnapshot Object"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to"},{"line_number":10,"context_line":"CGSnapshots"},{"line_number":11,"context_line":"Drivers need to be updated in the other commit."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partial-Implements: blueprint cinder-objects"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_a6da0b16","line":10,"updated":"2015-07-06 13:39:37.000000000","message":"Line 10 content can be added in line 9 with a period in the end since the length of resulted line would not exceed characters limit.\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"67d1f5969489a719c45efb36a2d3aa64957e790c","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":"CGSnapshots"},{"line_number":11,"context_line":"Drivers need to be updated in the other commit."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba3cc151_881fe2b6","line":11,"updated":"2015-07-06 09:01:57.000000000","message":"s/in the other commit/in another patch","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"64625964307253befcdacc87b3b25feec415e98b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to CGSnapshots."},{"line_number":10,"context_line":"Drivers need to be updated in in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"9a41bdd9_c2628e16","line":12,"updated":"2015-07-17 12:57:15.000000000","message":"This link doesn\u0027t seem to bring me to the blueprint. It brings me instead to a failed launchpad search. Can you double check that its right?","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"3f2b5dd313dacf1195011843e00d627b22e5387d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to CGSnapshots."},{"line_number":10,"context_line":"Drivers need to be updated in in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"9a41bdd9_9945d818","line":12,"in_reply_to":"9a41bdd9_c2628e16","updated":"2015-07-17 13:23:45.000000000","message":"Yes, this should be correct.  The link it should resolve to is: https://blueprints.launchpad.net/cinder/+spec/cinder-objects","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"92eaa7b55aa3c377d0eaa965163d4b4d1106b7fe","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Drivers need to be updated in in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"1a4dcd0f_59fc4772","line":13,"updated":"2015-08-14 09:49:08.000000000","message":"All footer lines should be together, no empty lines in between.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"586ee5ef2305a0c27b572d971f066736d50e6c23","unresolved":false,"context_lines":[{"line_number":7,"context_line":"CGSnapshot Object"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to CGSnapshots."},{"line_number":10,"context_line":"Drivers need to be updated in in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"da20952f_4038a9d3","line":10,"updated":"2015-08-27 14:43:16.000000000","message":"if you do another update, please remove one \u0027in\u0027.","commit_id":"378fdaf68d72424ab7aaafd24f89a0e04b1e3d12"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"acf12759164d35802764ec0ebdd20c2fbacec498","unresolved":false,"context_lines":[{"line_number":7,"context_line":"CGSnapshot Object"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to CGSnapshots."},{"line_number":10,"context_line":"Drivers need to be updated in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"da20952f_a4d77022","line":10,"updated":"2015-09-02 03:49:36.000000000","message":"Can you elaborate on what\u0027s required here?  If this goes in for L, drivers won\u0027t have the opportunity to update at this point.","commit_id":"260fa24035742f81e624c4ddfb7d47c42cedfb1a"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"86002a878cb39ed83d393d862f2692f7597b05b0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"CGSnapshot Object"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds VersionedObjects abstraction layer to CGSnapshots."},{"line_number":10,"context_line":"Drivers need to be updated in another patch."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Partial-Implements: blueprint cinder-objects"},{"line_number":13,"context_line":"Change-Id: Ie4cdd1ffae15a93bff756ad278ca680f9f420748"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":37,"id":"da20952f_a6a3ea4e","line":10,"in_reply_to":"da20952f_a4d77022","updated":"2015-09-02 09:54:44.000000000","message":"That was my fault. No updates in drivers are required.","commit_id":"260fa24035742f81e624c4ddfb7d47c42cedfb1a"}],"cinder/consistencygroup/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        for vol in volumes:"},{"line_number":262,"context_line":"            # Update the host field for the volume."},{"line_number":263,"context_line":"            self.db.volume_update(context, vol[\u0027id\u0027],"},{"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, cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_f6f0daff","line":264,"updated":"2015-06-26 04:55:26.000000000","message":"group.host","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1eec91bf80617a7f1ad641c1220bda23ab98216f","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                                             group.host)"},{"line_number":663,"context_line":""},{"line_number":664,"context_line":"    def update_cgsnapshot(self, context, cgsnapshot, fields):"},{"line_number":665,"context_line":"        self.db.cgsnapshot_update(context, cgsnapshot[\u0027id\u0027], fields)"},{"line_number":666,"context_line":""},{"line_number":667,"context_line":"    def get_cgsnapshot(self, context, cgsnapshot_id):"},{"line_number":668,"context_line":"        check_policy(context, \u0027get_cgsnapshot\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_4724605f","line":665,"updated":"2015-06-26 12:54:48.000000000","message":"This should also use CGsnapshot object.","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":656,"context_line":"            raise exception.InvalidCgSnapshot(reason\u003dmsg)"},{"line_number":657,"context_line":"        cgsnapshot.update({\u0027status\u0027: \u0027deleting\u0027})"},{"line_number":658,"context_line":"        cgsnapshot.save()"},{"line_number":659,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":660,"context_line":"            context, cgsnapshot.consistencygroup_id)"},{"line_number":661,"context_line":"        self.volume_rpcapi.delete_cgsnapshot(context.elevated(), cgsnapshot,"},{"line_number":662,"context_line":"                                             group.host)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_4c0fce36","line":659,"updated":"2015-07-03 15:36:34.000000000","message":"Why don\u0027t we use `group \u003d cgsnapshot.consistencygroup` instead?","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":656,"context_line":"            raise exception.InvalidCgSnapshot(reason\u003dmsg)"},{"line_number":657,"context_line":"        cgsnapshot.update({\u0027status\u0027: \u0027deleting\u0027})"},{"line_number":658,"context_line":"        cgsnapshot.save()"},{"line_number":659,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":660,"context_line":"            context, cgsnapshot.consistencygroup_id)"},{"line_number":661,"context_line":"        self.volume_rpcapi.delete_cgsnapshot(context.elevated(), cgsnapshot,"},{"line_number":662,"context_line":"                                             group.host)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_1d30049e","line":659,"in_reply_to":"ba3cc151_4c0fce36","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            results \u003d []"},{"line_number":690,"context_line":"            for cgsnapshot in cgsnapshots:"},{"line_number":691,"context_line":"                for opt, value in search_opts.items():"},{"line_number":692,"context_line":"                    if getattr(cgsnapshot, opt):"},{"line_number":693,"context_line":"                        break"},{"line_number":694,"context_line":"                else:"},{"line_number":695,"context_line":"                    results.append(cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_e7791b94","line":692,"updated":"2015-07-03 15:36:34.000000000","message":"This is wrong, it should be:\n\n if getattr(cgsnapshot, opt, object()) !\u003d value:","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            results \u003d []"},{"line_number":690,"context_line":"            for cgsnapshot in cgsnapshots:"},{"line_number":691,"context_line":"                for opt, value in search_opts.items():"},{"line_number":692,"context_line":"                    if getattr(cgsnapshot, opt):"},{"line_number":693,"context_line":"                        break"},{"line_number":694,"context_line":"                else:"},{"line_number":695,"context_line":"                    results.append(cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_bd0d58ea","line":692,"in_reply_to":"ba3cc151_e7791b94","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"111310eb0666048ab905ea94b87ac6b369698b8d","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d orig_cg.availability_zone"},{"line_number":198,"context_line":"            kwargs[\u0027host\u0027] \u003d orig_cg.host"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if source_cg:"},{"line_number":201,"context_line":"            kwargs[\u0027volume_type_id\u0027] \u003d source_cg.get(\u0027volume_type_id\u0027)"},{"line_number":202,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d source_cg.get(\u0027availability_zone\u0027)"},{"line_number":203,"context_line":"            kwargs[\u0027host\u0027] \u003d source_cg.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a4dcd0f_7ebf12aa","line":200,"updated":"2015-08-06 14:17:06.000000000","message":"Should use dot notation for source_cg","commit_id":"30bdd2686158f974474138ad32ceffed46e32490"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"0e544a0992da01c451367b87eb66015ab60683e8","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d orig_cg.availability_zone"},{"line_number":198,"context_line":"            kwargs[\u0027host\u0027] \u003d orig_cg.host"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if source_cg:"},{"line_number":201,"context_line":"            kwargs[\u0027volume_type_id\u0027] \u003d source_cg.get(\u0027volume_type_id\u0027)"},{"line_number":202,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d source_cg.get(\u0027availability_zone\u0027)"},{"line_number":203,"context_line":"            kwargs[\u0027host\u0027] \u003d source_cg.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a4dcd0f_66e9c8b6","line":200,"in_reply_to":"1a4dcd0f_23f892c2","updated":"2015-08-06 15:27:45.000000000","message":"Ah ok.","commit_id":"30bdd2686158f974474138ad32ceffed46e32490"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"f0332e0a3632a2954d0ddcf43b1ca6ef653a0c4c","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d orig_cg.availability_zone"},{"line_number":198,"context_line":"            kwargs[\u0027host\u0027] \u003d orig_cg.host"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if source_cg:"},{"line_number":201,"context_line":"            kwargs[\u0027volume_type_id\u0027] \u003d source_cg.get(\u0027volume_type_id\u0027)"},{"line_number":202,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d source_cg.get(\u0027availability_zone\u0027)"},{"line_number":203,"context_line":"            kwargs[\u0027host\u0027] \u003d source_cg.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a4dcd0f_0671e40e","line":200,"in_reply_to":"1a4dcd0f_66e9c8b6","updated":"2015-08-06 15:30:15.000000000","message":"There\u0027s already a +2 for CG, so if there is a rebase needed, you could put it in.  Otherwise, you can just do it in a follow up patch.","commit_id":"30bdd2686158f974474138ad32ceffed46e32490"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"5030f263d06a15a06346b4d63825e22cc2f94f84","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d orig_cg.availability_zone"},{"line_number":198,"context_line":"            kwargs[\u0027host\u0027] \u003d orig_cg.host"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        if source_cg:"},{"line_number":201,"context_line":"            kwargs[\u0027volume_type_id\u0027] \u003d source_cg.get(\u0027volume_type_id\u0027)"},{"line_number":202,"context_line":"            kwargs[\u0027availability_zone\u0027] \u003d source_cg.get(\u0027availability_zone\u0027)"},{"line_number":203,"context_line":"            kwargs[\u0027host\u0027] \u003d source_cg.get(\u0027host\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"1a4dcd0f_23f892c2","line":200,"in_reply_to":"1a4dcd0f_7ebf12aa","updated":"2015-08-06 15:05:26.000000000","message":"It\u0027s code of ConsistencyGroup. I shouldn\u0027t change in this patch. But I will change it in ConsistencyGroup cleanup patch. thanks :)","commit_id":"30bdd2686158f974474138ad32ceffed46e32490"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"e1f9f13ed5082d46b4e0869d7933747fb85f4528","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_b4c29b83","line":171,"updated":"2015-08-12 14:12:15.000000000","message":"I believe this line is what is causing the error that Xing saw.  There is a bug (which was recently fixed - https://review.openstack.org/206637), where you cannot send nested versionedobjects over RPC.  Until we get a new oslo_versionedobject build, the only workaround is to unset the attribute within cgsnapshot.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"71e09be9d55baa179a226a904d04d668e4ed470d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_718093f7","line":171,"in_reply_to":"1a4dcd0f_11b82f10","updated":"2015-08-12 19:48:42.000000000","message":"The exception happened in cinder-volume service. Here we are only adding it to cinder-api service. So I assume we need to add it somewhere in cinder-volume service.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"693b47679797e2080181bd4f981da8d4294de6db","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_a11d6374","line":171,"in_reply_to":"1a4dcd0f_159d7a09","updated":"2015-08-13 01:37:21.000000000","message":"A second workaround is to leave the db call as-is.\norig_cg \u003d self.db.cgsnapshot_get(context, cgsnapshot_id)","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"76d5f896b3f802434b31a84d66433aa41946c4c3","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_56754dc8","line":171,"in_reply_to":"1a4dcd0f_2f162c4c","updated":"2015-08-12 19:36:27.000000000","message":"I applied this change but still got the following exception in cinder volume:\n\n2015-08-08 23:08:42.691 60800 ERROR oslo_messaging.rpc.dispatcher UnsupportedObjectError: Unsupported object type cinder.ConsistencyGroup\n\nDo I need to change anything in cinder volume?","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"dea79f3aff1162cc90a55f5bcbc14ed645cc07c5","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_11b82f10","line":171,"in_reply_to":"1a4dcd0f_56754dc8","updated":"2015-08-12 19:43:20.000000000","message":":(  I will look if there are other places where this needs to be done.  Unfortunately, there\u0027s no open drivers to test CG on so I could try it out myself.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"cf476a5c874a37a71a7df71f6498bbcbcd0cc664","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_2f162c4c","line":171,"in_reply_to":"1a4dcd0f_6cf1a200","updated":"2015-08-12 17:13:16.000000000","message":"if cgsnapshot:\n    orig_cg \u003d copy.deepcopy(cgsnapshot.consistencygroup)\n    delattr(cgsnapshot, consistencygroup)","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"c472cdb3d1063bf26b0e21f4990168907ddfb409","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_159d7a09","line":171,"in_reply_to":"1a4dcd0f_718093f7","updated":"2015-08-12 20:28:03.000000000","message":"Right, we just need to intercept it before it hits the cinder-volume manager.  The problem happens in the deserialize_entity phase.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"13b5f6ef35a00700cdf1f5cfa056385ccd214a2b","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_bb5a47f1","line":171,"in_reply_to":"1a4dcd0f_a11d6374","updated":"2015-08-13 16:09:23.000000000","message":"Tried this work around.  Still same error:(.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"1baf0bc8cb77da599ca93b57815f7bcb52051c55","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_cc523613","line":171,"in_reply_to":"1a4dcd0f_b4c29b83","updated":"2015-08-12 16:55:04.000000000","message":"The workaround is: delattr(cgsnapshot, consistencygroup).  This will make the consistencygroup field None, so that if someone tries to access it again, it will be lazy-loaded.  By doing this, consistencygroup is not nested in cgsnapshot and allow it to be sent over RPC.  We would switch it back once a new oslo_versionedobject is available.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"40bfb1de09741bc5716eb20291a93a8a1f3f470a","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        if cgsnapshot_id:"},{"line_number":169,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":170,"context_line":"            if cgsnapshot:"},{"line_number":171,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        source_cg \u003d None"},{"line_number":174,"context_line":"        if source_cgid:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_6cf1a200","line":171,"in_reply_to":"1a4dcd0f_cc523613","updated":"2015-08-12 16:56:15.000000000","message":"I think is is the only place where it loads the consistencygroup, but we should carefully look in other places too.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de16cf322b8a65b3194f63b437499aeacc96cf0a","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        for vol in volumes:"},{"line_number":284,"context_line":"            # Update the host field for the volume."},{"line_number":285,"context_line":"            self.db.volume_update(context, vol[\u0027id\u0027],"},{"line_number":286,"context_line":"                                  {\u0027host\u0027: group.get(\u0027host\u0027)})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        self.volume_rpcapi.create_consistencygroup_from_src("},{"line_number":289,"context_line":"            context, group, cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_1e4abc26","line":286,"updated":"2015-08-11 16:57:11.000000000","message":"group.host","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"9468734fe03926be8ddf3ec3bf5c96ff82f902c6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        for vol in volumes:"},{"line_number":284,"context_line":"            # Update the host field for the volume."},{"line_number":285,"context_line":"            self.db.volume_update(context, vol[\u0027id\u0027],"},{"line_number":286,"context_line":"                                  {\u0027host\u0027: group.get(\u0027host\u0027)})"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        self.volume_rpcapi.create_consistencygroup_from_src("},{"line_number":289,"context_line":"            context, group, cgsnapshot)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_bd314d5c","line":286,"in_reply_to":"1a4dcd0f_1e4abc26","updated":"2015-08-11 17:55:30.000000000","message":"it\u0027s not a part of this patch. I will fix it in ConsistencyGroup Cleanup.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2aeba710268a3366929bb4d116848a747246434a","unresolved":false,"context_lines":[{"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:"},{"line_number":170,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":171,"context_line":"            if cgsnapshot:"},{"line_number":172,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_ee0214b4","line":170,"updated":"2015-10-02 13:57:15.000000000","message":"Shouldn\u0027t we also log if an exception is raised?","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"138dc812ae6362fe71e795e2e18c9c6cc54ce259","unresolved":false,"context_lines":[{"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:"},{"line_number":170,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":171,"context_line":"            if cgsnapshot:"},{"line_number":172,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_fa5dbc15","line":170,"in_reply_to":"9a1a9d01_a1465d4d","updated":"2015-10-05 10:30:27.000000000","message":"Done","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d32d24047d73e201c271daaabbb845908656f2bd","unresolved":false,"context_lines":[{"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:"},{"line_number":170,"context_line":"            cgsnapshot \u003d objects.CGSnapshot.get_by_id(context, cgsnapshot_id)"},{"line_number":171,"context_line":"            if cgsnapshot:"},{"line_number":172,"context_line":"                orig_cg \u003d cgsnapshot.consistencygroup"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_a1465d4d","line":170,"in_reply_to":"9a1a9d01_ee0214b4","updated":"2015-10-02 21:19:49.000000000","message":"Right.  The exception handling should be kept.","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"ea17de78659f763792236da99b19371e07a372d1","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all(context, search_opts)"},{"line_number":784,"context_line":"        else:"},{"line_number":785,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all_by_project("},{"line_number":786,"context_line":"                context.elevated(), context.project_id, search_opts)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        return cgsnapshots"}],"source_content_type":"text/x-python","patch_set":45,"id":"5a2ca52d_87597237","side":"PARENT","line":786,"updated":"2015-10-16 20:50:23.000000000","message":"Why is the \"search_opts\" removed?","commit_id":"7fb767f2d652f070a20fd70d92585d61e56f3a50"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"1253bf6e56185ffb14fafedeaa49e4368a4dc66b","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all(context, search_opts)"},{"line_number":784,"context_line":"        else:"},{"line_number":785,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all_by_project("},{"line_number":786,"context_line":"                context.elevated(), context.project_id, search_opts)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        return cgsnapshots"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_7f30fc56","side":"PARENT","line":786,"in_reply_to":"5a2ca52d_87597237","updated":"2015-10-19 12:42:12.000000000","message":"Done","commit_id":"7fb767f2d652f070a20fd70d92585d61e56f3a50"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bdab8968398e406ac30d702aba41bc6b2ad2cea2","unresolved":false,"context_lines":[{"line_number":783,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all(context, search_opts)"},{"line_number":784,"context_line":"        else:"},{"line_number":785,"context_line":"            cgsnapshots \u003d self.db.cgsnapshot_get_all_by_project("},{"line_number":786,"context_line":"                context.elevated(), context.project_id, search_opts)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"        return cgsnapshots"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_78d33d39","side":"PARENT","line":786,"in_reply_to":"5a2ca52d_87597237","updated":"2015-10-19 09:57:26.000000000","message":"We don\u0027t use search_opts anywhere in the code, but it is true that if we have the argument it should be passed along.","commit_id":"7fb767f2d652f070a20fd70d92585d61e56f3a50"}],"cinder/objects/cgsnapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"2ac88cb4140c6612914d7c513381375dae4ed352","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":25,"context_line":"class CGSnapshot(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"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_6d520c37","line":25,"updated":"2015-06-24 14:48:03.000000000","message":"There is a relationship between ConsistencyGroup and CGSnapshot, so you have to add it in here as a lazy-load attribute.","commit_id":"6324f68d1b339e3b320a0dc61c5e503c805ce7ce"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1146172df2e3dbfc89902e6c86e1703e5c6cf36a","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":25,"context_line":"class CGSnapshot(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":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_dff74dd1","line":26,"updated":"2015-06-24 10:55:51.000000000","message":"indentation","commit_id":"6324f68d1b339e3b320a0dc61c5e503c805ce7ce"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"1146172df2e3dbfc89902e6c86e1703e5c6cf36a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class CGSnapshot(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":1,"id":"fa32b979_7f0081ab","line":28,"updated":"2015-06-24 10:55:51.000000000","message":"*VERSION","commit_id":"6324f68d1b339e3b320a0dc61c5e503c805ce7ce"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"37b8117e0e9eafee651b69871080c360641a6159","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @base.remotable"},{"line_number":101,"context_line":"    def save(self):"},{"line_number":102,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":103,"context_line":"        if updates:"},{"line_number":104,"context_line":"            db.cgsnapshot_update(self._context, self.id, updates)"},{"line_number":105,"context_line":"        self.obj_reset_changes()"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_2c94b835","line":102,"updated":"2015-06-29 10:10:52.000000000","message":"You should also update consistencygroup here - take a look how it\u0027s done in Snapshot object.","commit_id":"d4648ffa7863d0ae680ae754d38d4d2d6902e077"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b5b1fed8f2d6c3b6ad46f107aca2ce69f4eb9f00","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @base.remotable"},{"line_number":101,"context_line":"    def save(self):"},{"line_number":102,"context_line":"        updates \u003d self.obj_get_changes()"},{"line_number":103,"context_line":"        if updates:"},{"line_number":104,"context_line":"            db.cgsnapshot_update(self._context, self.id, updates)"},{"line_number":105,"context_line":"        self.obj_reset_changes()"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_4f5ec4ea","line":102,"in_reply_to":"ba3cc151_2c94b835","updated":"2015-06-29 14:33:58.000000000","message":"Whoops, basing on talk with thangp on #openstack-cinder this is actually invalid. Sorry! We should however raise an exception if consistencygroup gets modified.","commit_id":"d4648ffa7863d0ae680ae754d38d4d2d6902e077"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":43,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":44,"context_line":"        target_version \u003d super(CGSnapshot, self).obj_make_compatible("},{"line_number":45,"context_line":"            primitive, target_version)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_71cce988","line":42,"updated":"2015-07-03 15:36:34.000000000","message":"We don\u0027t need this method for now.","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":43,"context_line":"        \"\"\"Make an object representation compatible with a target version.\"\"\""},{"line_number":44,"context_line":"        target_version \u003d super(CGSnapshot, self).obj_make_compatible("},{"line_number":45,"context_line":"            primitive, target_version)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3d194823","line":42,"in_reply_to":"ba3cc151_71cce988","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def _from_db_object(context, cgsnapshot, db_cgsnapshots,"},{"line_number":49,"context_line":"                        expected_attr\u003dNone):"},{"line_number":50,"context_line":"        if expected_attr is None:"},{"line_number":51,"context_line":"            expected_attr \u003d []"},{"line_number":52,"context_line":"        for name, field in cgsnapshot.fields.items():"},{"line_number":53,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":54,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_b1835102","line":51,"updated":"2015-07-03 15:36:34.000000000","message":"Since expected_attr is only used for reading we can set default args value to [] instead of None and remove these 2 lines","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d0e860fa0ed1395ac37dd050e647549e716bd447","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def _from_db_object(context, cgsnapshot, db_cgsnapshots,"},{"line_number":49,"context_line":"                        expected_attr\u003dNone):"},{"line_number":50,"context_line":"        if expected_attr is None:"},{"line_number":51,"context_line":"            expected_attr \u003d []"},{"line_number":52,"context_line":"        for name, field in cgsnapshot.fields.items():"},{"line_number":53,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":54,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_a5644849","line":51,"in_reply_to":"ba3cc151_5d168cf2","updated":"2015-07-06 11:27:17.000000000","message":"Ok, then you could use a tuple instead: expected_attr\u003d()  ;-)","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def _from_db_object(context, cgsnapshot, db_cgsnapshots,"},{"line_number":49,"context_line":"                        expected_attr\u003dNone):"},{"line_number":50,"context_line":"        if expected_attr is None:"},{"line_number":51,"context_line":"            expected_attr \u003d []"},{"line_number":52,"context_line":"        for name, field in cgsnapshot.fields.items():"},{"line_number":53,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":54,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_5d168cf2","line":51,"in_reply_to":"ba3cc151_b1835102","updated":"2015-07-06 10:57:52.000000000","message":"without this we will be have a problem with pep8 (Mutable default arguments). But I can remove 1 redundant line. :)","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":54,"context_line":"                continue"},{"line_number":55,"context_line":"            value \u003d db_cgsnapshots.get(name)"},{"line_number":56,"context_line":"            if isinstance(field, fields.IntegerField):"},{"line_number":57,"context_line":"                value \u003d value or 0"},{"line_number":58,"context_line":"            setattr(cgsnapshot, name, value)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3170a13f","line":56,"updated":"2015-07-03 15:36:34.000000000","message":"We have no integers, this is not needed.","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":54,"context_line":"                continue"},{"line_number":55,"context_line":"            value \u003d db_cgsnapshots.get(name)"},{"line_number":56,"context_line":"            if isinstance(field, fields.IntegerField):"},{"line_number":57,"context_line":"                value \u003d value or 0"},{"line_number":58,"context_line":"            setattr(cgsnapshot, name, value)"},{"line_number":59,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_fdd1a030","line":56,"in_reply_to":"ba3cc151_3170a13f","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":92,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":95,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":96,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_0c6b0686","line":94,"updated":"2015-07-03 15:36:34.000000000","message":"Why aren\u0027t we checking first if we have already loaded this object?\n\n if getattr(self, attrname):\n     return","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":92,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":95,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":96,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_9de3b405","line":94,"in_reply_to":"ba3cc151_0c6b0686","updated":"2015-07-06 10:57:52.000000000","message":"Well, in my opinion it will cause that we will be have a endless loop in this method. .","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"d0e860fa0ed1395ac37dd050e647549e716bd447","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":92,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":95,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":96,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_c5fb8c46","line":94,"in_reply_to":"ba3cc151_9de3b405","updated":"2015-07-06 11:27:17.000000000","message":"You are probably right. And I have checked oslo versionedobjects and that is already implemented in the attribute getter, so no need to double check here anyway.  :-)","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                raise exception.ObjectActionError("},{"line_number":106,"context_line":"                    action\u003d\u0027save\u0027, reason\u003d_(\u0027consistencygroup changed\u0027))"},{"line_number":107,"context_line":"            db.cgsnapshot_update(self._context, self.id, updates)"},{"line_number":108,"context_line":"        self.obj_reset_changes()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @base.remotable"},{"line_number":111,"context_line":"    def destroy(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_ac277a61","line":108,"updated":"2015-07-03 15:36:34.000000000","message":"This should be in the if because we only reset if there are updates","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                raise exception.ObjectActionError("},{"line_number":106,"context_line":"                    action\u003d\u0027save\u0027, reason\u003d_(\u0027consistencygroup changed\u0027))"},{"line_number":107,"context_line":"            db.cgsnapshot_update(self._context, self.id, updates)"},{"line_number":108,"context_line":"        self.obj_reset_changes()"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @base.remotable"},{"line_number":111,"context_line":"    def destroy(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_3df068c9","line":108,"in_reply_to":"ba3cc151_ac277a61","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"67d1f5969489a719c45efb36a2d3aa64957e790c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":84,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":87,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":88,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_e8feae37","line":86,"updated":"2015-07-06 09:01:57.000000000","message":"I still think that we should check if object is already loaded so we don\u0027t load it again.","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a7781e53b10e050a775a059a014695a8ee4423f8","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":84,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":87,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":88,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_15b66d3d","line":86,"in_reply_to":"ba3cc151_830b2a7d","updated":"2015-07-06 17:24:59.000000000","message":"Yep, this was already resolved in path 9\u0027s comments, but the order of the comments make it hard to follow.\n\nI received email notification of patch 10 first, which I reviewed, and a little bit later I received notification of the reply to my comments on patch 9, which I replied confirming that this was done in the base. :-)","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"bb04c4e739df02f5ca074eab77e9ad79c026a838","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            raise exception.OrphanedObjectError(method\u003d\u0027obj_load_attr\u0027,"},{"line_number":84,"context_line":"                                                objtype\u003dself.obj_name())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        if attrname \u003d\u003d \u0027consistencygroup\u0027:"},{"line_number":87,"context_line":"            self.consistencygroup \u003d objects.ConsistencyGroup.get_by_id("},{"line_number":88,"context_line":"                self._context, self.consistencygroup_id)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_830b2a7d","line":86,"in_reply_to":"ba3cc151_e8feae37","updated":"2015-07-06 17:16:21.000000000","message":"It already does in the base - https://github.com/openstack/oslo.versionedobjects/blob/master/oslo_versionedobjects/base.py#L64","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0e1c68aeaee819427638947d9a7aa3fd621ffe1e","unresolved":false,"context_lines":[{"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(),"},{"line_number":32,"context_line":"        \u0027consistencygroup_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":33,"context_line":"        \u0027project_id\u0027: fields.UUIDField(),"},{"line_number":34,"context_line":"        \u0027user_id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_eea695c0","line":31,"updated":"2015-10-06 14:02:05.000000000","message":"-1: We are missing `snapshots` reference from Snapshots table.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bfb3282e2fdd5cd57e16efb45d32ab9cd16a4088","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a1a9d01_dd4eb2c0","line":38,"updated":"2015-10-05 11:27:23.000000000","message":"-1: This should be an extra field and not a field considering the way we are handling it.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0c8e1be1fffb36cea16afb11234f13ba11675913","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_d569ef8c","line":38,"in_reply_to":"7a2fa921_1faa4f1a","updated":"2015-10-06 11:53:19.000000000","message":"consistencygroup is not a real DB field, it\u0027s a SQLAlchemy construct for the relationship between the two tables that uses consistencygroup_id as the foreign key.\n\nAnd since you are not allowing to write it simulating a real DB field (where assigning would change consistencygroup_id field) it should be moved to an extra field.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"4c99557f4e69eff229c1d5f21598890a772dd091","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_8ba59305","line":38,"in_reply_to":"7a2fa921_48f9c17f","updated":"2015-10-06 13:34:40.000000000","message":"Also, you do not have to be able to write to the field in order for it to be a field.  There are many examples in nova\u0027s objects.  By having an object as a field, we can serialize it, send it over the wire, and re-hydrate it on the other side.  If you put it as an extra field, I do not believe this is possible.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"a3712d8f9af7e9a74737d529d07e0bb993630d47","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_cbe94b1c","line":38,"in_reply_to":"7a2fa921_48f9c17f","updated":"2015-10-06 13:37:50.000000000","message":"There\u0027s one more approach I\u0027ve found in Nova\u0027s code: https://github.com/openstack/nova/blob/master/nova/objects/migration.py#L119-L121 . Also some objects don\u0027t have relationships defined in objects.\n\nStill I\u0027ve found none using obj_extra_fields construct for that purpose.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"0e1c68aeaee819427638947d9a7aa3fd621ffe1e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_0ee8b10f","line":38,"in_reply_to":"7a2fa921_cbe94b1c","updated":"2015-10-06 14:02:05.000000000","message":"You guys are right, forget the -1 for this.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"126a4b8b9ab990105e80dec003924a4f5e1620c2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_48f9c17f","line":38,"in_reply_to":"7a2fa921_d569ef8c","updated":"2015-10-06 13:26:00.000000000","message":"This is not true.  If you look at how nova handles their objects, most of every relationship defined in an SQLAlchemy construct is handled as a field that is lazy loaded.  Take for example - https://github.com/openstack/nova/blob/master/nova/objects/instance.py#L176.  Flavor is not a real DB field - https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L194.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"ec4231dab990668f52b6d757504e34a66fa8732a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":36,"context_line":"        \u0027description\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":37,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":38,"context_line":"        \u0027consistencygroup\u0027: fields.ObjectField(\u0027ConsistencyGroup\u0027,"},{"line_number":39,"context_line":"                                               nullable\u003dTrue)"},{"line_number":40,"context_line":"    }"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"7a2fa921_1faa4f1a","line":38,"in_reply_to":"9a1a9d01_dd4eb2c0","updated":"2015-10-05 15:10:51.000000000","message":"I do not understand your comment.  consistencygroup is linked to cgsnapshot - https://github.com/openstack/cinder/blob/master/cinder/db/sqlalchemy/models.py#L112.  What do you mean \"extra field\"?","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bfb3282e2fdd5cd57e16efb45d32ab9cd16a4088","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                              reason\u003d_(\u0027already_created\u0027))"},{"line_number":73,"context_line":"        updates \u003d self.cinder_obj_get_changes()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        if \u0027consistencygroup\u0027 in updates:"},{"line_number":76,"context_line":"            raise exception.ObjectActionError("},{"line_number":77,"context_line":"                action\u003d\u0027create\u0027, reason\u003d_(\u0027consistencygroup assigned\u0027))"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"9a1a9d01_7db9a678","line":75,"updated":"2015-10-05 11:27:23.000000000","message":"If we add consistencygroup as a extra field we don\u0027t need lines 75 to 77.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bfb3282e2fdd5cd57e16efb45d32ab9cd16a4088","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def save(self):"},{"line_number":99,"context_line":"        updates \u003d self.cinder_obj_get_changes()"},{"line_number":100,"context_line":"        if updates:"},{"line_number":101,"context_line":"            if \u0027consistencygroup\u0027 in updates:"},{"line_number":102,"context_line":"                raise exception.ObjectActionError("},{"line_number":103,"context_line":"                    action\u003d\u0027save\u0027, reason\u003d_(\u0027consistencygroup changed\u0027))"},{"line_number":104,"context_line":"            db.cgsnapshot_update(self._context, self.id, updates)"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a1a9d01_7dd446bc","line":101,"updated":"2015-10-05 11:27:23.000000000","message":"If we add consistencygroup as a extra field we don\u0027t need lines 101 and 102.","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"64650894a3528336b689cd2c0e3eb1eaf89a4c48","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        for name, field in cgsnapshot.fields.items():"},{"line_number":48,"context_line":"            if name in OPTIONAL_FIELDS:"},{"line_number":49,"context_line":"                continue"},{"line_number":50,"context_line":"            value \u003d db_cgsnapshots.get(name)"},{"line_number":51,"context_line":"            setattr(cgsnapshot, name, value)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        if \u0027consistencygroup\u0027 in expected_attrs:"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a2ca52d_0182ed52","line":50,"updated":"2015-10-13 12:21:43.000000000","message":"nit: Since this is from a db object, shouldn\u0027t we use getattr instead?","commit_id":"54bebaa867dfda964acad92d2c31c278780fed79"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"64650894a3528336b689cd2c0e3eb1eaf89a4c48","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            snapshots \u003d base.obj_make_list("},{"line_number":62,"context_line":"                context, objects.SnapshotsList(context),"},{"line_number":63,"context_line":"                objects.Snapshots,"},{"line_number":64,"context_line":"                db_cgsnapshots[\u0027snapshots\u0027])"},{"line_number":65,"context_line":"            cgsnapshot.snapshots \u003d snapshots"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        cgsnapshot._context \u003d context"}],"source_content_type":"text/x-python","patch_set":44,"id":"5a2ca52d_fe30b009","line":64,"updated":"2015-10-13 12:21:43.000000000","message":"nit: Since this is from a db object, shouldn\u0027t we use db_cgsnapshots.snashots","commit_id":"54bebaa867dfda964acad92d2c31c278780fed79"}],"cinder/tests/unit/objects/test_cgsnapshot.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"bb04c4e739df02f5ca074eab77e9ad79c026a838","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    \u0027name\u0027: \u0027fake_name\u0027,"},{"line_number":29,"context_line":"    \u0027description\u0027: \u0027fake_description\u0027,"},{"line_number":30,"context_line":"    \u0027status\u0027: \u0027creating\u0027,"},{"line_number":31,"context_line":"    \u0027consistencygroup_id\u0027: \u0027fake_id\u0027"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_c37852fb","line":31,"updated":"2015-07-06 17:16:21.000000000","message":"Need a comma at the end.","commit_id":"2d402709139cede513a1bc0552fcde05fd6cdb16"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"149cc72bf39f015f7a706adef7399a999d779020","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                return_value\u003dfake_cgsnapshot)"},{"line_number":59,"context_line":"    def test_create(self, cgsnapshot_create):"},{"line_number":60,"context_line":"        fake_cgsnap \u003d {}"},{"line_number":61,"context_line":"        fake_cgsnap.update(fake_cgsnapshot)"},{"line_number":62,"context_line":"        del fake_cgsnap[\u0027id\u0027]"},{"line_number":63,"context_line":"        cgsnapshot \u003d objects.CGSnapshot(context\u003dself.context, **fake_cgsnap)"},{"line_number":64,"context_line":"        cgsnapshot.create()"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_7471c9a7","line":61,"updated":"2015-07-07 15:48:13.000000000","message":"This would be clearer with:\n\n fake_cgsnap \u003d fake_cgsnapshot.copy()","commit_id":"d05c072af3369fdf9aaac7fa724c465449376665"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b5b1fed8f2d6c3b6ad46f107aca2ce69f4eb9f00","unresolved":false,"context_lines":[{"line_number":4709,"context_line":"            self.context,"},{"line_number":4710,"context_line":"            availability_zone\u003dCONF.storage_availability_zone,"},{"line_number":4711,"context_line":"            volume_type\u003d\u0027type1,type2\u0027)"},{"line_number":4712,"context_line":"        group_id \u003d group[\u0027id\u0027]"},{"line_number":4713,"context_line":"        group \u003d objects.ConsistencyGroup.get_by_id(self.context, group_id)"},{"line_number":4714,"context_line":"        volume \u003d tests_utils.create_volume("},{"line_number":4715,"context_line":"            self.context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_4f2c844a","line":4712,"updated":"2015-06-29 14:33:58.000000000","message":"I guess we\u0027re missing test_cgsnapshot tests...","commit_id":"d4648ffa7863d0ae680ae754d38d4d2d6902e077"}],"cinder/tests/unit/utils.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"149cc72bf39f015f7a706adef7399a999d779020","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                            cgsnapshot_id\u003dNone,"},{"line_number":108,"context_line":"                            **kwargs):"},{"line_number":109,"context_line":"    \"\"\"Create a consistencygroup object in the DB."},{"line_number":110,"context_line":"    :rtype : object"},{"line_number":111,"context_line":"    \"\"\""},{"line_number":112,"context_line":"    cg \u003d {}"},{"line_number":113,"context_line":"    cg[\u0027host\u0027] \u003d host"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba3cc151_b4caf118","line":110,"updated":"2015-07-07 15:48:13.000000000","message":"s/object/Cgsnapshot ORM object","commit_id":"d05c072af3369fdf9aaac7fa724c465449376665"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"684362b9650c6fd988a7e8cb95b12de412ea0914","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                            cgsnapshot_id\u003dNone,"},{"line_number":108,"context_line":"                            **kwargs):"},{"line_number":109,"context_line":"    \"\"\"Create a consistencygroup object in the DB."},{"line_number":110,"context_line":"    :rtype : CGSnapshot ORM object"},{"line_number":111,"context_line":"    \"\"\""},{"line_number":112,"context_line":"    cg \u003d {}"},{"line_number":113,"context_line":"    cg[\u0027host\u0027] \u003d host"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a41bdd9_1aff3b35","line":110,"updated":"2015-07-14 11:18:11.000000000","message":"According to http://docs.openstack.org/developer/hacking/#docstrings we should use returns in docstrings.","commit_id":"baa2bac199c6a6666fdb9dc6ece377b6d3726cd0"}],"cinder/volume/manager.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":1959,"context_line":"                              {\u0027snap\u0027: cgsnapshot_id},"},{"line_number":1960,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":1961,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":1962,"context_line":"                    raise"},{"line_number":1963,"context_line":"                if cgsnapshot:"},{"line_number":1964,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":1965,"context_line":"                        context, cgsnapshot_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_96b94e18","side":"PARENT","line":1962,"updated":"2015-06-26 04:55:26.000000000","message":"There should still be a check to make sure cgsnapshot wasn\u0027t deleted by someone else.","commit_id":"715f31b4137daef0f026478e0ff3aff0a9108b1e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1eec91bf80617a7f1ad641c1220bda23ab98216f","unresolved":false,"context_lines":[{"line_number":1959,"context_line":"                              {\u0027snap\u0027: cgsnapshot_id},"},{"line_number":1960,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":1961,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":1962,"context_line":"                    raise"},{"line_number":1963,"context_line":"                if cgsnapshot:"},{"line_number":1964,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":1965,"context_line":"                        context, cgsnapshot_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_d2b7d038","side":"PARENT","line":1962,"in_reply_to":"fa32b979_96b94e18","updated":"2015-06-26 12:54:48.000000000","message":"Agreed - we don\u0027t have locking mechanism for that. We probably should... But that\u0027s future...\n\nAnyway - checking that would mean using objects.CGSnapshot.get_by_id() again.","commit_id":"715f31b4137daef0f026478e0ff3aff0a9108b1e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2387,"context_line":"            if snapshots:"},{"line_number":2388,"context_line":"                for snapshot in snapshots:"},{"line_number":2389,"context_line":"                    # Update db if status is error"},{"line_number":2390,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2391,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2392,"context_line":""},{"line_number":2393,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_d66d969a","line":2390,"updated":"2015-06-26 04:55:26.000000000","message":"snapshot.status","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1eec91bf80617a7f1ad641c1220bda23ab98216f","unresolved":false,"context_lines":[{"line_number":2387,"context_line":"            if snapshots:"},{"line_number":2388,"context_line":"                for snapshot in snapshots:"},{"line_number":2389,"context_line":"                    # Update db if status is error"},{"line_number":2390,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2391,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2392,"context_line":""},{"line_number":2393,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_727124a8","line":2390,"in_reply_to":"fa32b979_d66d969a","updated":"2015-06-26 12:54:48.000000000","message":"I don\u0027t see the point to fix leftovers from thangp\u0027s patch in this patch. I think that it is better to create a followup patches that will just remove ObjectDictCompat from each object and fix all such occurrences.","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2388,"context_line":"                for snapshot in snapshots:"},{"line_number":2389,"context_line":"                    # Update db if status is error"},{"line_number":2390,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2391,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2392,"context_line":""},{"line_number":2393,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2394,"context_line":"                        # after cgsnapshot has been switched over to objects"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_766a8a83","line":2391,"updated":"2015-06-26 04:55:26.000000000","message":"same","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2391,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2392,"context_line":""},{"line_number":2393,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2394,"context_line":"                        # after cgsnapshot has been switched over to objects"},{"line_number":2395,"context_line":"                        self.db.snapshot_update(context, snapshot.id,"},{"line_number":2396,"context_line":"                                                update)"},{"line_number":2397,"context_line":"                        # If status for one snapshot is error, make sure"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_562f463e","line":2394,"updated":"2015-06-26 04:55:26.000000000","message":"You can make this change now, right?","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"1eec91bf80617a7f1ad641c1220bda23ab98216f","unresolved":false,"context_lines":[{"line_number":2391,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2392,"context_line":""},{"line_number":2393,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2394,"context_line":"                        # after cgsnapshot has been switched over to objects"},{"line_number":2395,"context_line":"                        self.db.snapshot_update(context, snapshot.id,"},{"line_number":2396,"context_line":"                                                update)"},{"line_number":2397,"context_line":"                        # If status for one snapshot is error, make sure"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_92b4e8d4","line":2394,"in_reply_to":"fa32b979_562f463e","updated":"2015-06-26 12:54:48.000000000","message":"I agree with Xing.","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2397,"context_line":"                        # If status for one snapshot is error, make sure"},{"line_number":2398,"context_line":"                        # the status for the cgsnapshot is also error"},{"line_number":2399,"context_line":"                        if model_update[\u0027status\u0027] !\u003d \u0027error\u0027:"},{"line_number":2400,"context_line":"                            model_update[\u0027status\u0027] \u003d snapshot[\u0027status\u0027]"},{"line_number":2401,"context_line":""},{"line_number":2402,"context_line":"            if model_update:"},{"line_number":2403,"context_line":"                if model_update[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_96506ed6","line":2400,"updated":"2015-06-26 04:55:26.000000000","message":"snapshot.status","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2412,"context_line":"                cgsnapshot.save()"},{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":"        for snapshot in snapshots:"},{"line_number":2415,"context_line":"            volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":2416,"context_line":"            snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":2417,"context_line":"            vol_ref \u003d self.db.volume_get(context, volume_id)"},{"line_number":2418,"context_line":"            if vol_ref.bootable:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_5608a6d9","line":2415,"updated":"2015-06-26 04:55:26.000000000","message":"snapshot.volume_id","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2c8cf0929bf4b6a36f035213a7d9a8f9f90f783d","unresolved":false,"context_lines":[{"line_number":2413,"context_line":""},{"line_number":2414,"context_line":"        for snapshot in snapshots:"},{"line_number":2415,"context_line":"            volume_id \u003d snapshot[\u0027volume_id\u0027]"},{"line_number":2416,"context_line":"            snapshot_id \u003d snapshot[\u0027id\u0027]"},{"line_number":2417,"context_line":"            vol_ref \u003d self.db.volume_get(context, volume_id)"},{"line_number":2418,"context_line":"            if vol_ref.bootable:"},{"line_number":2419,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_f60c5aee","line":2416,"updated":"2015-06-26 04:55:26.000000000","message":"snapshot.id","commit_id":"b83c05f8a466b57dddfc6e2213e6411f86c0b66e"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"37b8117e0e9eafee651b69871080c360641a6159","unresolved":false,"context_lines":[{"line_number":2405,"context_line":""},{"line_number":2406,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2407,"context_line":"                        # after cgsnapshot has been switched over to objects"},{"line_number":2408,"context_line":"                        self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2409,"context_line":"                                                update)"},{"line_number":2410,"context_line":"                        # If status for one snapshot is error, make sure"},{"line_number":2411,"context_line":"                        # the status for the cgsnapshot is also error"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba3cc151_ecb490d2","line":2408,"updated":"2015-06-29 10:10:52.000000000","message":"Xing\u0027s point from patchset 2 is still valid.","commit_id":"d4648ffa7863d0ae680ae754d38d4d2d6902e077"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":2542,"context_line":"                                                              snapshot[\u0027id\u0027])"},{"line_number":2543,"context_line":""},{"line_number":2544,"context_line":"            snapshot.destroy()"},{"line_number":2545,"context_line":"            self.db.snapshot_destroy(context, snapshot[\u0027id\u0027])"},{"line_number":2546,"context_line":""},{"line_number":2547,"context_line":"            # Commit the reservations"},{"line_number":2548,"context_line":"            if reservations:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_6793cb5b","line":2545,"updated":"2015-07-03 15:36:34.000000000","message":"This line must be removed, you are already doing the destroy in previous line.","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":2542,"context_line":"                                                              snapshot[\u0027id\u0027])"},{"line_number":2543,"context_line":""},{"line_number":2544,"context_line":"            snapshot.destroy()"},{"line_number":2545,"context_line":"            self.db.snapshot_destroy(context, snapshot[\u0027id\u0027])"},{"line_number":2546,"context_line":""},{"line_number":2547,"context_line":"            # Commit the reservations"},{"line_number":2548,"context_line":"            if reservations:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_5ded2cee","line":2545,"in_reply_to":"ba3cc151_6793cb5b","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b345d600175e0eb914df53092a3eff1b03b3487c","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":18,"id":"3a50d1a3_a0ad0b8a","line":190,"updated":"2015-07-20 15:03:31.000000000","message":"Shame on me that I\u0027ve missed this earlier. I think you need to bump the version to 1.25.","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fe94bbbe77f02f808233d79f5a43bd70955ca4ae","unresolved":false,"context_lines":[{"line_number":2410,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2411,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2412,"context_line":""},{"line_number":2413,"context_line":"                        snapshot.update(update)"},{"line_number":2414,"context_line":"                        snapshot.save()"},{"line_number":2415,"context_line":"                        # If status for one snapshot is error, make sure"},{"line_number":2416,"context_line":"                        # the status for the cgsnapshot is also error"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_4d56855d","line":2413,"updated":"2015-07-21 13:58:42.000000000","message":"You cannot do this until these bugs are fixed - https://bugs.launchpad.net/cinder/+bugs?field.tag\u003dcgsnapshot-objects.","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fe94bbbe77f02f808233d79f5a43bd70955ca4ae","unresolved":false,"context_lines":[{"line_number":2444,"context_line":"                              {\u0027volume_id\u0027: volume_id,"},{"line_number":2445,"context_line":"                               \u0027snapshot_id\u0027: snapshot_id})"},{"line_number":2446,"context_line":""},{"line_number":2447,"context_line":"                    snapshot.update({\u0027status\u0027: \u0027error\u0027})"},{"line_number":2448,"context_line":"                    snapshot.save()"},{"line_number":2449,"context_line":"                    raise exception.MetadataCopyFailure("},{"line_number":2450,"context_line":"                        reason\u003dsix.text_type(ex))"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_2d4bf9b1","line":2447,"updated":"2015-07-21 13:58:42.000000000","message":"Ditto","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fe94bbbe77f02f808233d79f5a43bd70955ca4ae","unresolved":false,"context_lines":[{"line_number":2495,"context_line":"                for snapshot in snapshots:"},{"line_number":2496,"context_line":"                    update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2497,"context_line":""},{"line_number":2498,"context_line":"                    snapshot.update(update)"},{"line_number":2499,"context_line":"                    snapshot.save()"},{"line_number":2500,"context_line":"                    self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2501,"context_line":"                                            update)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_edcbd11c","line":2498,"updated":"2015-07-21 13:58:42.000000000","message":"Ditto","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fe94bbbe77f02f808233d79f5a43bd70955ca4ae","unresolved":false,"context_lines":[{"line_number":2544,"context_line":"            self.db.volume_glance_metadata_delete_by_snapshot(context,"},{"line_number":2545,"context_line":"                                                              snapshot[\u0027id\u0027])"},{"line_number":2546,"context_line":""},{"line_number":2547,"context_line":"            snapshot.destroy()"},{"line_number":2548,"context_line":""},{"line_number":2549,"context_line":"            # Commit the reservations"},{"line_number":2550,"context_line":"            if reservations:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a50d1a3_add5c9b9","line":2547,"updated":"2015-07-21 13:58:42.000000000","message":"Ditto","commit_id":"c323956fd3690f19b52e0138ff52a639d7c59366"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fc4e87cf934a1d76a66d1b3beeb219938871a3d8","unresolved":false,"context_lines":[{"line_number":2415,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2416,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2419,"context_line":"                        # after cgsnapshot-objects bugs are fixed"},{"line_number":2420,"context_line":"                        self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2421,"context_line":"                                                update)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_a9c56c8e","line":2418,"updated":"2015-07-28 18:05:40.000000000","message":"Haven\u0027t they already been fixed?","commit_id":"0955309e0eed090254a7b763acbfe4b986ad9dc0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"eae2b12d05422ad29cdb52a721ad3f06e20836ec","unresolved":false,"context_lines":[{"line_number":2415,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"},{"line_number":2416,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2417,"context_line":""},{"line_number":2418,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2419,"context_line":"                        # after cgsnapshot-objects bugs are fixed"},{"line_number":2420,"context_line":"                        self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2421,"context_line":"                                                update)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a50d1a3_6c31b2ec","line":2418,"in_reply_to":"3a50d1a3_a9c56c8e","updated":"2015-07-28 18:22:08.000000000","message":"No, they have to be done individually for each driver that supports CG - https://bugs.launchpad.net/cinder/+bugs?field.tag\u003dcgsnapshot-objects.","commit_id":"0955309e0eed090254a7b763acbfe4b986ad9dc0"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"49d0fb92b52e29afe6623a35d8ee3218e04db699","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.25\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":21,"id":"3a50d1a3_914dbf9b","line":190,"updated":"2015-07-30 18:43:04.000000000","message":"Need to bump the version to \u00271.26\u0027.","commit_id":"230d9374c4553f4907f722f6c814a9f1424371f4"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"bdcacc1a0f1d21334425d7c96382944a7b46f081","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.25\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":21,"id":"3a50d1a3_6976ebd9","line":190,"in_reply_to":"3a50d1a3_914dbf9b","updated":"2015-07-31 12:41:34.000000000","message":"Done","commit_id":"230d9374c4553f4907f722f6c814a9f1424371f4"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":1959,"context_line":"            snapshots \u003d None"},{"line_number":1960,"context_line":"            if cgsnapshot:"},{"line_number":1961,"context_line":"                try:"},{"line_number":1962,"context_line":"                    # Check if cgsnapshot still exists"},{"line_number":1963,"context_line":"                    cgsnapshot \u003d objects.CGSnapshot.get_by_id(context,"},{"line_number":1964,"context_line":"                                                              cgsnapshot.id)"},{"line_number":1965,"context_line":"                except exception.CgSnapshotNotFound:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_92bc9c6d","line":1962,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at EOL.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de16cf322b8a65b3194f63b437499aeacc96cf0a","unresolved":false,"context_lines":[{"line_number":1981,"context_line":"                                     \"not in a valid state. Valid states are: \""},{"line_number":1982,"context_line":"                                     \"%(valid)s.\") %"},{"line_number":1983,"context_line":"                                   {\u0027group\u0027: group.id,"},{"line_number":1984,"context_line":"                                    \u0027snap\u0027: snap[\u0027id\u0027],"},{"line_number":1985,"context_line":"                                    \u0027valid\u0027: VALID_CREATE_CG_SRC_SNAP_STATUS})"},{"line_number":1986,"context_line":"                            raise exception.InvalidConsistencyGroup(reason\u003dmsg)"},{"line_number":1987,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_6d647c21","line":1984,"updated":"2015-08-11 16:57:11.000000000","message":"This should be snap.id","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"9468734fe03926be8ddf3ec3bf5c96ff82f902c6","unresolved":false,"context_lines":[{"line_number":1981,"context_line":"                                     \"not in a valid state. Valid states are: \""},{"line_number":1982,"context_line":"                                     \"%(valid)s.\") %"},{"line_number":1983,"context_line":"                                   {\u0027group\u0027: group.id,"},{"line_number":1984,"context_line":"                                    \u0027snap\u0027: snap[\u0027id\u0027],"},{"line_number":1985,"context_line":"                                    \u0027valid\u0027: VALID_CREATE_CG_SRC_SNAP_STATUS})"},{"line_number":1986,"context_line":"                            raise exception.InvalidConsistencyGroup(reason\u003dmsg)"},{"line_number":1987,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_dde219a0","line":1984,"in_reply_to":"1a4dcd0f_6d647c21","updated":"2015-08-11 17:55:30.000000000","message":"This isn\u0027t part of this patch. But it\u0027s already fixed in other cleanup patch. https://review.openstack.org/#/c/198341/8/cinder/volume/manager.py","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de16cf322b8a65b3194f63b437499aeacc96cf0a","unresolved":false,"context_lines":[{"line_number":2479,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2480,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot)"},{"line_number":2481,"context_line":""},{"line_number":2482,"context_line":"            if snapshots:"},{"line_number":2483,"context_line":"                for snapshot in snapshots:"},{"line_number":2484,"context_line":"                    # Update db if status is error"},{"line_number":2485,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_28dc2272","line":2482,"updated":"2015-08-11 16:57:11.000000000","message":"This whole if block needs to be changed. Do you need to change this in all the drivers first?","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"9468734fe03926be8ddf3ec3bf5c96ff82f902c6","unresolved":false,"context_lines":[{"line_number":2479,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2480,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot)"},{"line_number":2481,"context_line":""},{"line_number":2482,"context_line":"            if snapshots:"},{"line_number":2483,"context_line":"                for snapshot in snapshots:"},{"line_number":2484,"context_line":"                    # Update db if status is error"},{"line_number":2485,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_40ae22e7","line":2482,"in_reply_to":"1a4dcd0f_28dc2272","updated":"2015-08-11 17:55:30.000000000","message":"Thang said that we should wait for fix of these bugs. It can be fixed in the follow-up cleanup patch and we can wait with that cleanup patch until all bugs will be fixed.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"1436cdfcc70b2180dec7b973d66974454120ad43","unresolved":false,"context_lines":[{"line_number":2479,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2480,"context_line":"                self.driver.create_cgsnapshot(context, cgsnapshot)"},{"line_number":2481,"context_line":""},{"line_number":2482,"context_line":"            if snapshots:"},{"line_number":2483,"context_line":"                for snapshot in snapshots:"},{"line_number":2484,"context_line":"                    # Update db if status is error"},{"line_number":2485,"context_line":"                    if snapshot[\u0027status\u0027] \u003d\u003d \u0027error\u0027:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_80a18a48","line":2482,"in_reply_to":"1a4dcd0f_28dc2272","updated":"2015-08-11 18:06:19.000000000","message":"Yes.  All the drivers have to return snapshot objects before this if block can be safely updated.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2486,"context_line":"                        update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"                        # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2489,"context_line":"                        # after cgsnapshot-objects bugs are fixed"},{"line_number":2490,"context_line":"                        self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2491,"context_line":"                                                update)"},{"line_number":2492,"context_line":"                        # If status for one snapshot is error, make sure"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_92957ce5","line":2489,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at EOL.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2522,"context_line":"                               \u0027snapshot_id\u0027: snapshot_id})"},{"line_number":2523,"context_line":""},{"line_number":2524,"context_line":"                    # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2525,"context_line":"                    # after cgsnapshot-objects bugs are fixed"},{"line_number":2526,"context_line":"                    self.db.snapshot_update(context, snapshot_id,"},{"line_number":2527,"context_line":"                                            {\u0027status\u0027: \u0027error\u0027})"},{"line_number":2528,"context_line":"                    raise exception.MetadataCopyFailure("}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_d2fc6440","line":2525,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at EOL.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2547,"context_line":"        context \u003d context.elevated()"},{"line_number":2548,"context_line":"        project_id \u003d cgsnapshot.project_id"},{"line_number":2549,"context_line":""},{"line_number":2550,"context_line":"        LOG.info(_LI(\"cgsnapshot %s: deleting\"), cgsnapshot.id)"},{"line_number":2551,"context_line":""},{"line_number":2552,"context_line":"        snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":2553,"context_line":"            context, cgsnapshot.id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_f2e08098","line":2550,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at end of info message.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2558,"context_line":"        try:"},{"line_number":2559,"context_line":"            utils.require_driver_initialized(self.driver)"},{"line_number":2560,"context_line":""},{"line_number":2561,"context_line":"            LOG.debug(\"cgsnapshot %(cgsnap_id)s: deleting\","},{"line_number":2562,"context_line":"                      {\u0027cgsnap_id\u0027: cgsnapshot.id})"},{"line_number":2563,"context_line":""},{"line_number":2564,"context_line":"            # Pass context so that drivers that want to use it, can,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_b2caf818","line":2561,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at end of debug message.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de16cf322b8a65b3194f63b437499aeacc96cf0a","unresolved":false,"context_lines":[{"line_number":2570,"context_line":"            model_update, snapshots \u003d \\"},{"line_number":2571,"context_line":"                self.driver.delete_cgsnapshot(context, cgsnapshot)"},{"line_number":2572,"context_line":""},{"line_number":2573,"context_line":"            if snapshots:"},{"line_number":2574,"context_line":"                for snapshot in snapshots:"},{"line_number":2575,"context_line":"                    update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2576,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_e8a71aa5","line":2573,"updated":"2015-08-11 16:57:11.000000000","message":"Same here.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2575,"context_line":"                    update \u003d {\u0027status\u0027: snapshot[\u0027status\u0027]}"},{"line_number":2576,"context_line":""},{"line_number":2577,"context_line":"                    # TODO(thangp): Switch over to use snapshot.update()"},{"line_number":2578,"context_line":"                    # after cgsnapshot-objects bugs are fixed"},{"line_number":2579,"context_line":"                    self.db.snapshot_update(context, snapshot[\u0027id\u0027],"},{"line_number":2580,"context_line":"                                            update)"},{"line_number":2581,"context_line":"                    if snapshot[\u0027status\u0027] in [\u0027error_deleting\u0027, \u0027error\u0027] and \\"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_7286b0dc","line":2578,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027  at EOL.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"de16cf322b8a65b3194f63b437499aeacc96cf0a","unresolved":false,"context_lines":[{"line_number":2621,"context_line":"                LOG.exception(_LE(\"Failed to update usages deleting snapshot\"))"},{"line_number":2622,"context_line":""},{"line_number":2623,"context_line":"            self.db.volume_glance_metadata_delete_by_snapshot(context,"},{"line_number":2624,"context_line":"                                                              snapshot[\u0027id\u0027])"},{"line_number":2625,"context_line":""},{"line_number":2626,"context_line":"            # TODO(thangp): Switch over to use snapshot.delete()"},{"line_number":2627,"context_line":"            # after cgsnapshot-objects bugs are fixed"}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_a8e352d8","line":2624,"updated":"2015-08-11 16:57:11.000000000","message":"Here too","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"09697479ae7d5a56beceb58a90c1293a8f23a0d3","unresolved":false,"context_lines":[{"line_number":2632,"context_line":"                QUOTAS.commit(context, reservations, project_id\u003dproject_id)"},{"line_number":2633,"context_line":""},{"line_number":2634,"context_line":"        cgsnapshot.destroy()"},{"line_number":2635,"context_line":"        LOG.info(_LI(\"cgsnapshot %s: deleted successfully\"), cgsnapshot.id)"},{"line_number":2636,"context_line":"        self._notify_about_cgsnapshot_usage(context, cgsnapshot, \"delete.end\","},{"line_number":2637,"context_line":"                                            snapshots)"},{"line_number":2638,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1a4dcd0f_f2d640f0","line":2635,"updated":"2015-08-11 10:45:29.000000000","message":"please use \u0027.\u0027 in the end of message.","commit_id":"c979e14f9bd59c740d10f36d445902839ed5cd29"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2aeba710268a3366929bb4d116848a747246434a","unresolved":false,"context_lines":[{"line_number":2338,"context_line":"                                         cgsnapshot\u003dNone, source_cg\u003dNone):"},{"line_number":2339,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":2340,"context_line":""},{"line_number":2341,"context_line":"        Currently the source can only be a cgsnapshot."},{"line_number":2342,"context_line":"        \"\"\""},{"line_number":2343,"context_line":"        try:"},{"line_number":2344,"context_line":"            volumes \u003d self.db.volume_get_all_by_group(context, group.id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_ffe401ad","line":2341,"updated":"2015-10-02 13:57:15.000000000","message":"This isn\u0027t true, you\u0027ve rebased that line wrongly.","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d32d24047d73e201c271daaabbb845908656f2bd","unresolved":false,"context_lines":[{"line_number":2338,"context_line":"                                         cgsnapshot\u003dNone, source_cg\u003dNone):"},{"line_number":2339,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":2340,"context_line":""},{"line_number":2341,"context_line":"        Currently the source can only be a cgsnapshot."},{"line_number":2342,"context_line":"        \"\"\""},{"line_number":2343,"context_line":"        try:"},{"line_number":2344,"context_line":"            volumes \u003d self.db.volume_get_all_by_group(context, group.id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_c113515b","line":2341,"in_reply_to":"9a1a9d01_ffe401ad","updated":"2015-10-02 21:19:49.000000000","message":"Good catch.","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"138dc812ae6362fe71e795e2e18c9c6cc54ce259","unresolved":false,"context_lines":[{"line_number":2338,"context_line":"                                         cgsnapshot\u003dNone, source_cg\u003dNone):"},{"line_number":2339,"context_line":"        \"\"\"Creates the consistency group from source."},{"line_number":2340,"context_line":""},{"line_number":2341,"context_line":"        Currently the source can only be a cgsnapshot."},{"line_number":2342,"context_line":"        \"\"\""},{"line_number":2343,"context_line":"        try:"},{"line_number":2344,"context_line":"            volumes \u003d self.db.volume_get_all_by_group(context, group.id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"9a1a9d01_072b7d95","line":2341,"in_reply_to":"9a1a9d01_ffe401ad","updated":"2015-10-05 10:30:27.000000000","message":"It was like that in the first patch, but I do agree that it is not correct.","commit_id":"29fc9bee956217003ee5913ce3af42221085311b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"bfb3282e2fdd5cd57e16efb45d32ab9cd16a4088","unresolved":false,"context_lines":[{"line_number":2466,"context_line":"            context, group, \"create.end\")"},{"line_number":2467,"context_line":"        if cgsnapshot:"},{"line_number":2468,"context_line":"            source \u003d _(\"snapshot-%s\") % cgsnapshot.id"},{"line_number":2469,"context_line":"        elif source_cg:"},{"line_number":2470,"context_line":"            source \u003d _(\"cg-%s\") % source_cg.id"},{"line_number":2471,"context_line":"        LOG.info(_LI(\"Create consistency group \""},{"line_number":2472,"context_line":"                     \"from source-%(source)s completed successfully.\"),"}],"source_content_type":"text/x-python","patch_set":43,"id":"9a1a9d01_d877a09d","line":2469,"updated":"2015-10-05 11:27:23.000000000","message":"-1: Add an `else` clause like on line 2442","commit_id":"4083a96136968b061903fab176598928bfda45ce"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"29e80127d0511e755f12755f27c2e4c2d10a1f20","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2358,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2359,"context_line":"                    raise"},{"line_number":2360,"context_line":"                if cgsnapshot:"},{"line_number":2361,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":2362,"context_line":"                        context, cgsnapshot.id)"},{"line_number":2363,"context_line":"                    for snap in snapshots:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_1ead51e9","line":2360,"updated":"2015-10-19 10:39:54.000000000","message":"Is this \u0027if\u0027 still needed? Cause we have already had a check in 2347, I think we can remove this.","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"1253bf6e56185ffb14fafedeaa49e4368a4dc66b","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2358,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2359,"context_line":"                    raise"},{"line_number":2360,"context_line":"                if cgsnapshot:"},{"line_number":2361,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":2362,"context_line":"                        context, cgsnapshot.id)"},{"line_number":2363,"context_line":"                    for snap in snapshots:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_dfca704f","line":2360,"in_reply_to":"3a29b11f_1ead51e9","updated":"2015-10-19 12:42:12.000000000","message":"@Xi Your right, get_by_id either returns object or raise exception. Fixed.","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3f0142a3194259efeac3dfdb27a3cf217aff8886","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2358,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2359,"context_line":"                    raise"},{"line_number":2360,"context_line":"                if cgsnapshot:"},{"line_number":2361,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":2362,"context_line":"                        context, cgsnapshot.id)"},{"line_number":2363,"context_line":"                    for snap in snapshots:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_7e31e50a","line":2360,"in_reply_to":"3a29b11f_1ead51e9","updated":"2015-10-19 10:55:51.000000000","message":"I think it is. CGSnapshot could get deleted while we are processing the request. Take a look at your comment in this file in patchset 2.","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"8115b56076ff3c4a5b0ade271dfe06403eadc436","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2358,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2359,"context_line":"                    raise"},{"line_number":2360,"context_line":"                if cgsnapshot:"},{"line_number":2361,"context_line":"                    snapshots \u003d objects.SnapshotList.get_all_for_cgsnapshot("},{"line_number":2362,"context_line":"                        context, cgsnapshot.id)"},{"line_number":2363,"context_line":"                    for snap in snapshots:"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_2871c8e0","line":2360,"in_reply_to":"3a29b11f_7e31e50a","updated":"2015-10-20 02:54:44.000000000","message":"@Michal, the comment in patch set 2 was from me - Xing, not Xi.  We have the same last name and our first names even look alike, but we are not the same person:).","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"},{"author":{"_account_id":10439,"name":"Xi Yang","email":"yang.xi@99cloud.net","username":"phenom"},"change_message_id":"29e80127d0511e755f12755f27c2e4c2d10a1f20","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"                              {\u0027cg\u0027: source_cg.id},"},{"line_number":2384,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2385,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2386,"context_line":"                    raise"},{"line_number":2387,"context_line":"                if source_cg:"},{"line_number":2388,"context_line":"                    source_vols \u003d self.db.volume_get_all_by_group("},{"line_number":2389,"context_line":"                        context, source_cg.id)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_9e872161","line":2386,"updated":"2015-10-19 10:39:54.000000000","message":"Same with above.","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"1253bf6e56185ffb14fafedeaa49e4368a4dc66b","unresolved":false,"context_lines":[{"line_number":2383,"context_line":"                              {\u0027cg\u0027: source_cg.id},"},{"line_number":2384,"context_line":"                              resource\u003d{\u0027type\u0027: \u0027consistency_group\u0027,"},{"line_number":2385,"context_line":"                                        \u0027id\u0027: group.id})"},{"line_number":2386,"context_line":"                    raise"},{"line_number":2387,"context_line":"                if source_cg:"},{"line_number":2388,"context_line":"                    source_vols \u003d self.db.volume_get_all_by_group("},{"line_number":2389,"context_line":"                        context, source_cg.id)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a29b11f_9fc4f840","line":2386,"in_reply_to":"3a29b11f_9e872161","updated":"2015-10-19 12:42:12.000000000","message":"Done","commit_id":"51fc6d678f8b42b61eb65717c8f20db398986583"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"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"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_c7d2d75b","line":68,"updated":"2015-07-03 15:36:34.000000000","message":"Need version bump","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"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"},{"line_number":71,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_5dc44c5e","line":68,"in_reply_to":"ba3cc151_c7d2d75b","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def create_consistencygroup_from_src(self, ctxt, group, cgsnapshot\u003dNone):"},{"line_number":103,"context_line":"        new_host \u003d utils.extract_host(group.host)"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.24\u0027)"},{"line_number":105,"context_line":"        cctxt.cast(ctxt, \u0027create_consistencygroup_from_src\u0027,"},{"line_number":106,"context_line":"                   group\u003dgroup,"},{"line_number":107,"context_line":"                   cgsnapshot\u003dcgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_67498b30","line":104,"updated":"2015-07-03 15:36:34.000000000","message":"Version change","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def create_consistencygroup_from_src(self, ctxt, group, cgsnapshot\u003dNone):"},{"line_number":103,"context_line":"        new_host \u003d utils.extract_host(group.host)"},{"line_number":104,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.24\u0027)"},{"line_number":105,"context_line":"        cctxt.cast(ctxt, \u0027create_consistencygroup_from_src\u0027,"},{"line_number":106,"context_line":"                   group\u003dgroup,"},{"line_number":107,"context_line":"                   cgsnapshot\u003dcgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_fd9f6063","line":104,"in_reply_to":"ba3cc151_67498b30","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def create_cgsnapshot(self, ctxt, group, cgsnapshot):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        host \u003d utils.extract_host(group.host)"},{"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,"},{"line_number":115,"context_line":"                   cgsnapshot\u003dcgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_c76097a7","line":112,"updated":"2015-07-03 15:36:34.000000000","message":"Version change","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def create_cgsnapshot(self, ctxt, group, cgsnapshot):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        host \u003d utils.extract_host(group.host)"},{"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,"},{"line_number":115,"context_line":"                   cgsnapshot\u003dcgsnapshot)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_1da564b4","line":112,"in_reply_to":"ba3cc151_c76097a7","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"173eb00162784af5b638dad4459206fe13ea9cdb","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, host):"},{"line_number":118,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":119,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.18\u0027)"},{"line_number":120,"context_line":"        cctxt.cast(ctxt, \u0027delete_cgsnapshot\u0027,"},{"line_number":121,"context_line":"                   cgsnapshot\u003dcgsnapshot)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_6770ab72","line":119,"updated":"2015-07-03 15:36:34.000000000","message":"Version change","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"6adec2e09ee20320183a898a25a108cdbcb1ab17","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def delete_cgsnapshot(self, ctxt, cgsnapshot, host):"},{"line_number":118,"context_line":"        new_host \u003d utils.extract_host(host)"},{"line_number":119,"context_line":"        cctxt \u003d self.client.prepare(server\u003dnew_host, version\u003d\u00271.18\u0027)"},{"line_number":120,"context_line":"        cctxt.cast(ctxt, \u0027delete_cgsnapshot\u0027,"},{"line_number":121,"context_line":"                   cgsnapshot\u003dcgsnapshot)"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_bda9d892","line":119,"in_reply_to":"ba3cc151_6770ab72","updated":"2015-07-06 10:57:52.000000000","message":"Done","commit_id":"539975cee2954e8db98ae84146eab1b05b7dbbf0"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"684362b9650c6fd988a7e8cb95b12de412ea0914","unresolved":false,"context_lines":[{"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":"        1.25 - Updated: create_consistencygroup_from_src(), create_cgsnapshot()"},{"line_number":71,"context_line":"               and delete_cgsnapshot() to cast method only with necessary args"},{"line_number":72,"context_line":"    \u0027\u0027\u0027"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a41bdd9_7a2c4702","line":71,"updated":"2015-07-14 11:18:11.000000000","message":"Adding information that we\u0027re now passing objects over RPC instead of IDs would be beneficial.","commit_id":"baa2bac199c6a6666fdb9dc6ece377b6d3726cd0"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"a38c59e77916d6b348e52ad9d803f60c2250724a","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        1.28 - Adds manage_existing_snapshot"},{"line_number":77,"context_line":"        1.29 - Adds get_capabilities."},{"line_number":78,"context_line":"        1.30 - Adds remove_export"},{"line_number":79,"context_line":"        1.30 - Updated: create_consistencygroup_from_src(), create_cgsnapshot()"},{"line_number":80,"context_line":"               and delete_cgsnapshot() to cast method only with necessary"},{"line_number":81,"context_line":"               args. Forwarding CGSnapshot object instead of CGSnapshot_id."},{"line_number":82,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"da20952f_dbeb7e77","line":79,"updated":"2015-09-01 17:06:40.000000000","message":"s/1.30/1.31","commit_id":"260fa24035742f81e624c4ddfb7d47c42cedfb1a"},{"author":{"_account_id":16814,"name":"Daniel Tadrzak","email":"daniel.tadrzak@intel.com","username":"dtadrzak"},"change_message_id":"86002a878cb39ed83d393d862f2692f7597b05b0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        1.28 - Adds manage_existing_snapshot"},{"line_number":77,"context_line":"        1.29 - Adds get_capabilities."},{"line_number":78,"context_line":"        1.30 - Adds remove_export"},{"line_number":79,"context_line":"        1.30 - Updated: create_consistencygroup_from_src(), create_cgsnapshot()"},{"line_number":80,"context_line":"               and delete_cgsnapshot() to cast method only with necessary"},{"line_number":81,"context_line":"               args. Forwarding CGSnapshot object instead of CGSnapshot_id."},{"line_number":82,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"da20952f_46268e17","line":79,"in_reply_to":"da20952f_dbeb7e77","updated":"2015-09-02 09:54:44.000000000","message":"Done","commit_id":"260fa24035742f81e624c4ddfb7d47c42cedfb1a"}]}
