)]}'
{"nova/objects/fields.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1316d849f5fdeb0c82ec9949dd6bb1cfaba6524c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"List \u003d fields.List"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ActiveFileFormat(Enum):"},{"line_number":73,"context_line":"    RAW \u003d \u0027raw\u0027"},{"line_number":74,"context_line":"    QCOW2 \u003d \u0027qcow2\u0027"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_4c69abbd","line":72,"updated":"2015-07-27 10:01:57.000000000","message":"As a minor nitpick, I\u0027d prefer this to be named ImageFormat, since thats the terminology we use commonly elsewhere for this.","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"2b1bd73d9e32739dd2d602fa204210f5e8a715c4","unresolved":false,"context_lines":[{"line_number":69,"context_line":"List \u003d fields.List"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"class ActiveFileFormat(Enum):"},{"line_number":73,"context_line":"    RAW \u003d \u0027raw\u0027"},{"line_number":74,"context_line":"    QCOW2 \u003d \u0027qcow2\u0027"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_6747e01d","line":72,"in_reply_to":"3a50d1a3_4c69abbd","updated":"2015-07-27 11:06:40.000000000","message":"Done","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14fd4491d60ddeb3029f3c84985c37e63fd57d0e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    CREATING_COMPUTE_COMPLETE \u003d \u0027creating_compute_complete\u0027"},{"line_number":145,"context_line":"    CREATING_COMPUTE_ERROR \u003d \u0027creating_compute_error\u0027"},{"line_number":146,"context_line":"    DELETING_COMPUTE_COMPLETE \u003d \u0027deleting_compute_complete\u0027"},{"line_number":147,"context_line":"    DELETING_COMPUTE_ERROR \u003d \u0027deleting_compute_error\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    ALL \u003d (CREATING_COMPUTE_COMPLETE, CREATING_COMPUTE_ERROR,"},{"line_number":150,"context_line":"           DELETING_COMPUTE_COMPLETE, DELETING_COMPUTE_ERROR)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_177ce71d","line":147,"updated":"2015-08-05 15:40:02.000000000","message":"Do we really need _compute_ in these? They\u0027re already scoped to compute by the field. Naming them this way makes them more confusing to read during debug, IMHO.","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"dfae05137b8f2deb39594c74dc29ace93ff9e9a9","unresolved":false,"context_lines":[{"line_number":144,"context_line":"    CREATING_COMPUTE_COMPLETE \u003d \u0027creating_compute_complete\u0027"},{"line_number":145,"context_line":"    CREATING_COMPUTE_ERROR \u003d \u0027creating_compute_error\u0027"},{"line_number":146,"context_line":"    DELETING_COMPUTE_COMPLETE \u003d \u0027deleting_compute_complete\u0027"},{"line_number":147,"context_line":"    DELETING_COMPUTE_ERROR \u003d \u0027deleting_compute_error\u0027"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    ALL \u003d (CREATING_COMPUTE_COMPLETE, CREATING_COMPUTE_ERROR,"},{"line_number":150,"context_line":"           DELETING_COMPUTE_COMPLETE, DELETING_COMPUTE_ERROR)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_5e502dd4","line":147,"in_reply_to":"1a4dcd0f_177ce71d","updated":"2015-08-06 07:12:58.000000000","message":"These are passed on to the Cinder side where Cinder actually checks for these strings as part of its effort to determine whether Nova is done with its part or not. So having \u0027compute\u0027 here helps provide clarity on the source of these status\u0027es Cinder side.\n\nWe can ideally remove COMPUTE from the field name, since these are fields of an object on the Nova side, but the actual strings need to have compute as they cross the service boundary. Let me know pls.","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"}],"nova/objects/online_snapshot_info.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14fd4491d60ddeb3029f3c84985c37e63fd57d0e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, **kwargs):"},{"line_number":35,"context_line":"        super(OnlineSnapshotInfo, self).__init__(**kwargs)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # Always set progress to 90. This is done for backward"},{"line_number":38,"context_line":"        # compatibility, to indicate Cinder that Nova is done with"},{"line_number":39,"context_line":"        # its part of the snapshot processing."},{"line_number":40,"context_line":"        # TODO(deepakcs): Remove this in \u0027M\u0027 release."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_57290f36","line":37,"updated":"2015-08-05 15:40:02.000000000","message":"This does not belong in the object, IMHO. This is business logic that we should embed somewhere else if we really need to (although I\u0027m highly suspect of it).","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"dfae05137b8f2deb39594c74dc29ace93ff9e9a9","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, **kwargs):"},{"line_number":35,"context_line":"        super(OnlineSnapshotInfo, self).__init__(**kwargs)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        # Always set progress to 90. This is done for backward"},{"line_number":38,"context_line":"        # compatibility, to indicate Cinder that Nova is done with"},{"line_number":39,"context_line":"        # its part of the snapshot processing."},{"line_number":40,"context_line":"        # TODO(deepakcs): Remove this in \u0027M\u0027 release."}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_be0cd1ec","line":37,"in_reply_to":"1a4dcd0f_57290f36","updated":"2015-08-06 07:12:58.000000000","message":"Current code sends 90% as a indication of nova finishing its part of the online snapshot work. The same is embedded into the object here, since we want to Objectify the online snap status part. This 90% will be removed in next release, currently being kept for backward compat only.","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14fd4491d60ddeb3029f3c84985c37e63fd57d0e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(deepakcs): Remove this in \u0027M\u0027 release."},{"line_number":41,"context_line":"        if \u0027progress\u0027 not in kwargs:"},{"line_number":42,"context_line":"            self.progress \u003d 90"},{"line_number":43,"context_line":"            self.obj_reset_changes([\u0027progress\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if \u0027active_file_fmt\u0027 not in kwargs:"},{"line_number":46,"context_line":"            self.active_file_fmt \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_b718931f","line":43,"updated":"2015-08-05 15:40:02.000000000","message":"This is not the proper way to set defaults on an object. Please set default\u003d on the fields and use obj_set_defaults() when and where you create the object.","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"dfae05137b8f2deb39594c74dc29ace93ff9e9a9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        # TODO(deepakcs): Remove this in \u0027M\u0027 release."},{"line_number":41,"context_line":"        if \u0027progress\u0027 not in kwargs:"},{"line_number":42,"context_line":"            self.progress \u003d 90"},{"line_number":43,"context_line":"            self.obj_reset_changes([\u0027progress\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        if \u0027active_file_fmt\u0027 not in kwargs:"},{"line_number":46,"context_line":"            self.active_file_fmt \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a4dcd0f_a4afe428","line":43,"in_reply_to":"1a4dcd0f_b718931f","updated":"2015-08-06 07:12:58.000000000","message":"After adding default\u003d for the relevant fields, Instead of calling obj_set_defaults() in each place where I create the object, its better to call it in __init__ itself ? It seems to work in my basic testing I did.","commit_id":"17da39eb75c14556df2e84425b24897bc147b41b"}],"nova/objects/online_snapshot_status.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ca19d15463c2cc6091c362a46b9782f33c73e4cf","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def create(cls, status, compute_status, file_info\u003dNone):"},{"line_number":33,"context_line":"        \"\"\"Create instance from snapshot status, progress and file info"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param status: Legacy db status of snapshot operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_ceba8be1","line":32,"updated":"2015-07-07 14:22:44.000000000","message":"Ok so you probably want to override the method __init__ here instead of add a method","commit_id":"a04a1843b4314980063ffba1e944fedfd24f7ef4"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"16497919a1ba3272da208d3b2a7a813c1fc9a908","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    @classmethod"},{"line_number":32,"context_line":"    def create(cls, status, compute_status, file_info\u003dNone):"},{"line_number":33,"context_line":"        \"\"\"Create instance from snapshot status, progress and file info"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param status: Legacy db status of snapshot operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_f3a7fd4d","line":32,"in_reply_to":"ba3cc151_ceba8be1","updated":"2015-07-08 13:42:31.000000000","message":"Done","commit_id":"a04a1843b4314980063ffba1e944fedfd24f7ef4"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0dab951589088895c40bfd6a8719d20db4cb4ffb","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":"        self.obj_reset_changes()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def to_dict(self):"},{"line_number":72,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_5e93225b","line":69,"updated":"2015-07-09 07:27:52.000000000","message":"I do not think this is necessary, what did you put this ? It looks for me you are not updating the object so the changed_field should stay empty","commit_id":"3fb6b6ebe0abf8a46485f0283dd629f89493726f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"7cf8fdb024941f451794282657a1927fe505b843","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":"        self.obj_reset_changes()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def to_dict(self):"},{"line_number":72,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_269930d1","line":69,"in_reply_to":"ba3cc151_30819bc3","updated":"2015-07-10 10:36:49.000000000","message":"Done","commit_id":"3fb6b6ebe0abf8a46485f0283dd629f89493726f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"aea9009decfb708356653c09506a92573eaba167","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":"        self.obj_reset_changes()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def to_dict(self):"},{"line_number":72,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_d5f5c150","line":69,"in_reply_to":"ba3cc151_5e93225b","updated":"2015-07-09 11:57:59.000000000","message":"Its init so its added to ensure we start from a clean slate.\nI see similar thing being done in __init__ of objects/pci_device.py\n\nI don\u0027t think there is any harm there, if we keep it\nIf you insist, i can remove it, let me know.","commit_id":"3fb6b6ebe0abf8a46485f0283dd629f89493726f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4785ba2f67d9a70841195c8b2dc1792a67fd596f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":"        self.obj_reset_changes()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def to_dict(self):"},{"line_number":72,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba3cc151_30819bc3","line":69,"in_reply_to":"ba3cc151_d5f5c150","updated":"2015-07-09 12:18:32.000000000","message":"This is used to record any modifications but you are initializing the objects from the __init__ method so no modification should be recorded.\n\nI have looked in objects/pci_devices.py; in PciDevice\u0027s class there is an error, obj_reset_changes()\u0027s method should be after \u0027self.extra_info()\u0027.\n\nPlease remove this necessary call yes.","commit_id":"3fb6b6ebe0abf8a46485f0283dd629f89493726f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":20,"context_line":"class OnlineSnapshotStatus(base.NovaObject):"},{"line_number":21,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_49600436","line":20,"updated":"2015-07-20 10:32:11.000000000","message":"Lets change s/Status/Info/ so we can use Status as the name of the enum field type.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":20,"context_line":"class OnlineSnapshotStatus(base.NovaObject):"},{"line_number":21,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_97717a0e","line":20,"in_reply_to":"3a50d1a3_49600436","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_49dd6413","line":24,"updated":"2015-07-20 10:32:11.000000000","message":"IIUC, there are a fixed number of pre-defined status values, so we should define an enum field type for this, with constants for each valid string\n\neg\n\n class OnlineSnapshotStatus(Enum):\n     CREATING \u003d \"creating\"\n     DELETING \u003d \"deleteing\"\n     ALL \u003d [CREATING, DELETING]\n\n    def __init__(self, **kwargs):\n        super(OnlineSnapshotStatus, self).__init__(\n            valid_values\u003dOnlineSnapshotStatus.ALL, **kwargs)\n\n  class OnlineSnapshotStatusField(BaseEnumField)\n     AUTO_TYPE \u003d OnlineSNapshotStatus","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_f758fe8b","line":24,"in_reply_to":"3a50d1a3_49dd6413","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_899fec5e","line":25,"updated":"2015-07-20 10:32:11.000000000","message":"If this is tracking percentage completion it should be an IntegerField really.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_d752a266","line":25,"in_reply_to":"3a50d1a3_899fec5e","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":29,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_c9d174fd","line":26,"updated":"2015-07-20 10:32:11.000000000","message":"Again, it looks like this should be an enum field type with constants.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    fields \u003d {"},{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":29,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_97489ab4","line":26,"in_reply_to":"3a50d1a3_c9d174fd","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_0983dccd","line":27,"updated":"2015-07-20 10:32:11.000000000","message":"IIUC, this is the qemu disk format, \u0027raw\u0027, \u0027qcow2\u0027, etc, etc. So, we should again define an enum field type for this with the valid values set as constants.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":25,"context_line":"        \u0027progress\u0027: fields.StringField(),"},{"line_number":26,"context_line":"        \u0027compute_snapshot_status\u0027: fields.StringField(),"},{"line_number":27,"context_line":"        \u0027active_file_fmt\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":28,"context_line":"        \u0027file_to_delete\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":29,"context_line":"    }"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_57cd322f","line":27,"in_reply_to":"3a50d1a3_0983dccd","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_49d00454","line":68,"updated":"2015-07-20 10:32:11.000000000","message":"Normal practice is for the constructors of objects to only take the generic *args, **kwargs whose keys are the field names. If you want to instantiate an object from some legacy format, then we\u0027d use a static or class method instead.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"fa1a05146c421a98b890d5ea885f3e5ae536ab58","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_ba369d01","line":68,"in_reply_to":"3a50d1a3_49d00454","updated":"2015-07-20 13:56:21.000000000","message":"Thats what i had done (see prev patchsets) but sahid had asked me to move to this method :)","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_57f45259","line":68,"in_reply_to":"3a50d1a3_6f39c0f1","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"d831d528af33ce9227603fd5ddafdd7bc724e3fe","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_6a0d2ee7","line":68,"in_reply_to":"3a50d1a3_6f39c0f1","updated":"2015-07-22 11:38:52.000000000","message":"No issues, sahid","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"dfabc580e0ca3ae93d7b8344635857f7faa16ba3","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_6f39c0f1","line":68,"in_reply_to":"3a50d1a3_8a4fd091","updated":"2015-07-22 11:29:00.000000000","message":"Aie I referred myself to what we have done here http://git.openstack.org/cgit/openstack/nova/tree/nova/objects/instance_numa_topology.py#n49 when we wanted to specify default values.\n\nSorry Deepak.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"7748898cd76651e587e1e4ff2b4fabe6a20d89ba","unresolved":false,"context_lines":[{"line_number":65,"context_line":"            \u0027file_to_delete\u0027: ftd,"},{"line_number":66,"context_line":"        }"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_8a4fd091","line":68,"in_reply_to":"3a50d1a3_ba369d01","updated":"2015-07-20 14:37:35.000000000","message":"Oh sorry, i\u0027m afraid his suggestion was wrong in this case.","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(OnlineSnapshotStatus, self).__init__(**status_dict)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def to_dict(self):"},{"line_number":71,"context_line":"        \"\"\"Create snapshot status dictionary from object"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        Create a snapshot status dictionary that can be passed to"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_97f65a5b","line":70,"updated":"2015-07-24 12:37:34.000000000","message":"Removed this function, as its no longer needed","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"b0287aac74ccae656844248ab74e80021eb90556","unresolved":false,"context_lines":[{"line_number":61,"context_line":"from nova.network import model as network_model"},{"line_number":62,"context_line":"from nova import objects"},{"line_number":63,"context_line":"from nova.objects.fields import ComputeSnapshotStatus as f_CSS"},{"line_number":64,"context_line":"from nova.objects.fields import OnlineSnapshotStatus as f_OSS"},{"line_number":65,"context_line":"from nova.pci import manager as pci_manager"},{"line_number":66,"context_line":"from nova import test"},{"line_number":67,"context_line":"from nova.tests.unit import fake_block_device"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_0de63db4","line":64,"updated":"2015-07-27 11:11:41.000000000","message":"As mentioned before, importing individual classes is not correct style - you must only import modules. eg \u0027from nova.objects import fields\u0027.","commit_id":"bb01fb403c303a0d9a0f1c30f67d0ed49f1ef767"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"7d4c64e0e0c2f3a01e574c4c3860e1aac4f1216a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"from nova.network import model as network_model"},{"line_number":62,"context_line":"from nova import objects"},{"line_number":63,"context_line":"from nova.objects.fields import ComputeSnapshotStatus as f_CSS"},{"line_number":64,"context_line":"from nova.objects.fields import OnlineSnapshotStatus as f_OSS"},{"line_number":65,"context_line":"from nova.pci import manager as pci_manager"},{"line_number":66,"context_line":"from nova import test"},{"line_number":67,"context_line":"from nova.tests.unit import fake_block_device"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_e21d1b67","line":64,"in_reply_to":"3a50d1a3_0de63db4","updated":"2015-07-27 11:40:29.000000000","message":"My bad, missed in thsi patch, but i fiexd this in the upper(needed-by) patch. Will fix now","commit_id":"bb01fb403c303a0d9a0f1c30f67d0ed49f1ef767"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ca19d15463c2cc6091c362a46b9782f33c73e4cf","unresolved":false,"context_lines":[{"line_number":1772,"context_line":"                LOG.exception(_LE(\u0027Error occurred during \u0027"},{"line_number":1773,"context_line":"                                  \u0027volume_snapshot_create, \u0027"},{"line_number":1774,"context_line":"                                  \u0027sending error status to Cinder.\u0027))"},{"line_number":1775,"context_line":"                snap_status \u003d objects.OnlineSnapshotStatus.create("},{"line_number":1776,"context_line":"                    \u0027error\u0027, \u0027creating_compute_error\u0027)"},{"line_number":1777,"context_line":""},{"line_number":1778,"context_line":"                self._volume_snapshot_update_status(context, snapshot_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_ee2e6ff9","line":1775,"updated":"2015-07-07 14:22:44.000000000","message":"We usually prefer to use the \"constructor\".\n\n  objects.OnlineSnapshotStatus(status\u003d\u0027error\u0027, compute_status\u003d\u0027...\u0027)","commit_id":"a04a1843b4314980063ffba1e944fedfd24f7ef4"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"16497919a1ba3272da208d3b2a7a813c1fc9a908","unresolved":false,"context_lines":[{"line_number":1772,"context_line":"                LOG.exception(_LE(\u0027Error occurred during \u0027"},{"line_number":1773,"context_line":"                                  \u0027volume_snapshot_create, \u0027"},{"line_number":1774,"context_line":"                                  \u0027sending error status to Cinder.\u0027))"},{"line_number":1775,"context_line":"                snap_status \u003d objects.OnlineSnapshotStatus.create("},{"line_number":1776,"context_line":"                    \u0027error\u0027, \u0027creating_compute_error\u0027)"},{"line_number":1777,"context_line":""},{"line_number":1778,"context_line":"                self._volume_snapshot_update_status(context, snapshot_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba3cc151_9346b179","line":1775,"in_reply_to":"ba3cc151_ee2e6ff9","updated":"2015-07-08 13:42:31.000000000","message":"Done","commit_id":"a04a1843b4314980063ffba1e944fedfd24f7ef4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1316d849f5fdeb0c82ec9949dd6bb1cfaba6524c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"from nova.network import model as network_model"},{"line_number":78,"context_line":"from nova import objects"},{"line_number":79,"context_line":"from nova.objects.fields import ComputeSnapshotStatus as f_CSS"},{"line_number":80,"context_line":"from nova.objects.fields import OnlineSnapshotStatus as f_OSS"},{"line_number":81,"context_line":"from nova.pci import manager as pci_manager"},{"line_number":82,"context_line":"from nova.pci import utils as pci_utils"},{"line_number":83,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_ec02f708","line":80,"updated":"2015-07-27 10:01:57.000000000","message":"Importing individual classes is forbidden by our style guidelines. You must just do from nova import fields.","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"2b1bd73d9e32739dd2d602fa204210f5e8a715c4","unresolved":false,"context_lines":[{"line_number":77,"context_line":"from nova.network import model as network_model"},{"line_number":78,"context_line":"from nova import objects"},{"line_number":79,"context_line":"from nova.objects.fields import ComputeSnapshotStatus as f_CSS"},{"line_number":80,"context_line":"from nova.objects.fields import OnlineSnapshotStatus as f_OSS"},{"line_number":81,"context_line":"from nova.pci import manager as pci_manager"},{"line_number":82,"context_line":"from nova.pci import utils as pci_utils"},{"line_number":83,"context_line":"from nova import utils"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_c7603438","line":80,"in_reply_to":"3a50d1a3_ec02f708","updated":"2015-07-27 11:06:40.000000000","message":"Done","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"1316d849f5fdeb0c82ec9949dd6bb1cfaba6524c","unresolved":false,"context_lines":[{"line_number":1740,"context_line":""},{"line_number":1741,"context_line":"                info \u003d {\u0027status\u0027: status,"},{"line_number":1742,"context_line":"                        \u0027compute_snapshot_status\u0027: new_status}"},{"line_number":1743,"context_line":"                snap_info_obj \u003d objects.OnlineSnapshotInfo(**info)"},{"line_number":1744,"context_line":""},{"line_number":1745,"context_line":"                self._volume_snapshot_update_status(context, snapshot_id,"},{"line_number":1746,"context_line":"                                                    snap_info_obj)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_4c420b40","line":1743,"updated":"2015-07-27 10:01:57.000000000","message":"No ned for any of these intermediate variables. This should be simplified to\n\n  snap_info_obj \u003d objects.OnlineSnapshotInfo(\n     status\u003dfields.OnlineSNapshotStatus.ERROR, \n     compute_snapshot_status\u003dfields.ComputeSnapshotStatus.CREATING_COMPUTE_ERROR)\n\nand likewise for the other instances below.","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"2b1bd73d9e32739dd2d602fa204210f5e8a715c4","unresolved":false,"context_lines":[{"line_number":1740,"context_line":""},{"line_number":1741,"context_line":"                info \u003d {\u0027status\u0027: status,"},{"line_number":1742,"context_line":"                        \u0027compute_snapshot_status\u0027: new_status}"},{"line_number":1743,"context_line":"                snap_info_obj \u003d objects.OnlineSnapshotInfo(**info)"},{"line_number":1744,"context_line":""},{"line_number":1745,"context_line":"                self._volume_snapshot_update_status(context, snapshot_id,"},{"line_number":1746,"context_line":"                                                    snap_info_obj)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_875a2c82","line":1743,"in_reply_to":"3a50d1a3_4c420b40","updated":"2015-07-27 11:06:40.000000000","message":"Done\nI complied with your review here, but in the testcases (test_driver.py) I have\nkept the intermediate dict variable (info) as that adds to the readability, hope that is fine, as its a testcase.","commit_id":"f5cadb28389a974f3b46cfc534d3c239e527422a"}],"nova/volume/cinder.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"0a8ac9dcb0b52eedf83cb36a8f6259401aae2de8","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # into \u0027creating\u0027 and a separate state of"},{"line_number":469,"context_line":"        # \u0027creating_in_nova\u0027. (Same for \u0027deleting\u0027 state.)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        oss_dict \u003d oss_obj.to_dict()"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        vs.update_snapshot_status("},{"line_number":474,"context_line":"            snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_297258e6","line":471,"updated":"2015-07-20 10:32:11.000000000","message":"I don\u0027t really see the point in this call - the dict field accesses below could just as easily do  oss_obj.status, instead of oss_dict[\"status\"]","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"},{"author":{"_account_id":10796,"name":"Deepak C Shetty (deepakcs)","email":"dpkshetty@gmail.com","username":"deepakcs"},"change_message_id":"b4946ea471cfc4ab62326a4e06abc645ddcfefd4","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # into \u0027creating\u0027 and a separate state of"},{"line_number":469,"context_line":"        # \u0027creating_in_nova\u0027. (Same for \u0027deleting\u0027 state.)"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        oss_dict \u003d oss_obj.to_dict()"},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"        vs.update_snapshot_status("},{"line_number":474,"context_line":"            snapshot_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a50d1a3_d78702b3","line":471,"in_reply_to":"3a50d1a3_297258e6","updated":"2015-07-24 12:37:34.000000000","message":"Done","commit_id":"5ffab5e5cd4df1a6f835348995d5ac554f7ee44f"}]}
