)]}'
{"nova/objects/compute_node.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e6d9aa62f1eb56875d86bf42fa8653da705b5cfb","unresolved":false,"context_lines":[{"line_number":356,"context_line":"        is created, or after an upgrade where the required services have"},{"line_number":357,"context_line":"        reached the required version."},{"line_number":358,"context_line":"        \"\"\""},{"line_number":359,"context_line":"        rp \u003d self._ensure_resource_provider()"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"        cpu \u003d objects.Inventory(context\u003dself._context,"},{"line_number":362,"context_line":"                                resource_provider\u003drp,"}],"source_content_type":"text/x-python","patch_set":46,"id":"7aa08908_1e4d52c4","line":359,"updated":"2016-06-07 17:28:19.000000000","message":"One of my next patches in this series removes the create_inventory() and update_inventory() from the ComputeNode object (because ComputeNode lives in the cell DB and the resource provider lives in the API DB.","commit_id":"7fc4bb67095e13d1a6bc963d7be86d32fd9fe746"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"853e436ae0654b73184d36442ee906b5b645dc96","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":32,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":33,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_0d7b3429","line":33,"updated":"2016-02-29 17:26:56.000000000","message":"the dependent patch added other fields you probably want to add here.","commit_id":"01cd0e142b56eb87c0aa35c3b68a011472205e9d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"b0a700ca5545db9e879dc6ef1ad8e5c5f2eeb880","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":32,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":33,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aed3d3a_5915fae2","line":33,"in_reply_to":"9aed3d3a_0d7b3429","updated":"2016-02-29 18:28:07.000000000","message":"My understanding is that generation at least is sql-layer only and the spec says both are \"internal implementation fields\". It wasn\u0027t clear to me from that whether the object would need either, so I let it ride until there was further input.\n\nPerhaps jay can chime in?","commit_id":"01cd0e142b56eb87c0aa35c3b68a011472205e9d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9dba29e56097ede07ab0c1cb0edd13281ac9cbc3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":32,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":33,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":34,"context_line":"    }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":12,"id":"7af24918_d8dc151b","line":33,"in_reply_to":"9aed3d3a_5915fae2","updated":"2016-03-01 12:17:59.000000000","message":"yeah, I read the spec since that comment, that makes sense now.","commit_id":"01cd0e142b56eb87c0aa35c3b68a011472205e9d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"80caddc702c926b01fd2ffa7d72b9b9b5075c1c9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":49,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":50,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"    }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a18252c_07a0868f","line":50,"updated":"2016-04-13 14:16:19.000000000","message":"So, the name column in the database is nullable, but I think that\u0027s because we added it later, right? Do we really want any of them to be modeled as nameless internally? Seems like it might be better to make this non-nullable on our object, and just synthesize a name for any old records we might have.","commit_id":"7d55e0659674a6c4c51fdc04eeac3e91dcd9318b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"875a10363fa46b5f59a9779d4489ad0352ac9fa0","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":49,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":50,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"    }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a18252c_6a781a90","line":50,"in_reply_to":"5a18252c_07a0868f","updated":"2016-04-13 15:23:43.000000000","message":"Name came later, yes.\n\nMy understanding was that a compute node that is a resource provider had the potential to be name-less.","commit_id":"7d55e0659674a6c4c51fdc04eeac3e91dcd9318b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ae00a09b1040c8da898a39446ebbff4993bdf7e1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":49,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":50,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"    }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a18252c_cd6fc8c3","line":50,"in_reply_to":"5a18252c_2ac5825a","updated":"2016-04-13 15:35:23.000000000","message":"So, name was only added so that users could use something other than a UUID to refer to a generic resource pool. We already have the compute node\u0027s hypervisor_hostname that I suppose we could synthesize in the way you state above. I\u0027d be just as happy leaving it nullable as basically a simple tag the user can apply. I wasn\u0027t planning on making the name unique and I intended to make the lookup of things always require the UUID anyway...","commit_id":"7d55e0659674a6c4c51fdc04eeac3e91dcd9318b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"0db3f9c90fc64e2e0fc546d1f1b1e71f7dd53c16","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":49,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":50,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"    }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a18252c_2ac5825a","line":50,"in_reply_to":"5a18252c_6a781a90","updated":"2016-04-13 15:27:16.000000000","message":"Any reason for us not to just synthesize compute-$hostname for those or something?\n\nIt\u0027s not a huge deal, it\u0027s just one of those things where if we have a nullable property, it\u0027s a potential for issues where people assume they can always use thing.name.","commit_id":"7d55e0659674a6c4c51fdc04eeac3e91dcd9318b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8191732b89f4d546bfb15768429dd44d6b4356a7","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    fields \u003d {"},{"line_number":48,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":49,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":50,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"    }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":27,"id":"5a18252c_2d175cee","line":50,"in_reply_to":"5a18252c_cd6fc8c3","updated":"2016-04-13 15:38:23.000000000","message":"Yeah, +1 for not making it unique or queryable. It would just be nice to have that name in the display of that thing so you don\u0027t have 10,000 nameless ones (for your computes) and 10 with names for your shared pools.","commit_id":"7d55e0659674a6c4c51fdc04eeac3e91dcd9318b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"9067a6c4431b01dae95764a06c8a750ac3bad6b7","unresolved":false,"context_lines":[{"line_number":42,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":43,"context_line":"class ResourceProvider(base.NovaObject):"},{"line_number":44,"context_line":"    # Version 1.0: Initial version"},{"line_number":45,"context_line":"    # Version 1.1: Added name field"},{"line_number":46,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":44,"id":"7aa08908_e08631b8","line":45,"updated":"2016-06-06 15:16:08.000000000","message":"I know we discussed about that over IRC, but since we don\u0027t pass the object yet on the wire, you can just drop that compat need.","commit_id":"71b3bed08b5328cacc093c74b2901dfbc71b8742"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"abaae33d69a76317ab76db0f2abb91fea81d0236","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    fields \u003d {"},{"line_number":46,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":47,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":48,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":45,"id":"7aa08908_811c8114","line":48,"updated":"2016-06-06 20:33:25.000000000","message":"Right, still don\u0027t think this should be nullable unless we actually want to be able to store things with no name.","commit_id":"a5c6670739aea2448c4262b7257923b76792bd33"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"364d3fa32dce9b7c1d61da3995fd49b5004d5e1d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    fields \u003d {"},{"line_number":46,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":47,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":48,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":49,"context_line":"    }"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":45,"id":"7aa08908_84857dae","line":48,"in_reply_to":"7aa08908_811c8114","updated":"2016-06-07 14:54:33.000000000","message":"Should names be unique for resource providers as well, or is this just informational?","commit_id":"a5c6670739aea2448c4262b7257923b76792bd33"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1803270b07550e404ae43b276d36469230a1a427","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    fields \u003d {"},{"line_number":46,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":47,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":48,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dFalse),"},{"line_number":49,"context_line":"        \u0027generation\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7aa08908_4a06f01d","line":48,"range":{"start_line":48,"start_character":35,"end_line":48,"end_character":49},"updated":"2016-06-07 18:44:49.000000000","message":"nit: this is the default behaviour, right?","commit_id":"f1244bc15b339381c7549376e6788e55586fad71"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f7be65839874b5f720499bc6ede2fb914f0b2723","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    fields \u003d {"},{"line_number":46,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":47,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dFalse),"},{"line_number":48,"context_line":"        \u0027name\u0027: fields.StringField(nullable\u003dFalse),"},{"line_number":49,"context_line":"        \u0027generation\u0027: fields.IntegerField(nullable\u003dFalse),"},{"line_number":50,"context_line":"    }"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":47,"id":"7aa08908_ca0b0029","line":48,"range":{"start_line":48,"start_character":35,"end_line":48,"end_character":49},"in_reply_to":"7aa08908_4a06f01d","updated":"2016-06-07 18:48:13.000000000","message":"It is, but \u003dFalse was specified elsewhere here, so left it for consistency.","commit_id":"f1244bc15b339381c7549376e6788e55586fad71"}],"nova/tests/functional/db/test_compute_node.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1803270b07550e404ae43b276d36469230a1a427","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.cn.create_inventory()"},{"line_number":65,"context_line":"        rp \u003d self.cn._ensure_resource_provider()"},{"line_number":66,"context_line":"        self.assertEqual(\u0027compute-%s-%s\u0027 % (\u0027foo\u0027, self.cn.uuid),"},{"line_number":67,"context_line":"                         rp.name)"}],"source_content_type":"text/x-python","patch_set":47,"id":"7aa08908_4a327060","line":67,"updated":"2016-06-07 18:44:49.000000000","message":"of course, we could test that in case the name was changed, we keep the old one, but that\u0027s something we could do later on.","commit_id":"f1244bc15b339381c7549376e6788e55586fad71"}],"nova/tests/unit/objects/test_resource_provider.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b8df45b70df08ae87b607c169e4b6c3047f68239","unresolved":false,"context_lines":[{"line_number":22,"context_line":"_RESOURCE_CLASS_ID \u003d 2"},{"line_number":23,"context_line":"_RESOURCE_PROVIDER_ID \u003d 1"},{"line_number":24,"context_line":"_RESOURCE_PROVIDER_UUID \u003d uuids.resource_provider"},{"line_number":25,"context_line":"_RESOURCE_PROVIDER_NAME \u003d uuids.resource_name"},{"line_number":26,"context_line":"_RESOURCE_PROVIDER_DB \u003d {"},{"line_number":27,"context_line":"    \u0027id\u0027: _RESOURCE_PROVIDER_ID,"},{"line_number":28,"context_line":"    \u0027uuid\u0027: _RESOURCE_PROVIDER_UUID,"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa0719c6_12c5525a","line":25,"updated":"2016-03-22 20:21:19.000000000","message":"hmm, kinda weird to have the name sentinel be in \"uuidsentinel\" module. perhaps worth renaming that module to just sentinels in a future patch.","commit_id":"e37aa163a401a3cb3d536e1c8c0ec9c5202b7f00"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1803270b07550e404ae43b276d36469230a1a427","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.context, _RESOURCE_PROVIDER_UUID)"},{"line_number":111,"context_line":"        self.assertEqual(rp.uuid, retrieved_rp.uuid)"},{"line_number":112,"context_line":"        self.assertEqual(rp.name, retrieved_rp.name)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class _TestInventoryNoDB(object):"},{"line_number":116,"context_line":"    @mock.patch(\u0027nova.objects.Inventory._create_in_db\u0027,"}],"source_content_type":"text/x-python","patch_set":47,"id":"7aa08908_4a9c300f","line":113,"updated":"2016-06-07 18:44:49.000000000","message":"why are we removing the original assertion that a wrong uuid would raise a NotFound ?","commit_id":"f1244bc15b339381c7549376e6788e55586fad71"}]}
