)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d28dd42b90b47fd38beaf651cd705f9b06a2b33","unresolved":false,"context_lines":[{"line_number":29,"context_line":"bodies and directly associated with a database resource that has"},{"line_number":30,"context_line":"created_at and updated_at fields are changed (e.g., resource providers)."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Other objects, like usage and allocaiton candidates, which are"},{"line_number":33,"context_line":"composites and represent the state of the universe _now_, will use the"},{"line_number":34,"context_line":"current time when they get last-modified headers in the next patch."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"df87a7cf_d27380b0","line":32,"range":{"start_line":32,"start_character":30,"end_line":32,"end_character":40},"updated":"2017-12-06 16:47:02.000000000","message":"allocation","commit_id":"8761f5b2c51d7de05ea33b675d0f9146b0c4e368"}],"nova/db/api.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"842ac52784ef77e7980ada89264eb6dc7ee5e4ba","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":567,"context_line":"    \"\"\"Finds all migrations in progress.\"\"\""},{"line_number":568,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_2b73b017","line":567,"range":{"start_line":567,"start_character":27,"end_line":567,"end_character":40},"updated":"2017-11-21 00:18:05.000000000","message":"nit: It is an unrelated change.","commit_id":"5a9fe5284692ad38c78c2426f82b5c9209d03fcc"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"0fca19900b4306e3b85f1f08285197f86a348491","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":567,"context_line":"    \"\"\"Finds all migrations in progress.\"\"\""},{"line_number":568,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_0de91919","line":567,"range":{"start_line":567,"start_character":27,"end_line":567,"end_character":40},"in_reply_to":"ff82abbf_2b73b017","updated":"2017-11-21 08:45:09.000000000","message":"I think it\u0027s an artifact of the way I rebased the changes from the recently abandoned patches, I\u0027ll remove the change.","commit_id":"5a9fe5284692ad38c78c2426f82b5c9209d03fcc"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"8666fa6a8808b5edf931719ce75f68f22d558891","unresolved":false,"context_lines":[{"line_number":564,"context_line":""},{"line_number":565,"context_line":""},{"line_number":566,"context_line":"def migration_get_all_by_filters(context, filters):"},{"line_number":567,"context_line":"    \"\"\"Finds all migrations in progress.\"\"\""},{"line_number":568,"context_line":"    return IMPL.migration_get_all_by_filters(context, filters)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ff82abbf_5e18311c","line":567,"range":{"start_line":567,"start_character":27,"end_line":567,"end_character":40},"in_reply_to":"ff82abbf_2b73b017","updated":"2017-11-21 04:02:34.000000000","message":"should be ok to do so if it\u0027s a nit bug fix:)","commit_id":"5a9fe5284692ad38c78c2426f82b5c9209d03fcc"}],"nova/db/sqlalchemy/resource_class_cache.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def all_from_string(self, rc_str):"},{"line_number":116,"context_line":"        \"\"\"Given a string representation of a resource class -- e.g. \"DISK_GB\""},{"line_number":117,"context_line":"        or \"IRON_SILVER\" -- return all the resource class info."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_a36f9490","line":117,"range":{"start_line":117,"start_character":12,"end_line":117,"end_character":23},"updated":"2017-12-06 14:23:20.000000000","message":"CUSTOM_IRON_SILVER","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9722acc106a3ee0185687a2c2b9507240499cba5","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def all_from_string(self, rc_str):"},{"line_number":116,"context_line":"        \"\"\"Given a string representation of a resource class -- e.g. \"DISK_GB\""},{"line_number":117,"context_line":"        or \"IRON_SILVER\" -- return all the resource class info."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_e9733bb0","line":117,"range":{"start_line":117,"start_character":12,"end_line":117,"end_character":23},"in_reply_to":"df87a7cf_66699a89","updated":"2017-12-06 15:04:40.000000000","message":"Done","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def all_from_string(self, rc_str):"},{"line_number":116,"context_line":"        \"\"\"Given a string representation of a resource class -- e.g. \"DISK_GB\""},{"line_number":117,"context_line":"        or \"IRON_SILVER\" -- return all the resource class info."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_66699a89","line":117,"range":{"start_line":117,"start_character":12,"end_line":117,"end_character":23},"in_reply_to":"df87a7cf_a36f9490","updated":"2017-12-06 14:50:22.000000000","message":"pasto, will adjust","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."},{"line_number":121,"context_line":"        :returns: dict representing the resource class fields or None, if no"},{"line_number":122,"context_line":"                  such resource class was found in the list of standard"},{"line_number":123,"context_line":"                  resource classes or the resource_classes database table."},{"line_number":124,"context_line":"        :raises: `exception.ResourceClassNotFound` if rc_str cannot be found in"},{"line_number":125,"context_line":"                 either the standard classes or the DB."},{"line_number":126,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_032f603f","line":123,"range":{"start_line":121,"start_character":62,"end_line":123,"end_character":74},"updated":"2017-12-06 14:23:20.000000000","message":"Isn\u0027t it actually ResourceClassNotFound?","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9722acc106a3ee0185687a2c2b9507240499cba5","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."},{"line_number":121,"context_line":"        :returns: dict representing the resource class fields or None, if no"},{"line_number":122,"context_line":"                  such resource class was found in the list of standard"},{"line_number":123,"context_line":"                  resource classes or the resource_classes database table."},{"line_number":124,"context_line":"        :raises: `exception.ResourceClassNotFound` if rc_str cannot be found in"},{"line_number":125,"context_line":"                 either the standard classes or the DB."},{"line_number":126,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_896aafb0","line":123,"range":{"start_line":121,"start_character":62,"end_line":123,"end_character":74},"in_reply_to":"df87a7cf_032f603f","updated":"2017-12-06 15:04:40.000000000","message":"Done","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        :param rc_str: The string representation of the resource class for"},{"line_number":120,"context_line":"                       which to look up a resource_class."},{"line_number":121,"context_line":"        :returns: dict representing the resource class fields or None, if no"},{"line_number":122,"context_line":"                  such resource class was found in the list of standard"},{"line_number":123,"context_line":"                  resource classes or the resource_classes database table."},{"line_number":124,"context_line":"        :raises: `exception.ResourceClassNotFound` if rc_str cannot be found in"},{"line_number":125,"context_line":"                 either the standard classes or the DB."},{"line_number":126,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_a66fa290","line":123,"range":{"start_line":121,"start_character":62,"end_line":123,"end_character":74},"in_reply_to":"df87a7cf_032f603f","updated":"2017-12-06 14:50:22.000000000","message":"Hmm, I\u0027ll have to look at the stuff I copied this from. Does appear a bit weird.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if rc_str in fields.ResourceClass.STANDARD:"},{"line_number":129,"context_line":"            return {\u0027id\u0027: fields.ResourceClass.STANDARD.index(rc_str),"},{"line_number":130,"context_line":"                    \u0027name\u0027: rc_str,"},{"line_number":131,"context_line":"                    \u0027updated_at\u0027: None,"},{"line_number":132,"context_line":"                    \u0027created_at\u0027: None}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        with lockutils.lock(_LOCKNAME):"},{"line_number":135,"context_line":"            if rc_str in self.all_cache:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_03d4401f","line":132,"range":{"start_line":131,"start_character":20,"end_line":132,"end_character":38},"updated":"2017-12-06 14:23:20.000000000","message":"What will the last-modified time be for something like this? None or utcnow()?","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        if rc_str in fields.ResourceClass.STANDARD:"},{"line_number":129,"context_line":"            return {\u0027id\u0027: fields.ResourceClass.STANDARD.index(rc_str),"},{"line_number":130,"context_line":"                    \u0027name\u0027: rc_str,"},{"line_number":131,"context_line":"                    \u0027updated_at\u0027: None,"},{"line_number":132,"context_line":"                    \u0027created_at\u0027: None}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        with lockutils.lock(_LOCKNAME):"},{"line_number":135,"context_line":"            if rc_str in self.all_cache:"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_66fe7aaf","line":132,"range":{"start_line":131,"start_character":20,"end_line":132,"end_character":38},"in_reply_to":"df87a7cf_03d4401f","updated":"2017-12-06 14:50:22.000000000","message":"Eventually it will become utcnow()\n\nThe interface in the handlers is that if they are both None, then utcnow will be used. Doing it this way allows the CUSTOM classes to have real modified times.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"}],"nova/objects/base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":79,"context_line":"remotable \u003d ovoo_base.remotable"},{"line_number":80,"context_line":"obj_make_list \u003d ovoo_base.obj_make_list"},{"line_number":81,"context_line":"NovaObjectDictCompat \u003d ovoo_base.VersionedObjectDictCompat"},{"line_number":82,"context_line":"NovaTimestampObject \u003d ovoo_base.TimestampedObject"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class NovaObject(ovoo_base.VersionedObject):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_23c06450","line":82,"range":{"start_line":82,"start_character":32,"end_line":82,"end_character":49},"updated":"2017-12-06 14:23:20.000000000","message":"This was released in o.vo 1.28.0:\n\nhttps://review.openstack.org/#/c/495913/\n\nAnd that\u0027s our current minimum in g-r:\n\nhttps://github.com/openstack/requirements/blob/master/global-requirements.txt#L152\n\n/me checks the mark","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"@db_api.api_context_manager.reader"},{"line_number":420,"context_line":"def _get_aggregates_by_provider_id(context, rp_id):"},{"line_number":421,"context_line":"    join_statement \u003d sa.join("},{"line_number":422,"context_line":"        _AGG_TBL, _RP_AGG_TBL, sa.and_("},{"line_number":423,"context_line":"            _AGG_TBL.c.id \u003d\u003d _RP_AGG_TBL.c.aggregate_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_e3111cae","line":420,"updated":"2017-12-06 14:23:20.000000000","message":"Why aren\u0027t we including updated_at/created_at for aggregates? We have a GET method for that:\n\nhttps://developer.openstack.org/api-ref/placement/#list-resource-provider-aggregates\n\nAnd the spec says all GET methods should have the new headers.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"@db_api.api_context_manager.reader"},{"line_number":420,"context_line":"def _get_aggregates_by_provider_id(context, rp_id):"},{"line_number":421,"context_line":"    join_statement \u003d sa.join("},{"line_number":422,"context_line":"        _AGG_TBL, _RP_AGG_TBL, sa.and_("},{"line_number":423,"context_line":"            _AGG_TBL.c.id \u003d\u003d _RP_AGG_TBL.c.aggregate_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_e6e04afd","line":420,"in_reply_to":"df87a7cf_e3111cae","updated":"2017-12-06 14:50:22.000000000","message":"We never get an aggregate itself, we get the list of aggregates that are associated with a resource provider. We don\u0027t record the time when that association was made and the time when an aggregate uuid was created is not relevant, so when we do the GET we punt and use utcnow\n\nThat\u0027s common for anything that is a composite, I\u0027ll make sure the commit message makes that clear.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":644,"context_line":"class ResourceProvider(base.NovaObject, base.NovaTimestampObject):"},{"line_number":645,"context_line":"    SETTABLE_FIELDS \u003d (\u0027name\u0027, \u0027parent_provider_uuid\u0027)"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_63c50c5b","line":644,"range":{"start_line":644,"start_character":45,"end_line":644,"end_character":64},"updated":"2017-12-06 14:23:20.000000000","message":"Why not just use ovoo_base.TimestampedObject directly? Because this will need to change when we lift it out of nova, but we\u0027ll have to do that for the NovaObject parent class too, so meh.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":641,"context_line":""},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":644,"context_line":"class ResourceProvider(base.NovaObject, base.NovaTimestampObject):"},{"line_number":645,"context_line":"    SETTABLE_FIELDS \u003d (\u0027name\u0027, \u0027parent_provider_uuid\u0027)"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_e687ea0e","line":644,"range":{"start_line":644,"start_character":45,"end_line":644,"end_character":64},"in_reply_to":"df87a7cf_63c50c5b","updated":"2017-12-06 14:50:22.000000000","message":"I wasn\u0027t sure what to do: maintain the pattern of going through base, or add the import direct to ovo. Adding an import seemed noisier, so I went with this.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":2169,"context_line":""},{"line_number":2170,"context_line":""},{"line_number":2171,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":2172,"context_line":"class UsageList(base.ObjectListBase, base.NovaObject):"},{"line_number":2173,"context_line":""},{"line_number":2174,"context_line":"    fields \u003d {"},{"line_number":2175,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Usage\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_0363e043","line":2172,"updated":"2017-12-06 14:23:20.000000000","message":"What about the GET for /usages?\n\nhttps://developer.openstack.org/api-ref/placement/#list-usages\n\nAnd this one:\n\nhttps://developer.openstack.org/api-ref/placement/#list-resource-provider-usages","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":2169,"context_line":""},{"line_number":2170,"context_line":""},{"line_number":2171,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":2172,"context_line":"class UsageList(base.ObjectListBase, base.NovaObject):"},{"line_number":2173,"context_line":""},{"line_number":2174,"context_line":"    fields \u003d {"},{"line_number":2175,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027Usage\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_86a37e9e","line":2172,"in_reply_to":"df87a7cf_0363e043","updated":"2017-12-06 14:50:22.000000000","message":"Usages are a composite, and composites have a more difficult to extract modified time. And in the case of Usages the info we are getting is \"what are the usages _now_\" so having a last-modified of now seems appropriate.\n\nThis was a bit more clear when I had a different patch for each entitiy type. Some of my commit message verbosity was lost when I split things differently.","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8085c27499d1afb8b7d92d0d092fcf736057b070","unresolved":false,"context_lines":[{"line_number":3140,"context_line":""},{"line_number":3141,"context_line":""},{"line_number":3142,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":3143,"context_line":"class AllocationCandidates(base.NovaObject):"},{"line_number":3144,"context_line":"    \"\"\"The AllocationCandidates object is a collection of possible allocations"},{"line_number":3145,"context_line":"    that match some request for resources, along with some summary information"},{"line_number":3146,"context_line":"    about the resource providers involved in these allocation candidates."}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_23662453","line":3143,"updated":"2017-12-06 14:23:20.000000000","message":"We have a GET on this too:\n\nhttps://developer.openstack.org/api-ref/placement/#list-allocation-candidates","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":3140,"context_line":""},{"line_number":3141,"context_line":""},{"line_number":3142,"context_line":"@base.NovaObjectRegistry.register_if(False)"},{"line_number":3143,"context_line":"class AllocationCandidates(base.NovaObject):"},{"line_number":3144,"context_line":"    \"\"\"The AllocationCandidates object is a collection of possible allocations"},{"line_number":3145,"context_line":"    that match some request for resources, along with some summary information"},{"line_number":3146,"context_line":"    about the resource providers involved in these allocation candidates."}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_a69ec251","line":3143,"in_reply_to":"df87a7cf_23662453","updated":"2017-12-06 14:50:22.000000000","message":"same thing as with usages: composite, where _now_ is what matters","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"}],"nova/tests/functional/db/test_resource_class_cache.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b812bc593aa48b9d66c4c017463fdb0cfdb785d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import datetime"},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from nova.db.sqlalchemy import resource_class_cache as rc_cache"},{"line_number":19,"context_line":"from nova import exception"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_21d66ff3","line":16,"range":{"start_line":13,"start_character":0,"end_line":16,"end_character":32},"updated":"2017-12-01 06:35:31.000000000","message":"nit: The location of a blank line is not correct. It should be as follows:\n\nimport datetime\n\nimport mock\nfrom oslo_utils import timeutils","commit_id":"d3ba222fc42e0475f6dfee014c308cd1019dc4ec"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ccd2df460165987245fbc10af4bf6dd254937e5e","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.assertFalse(sel_mock.called)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Verify all fields available from all_from_string"},{"line_number":113,"context_line":"        iron_nfv_class \u003d cache.all_from_string(\u0027IRON_NFV\u0027)"},{"line_number":114,"context_line":"        self.assertEqual(1001, iron_nfv_class[\u0027id\u0027])"},{"line_number":115,"context_line":"        self.assertEqual(\u0027IRON_NFV\u0027, iron_nfv_class[\u0027name\u0027])"},{"line_number":116,"context_line":"        # updated_at not set on insert"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_46ad7686","line":113,"updated":"2017-12-06 14:50:22.000000000","message":"i guess for sake of cleanliness I should custom_ here, will get","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"9722acc106a3ee0185687a2c2b9507240499cba5","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            self.assertFalse(sel_mock.called)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Verify all fields available from all_from_string"},{"line_number":113,"context_line":"        iron_nfv_class \u003d cache.all_from_string(\u0027IRON_NFV\u0027)"},{"line_number":114,"context_line":"        self.assertEqual(1001, iron_nfv_class[\u0027id\u0027])"},{"line_number":115,"context_line":"        self.assertEqual(\u0027IRON_NFV\u0027, iron_nfv_class[\u0027name\u0027])"},{"line_number":116,"context_line":"        # updated_at not set on insert"}],"source_content_type":"text/x-python","patch_set":6,"id":"df87a7cf_69464b52","line":113,"in_reply_to":"df87a7cf_46ad7686","updated":"2017-12-06 15:04:40.000000000","message":"nawp, that would required making changes in other tests","commit_id":"e322c5bc0d467e21c6a1ad3aeaa226b78af42db4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9d28dd42b90b47fd38beaf651cd705f9b06a2b33","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        with self.context.session.connection() as conn:"},{"line_number":97,"context_line":"            ins_stmt \u003d rc_cache._RC_TBL.insert().values("},{"line_number":98,"context_line":"                id\u003d1001,"},{"line_number":99,"context_line":"                name\u003d\u0027IRON_NFV\u0027"},{"line_number":100,"context_line":"            )"},{"line_number":101,"context_line":"            conn.execute(ins_stmt)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_72c6349d","line":99,"range":{"start_line":99,"start_character":22,"end_line":99,"end_character":30},"updated":"2017-12-06 16:47:02.000000000","message":"I guess we never updated these tests to use realistic values, i.e. the API would fail on a trait like this, it has to be CUSTOM_IRON_NFV. Follow up cleanup opportunity.","commit_id":"8761f5b2c51d7de05ea33b675d0f9146b0c4e368"}],"nova/tests/unit/objects/test_resource_provider.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b812bc593aa48b9d66c4c017463fdb0cfdb785d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import mock"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_utils import timeutils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import nova"},{"line_number":19,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff82abbf_41f8537b","line":16,"range":{"start_line":13,"start_character":0,"end_line":16,"end_character":32},"updated":"2017-12-01 06:35:31.000000000","message":"nit: The order is not correct. And a blank line is not necessary. It should be as follows:\n\nimport mock\nfrom oslo_utils import timeutils\nimport six","commit_id":"d3ba222fc42e0475f6dfee014c308cd1019dc4ec"}]}
