)]}'
{"nova/objects/fields.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0f12314f301ee26b503f8c936f11433c16faad7b","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    DOWN \u003d \"DOWN\"  # The nova-compute is forced_down."},{"line_number":415,"context_line":"    MAINTENANCE \u003d \"MAINTENANCE\"  # The nova-compute is disabled."},{"line_number":416,"context_line":"    UNKNOWN \u003d \"UNKNOWN\"  # The nova-compute has not reported."},{"line_number":417,"context_line":"    NONE \u003d \"NONE\"  # No host or service."},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    ALL \u003d (UP, DOWN, MAINTENANCE, UNKNOWN, NONE)"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_b54adec3","line":417,"updated":"2016-01-13 17:53:17.000000000","message":"Can\u0027t we just make the field nullable and set/return none if we have no information? Enumerating none-ness here seems wrong to me.","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"}],"nova/objects/instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d8d194f0969f09077197be49013a218d5a50a85","unresolved":false,"context_lines":[{"line_number":87,"context_line":"               base.NovaObjectDictCompat):"},{"line_number":88,"context_line":"    # Version 2.0: Initial version"},{"line_number":89,"context_line":"    # Version 2.1: Added services"},{"line_number":90,"context_line":"    VERSION \u003d \u00272.1\u0027"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    fields \u003d {"},{"line_number":93,"context_line":"        \u0027id\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_1565eadf","line":90,"updated":"2016-01-13 17:47:34.000000000","message":"You need an obj_make_compatible() rule for this, to snip out services from the primitive if \u003c\u003d2.0.","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d8d194f0969f09077197be49013a218d5a50a85","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \u0027vm_state\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":109,"context_line":"        \u0027task_state\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        \u0027services\u0027: fields.ObjectField(\u0027ServiceList\u0027),"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        \u0027memory_mb\u0027: fields.IntegerField(nullable\u003dTrue),"},{"line_number":114,"context_line":"        \u0027vcpus\u0027: fields.IntegerField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_8ac0d5e1","line":111,"updated":"2016-01-13 17:47:34.000000000","message":"Probably also want lazy-load support for this eventually, but not critical for this usage.","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d8d194f0969f09077197be49013a218d5a50a85","unresolved":false,"context_lines":[{"line_number":367,"context_line":"            services \u003d base.obj_make_list("},{"line_number":368,"context_line":"                    context, objects.ServiceList(context),"},{"line_number":369,"context_line":"                    objects.Service, db_inst[\u0027services\u0027])"},{"line_number":370,"context_line":"            instance[\u0027services\u0027] \u003d services"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        instance.obj_reset_changes()"},{"line_number":373,"context_line":"        return instance"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_aa07d91a","line":370,"updated":"2016-01-13 17:47:34.000000000","message":"I think this will end up hitting the database again to load db_inst[\u0027services\u0027] right? Probably not super critical since this is only by-request, but we might want to make sure we have a way to ask the query method to pre-join it for us.","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3d8d194f0969f09077197be49013a218d5a50a85","unresolved":false,"context_lines":[{"line_number":368,"context_line":"                    context, objects.ServiceList(context),"},{"line_number":369,"context_line":"                    objects.Service, db_inst[\u0027services\u0027])"},{"line_number":370,"context_line":"            instance[\u0027services\u0027] \u003d services"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        instance.obj_reset_changes()"},{"line_number":373,"context_line":"        return instance"},{"line_number":374,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_d530b2ea","line":371,"updated":"2016-01-13 17:47:34.000000000","message":"You need a test to make sure this actually works.","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0be445682e2737ee7bf2fcbfcb0effcf91555c73","unresolved":false,"context_lines":[{"line_number":192,"context_line":"    obj_extra_fields \u003d [\u0027name\u0027]"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":195,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":196,"context_line":"        if target_version \u003c (2, 1) and \u0027services\u0027 in primitive:"},{"line_number":197,"context_line":"            del primitive[\u0027services\u0027]"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_51600dcf","line":195,"updated":"2016-01-14 19:04:26.000000000","message":"You need to call super()","commit_id":"27bc5797c494ba1089964359c807bca580fefec6"}],"nova/tests/unit/fake_instance.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"4728d75a7fc864d6894dc7bf30166405fb5f51f6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                  \u0027vcpu_model\u0027: None,"},{"line_number":76,"context_line":"                 },"},{"line_number":77,"context_line":"        \u0027tags\u0027: [],"},{"line_number":78,"context_line":"        \u0027services\u0027: []"},{"line_number":79,"context_line":"        }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    for name, field in objects.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"da6ed579_e773c77e","line":78,"updated":"2016-01-13 18:39:41.000000000","message":"Also, please put a trailing comma here","commit_id":"a59ae6c04a2430b74f3a38d1847fbf66567cd3d6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e14479c08ab489c9bc96c840c6cbf76b9415bc6a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                  \u0027vcpu_model\u0027: None,"},{"line_number":76,"context_line":"                 },"},{"line_number":77,"context_line":"        \u0027tags\u0027: [],"},{"line_number":78,"context_line":"        \u0027services\u0027: []"},{"line_number":79,"context_line":"        }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    for name, field in objects.Instance.fields.items():"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6ed579_733b199d","line":78,"updated":"2016-01-13 20:05:57.000000000","message":"Still need a trailing comma here, but that could be a nitfix patch later","commit_id":"c98bb01bc5c4f861078e0f1e3250ce009cb654d9"}]}
