)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a2979ead0bdcb28157456bd0d1c9aa30adf5d14b","unresolved":false,"context_lines":[{"line_number":13,"context_line":"As part of heal_allocations, we can detect this and heal the"},{"line_number":14,"context_line":"allocations using the instance.project_id/user_id information."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This is something we\u0027d need if we ever use Placement allocation"},{"line_number":17,"context_line":"information counting quotas."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we should be using Placement API version 1.28 with"},{"line_number":20,"context_line":"consumer_generation when updating the allocations, but since"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_9b33dcf7","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":28},"updated":"2018-07-03 14:27:51.000000000","message":"And this is precisely why consumers (with project and user identifiers) are so important to get right (and be a first-class object) in the placement API.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":14,"context_line":"allocations using the instance.project_id/user_id information."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This is something we\u0027d need if we ever use Placement allocation"},{"line_number":17,"context_line":"information counting quotas."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we should be using Placement API version 1.28 with"},{"line_number":20,"context_line":"consumer_generation when updating the allocations, but since"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_c4e3b6d7","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":28},"updated":"2018-07-03 14:04:28.000000000","message":"for counting quotas?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":14,"context_line":"allocations using the instance.project_id/user_id information."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This is something we\u0027d need if we ever use Placement allocation"},{"line_number":17,"context_line":"information counting quotas."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Note that we should be using Placement API version 1.28 with"},{"line_number":20,"context_line":"consumer_generation when updating the allocations, but since"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_b8b49e83","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":28},"in_reply_to":"5f7c97a3_c4e3b6d7","updated":"2018-07-03 14:18:34.000000000","message":"yeah","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a2979ead0bdcb28157456bd0d1c9aa30adf5d14b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Note that we should be using Placement API version 1.28 with"},{"line_number":20,"context_line":"consumer_generation when updating the allocations, but since"},{"line_number":21,"context_line":"people might backport this change the usage of consumer"},{"line_number":22,"context_line":"generations is left for a follow up patch."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Related to blueprint add-consumer-generation"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_5b2d448d","line":22,"updated":"2018-07-03 14:27:51.000000000","message":"ack.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"}],"doc/source/cli/nova-manage.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"02d608c4df1d3d50be287d98c7e64b393531a2f6","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    project_id/user_id values in existing allocations, and which are not"},{"line_number":289,"context_line":"    undergoing a task state transition. For each instance found, allocations"},{"line_number":290,"context_line":"    are created against the compute node resource provider for that instance"},{"line_number":291,"context_line":"    based on the flavor associated with the instance."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    Specify ``--max-count`` to control the maximum number of instances to"},{"line_number":294,"context_line":"    process. If not specified, all instances in each cell will be mapped in"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_30a4deb8","line":291,"updated":"2018-06-25 10:04:10.000000000","message":"Probably not worth fixing, but presumably in the project/user id case, the existing allocations are used, and the flavor is ignored?\n\n[later] Ah, except that you\u0027re not doing that, you are creating them fresh. I guess that\u0027s useful way to reuse code, but seems like it might be problematic, especially with regard to so some of the nested and sharing things mentioned in the comments.","commit_id":"e964f448bb22e2e23322d026e12104f8c90da00e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"686c14ee1b03bf3af71c385e14ef4f7ba9c450f3","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    project_id/user_id values in existing allocations, and which are not"},{"line_number":289,"context_line":"    undergoing a task state transition. For each instance found, allocations"},{"line_number":290,"context_line":"    are created against the compute node resource provider for that instance"},{"line_number":291,"context_line":"    based on the flavor associated with the instance."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    Specify ``--max-count`` to control the maximum number of instances to"},{"line_number":294,"context_line":"    process. If not specified, all instances in each cell will be mapped in"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_aff880c3","line":291,"in_reply_to":"5f7c97a3_30a4deb8","updated":"2018-06-25 16:27:33.000000000","message":"Yeah, I need to think about that, but it\u0027s likely the right thing to do - if the instance already has allocations but the project_id/user_id need to be fixed, then we should just re-put those allocations with the proper project_id/user_id and avoid the put_allocations call and flavor lookup stuff.","commit_id":"e964f448bb22e2e23322d026e12104f8c90da00e"}],"nova/cmd/manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b993d3c94e11f353ff9db505857e7af3cd06f1f1","unresolved":false,"context_lines":[{"line_number":1837,"context_line":"                    if (allocations.get(\u0027project_id\u0027) \u003d\u003d"},{"line_number":1838,"context_line":"                            instance.project_id and"},{"line_number":1839,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1840,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1841,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1842,"context_line":"                               instance.uuid)"},{"line_number":1843,"context_line":"                        continue"},{"line_number":1844,"context_line":"                    # TODO(mriedem): Since we aren\u0027t smart enough to handle"},{"line_number":1845,"context_line":"                    # nested resource providers yet, what if this instance"},{"line_number":1846,"context_line":"                    # has allocations but the consumer information is wrong;"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_fe6ad118","line":1843,"range":{"start_line":1840,"start_character":24,"end_line":1843,"end_character":32},"updated":"2018-06-22 14:00:08.000000000","message":"Need to verify that we have a functional test that already covers this. If not, add a unit test.","commit_id":"e964f448bb22e2e23322d026e12104f8c90da00e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b7030208e9806c703bf006e8663ae368518026c3","unresolved":false,"context_lines":[{"line_number":1837,"context_line":"                    if (allocations.get(\u0027project_id\u0027) \u003d\u003d"},{"line_number":1838,"context_line":"                            instance.project_id and"},{"line_number":1839,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1840,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1841,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1842,"context_line":"                               instance.uuid)"},{"line_number":1843,"context_line":"                        continue"},{"line_number":1844,"context_line":"                    # TODO(mriedem): Since we aren\u0027t smart enough to handle"},{"line_number":1845,"context_line":"                    # nested resource providers yet, what if this instance"},{"line_number":1846,"context_line":"                    # has allocations but the consumer information is wrong;"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_65bfe9cf","line":1843,"range":{"start_line":1840,"start_character":24,"end_line":1843,"end_character":32},"in_reply_to":"5f7c97a3_fe6ad118","updated":"2018-06-25 18:06:32.000000000","message":"Yes nova.tests.functional.test_nova_manage.TestNovaManagePlacementHealAllocations.test_heal_allocations_paging covers this.","commit_id":"e964f448bb22e2e23322d026e12104f8c90da00e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b9ec9ad2a77fa3ee7493d0e8a9f16db8182c0e5e","unresolved":false,"context_lines":[{"line_number":1785,"context_line":"        :return: Number of instances that had allocations created."},{"line_number":1786,"context_line":"        :raises: nova.exception.ComputeHostNotFound if a compute node for a"},{"line_number":1787,"context_line":"            given instance cannot be found"},{"line_number":1788,"context_line":"        :raises: AllocationCreateFailed if unable to create allocations for"},{"line_number":1789,"context_line":"            a given instance against a given compute node resource provider"},{"line_number":1790,"context_line":"        \"\"\""},{"line_number":1791,"context_line":"        # Keep a cache of instance.node to compute node resource provider UUID."},{"line_number":1792,"context_line":"        # This will save some queries for non-ironic instances to the"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e5cbf946","line":1789,"range":{"start_line":1788,"start_character":8,"end_line":1789,"end_character":75},"updated":"2018-06-25 18:12:32.000000000","message":"Need to add AllocationUpdateFailed.","commit_id":"ff215b2c185e7a41fac47caa40c320816a53c764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"eebfdd1c8289d80e74b12b9af16e43b98bb1a113","unresolved":false,"context_lines":[{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"                allocations \u003d placement.get_allocations_for_consumer("},{"line_number":1831,"context_line":"                    ctxt, instance.uuid, include_project_user\u003dTrue)"},{"line_number":1832,"context_line":"                if allocations.get(\u0027allocations\u0027):"},{"line_number":1833,"context_line":"                    # Check to see if the allocation project_id"},{"line_number":1834,"context_line":"                    # and user_id matches the instance project and user and"},{"line_number":1835,"context_line":"                    # fix the allocation project/user if they don\u0027t match."}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_a5fe6103","line":1832,"range":{"start_line":1832,"start_character":19,"end_line":1832,"end_character":34},"updated":"2018-06-25 18:29:57.000000000","message":"Hmm, if safe_connect on get_allocations_for_consumer returns None we\u0027ll get a NoneType error here...","commit_id":"5a0c77f401ab2d2f0124fce480588dbda1ffd342"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"                # return None if we can\u0027t communicate with Placement, and the"},{"line_number":1834,"context_line":"                # response can have an empty {\u0027allocations\u0027: {}} response if"},{"line_number":1835,"context_line":"                # there are no allocations for the instance so handle both"},{"line_number":1836,"context_line":"                if allocations and allocations.get(\u0027allocations\u0027):"},{"line_number":1837,"context_line":"                    # Check to see if the allocation project_id"},{"line_number":1838,"context_line":"                    # and user_id matches the instance project and user and"},{"line_number":1839,"context_line":"                    # fix the allocation project/user if they don\u0027t match."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_187912fa","line":1836,"range":{"start_line":1836,"start_character":35,"end_line":1836,"end_character":66},"updated":"2018-07-03 14:04:28.000000000","message":"this...","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"                # return None if we can\u0027t communicate with Placement, and the"},{"line_number":1834,"context_line":"                # response can have an empty {\u0027allocations\u0027: {}} response if"},{"line_number":1835,"context_line":"                # there are no allocations for the instance so handle both"},{"line_number":1836,"context_line":"                if allocations and allocations.get(\u0027allocations\u0027):"},{"line_number":1837,"context_line":"                    # Check to see if the allocation project_id"},{"line_number":1838,"context_line":"                    # and user_id matches the instance project and user and"},{"line_number":1839,"context_line":"                    # fix the allocation project/user if they don\u0027t match."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_d845da70","line":1836,"range":{"start_line":1836,"start_character":35,"end_line":1836,"end_character":66},"in_reply_to":"5f7c97a3_187912fa","updated":"2018-07-03 14:18:34.000000000","message":"Sure it does, it\u0027s in functional tests: TestNovaManagePlacementHealAllocations\n\nThe first condition is when @safe_connect returns None - I admittedly don\u0027t have a unit test wrinkle for that because...meh.\n\nThe latter is what you get when there are no allocations for the consumer ({\u0027allocations\u0027: {}} response) which is covered by TestNovaManagePlacementHealAllocations.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c448c77fbc7fe3c9d4842b7ef9a5c9b820ca5f39","unresolved":false,"context_lines":[{"line_number":1833,"context_line":"                # return None if we can\u0027t communicate with Placement, and the"},{"line_number":1834,"context_line":"                # response can have an empty {\u0027allocations\u0027: {}} response if"},{"line_number":1835,"context_line":"                # there are no allocations for the instance so handle both"},{"line_number":1836,"context_line":"                if allocations and allocations.get(\u0027allocations\u0027):"},{"line_number":1837,"context_line":"                    # Check to see if the allocation project_id"},{"line_number":1838,"context_line":"                    # and user_id matches the instance project and user and"},{"line_number":1839,"context_line":"                    # fix the allocation project/user if they don\u0027t match."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_38a88e1e","line":1836,"range":{"start_line":1836,"start_character":35,"end_line":1836,"end_character":66},"in_reply_to":"5f7c97a3_187912fa","updated":"2018-07-03 14:09:42.000000000","message":"Well, technically this is tested by anything that makes assertions that 1860 happened right? Maybe you mean the case where it\u0027s not present isn\u0027t tested?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    # Allocations created before Placement API version 1.8"},{"line_number":1841,"context_line":"                    # did not have a project_id/user_id, and migrated records"},{"line_number":1842,"context_line":"                    # could have sentinel values from config."},{"line_number":1843,"context_line":"                    if (allocations.get(\u0027project_id\u0027) \u003d\u003d"},{"line_number":1844,"context_line":"                            instance.project_id and"},{"line_number":1845,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1846,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1847,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1848,"context_line":"                               instance.uuid)"},{"line_number":1849,"context_line":"                        continue"},{"line_number":1850,"context_line":"                    # We have an instance with allocations but not the correct"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_1862723e","line":1847,"range":{"start_line":1843,"start_character":20,"end_line":1847,"end_character":69},"updated":"2018-07-03 14:04:28.000000000","message":"...and this\n\ndon\u0027t have test coverage","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"515d925e226cf9ad3c278224b36032a0a27c994c","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    # Allocations created before Placement API version 1.8"},{"line_number":1841,"context_line":"                    # did not have a project_id/user_id, and migrated records"},{"line_number":1842,"context_line":"                    # could have sentinel values from config."},{"line_number":1843,"context_line":"                    if (allocations.get(\u0027project_id\u0027) \u003d\u003d"},{"line_number":1844,"context_line":"                            instance.project_id and"},{"line_number":1845,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1846,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1847,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1848,"context_line":"                               instance.uuid)"},{"line_number":1849,"context_line":"                        continue"},{"line_number":1850,"context_line":"                    # We have an instance with allocations but not the correct"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_981c427c","line":1847,"range":{"start_line":1843,"start_character":20,"end_line":1847,"end_character":69},"in_reply_to":"5f7c97a3_1862723e","updated":"2018-07-03 14:12:27.000000000","message":"Agree this doesn\u0027t, and since it\u0027s new behavior, it should.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":1840,"context_line":"                    # Allocations created before Placement API version 1.8"},{"line_number":1841,"context_line":"                    # did not have a project_id/user_id, and migrated records"},{"line_number":1842,"context_line":"                    # could have sentinel values from config."},{"line_number":1843,"context_line":"                    if (allocations.get(\u0027project_id\u0027) \u003d\u003d"},{"line_number":1844,"context_line":"                            instance.project_id and"},{"line_number":1845,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1846,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1847,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1848,"context_line":"                               instance.uuid)"},{"line_number":1849,"context_line":"                        continue"},{"line_number":1850,"context_line":"                    # We have an instance with allocations but not the correct"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_db087428","line":1847,"range":{"start_line":1843,"start_character":20,"end_line":1847,"end_character":69},"in_reply_to":"5f7c97a3_1862723e","updated":"2018-07-03 14:18:34.000000000","message":"Yes that\u0027s in TestNovaManagePlacementHealAllocations - change the continue to an exception and you\u0027ll see it blows up.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":1849,"context_line":"                        continue"},{"line_number":1850,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1851,"context_line":"                    # project_id/user_id, so we want to update the allocations"},{"line_number":1852,"context_line":"                    # and re-put them. We don\u0027t use put_allocations here"},{"line_number":1853,"context_line":"                    # because we don\u0027t want to mess up shared or nested"},{"line_number":1854,"context_line":"                    # provider allocations."},{"line_number":1855,"context_line":"                    allocations[\u0027project_id\u0027] \u003d instance.project_id"},{"line_number":1856,"context_line":"                    allocations[\u0027user_id\u0027] \u003d instance.user_id"},{"line_number":1857,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_64518230","line":1854,"range":{"start_line":1852,"start_character":39,"end_line":1854,"end_character":43},"updated":"2018-07-03 14:04:28.000000000","message":"That doesn\u0027t happen today, so you could still use put_allocations here.  That would give you the benefit of @retries, if you care.  (Beyond that, you wouldn\u0027t really be saving anything LOC-wise.)","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":1849,"context_line":"                        continue"},{"line_number":1850,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1851,"context_line":"                    # project_id/user_id, so we want to update the allocations"},{"line_number":1852,"context_line":"                    # and re-put them. We don\u0027t use put_allocations here"},{"line_number":1853,"context_line":"                    # because we don\u0027t want to mess up shared or nested"},{"line_number":1854,"context_line":"                    # provider allocations."},{"line_number":1855,"context_line":"                    allocations[\u0027project_id\u0027] \u003d instance.project_id"},{"line_number":1856,"context_line":"                    allocations[\u0027user_id\u0027] \u003d instance.user_id"},{"line_number":1857,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_fb49b065","line":1854,"range":{"start_line":1852,"start_character":39,"end_line":1854,"end_character":43},"in_reply_to":"5f7c97a3_64518230","updated":"2018-07-03 14:18:34.000000000","message":"I was originally using put_allocations but changed this after review from cdent (which I agreed with) to just amend the project_id/user_id and not touch the actual allocations. If we hit a 409 then we should fail and the user can retry - at which point the allocations might be healed for this instance and we won\u0027t run through this again.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"46a01ef7004d86c1769305293ee26e35f46947c7","unresolved":false,"context_lines":[{"line_number":1857,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"},{"line_number":1858,"context_line":"                    # the body structure from get_allocations_for_consumer."},{"line_number":1859,"context_line":"                    # TODO(mriedem): Pass a consumer generation using 1.28."},{"line_number":1860,"context_line":"                    resp \u003d placement.put(\u0027/allocations/%s\u0027 % instance.uuid,"},{"line_number":1861,"context_line":"                                         allocations, version\u003d\u00271.12\u0027)"},{"line_number":1862,"context_line":"                    if resp:"},{"line_number":1863,"context_line":"                        num_processed +\u003d 1"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_bb8018f9","line":1860,"updated":"2018-07-03 14:33:10.000000000","message":"I need to investigate bug 1779717 but it sounds like this PUT won\u0027t even do anything on the server side. If that\u0027s the case, I need to write a separate non-CachingScheduler-based test for this.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a2979ead0bdcb28157456bd0d1c9aa30adf5d14b","unresolved":false,"context_lines":[{"line_number":1852,"context_line":"                    # and re-put them. We don\u0027t use put_allocations here"},{"line_number":1853,"context_line":"                    # because we don\u0027t want to mess up shared or nested"},{"line_number":1854,"context_line":"                    # provider allocations."},{"line_number":1855,"context_line":"                    allocations[\u0027project_id\u0027] \u003d instance.project_id"},{"line_number":1856,"context_line":"                    allocations[\u0027user_id\u0027] \u003d instance.user_id"},{"line_number":1857,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"},{"line_number":1858,"context_line":"                    # the body structure from get_allocations_for_consumer."},{"line_number":1859,"context_line":"                    # TODO(mriedem): Pass a consumer generation using 1.28."},{"line_number":1860,"context_line":"                    resp \u003d placement.put(\u0027/allocations/%s\u0027 % instance.uuid,"},{"line_number":1861,"context_line":"                                         allocations, version\u003d\u00271.12\u0027)"},{"line_number":1862,"context_line":"                    if resp:"},{"line_number":1863,"context_line":"                        num_processed +\u003d 1"},{"line_number":1864,"context_line":"                        output(_(\u0027Successfully updated allocations for \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_fb33f0c2","line":1861,"range":{"start_line":1855,"start_character":0,"end_line":1861,"end_character":69},"updated":"2018-07-03 14:27:51.000000000","message":"Are we sure this works?\n\nhttps://bugs.launchpad.net/nova/+bug/1779717","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":1910,"context_line":"          \"not have allocations in the Placement service, or have incomplete \""},{"line_number":1911,"context_line":"          \"consumer project_id/user_id values in existing allocations, and \""},{"line_number":1912,"context_line":"          \"which are not undergoing a task state transition. For each \""},{"line_number":1913,"context_line":"          \"instance found, allocations are created against the compute node \""},{"line_number":1914,"context_line":"          \"resource provider for that instance based on the flavor associated \""},{"line_number":1915,"context_line":"          \"with the instance. This command requires that the \""},{"line_number":1916,"context_line":"          \"[api_database]/connection and [placement] configuration options \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_04176e56","line":1913,"updated":"2018-07-03 14:04:28.000000000","message":"(or updated)","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c6be788122b9ae72fbb9fa46191275c898d9a07","unresolved":false,"context_lines":[{"line_number":1910,"context_line":"          \"not have allocations in the Placement service, or have incomplete \""},{"line_number":1911,"context_line":"          \"consumer project_id/user_id values in existing allocations, and \""},{"line_number":1912,"context_line":"          \"which are not undergoing a task state transition. For each \""},{"line_number":1913,"context_line":"          \"instance found, allocations are created against the compute node \""},{"line_number":1914,"context_line":"          \"resource provider for that instance based on the flavor associated \""},{"line_number":1915,"context_line":"          \"with the instance. This command requires that the \""},{"line_number":1916,"context_line":"          \"[api_database]/connection and [placement] configuration options \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_4e12fc56","line":1913,"in_reply_to":"5f7c97a3_04176e56","updated":"2018-07-09 16:43:34.000000000","message":"Done","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2553807953e7520dc50a36abc03b21e67a9800f5","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1837,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1838,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1839,"context_line":"                               instance.uuid)"},{"line_number":1840,"context_line":"                        continue"},{"line_number":1841,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1842,"context_line":"                    # project_id/user_id, so we want to update the allocations"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_32a267fc","line":1839,"updated":"2018-07-10 19:11:39.000000000","message":"Isn\u0027t this going to generate a ton of noise for all the instances in the database? I acknowledge that the old side code also is noisy, but... it\u0027s really noisy right?","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4b764c5830cc749c8829f5699e2a680bbc1da6ca","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1837,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1838,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1839,"context_line":"                               instance.uuid)"},{"line_number":1840,"context_line":"                        continue"},{"line_number":1841,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1842,"context_line":"                    # project_id/user_id, so we want to update the allocations"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_98e0392a","line":1839,"in_reply_to":"5f7c97a3_32a267fc","updated":"2018-07-10 21:25:12.000000000","message":"Only if --verbose is used, but maybe you want -vv? Or just not output this at all?","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9f48d00e247b7a958a68fb8f48ad4fe356c4ef1e","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"                            allocations.get(\u0027user_id\u0027) \u003d\u003d instance.user_id):"},{"line_number":1837,"context_line":"                        output(_(\u0027Instance %s already has allocations with \u0027"},{"line_number":1838,"context_line":"                                 \u0027matching consumer project/user.\u0027) %"},{"line_number":1839,"context_line":"                               instance.uuid)"},{"line_number":1840,"context_line":"                        continue"},{"line_number":1841,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1842,"context_line":"                    # project_id/user_id, so we want to update the allocations"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3595233e","line":1839,"in_reply_to":"5f7c97a3_98e0392a","updated":"2018-07-13 14:45:28.000000000","message":"Agree this seems pretty chatty, but if it only shows up under --verbose that\u0027s probably fine.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9f48d00e247b7a958a68fb8f48ad4fe356c4ef1e","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1842,"context_line":"                    # project_id/user_id, so we want to update the allocations"},{"line_number":1843,"context_line":"                    # and re-put them. We don\u0027t use put_allocations here"},{"line_number":1844,"context_line":"                    # because we don\u0027t want to mess up shared or nested"},{"line_number":1845,"context_line":"                    # provider allocations."},{"line_number":1846,"context_line":"                    allocations[\u0027project_id\u0027] \u003d instance.project_id"},{"line_number":1847,"context_line":"                    allocations[\u0027user_id\u0027] \u003d instance.user_id"},{"line_number":1848,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_35dbe3ea","line":1845,"range":{"start_line":1844,"start_character":33,"end_line":1845,"end_character":43},"updated":"2018-07-13 14:45:28.000000000","message":"put_allocations is to be avoided because it would throw all the allocations onto the compute node provider, eh?","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"31bb3cd147b20eb4d787b977e2508f625908f2f7","unresolved":false,"context_lines":[{"line_number":1841,"context_line":"                    # We have an instance with allocations but not the correct"},{"line_number":1842,"context_line":"                    # project_id/user_id, so we want to update the allocations"},{"line_number":1843,"context_line":"                    # and re-put them. We don\u0027t use put_allocations here"},{"line_number":1844,"context_line":"                    # because we don\u0027t want to mess up shared or nested"},{"line_number":1845,"context_line":"                    # provider allocations."},{"line_number":1846,"context_line":"                    allocations[\u0027project_id\u0027] \u003d instance.project_id"},{"line_number":1847,"context_line":"                    allocations[\u0027user_id\u0027] \u003d instance.user_id"},{"line_number":1848,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b0b4e1f2","line":1845,"range":{"start_line":1844,"start_character":33,"end_line":1845,"end_character":43},"in_reply_to":"5f7c97a3_35dbe3ea","updated":"2018-07-13 15:03:37.000000000","message":"Yes - as noted before, and cdent originally brought this up, but if all we need to do is change the project_id/user_id on the *existing* allocations, then why not just do a PUT with the existing allocations but change the fields that need to change, and then we can avoid screwing up any of the providers - like nested or shared, since put_allocations is not aware of those yet. There is even a note about this in put_allocations:\n\n:note Currently we only allocate against a single resource provider.\n              Once shared storage and things like NUMA allocations are a\n              reality, this will change to allocate against multiple providers.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d33b1f5c19ce2df8a2972b486944d6cbc77257fd","unresolved":false,"context_lines":[{"line_number":1848,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"},{"line_number":1849,"context_line":"                    # the body structure from get_allocations_for_consumer."},{"line_number":1850,"context_line":"                    # TODO(mriedem): Pass a consumer generation using 1.28."},{"line_number":1851,"context_line":"                    resp \u003d placement.put(\u0027/allocations/%s\u0027 % instance.uuid,"},{"line_number":1852,"context_line":"                                         allocations, version\u003d\u00271.12\u0027)"},{"line_number":1853,"context_line":"                    if resp:"},{"line_number":1854,"context_line":"                        num_processed +\u003d 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_dfee4e89","line":1851,"range":{"start_line":1851,"start_character":26,"end_line":1851,"end_character":40},"updated":"2018-07-13 13:11:54.000000000","message":"I\u0027m not totally thrilled with using the placement client\u0027s put() method directly like this. That said, it\u0027s something we can and should clean up in a later patch (perhaps when you handle 1.28+).","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9f48d00e247b7a958a68fb8f48ad4fe356c4ef1e","unresolved":false,"context_lines":[{"line_number":1848,"context_line":"                    # We use 1.12 for PUT /allocations/{consumer_id} to mirror"},{"line_number":1849,"context_line":"                    # the body structure from get_allocations_for_consumer."},{"line_number":1850,"context_line":"                    # TODO(mriedem): Pass a consumer generation using 1.28."},{"line_number":1851,"context_line":"                    resp \u003d placement.put(\u0027/allocations/%s\u0027 % instance.uuid,"},{"line_number":1852,"context_line":"                                         allocations, version\u003d\u00271.12\u0027)"},{"line_number":1853,"context_line":"                    if resp:"},{"line_number":1854,"context_line":"                        num_processed +\u003d 1"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b5e8537b","line":1851,"range":{"start_line":1851,"start_character":26,"end_line":1851,"end_character":40},"in_reply_to":"5f7c97a3_dfee4e89","updated":"2018-07-13 14:45:28.000000000","message":"Yeah, put_allocations itself is the evil thing here. We should fix it to not be rp_uuid-centric. But agree, not in this patch.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2553807953e7520dc50a36abc03b21e67a9800f5","unresolved":false,"context_lines":[{"line_number":1996,"context_line":"                    print(e.format_message())"},{"line_number":1997,"context_line":"                    return 2"},{"line_number":1998,"context_line":"                except (exception.AllocationCreateFailed,"},{"line_number":1999,"context_line":"                        exception.AllocationUpdateFailed) as e:"},{"line_number":2000,"context_line":"                    print(e.format_message())"},{"line_number":2001,"context_line":"                    return 3"},{"line_number":2002,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_327b477a","line":1999,"updated":"2018-07-10 19:11:39.000000000","message":"nit: Might as well make these inherit from some common base (or just make create inherit from update), IMHO.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4b764c5830cc749c8829f5699e2a680bbc1da6ca","unresolved":false,"context_lines":[{"line_number":1996,"context_line":"                    print(e.format_message())"},{"line_number":1997,"context_line":"                    return 2"},{"line_number":1998,"context_line":"                except (exception.AllocationCreateFailed,"},{"line_number":1999,"context_line":"                        exception.AllocationUpdateFailed) as e:"},{"line_number":2000,"context_line":"                    print(e.format_message())"},{"line_number":2001,"context_line":"                    return 3"},{"line_number":2002,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3859e5fc","line":1999,"in_reply_to":"5f7c97a3_327b477a","updated":"2018-07-10 21:25:12.000000000","message":"meh, idk, they are distinct failures","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a38c766e004f869b5f3626588a33d16db70de0a0","unresolved":false,"context_lines":[{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"        :param context: The nova.context.RequestContext auth context"},{"line_number":1463,"context_line":"        :param consumer: UUID of the consumer resource"},{"line_number":1464,"context_line":"        :param include_project_user: True if the response should be the"},{"line_number":1465,"context_line":"            full allocations response including project_id and user_id (new"},{"line_number":1466,"context_line":"            in microversion 1.12), False if only the \"allocations\" dict from"},{"line_number":1467,"context_line":"            the response body should be returned."},{"line_number":1468,"context_line":"        :returns: dict, see ``include_project_user`` for details on format;"},{"line_number":1469,"context_line":"            returns None if unable to connect to Placement (see safe_connect)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_c0892626","line":1466,"range":{"start_line":1464,"start_character":37,"end_line":1466,"end_character":33},"updated":"2018-06-11 23:50:56.000000000","message":"The note from the API reference should probably also be in here:\n\nhttps://developer.openstack.org/api-ref/placement/#list-allocations\n\nOr we could check for {\u0027allocations\u0027: {}} and just return {} since that makes more sense for a consumer, otherwise it\u0027s easy to get a KeyError.","commit_id":"68d73918f3115f68b41e252cc382fcc49a5dd402"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"        \"\"\""},{"line_number":1478,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1479,"context_line":"        if include_project_user:"},{"line_number":1480,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1481,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1482,"context_line":"        else:"},{"line_number":1483,"context_line":"            resp \u003d self.get(url, global_request_id\u003dcontext.global_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_38196e79","line":1480,"range":{"start_line":1480,"start_character":12,"end_line":1480,"end_character":48},"updated":"2018-07-03 14:04:28.000000000","message":"any reason not to just use 1.12 regardless?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"        \"\"\""},{"line_number":1478,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1479,"context_line":"        if include_project_user:"},{"line_number":1480,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1481,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1482,"context_line":"        else:"},{"line_number":1483,"context_line":"            resp \u003d self.get(url, global_request_id\u003dcontext.global_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_1b4d8c70","line":1480,"range":{"start_line":1480,"start_character":12,"end_line":1480,"end_character":48},"in_reply_to":"5f7c97a3_38196e79","updated":"2018-07-03 14:18:34.000000000","message":"Because then everything using this method gets the behavior change and I don\u0027t want to deal with that in this same patch - it would have to be split out and that\u0027s not really something I wanted to do here; it could be a follow up if we care.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2553807953e7520dc50a36abc03b21e67a9800f5","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"            returns None if unable to connect to Placement (see safe_connect)"},{"line_number":1475,"context_line":"        \"\"\""},{"line_number":1476,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1477,"context_line":"        if include_project_user:"},{"line_number":1478,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1479,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1480,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d2da1377","line":1477,"updated":"2018-07-10 19:11:39.000000000","message":"Apologies if this was already discussed, but Is this really necessary? 1.12 is pretty old I think, so I would have expected we could just always fetch at 1.12 now.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"9f48d00e247b7a958a68fb8f48ad4fe356c4ef1e","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"            returns None if unable to connect to Placement (see safe_connect)"},{"line_number":1475,"context_line":"        \"\"\""},{"line_number":1476,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1477,"context_line":"        if include_project_user:"},{"line_number":1478,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1479,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1480,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_75a87b20","line":1477,"in_reply_to":"5f7c97a3_583141bb","updated":"2018-07-13 14:45:28.000000000","message":"We did discuss it before (PS5) and I still think it\u0027s the right thing. If you leave the condition on L1485-7, you don\u0027t have to change any of the existing calling code (yet) because the \u0027allocations\u0027 dict part of the response didn\u0027t change at 1.12.\n\nIf we\u0027re eager to get this moving, I suppose we could do that in a fup, but if we\u0027re going to backport this it would be nice to have it all in one patch.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"31bb3cd147b20eb4d787b977e2508f625908f2f7","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"            returns None if unable to connect to Placement (see safe_connect)"},{"line_number":1475,"context_line":"        \"\"\""},{"line_number":1476,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1477,"context_line":"        if include_project_user:"},{"line_number":1478,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1479,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1480,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f004997f","line":1477,"in_reply_to":"5f7c97a3_75a87b20","updated":"2018-07-13 15:03:37.000000000","message":"When I wrote this and originally replied to this comment in PS5, I think I was confusing this with the request body format change in PUT /allocations/{consumer_id} in 1.12. So OK I\u0027ll change this to always use 1.12.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4b764c5830cc749c8829f5699e2a680bbc1da6ca","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"            returns None if unable to connect to Placement (see safe_connect)"},{"line_number":1475,"context_line":"        \"\"\""},{"line_number":1476,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1477,"context_line":"        if include_project_user:"},{"line_number":1478,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1479,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1480,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_583141bb","line":1477,"in_reply_to":"5f7c97a3_d2da1377","updated":"2018-07-10 21:25:12.000000000","message":"That means updating all callers of this as well, which is something I wanted to avoid in this change. Also, I wrote this change in a way that people can backport it since I expect people using heal_allocations are going to be doing that if they are using the CachingScheduler and want to heal up before they upgrade to the point that we drop the CachingScheduler (Stein?).","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d33b1f5c19ce2df8a2972b486944d6cbc77257fd","unresolved":false,"context_lines":[{"line_number":1475,"context_line":"        \"\"\""},{"line_number":1476,"context_line":"        url \u003d \u0027/allocations/%s\u0027 % consumer"},{"line_number":1477,"context_line":"        if include_project_user:"},{"line_number":1478,"context_line":"            resp \u003d self.get(url, version\u003d\u00271.12\u0027,"},{"line_number":1479,"context_line":"                            global_request_id\u003dcontext.global_id)"},{"line_number":1480,"context_line":"        else:"},{"line_number":1481,"context_line":"            resp \u003d self.get(url, global_request_id\u003dcontext.global_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_5f7f9ebb","line":1478,"range":{"start_line":1478,"start_character":41,"end_line":1478,"end_character":47},"updated":"2018-07-13 13:11:54.000000000","message":"Worth putting this as a constant at the top of this module. Followup patch, though.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"}],"nova/tests/functional/test_nova_manage.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d33b1f5c19ce2df8a2972b486944d6cbc77257fd","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        # Now assert that the consumer was actually updated."},{"line_number":641,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":642,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027], version\u003d\u00271.12\u0027).body"},{"line_number":643,"context_line":"        self.assertEqual(server[\u0027tenant_id\u0027], allocations[\u0027project_id\u0027])"},{"line_number":644,"context_line":"        self.assertEqual(server[\u0027user_id\u0027], allocations[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_bfb9127d","line":643,"range":{"start_line":643,"start_character":33,"end_line":643,"end_character":42},"updated":"2018-07-13 13:11:54.000000000","message":"err... project_id?","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e2fc519d968abf39988f9026d0b1c96cb7fce926","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        # Now assert that the consumer was actually updated."},{"line_number":641,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":642,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027], version\u003d\u00271.12\u0027).body"},{"line_number":643,"context_line":"        self.assertEqual(server[\u0027tenant_id\u0027], allocations[\u0027project_id\u0027])"},{"line_number":644,"context_line":"        self.assertEqual(server[\u0027user_id\u0027], allocations[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_9ad8e452","line":643,"range":{"start_line":643,"start_character":33,"end_line":643,"end_character":42},"in_reply_to":"5f7c97a3_7a414808","updated":"2018-07-13 13:40:44.000000000","message":"still? :(","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"31bb3cd147b20eb4d787b977e2508f625908f2f7","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        # Now assert that the consumer was actually updated."},{"line_number":641,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":642,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027], version\u003d\u00271.12\u0027).body"},{"line_number":643,"context_line":"        self.assertEqual(server[\u0027tenant_id\u0027], allocations[\u0027project_id\u0027])"},{"line_number":644,"context_line":"        self.assertEqual(server[\u0027user_id\u0027], allocations[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_301211ff","line":643,"range":{"start_line":643,"start_character":33,"end_line":643,"end_character":42},"in_reply_to":"5f7c97a3_9ad8e452","updated":"2018-07-13 15:03:37.000000000","message":"gmann is collecting an etherpad of random shit we want to cleanup in the compute API in a single microversion in stein if you want to rename that as part of the action.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"97c6e04e78e583dbcee2ed2cb7d1f40fbbc2e0df","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        # Now assert that the consumer was actually updated."},{"line_number":641,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":642,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027], version\u003d\u00271.12\u0027).body"},{"line_number":643,"context_line":"        self.assertEqual(server[\u0027tenant_id\u0027], allocations[\u0027project_id\u0027])"},{"line_number":644,"context_line":"        self.assertEqual(server[\u0027user_id\u0027], allocations[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_7a414808","line":643,"range":{"start_line":643,"start_character":33,"end_line":643,"end_character":42},"in_reply_to":"5f7c97a3_bfb9127d","updated":"2018-07-13 13:35:28.000000000","message":"No that\u0027s the server response body from the compute API.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d33b1f5c19ce2df8a2972b486944d6cbc77257fd","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":642,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027], version\u003d\u00271.12\u0027).body"},{"line_number":643,"context_line":"        self.assertEqual(server[\u0027tenant_id\u0027], allocations[\u0027project_id\u0027])"},{"line_number":644,"context_line":"        self.assertEqual(server[\u0027user_id\u0027], allocations[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_1fa28640","line":644,"updated":"2018-07-13 13:11:54.000000000","message":"good functional test, though. ++","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"}],"nova/tests/unit/test_nova_manage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8263867435ea3a4ece61454411bfe4bf63aee042","unresolved":false,"context_lines":[{"line_number":2507,"context_line":"                return_value\u003dmock.sentinel.resources)"},{"line_number":2508,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":2509,"context_line":"                \u0027put_allocations\u0027, return_value\u003dTrue)"},{"line_number":2510,"context_line":"    def test_heal_allocations_null_consumer("},{"line_number":2511,"context_line":"            self, mock_put_allocations, mock_res_from_flavor,"},{"line_number":2512,"context_line":"            mock_get_compute_node, mock_get_allocs, mock_get_instances,"},{"line_number":2513,"context_line":"            mock_get_all_cells):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_fe25f10a","line":2510,"range":{"start_line":2510,"start_character":30,"end_line":2510,"end_character":34},"updated":"2018-06-22 13:59:09.000000000","message":"sentinel","commit_id":"e964f448bb22e2e23322d026e12104f8c90da00e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a2979ead0bdcb28157456bd0d1c9aa30adf5d14b","unresolved":false,"context_lines":[{"line_number":2505,"context_line":"                new_callable\u003dmock.NonCallableMock)  # assert not called"},{"line_number":2506,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.put\u0027,"},{"line_number":2507,"context_line":"                return_value\u003dfake_requests.FakeResponse(204))"},{"line_number":2508,"context_line":"    def test_heal_allocations_sentinel_consumer("},{"line_number":2509,"context_line":"            self, mock_put, mock_get_compute_node, mock_get_allocs,"},{"line_number":2510,"context_line":"            mock_get_instances, mock_get_all_cells):"},{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_5b4c643e","line":2508,"range":{"start_line":2508,"start_character":30,"end_line":2508,"end_character":38},"updated":"2018-07-03 14:27:51.000000000","message":"you might want to rename \"sentinel\" to \"incomplete\" to assuage @dansmith. :)","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":2510,"context_line":"            mock_get_instances, mock_get_all_cells):"},{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"},{"line_number":2512,"context_line":"        placement API microversion \u003c 1.8 where project/user weren\u0027t provided"},{"line_number":2513,"context_line":"        and there was no consumer. The allocations will be re-put with the"},{"line_number":2514,"context_line":"        instance project_id/user_id values. Note that"},{"line_number":2515,"context_line":"        GET /allocations/{consumer_id} since commit f44965010 will create the"},{"line_number":2516,"context_line":"        missing consumer record using the config option sentinels for project"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_b8801ef9","line":2513,"range":{"start_line":2513,"start_character":8,"end_line":2513,"end_character":33},"updated":"2018-07-03 14:04:28.000000000","message":"eh?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c6be788122b9ae72fbb9fa46191275c898d9a07","unresolved":false,"context_lines":[{"line_number":2510,"context_line":"            mock_get_instances, mock_get_all_cells):"},{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"},{"line_number":2512,"context_line":"        placement API microversion \u003c 1.8 where project/user weren\u0027t provided"},{"line_number":2513,"context_line":"        and there was no consumer. The allocations will be re-put with the"},{"line_number":2514,"context_line":"        instance project_id/user_id values. Note that"},{"line_number":2515,"context_line":"        GET /allocations/{consumer_id} since commit f44965010 will create the"},{"line_number":2516,"context_line":"        missing consumer record using the config option sentinels for project"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_0e4f246a","line":2513,"range":{"start_line":2513,"start_character":8,"end_line":2513,"end_character":33},"in_reply_to":"5f7c97a3_3b47284f","updated":"2018-07-09 16:43:34.000000000","message":"Done","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":2510,"context_line":"            mock_get_instances, mock_get_all_cells):"},{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"},{"line_number":2512,"context_line":"        placement API microversion \u003c 1.8 where project/user weren\u0027t provided"},{"line_number":2513,"context_line":"        and there was no consumer. The allocations will be re-put with the"},{"line_number":2514,"context_line":"        instance project_id/user_id values. Note that"},{"line_number":2515,"context_line":"        GET /allocations/{consumer_id} since commit f44965010 will create the"},{"line_number":2516,"context_line":"        missing consumer record using the config option sentinels for project"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_3b47284f","line":2513,"range":{"start_line":2513,"start_character":8,"end_line":2513,"end_character":33},"in_reply_to":"5f7c97a3_b8801ef9","updated":"2018-07-03 14:18:34.000000000","message":"I think I meant non-sentinel consumer, but that\u0027s redundant with \"where project/user weren\u0027t provided\" so I can remove this part.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"},{"line_number":2512,"context_line":"        placement API microversion \u003c 1.8 where project/user weren\u0027t provided"},{"line_number":2513,"context_line":"        and there was no consumer. The allocations will be re-put with the"},{"line_number":2514,"context_line":"        instance project_id/user_id values. Note that"},{"line_number":2515,"context_line":"        GET /allocations/{consumer_id} since commit f44965010 will create the"},{"line_number":2516,"context_line":"        missing consumer record using the config option sentinels for project"},{"line_number":2517,"context_line":"        and user, so we won\u0027t get null back for the consumer project/user."},{"line_number":2518,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_38edeeef","line":2515,"range":{"start_line":2514,"start_character":44,"end_line":2515,"end_character":61},"updated":"2018-07-03 14:04:28.000000000","message":"So if you\u0027re going to backport this, you\u0027ll need to account for nulls here, yah?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        \"\"\"Tests the scenario that there are allocations created using"},{"line_number":2512,"context_line":"        placement API microversion \u003c 1.8 where project/user weren\u0027t provided"},{"line_number":2513,"context_line":"        and there was no consumer. The allocations will be re-put with the"},{"line_number":2514,"context_line":"        instance project_id/user_id values. Note that"},{"line_number":2515,"context_line":"        GET /allocations/{consumer_id} since commit f44965010 will create the"},{"line_number":2516,"context_line":"        missing consumer record using the config option sentinels for project"},{"line_number":2517,"context_line":"        and user, so we won\u0027t get null back for the consumer project/user."},{"line_number":2518,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_db6f14c2","line":2515,"range":{"start_line":2514,"start_character":44,"end_line":2515,"end_character":61},"in_reply_to":"5f7c97a3_38edeeef","updated":"2018-07-03 14:18:34.000000000","message":"Well, the code already handles that since None !\u003d instance.project_id. I\u0027m not just explicitly testing that scenario.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ec3b15ef1146488c59358b3f7b1b229300974204","unresolved":false,"context_lines":[{"line_number":2518,"context_line":"        \"\"\""},{"line_number":2519,"context_line":"        mock_get_allocs.return_value \u003d {"},{"line_number":2520,"context_line":"            \"allocations\": {"},{"line_number":2521,"context_line":"                \"92637880-2d79-43c6-afab-d860886c6391\": {"},{"line_number":2522,"context_line":"                    \"generation\": 2,"},{"line_number":2523,"context_line":"                    \"resources\": {"},{"line_number":2524,"context_line":"                        \"DISK_GB\": 50,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_d8aaba82","line":2521,"range":{"start_line":2521,"start_character":16,"end_line":2521,"end_character":54},"updated":"2018-07-03 14:04:28.000000000","message":"some reason you\u0027re not using a sentinel here?","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c85a5b22d38bf5dbe6065189395e09206117672","unresolved":false,"context_lines":[{"line_number":2518,"context_line":"        \"\"\""},{"line_number":2519,"context_line":"        mock_get_allocs.return_value \u003d {"},{"line_number":2520,"context_line":"            \"allocations\": {"},{"line_number":2521,"context_line":"                \"92637880-2d79-43c6-afab-d860886c6391\": {"},{"line_number":2522,"context_line":"                    \"generation\": 2,"},{"line_number":2523,"context_line":"                    \"resources\": {"},{"line_number":2524,"context_line":"                        \"DISK_GB\": 50,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_3b6088cf","line":2521,"range":{"start_line":2521,"start_character":16,"end_line":2521,"end_character":54},"in_reply_to":"5f7c97a3_d8aaba82","updated":"2018-07-03 14:18:34.000000000","message":"No, I probably just copied this out of the API reference or from an existing test.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f4601f5b20e3fa71ed8dd917752f16484aab73b7","unresolved":false,"context_lines":[{"line_number":2536,"context_line":"            test.MatchType(context.RequestContext), uuidsentinel.instance,"},{"line_number":2537,"context_line":"            include_project_user\u003dTrue)"},{"line_number":2538,"context_line":"        expected_put_data \u003d mock_get_allocs.return_value"},{"line_number":2539,"context_line":"        expected_put_data[\u0027project_id\u0027] \u003d \u0027fake-project\u0027"},{"line_number":2540,"context_line":"        expected_put_data[\u0027user_id\u0027] \u003d \u0027fake-user\u0027"},{"line_number":2541,"context_line":"        mock_put.assert_called_once_with("},{"line_number":2542,"context_line":"            \u0027/allocations/%s\u0027 % uuidsentinel.instance, expected_put_data,"},{"line_number":2543,"context_line":"            version\u003d\u00271.12\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_ed6ca4d1","line":2540,"range":{"start_line":2539,"start_character":8,"end_line":2540,"end_character":50},"updated":"2018-07-02 23:11:24.000000000","message":"Note to self: these expected values come from the instance.project_id and instance.user_id that are mocked and returned in the decorator.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a2979ead0bdcb28157456bd0d1c9aa30adf5d14b","unresolved":false,"context_lines":[{"line_number":2592,"context_line":"        expected_put_data[\u0027user_id\u0027] \u003d \u0027fake-user\u0027"},{"line_number":2593,"context_line":"        mock_put.assert_called_once_with("},{"line_number":2594,"context_line":"            \u0027/allocations/%s\u0027 % uuidsentinel.instance, expected_put_data,"},{"line_number":2595,"context_line":"            version\u003d\u00271.12\u0027)"},{"line_number":2596,"context_line":""},{"line_number":2597,"context_line":""},{"line_number":2598,"context_line":"class TestNovaManageMain(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_1b2eec41","line":2595,"updated":"2018-07-03 14:27:51.000000000","message":"While these unit tests may work, no functional tests will work, trust me.\n\nhttps://bugs.launchpad.net/nova/+bug/1779717\n\nThe handler code makes no effort to update a Consumer\u0027s project or user ID even if new ones were supplied in the request body. :(\n\nI\u0027m currently working on a fix for this, and you\u0027ll likely need to block waiting for that fix for any functional test of this healing process to actually work.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a37b9944f69bd68324164f9544aa9a986d01b4a","unresolved":false,"context_lines":[{"line_number":2592,"context_line":"        expected_put_data[\u0027user_id\u0027] \u003d \u0027fake-user\u0027"},{"line_number":2593,"context_line":"        mock_put.assert_called_once_with("},{"line_number":2594,"context_line":"            \u0027/allocations/%s\u0027 % uuidsentinel.instance, expected_put_data,"},{"line_number":2595,"context_line":"            version\u003d\u00271.12\u0027)"},{"line_number":2596,"context_line":""},{"line_number":2597,"context_line":""},{"line_number":2598,"context_line":"class TestNovaManageMain(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_9bc3dc39","line":2595,"in_reply_to":"5f7c97a3_1b2eec41","updated":"2018-07-03 22:18:00.000000000","message":"I\u0027ll work on a separate functional test for this change in the meantime that\u0027s not based on the CachingScheduler like the existing functional tests for heal_allocations are using - because CachingScheduler won\u0027t create allocations, but that\u0027s different from the case that we have allocations with sentinel project/user information, I\u0027ll have to write something specific for that.","commit_id":"be6f4feb30b8a46d1294c0b5c36bf37dda70085c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d33b1f5c19ce2df8a2972b486944d6cbc77257fd","unresolved":false,"context_lines":[{"line_number":2596,"context_line":"        mock_put.assert_called_once_with("},{"line_number":2597,"context_line":"            \u0027/allocations/%s\u0027 % uuidsentinel.instance, expected_put_data,"},{"line_number":2598,"context_line":"            version\u003d\u00271.12\u0027)"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":""},{"line_number":2601,"context_line":"class TestNovaManageMain(test.NoDBTestCase):"},{"line_number":2602,"context_line":"    \"\"\"Tests the nova-manage:main() setup code.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3fad0232","line":2599,"updated":"2018-07-13 13:11:54.000000000","message":"++ good unit tests.","commit_id":"3697b9bf4b5c31eab9f43e1f4539079eeb4b0fd3"}]}
