)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c9d523fd2656b172c6d017ed45e9c051241ba67","unresolved":false,"context_lines":[{"line_number":7,"context_line":"increment consumer generation when allocs change"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Modifies the AllocationList.set_allocations() routine to increment"},{"line_number":10,"context_line":"impacted consumers\u0027 generation. When a Consumer object is present in the"},{"line_number":11,"context_line":"Allocation object, its generation is incremented."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When no Consumer object is in an Allocation, that means the API layer"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_8ba3abb1","line":10,"range":{"start_line":10,"start_character":20,"end_line":10,"end_character":30},"updated":"2018-05-01 16:32:44.000000000","message":"generations","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5cc5cd0cc8c5b99d7fa15b06788cf12b45ef109a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"increment consumer generation when allocs change"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Modifies the AllocationList.set_allocations() routine to increment"},{"line_number":10,"context_line":"impacted consumers\u0027 generation. When a Consumer object is present in the"},{"line_number":11,"context_line":"Allocation object, its generation is incremented."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"When no Consumer object is in an Allocation, that means the API layer"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f6a8fd7_bdc030e2","line":10,"range":{"start_line":10,"start_character":20,"end_line":10,"end_character":30},"in_reply_to":"9f6a8fd7_8ba3abb1","updated":"2018-05-01 18:15:07.000000000","message":"Done","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"}],"nova/api/openstack/placement/objects/resource_provider.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c9d523fd2656b172c6d017ed45e9c051241ba67","unresolved":false,"context_lines":[{"line_number":1911,"context_line":"                resource_class\u003dalloc.resource_class,"},{"line_number":1912,"context_line":"                resource_provider\u003drp_uuid)"},{"line_number":1913,"context_line":"        if rp_uuid not in res_providers:"},{"line_number":1914,"context_line":"            res_providers[rp_uuid] \u003d alloc.resource_provider"},{"line_number":1915,"context_line":"    return res_providers"},{"line_number":1916,"context_line":""},{"line_number":1917,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_abe30fa4","line":1914,"range":{"start_line":1914,"start_character":12,"end_line":1914,"end_character":60},"updated":"2018-05-01 16:32:44.000000000","message":"see below","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c9d523fd2656b172c6d017ed45e9c051241ba67","unresolved":false,"context_lines":[{"line_number":2052,"context_line":"                                                allocs if alloc.used \u003e 0])"},{"line_number":2053,"context_line":"        for alloc in allocs:"},{"line_number":2054,"context_line":"            rp \u003d alloc.resource_provider"},{"line_number":2055,"context_line":"            visited_rps[rp.uuid] \u003d rp"},{"line_number":2056,"context_line":"            if \u0027consumer\u0027 in alloc and alloc.consumer is not None:"},{"line_number":2057,"context_line":"                if alloc.consumer.id not in visited_consumers:"},{"line_number":2058,"context_line":"                    visited_consumers[alloc.consumer.id] \u003d alloc.consumer"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_eb87c7b5","line":2055,"range":{"start_line":2055,"start_character":12,"end_line":2055,"end_character":37},"updated":"2018-05-01 16:32:44.000000000","message":"This didn\u0027t need to be moved; it\u0027ll now be redundant with L1914 (see above) for nonzero allocations.\n\nLooking at it, the flow would be cleaner if we sent _check_capacity_exceeded the whole allocs list instead of filtering it.  Then we wouldn\u0027t need to muck with visited_rps at all here.","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9c3489e1d2b5007a2b1e1b15179d15f0d831f901","unresolved":false,"context_lines":[{"line_number":2052,"context_line":"                                                allocs if alloc.used \u003e 0])"},{"line_number":2053,"context_line":"        for alloc in allocs:"},{"line_number":2054,"context_line":"            rp \u003d alloc.resource_provider"},{"line_number":2055,"context_line":"            visited_rps[rp.uuid] \u003d rp"},{"line_number":2056,"context_line":"            if \u0027consumer\u0027 in alloc and alloc.consumer is not None:"},{"line_number":2057,"context_line":"                if alloc.consumer.id not in visited_consumers:"},{"line_number":2058,"context_line":"                    visited_consumers[alloc.consumer.id] \u003d alloc.consumer"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_1dcfdc7f","line":2055,"range":{"start_line":2055,"start_character":12,"end_line":2055,"end_character":37},"in_reply_to":"9f6a8fd7_eb87c7b5","updated":"2018-05-01 17:59:10.000000000","message":"Done","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"4c9d523fd2656b172c6d017ed45e9c051241ba67","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"        for alloc in allocs:"},{"line_number":2054,"context_line":"            rp \u003d alloc.resource_provider"},{"line_number":2055,"context_line":"            visited_rps[rp.uuid] \u003d rp"},{"line_number":2056,"context_line":"            if \u0027consumer\u0027 in alloc and alloc.consumer is not None:"},{"line_number":2057,"context_line":"                if alloc.consumer.id not in visited_consumers:"},{"line_number":2058,"context_line":"                    visited_consumers[alloc.consumer.id] \u003d alloc.consumer"},{"line_number":2059,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_cba52349","line":2056,"range":{"start_line":2056,"start_character":12,"end_line":2056,"end_character":66},"updated":"2018-05-01 16:32:44.000000000","message":"Add a comment reiterating when/how it\u0027s possible for alloc.consumer to be absent (wait, is that actually possible, given that the prior patches always assign it?) or None.  Like what you say in the commit message.","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d5f931c05074731f4518ab22d6d63fa114912450","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"        for alloc in allocs:"},{"line_number":2054,"context_line":"            rp \u003d alloc.resource_provider"},{"line_number":2055,"context_line":"            visited_rps[rp.uuid] \u003d rp"},{"line_number":2056,"context_line":"            if \u0027consumer\u0027 in alloc and alloc.consumer is not None:"},{"line_number":2057,"context_line":"                if alloc.consumer.id not in visited_consumers:"},{"line_number":2058,"context_line":"                    visited_consumers[alloc.consumer.id] \u003d alloc.consumer"},{"line_number":2059,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_1027c314","line":2056,"range":{"start_line":2056,"start_character":12,"end_line":2056,"end_character":66},"in_reply_to":"9f6a8fd7_3dcae06d","updated":"2018-05-01 18:37:16.000000000","message":"Okay.  It\u0027s certainly not doing any harm, but keeping it here rather than fixing tests is...","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9c3489e1d2b5007a2b1e1b15179d15f0d831f901","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"        for alloc in allocs:"},{"line_number":2054,"context_line":"            rp \u003d alloc.resource_provider"},{"line_number":2055,"context_line":"            visited_rps[rp.uuid] \u003d rp"},{"line_number":2056,"context_line":"            if \u0027consumer\u0027 in alloc and alloc.consumer is not None:"},{"line_number":2057,"context_line":"                if alloc.consumer.id not in visited_consumers:"},{"line_number":2058,"context_line":"                    visited_consumers[alloc.consumer.id] \u003d alloc.consumer"},{"line_number":2059,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_3dcae06d","line":2056,"range":{"start_line":2056,"start_character":12,"end_line":2056,"end_character":66},"in_reply_to":"9f6a8fd7_cba52349","updated":"2018-05-01 17:59:10.000000000","message":"ack, will do. for the record, Allocation.consumer is always set (to either None or a Consumer object) now. But I think there\u0027s still some tests that are improperly constructing an Allocation object without either passing a None consumer field or calling obj_set_defaults(), which is why the \"if \u0027consumer\u0027 in alloc\" is in here.","commit_id":"d9f286b478ba049ef8c3cc5f4c3d04ab062a6e53"}]}
