)]}'
{"nova/objects/image_meta.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c869937c01b5179cef8e3af42733cc1617205357","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":51,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":53,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_9299f721","line":53,"updated":"2015-08-05 11:18:22.000000000","message":"Ok, the glance DB schema (glance/db/sqlalchemy/models.py)  allows these all to be NULL, so that\u0027s fine.","commit_id":"33e55cff6662746c27a31f01d7a6694a70f520c6"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c869937c01b5179cef8e3af42733cc1617205357","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # Version 1.1: added os_require_quiesce field"},{"line_number":116,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":117,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":118,"context_line":"    VERSION \u003d \u00271.3\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"},{"line_number":121,"context_line":"    NUMA_NODES_MAX \u003d 128"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_7289cb25","line":118,"updated":"2015-08-05 11:18:22.000000000","message":"Don\u0027t change this - the versions are intended to be tied.","commit_id":"33e55cff6662746c27a31f01d7a6694a70f520c6"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3b1cd2c3c230802dd029eca22bf5c1e121868d25","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    # Version 1.1: added os_require_quiesce field"},{"line_number":116,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":117,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":118,"context_line":"    VERSION \u003d \u00271.3\u0027"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"},{"line_number":121,"context_line":"    NUMA_NODES_MAX \u003d 128"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a4dcd0f_dc69cebf","line":118,"in_reply_to":"1a4dcd0f_7289cb25","updated":"2015-08-05 12:51:34.000000000","message":"Done","commit_id":"33e55cff6662746c27a31f01d7a6694a70f520c6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    #"},{"line_number":43,"context_line":"    fields \u003d {"},{"line_number":44,"context_line":"        \u0027id\u0027: fields.UUIDField(),"},{"line_number":45,"context_line":"        \u0027name\u0027: fields.StringField(),"},{"line_number":46,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":47,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":48,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0324765b","line":45,"updated":"2015-08-06 15:08:55.000000000","message":"Why don\u0027t we make this nullable given the glance db model?\n\nhttp://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n128","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":47,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":48,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"},{"line_number":49,"context_line":"        \u0027checksum\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027owner\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_430efee5","line":49,"updated":"2015-08-06 15:08:55.000000000","message":"Confirmed: http://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n135","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":48,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"},{"line_number":49,"context_line":"        \u0027checksum\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027owner\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0380f6f3","line":50,"updated":"2015-08-06 15:08:55.000000000","message":"Seems owners should be nullable:\n\nhttp://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n138","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"},{"line_number":49,"context_line":"        \u0027checksum\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027owner\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_838ba61e","line":51,"updated":"2015-08-06 15:08:55.000000000","message":"Seems this should be nullable:\n\nhttp://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n131","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \u0027checksum\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027owner\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e3706a42","line":52,"updated":"2015-08-06 15:08:55.000000000","message":"Seems virtual_size should be nullable:\n\nhttp://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n132","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        \u0027owner\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e3fdcab1","line":53,"updated":"2015-08-06 15:08:55.000000000","message":"Confirmed: http://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n130","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"4c8cf04f6547c70224dc9410e25c7bbe0c6514b3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_cd39e2d8","line":54,"updated":"2015-08-06 13:06:08.000000000","message":"I don\u0027t think we can simply do this.\n\n1.4 will blow up if it gets a None field, so we need to do some kind of a backport with this. Otherwise in a live upgrade scenarion this will break.\n\nI am not sure if this is ever used that way in the code (sent between compute and other nodes). but in theory we can\u0027t just do this.\n\nRight?","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c2df83ce550a3204cdb2f0b1dc1ec61c5c4d7a6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c31c4e6c","line":54,"in_reply_to":"1a4dcd0f_0fbc9ada","updated":"2015-08-06 15:02:07.000000000","message":"I assume ndipanov meant how the old style primitive image_meta dict was used, not this new object thing.  So we should see how image_meta[\u0027disk_format\u0027] is used throughout the code.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3975d07a6d53bee7d44a92ee77be78c451f28fee","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_0fbc9ada","line":54,"in_reply_to":"1a4dcd0f_c30bf328","updated":"2015-08-06 14:53:05.000000000","message":"Afaik ImageMeta is added in Liberty, so it isn\u0027t used widely. Especially since specific blue-prints implementation are yet not committed (e.g see https://review.openstack.org/#/q/status:open+project:openstack/nova+branch:master+topic:bp/request-spec-object,n,z ).\n\nI can add None -\u003e \u0027\u0027 conversion into from_dict and other methods, and i think it\u0027ll not lead to a crash just now. But later, when other parts of code will being upgraded to use this object, some problems could be raised.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"127c3849b1cf08892c4a39a1a88cf63860c178f2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c36bee83","line":54,"in_reply_to":"1a4dcd0f_c31c4e6c","updated":"2015-08-06 15:08:55.000000000","message":"Confirmed, disk_format is nullable\u003dTrue in glance\u0027s DB model:\n\nhttp://git.openstack.org/cgit/openstack/glance/tree/glance/db/sqlalchemy/models.py#n129","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"228b72872f54a890ca94ff8875a1bbd45a8a46d4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027size\u0027: fields.IntegerField(),"},{"line_number":52,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(),"},{"line_number":53,"context_line":"        \u0027container_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":54,"context_line":"        \u0027disk_format\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":55,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":56,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":57,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_c30bf328","line":54,"in_reply_to":"1a4dcd0f_cd39e2d8","updated":"2015-08-06 13:57:54.000000000","message":"I think it might be possible to backport these to \"\" if they are nullable - but we should look at how they are used first and make sure there are no nasty surprises if they are None instead of \"\" or vice versa.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"4c8cf04f6547c70224dc9410e25c7bbe0c6514b3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                       (\u00271.2\u0027, \u00271.2\u0027),"},{"line_number":68,"context_line":"                       (\u00271.3\u0027, \u00271.3\u0027),"},{"line_number":69,"context_line":"                       (\u00271.4\u0027, \u00271.4\u0027),"},{"line_number":70,"context_line":"                       (\u00271.5\u0027, \u00271.5\u0027),"},{"line_number":71,"context_line":"                       ],"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_4d06321e","line":70,"updated":"2015-08-06 13:06:08.000000000","message":"This also does not look like it;s needed here.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3975d07a6d53bee7d44a92ee77be78c451f28fee","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                       (\u00271.2\u0027, \u00271.2\u0027),"},{"line_number":68,"context_line":"                       (\u00271.3\u0027, \u00271.3\u0027),"},{"line_number":69,"context_line":"                       (\u00271.4\u0027, \u00271.4\u0027),"},{"line_number":70,"context_line":"                       (\u00271.5\u0027, \u00271.5\u0027),"},{"line_number":71,"context_line":"                       ],"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_948bdfc2","line":70,"in_reply_to":"1a4dcd0f_4d06321e","updated":"2015-08-06 14:53:05.000000000","message":"but if i change the version, a new string should be added here, right?","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"67150419c55e078adae8606eec3acc3374c849f4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                       (\u00271.2\u0027, \u00271.2\u0027),"},{"line_number":68,"context_line":"                       (\u00271.3\u0027, \u00271.3\u0027),"},{"line_number":69,"context_line":"                       (\u00271.4\u0027, \u00271.4\u0027),"},{"line_number":70,"context_line":"                       (\u00271.5\u0027, \u00271.5\u0027),"},{"line_number":71,"context_line":"                       ],"},{"line_number":72,"context_line":"    }"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_29407133","line":70,"in_reply_to":"1a4dcd0f_948bdfc2","updated":"2015-08-06 15:41:34.000000000","message":"if we change the version of ImageMetaProps then yes - otherwise no. I am still not sure why we need to change the version though...","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"4c8cf04f6547c70224dc9410e25c7bbe0c6514b3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":119,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":120,"context_line":"    # Version 1.4: added hw_vif_multiqueue_enabled field"},{"line_number":121,"context_line":"    # Version 1.5: ImageMeta version 1.5"},{"line_number":122,"context_line":"    VERSION \u003d ImageMeta.VERSION"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_8a018008","line":121,"updated":"2015-08-06 13:06:08.000000000","message":"why do we need to bump this version - we don\u0027t change anything really?","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c2df83ce550a3204cdb2f0b1dc1ec61c5c4d7a6","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":119,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":120,"context_line":"    # Version 1.4: added hw_vif_multiqueue_enabled field"},{"line_number":121,"context_line":"    # Version 1.5: ImageMeta version 1.5"},{"line_number":122,"context_line":"    VERSION \u003d ImageMeta.VERSION"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_6359ba34","line":121,"in_reply_to":"1a4dcd0f_340c4bec","updated":"2015-08-06 15:02:07.000000000","message":"We might need danpb to elaborate, I\u0027m not sure why the versions have to be tied together.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6049a7dcfe4721040923dd192d0c0538900c2f3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":119,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":120,"context_line":"    # Version 1.4: added hw_vif_multiqueue_enabled field"},{"line_number":121,"context_line":"    # Version 1.5: ImageMeta version 1.5"},{"line_number":122,"context_line":"    VERSION \u003d ImageMeta.VERSION"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_8315e69c","line":121,"in_reply_to":"1a4dcd0f_6359ba34","updated":"2015-08-06 15:10:59.000000000","message":"Apparently this is by design because theoretically we\u0027ll be bumping the properties one a lot.  If that\u0027s the case, we should have a big fat comment in here saying that\u0027s the case, and probably a test to make sure that obj_relationships is updated properly in ImageMeta.","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"21bb4b4edbaa1609040a83f52b7de2bd7ed3e744","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":119,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":120,"context_line":"    # Version 1.4: added hw_vif_multiqueue_enabled field"},{"line_number":121,"context_line":"    # Version 1.5: ImageMeta version 1.5"},{"line_number":122,"context_line":"    VERSION \u003d ImageMeta.VERSION"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_e08065c1","line":121,"in_reply_to":"1a4dcd0f_8a018008","updated":"2015-08-06 13:34:28.000000000","message":"agreed","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3975d07a6d53bee7d44a92ee77be78c451f28fee","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    # Version 1.2: added img_hv_type and img_hv_requested_version fields"},{"line_number":119,"context_line":"    # Version 1.3: HVSpec version 1.1"},{"line_number":120,"context_line":"    # Version 1.4: added hw_vif_multiqueue_enabled field"},{"line_number":121,"context_line":"    # Version 1.5: ImageMeta version 1.5"},{"line_number":122,"context_line":"    VERSION \u003d ImageMeta.VERSION"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    # Maximum number of NUMA nodes permitted for the guest topology"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_340c4bec","line":121,"in_reply_to":"1a4dcd0f_e08065c1","updated":"2015-08-06 14:53:05.000000000","message":"Daniel Berrange asked it in PS2","commit_id":"fe687a3074cccc83cde34e767ef89fcb4674230a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0b862417c77aada6d1ca01d5d91aafaacd450fa","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # self, file, schema - Nova does not appear to ever use"},{"line_number":39,"context_line":"    # these field; locations - modelling the arbitrary"},{"line_number":40,"context_line":"    # data in the \u0027metadata\u0027 subfield is non-trivial as"},{"line_number":41,"context_line":"    # there\u0027s no clear spec"},{"line_number":42,"context_line":"    # name, checksum, owner, size, virtual_size, container_format, disk_format"},{"line_number":43,"context_line":"    # are nullable in Glance, but here default empty values are used instead."},{"line_number":44,"context_line":"    # This is for compatibility with pre-1.5 object versions when"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_ccef961c","line":41,"range":{"start_line":41,"start_character":26,"end_line":41,"end_character":27},"updated":"2015-08-06 17:31:35.000000000","message":"Can you end this sentence with a period please? It\u0027s very confusing to read without it.","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0b862417c77aada6d1ca01d5d91aafaacd450fa","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027name\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":52,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_ecc7f261","line":49,"updated":"2015-08-06 17:31:35.000000000","message":"FWIW, the way you\u0027re using defaults here is correct in the sense that they were initially conceived, so this works if you set them equal to None. However, I think it would be better to change the code that actually processes these to do the substitution explicitly for this object, with a big comment above it explaining why.","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d26f8044d1d5ddf26207965aecdfab8d89a28985","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.UUIDField(),"},{"line_number":49,"context_line":"        \u0027name\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":50,"context_line":"        \u0027status\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":52,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6c11a25c","line":49,"in_reply_to":"1a4dcd0f_ecc7f261","updated":"2015-08-06 17:34:35.000000000","message":"Further, let\u0027s remove the defaults from the fields here, do that translation in from_dict() and comment it there. Doing it with these field defaults looks wrong (size should never default\u003d0, IMHO).","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0b862417c77aada6d1ca01d5d91aafaacd450fa","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027visibility\u0027: fields.StringField(),"},{"line_number":52,"context_line":"        \u0027protected\u0027: fields.FlexibleBooleanField(),"},{"line_number":53,"context_line":"        \u0027checksum\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":54,"context_line":"        \u0027owner\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":55,"context_line":"        \u0027size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":56,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":57,"context_line":"        \u0027container_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":58,"context_line":"        \u0027disk_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":59,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_6cfd226d","line":56,"range":{"start_line":54,"start_character":0,"end_line":56,"end_character":55},"updated":"2015-08-06 17:31:35.000000000","message":"I feel like defaulting these three (especially the size ones) have the potential to confuse other parts of the code, and/or introduce some unintended vulnerability (the owner thing).\n\nIf you can checked all these code paths, can you offer some words to squelch my concerns?","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"35f09ac6a65722b49f29c99cfed7ae6268f44d5b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027checksum\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":54,"context_line":"        \u0027owner\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":55,"context_line":"        \u0027size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":56,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":57,"context_line":"        \u0027container_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":58,"context_line":"        \u0027disk_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":59,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_02bf87aa","line":56,"in_reply_to":"1a4dcd0f_42958f84","updated":"2015-08-06 18:10:51.000000000","message":"sorry, i meant utils.get_image_from_system_metadata in both cases","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"225725b2590972683c2a6ef0681fe7ada2801080","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        \u0027checksum\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":54,"context_line":"        \u0027owner\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":55,"context_line":"        \u0027size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":56,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":57,"context_line":"        \u0027container_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":58,"context_line":"        \u0027disk_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":59,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_42958f84","line":56,"in_reply_to":"1a4dcd0f_6cfd226d","updated":"2015-08-06 18:02:29.000000000","message":"ImageMeta is intended particularly to use it over result of utils.get_system_metadata_from_image. Since only min_ram, min_disk, container_format, disk_format are stored in instance system metadata in normal case [1], i think there is a little probability that other fields are used somewhere.\n\nI searched usage of checksum field, but it is nowere used (libvirt uses its own checksum to cache images).\n\n[1] I mean normal case is launch from an image. If an instance is booted from a volume, its metadata contains some of fields you\u0027re ask (see https://review.openstack.org/#/c/204947/). But they are not promoted to image_meta root attributes by utils.get_system_metadata_from_image","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fed8ed0748f2f162f30117f4d20ee32b740192a7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":56,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":57,"context_line":"        \u0027container_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":58,"context_line":"        \u0027disk_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":59,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_ace00ace","line":58,"updated":"2015-08-06 17:26:42.000000000","message":"Are you sure this actually fixes the bug - you still can\u0027t set None to this?","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0b862417c77aada6d1ca01d5d91aafaacd450fa","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":56,"context_line":"        \u0027virtual_size\u0027: fields.IntegerField(default\u003d0),"},{"line_number":57,"context_line":"        \u0027container_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":58,"context_line":"        \u0027disk_format\u0027: fields.StringField(default\u003d\u0027\u0027),"},{"line_number":59,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":60,"context_line":"        \u0027updated_at\u0027: fields.DateTimeField(nullable\u003dTrue),"},{"line_number":61,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_0ce01e95","line":58,"in_reply_to":"1a4dcd0f_ace00ace","updated":"2015-08-06 17:31:35.000000000","message":"see fields.py where we coerce None to the default value for non-nullable default-able fields. And no, I don\u0027t love it. It came about as a way to bridge the gap during the transition to objects from dicts and probably wasn\u0027t the best idea. See my comment above.","commit_id":"f0da6962ccb13d1c267f1f43697236f6218d4c44"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cf9bb12787ed3e2f443a37c5f7341110761b531e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # self, file, schema - Nova does not appear to ever use"},{"line_number":43,"context_line":"    # these field; locations - modelling the arbitrary"},{"line_number":44,"context_line":"    # data in the \u0027metadata\u0027 subfield is non-trivial as"},{"line_number":45,"context_line":"    # there\u0027s no clear spec."},{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a5d6dd25","line":45,"updated":"2015-08-06 18:30:09.000000000","message":"You only needed to add the period if you were putting more text below it to delineate the break. Now it\u0027s just a random unrelated change :)","commit_id":"652a6a5abe048fdd30027c1a26318070aed88654"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"abf5218d60c870592806ba713b1ae7200159daba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # self, file, schema - Nova does not appear to ever use"},{"line_number":43,"context_line":"    # these field; locations - modelling the arbitrary"},{"line_number":44,"context_line":"    # data in the \u0027metadata\u0027 subfield is non-trivial as"},{"line_number":45,"context_line":"    # there\u0027s no clear spec."},{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_c5c209e9","line":45,"in_reply_to":"1a4dcd0f_a507bd80","updated":"2015-08-06 18:42:03.000000000","message":"Done","commit_id":"652a6a5abe048fdd30027c1a26318070aed88654"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6d280b222cdcbc208e6d2884ca6b9863e6b37da","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # self, file, schema - Nova does not appear to ever use"},{"line_number":43,"context_line":"    # these field; locations - modelling the arbitrary"},{"line_number":44,"context_line":"    # data in the \u0027metadata\u0027 subfield is non-trivial as"},{"line_number":45,"context_line":"    # there\u0027s no clear spec."},{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a507bd80","line":45,"in_reply_to":"1a4dcd0f_a5d6dd25","updated":"2015-08-06 18:35:37.000000000","message":"If you add a node about making these nullable in v2, I would put it here, and leave the period above. Something like:\n\n NOTE(ftersin): In version 2.0, these fields should be nullable: name, checksum, ... (you fill in the rest)","commit_id":"652a6a5abe048fdd30027c1a26318070aed88654"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"05bdbcafadeab5c600f549f71122cb409a5e8b6a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    # there\u0027s no clear spec."},{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    # TODO(ft): In version 2.0, these fields should be nullable:"},{"line_number":48,"context_line":"    # name, checksum, owner, size, virtual_size, container_format, disk_format "},{"line_number":49,"context_line":"    #"},{"line_number":50,"context_line":"    fields \u003d {"},{"line_number":51,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_656c5508","line":48,"updated":"2015-08-06 18:42:22.000000000","message":"Looks nice, thanks. Just fix the long line and you\u0027ll be good.","commit_id":"c60988a3b2ea7e9b745eb1fa17369e55dee21f8f"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"d131dda8b6b9669a672bc22013b1cafa2117520d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    # there\u0027s no clear spec."},{"line_number":46,"context_line":"    #"},{"line_number":47,"context_line":"    # TODO(ft): In version 2.0, these fields should be nullable:"},{"line_number":48,"context_line":"    # name, checksum, owner, size, virtual_size, container_format, disk_format "},{"line_number":49,"context_line":"    #"},{"line_number":50,"context_line":"    fields \u003d {"},{"line_number":51,"context_line":"        \u0027id\u0027: fields.UUIDField(),"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_25108d56","line":48,"in_reply_to":"1a4dcd0f_656c5508","updated":"2015-08-06 18:45:28.000000000","message":"Done","commit_id":"c60988a3b2ea7e9b745eb1fa17369e55dee21f8f"}]}
