)]}'
{"nova/objects/resource_provider.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"beab5c2594e9b91c8d084451e509488cc948742a","unresolved":false,"context_lines":[{"line_number":683,"context_line":"    primary_join \u003d sql.outerjoin(inv_join, usage,"},{"line_number":684,"context_line":"                                 sql.and_("},{"line_number":685,"context_line":"                                     _INV_TBL.c.resource_provider_id \u003d\u003d usage.c.resource_provider_id,"},{"line_number":686,"context_line":"                                     _INV_TBL.c.resource_class_id \u003d\u003d usage.c.resource_class_id)"},{"line_number":687,"context_line":"    )"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    cols_in_output \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_7921f99e","line":686,"updated":"2016-09-06 16:38:30.000000000","message":"Doh, sorry about this. I should have had this right the first time :(","commit_id":"1dee8f607174803004c6afdbf002e8a2c0d2cd98"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"e513a7e013d7430d0e6888579c225c0d4be36cc5","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                                 sql.and_("},{"line_number":685,"context_line":"                                     _INV_TBL.c.resource_provider_id \u003d\u003d usage.c.resource_provider_id,"},{"line_number":686,"context_line":"                                     _INV_TBL.c.resource_class_id \u003d\u003d usage.c.resource_class_id)"},{"line_number":687,"context_line":"    )"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    cols_in_output \u003d ["},{"line_number":690,"context_line":"        _RP_TBL.c.id.label(\u0027resource_provider_id\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_59bef5d4","line":687,"updated":"2016-09-06 16:45:57.000000000","message":"This join looks correct to me, as this is the correct unique constraint on Inventory:\n\n        schema.UniqueConstraint(\u0027resource_provider_id\u0027, \u0027resource_class_id\u0027,       name\u003d\u0027uniq_inventories0resource_provider_resource_class\u0027)","commit_id":"1dee8f607174803004c6afdbf002e8a2c0d2cd98"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4463a3893b54a35c7356c037ffe4eb10ab225794","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                                 sql.and_("},{"line_number":685,"context_line":"                                     _INV_TBL.c.resource_provider_id \u003d\u003d usage.c.resource_provider_id,"},{"line_number":686,"context_line":"                                     _INV_TBL.c.resource_class_id \u003d\u003d usage.c.resource_class_id)"},{"line_number":687,"context_line":"    )"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    cols_in_output \u003d ["},{"line_number":690,"context_line":"        _RP_TBL.c.id.label(\u0027resource_provider_id\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_99b4fdd1","line":687,"in_reply_to":"9a89bdaa_59bef5d4","updated":"2016-09-06 16:49:02.000000000","message":"Note that the SQL in the code comment above this is correct... just had not made the SQLAlchemy join condition correct! :)","commit_id":"1dee8f607174803004c6afdbf002e8a2c0d2cd98"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9eb547c3d19475f43a7512448bc9d25493272960","unresolved":false,"context_lines":[{"line_number":716,"context_line":"    for record in records:"},{"line_number":717,"context_line":"        map_key \u003d (record[\u0027uuid\u0027], record[\u0027resource_class_id\u0027])"},{"line_number":718,"context_line":"        if map_key in usage_map:"},{"line_number":719,"context_line":"            raise KeyError(\"%s already in usage_map, bad query\" % map_key)"},{"line_number":720,"context_line":"        usage_map[map_key] \u003d record"},{"line_number":721,"context_line":"        provs_with_inv.add(record[\"uuid\"])"},{"line_number":722,"context_line":"    # Ensure that all providers have existing inventory"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_d3abb91b","line":719,"updated":"2016-09-06 21:15:02.000000000","message":"Really this shouldn\u0027t ever be hit any more, but I suppose it\u0027s cool to leave it in :)","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a806511c42f72b17eb7db16591c4d8649e594cd5","unresolved":false,"context_lines":[{"line_number":716,"context_line":"    for record in records:"},{"line_number":717,"context_line":"        map_key \u003d (record[\u0027uuid\u0027], record[\u0027resource_class_id\u0027])"},{"line_number":718,"context_line":"        if map_key in usage_map:"},{"line_number":719,"context_line":"            raise KeyError(\"%s already in usage_map, bad query\" % map_key)"},{"line_number":720,"context_line":"        usage_map[map_key] \u003d record"},{"line_number":721,"context_line":"        provs_with_inv.add(record[\"uuid\"])"},{"line_number":722,"context_line":"    # Ensure that all providers have existing inventory"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_134b6188","line":719,"updated":"2016-09-06 21:12:32.000000000","message":"This will fail to format because map_key is a tuple","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"}],"nova/tests/functional/db/test_resource_provider.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a806511c42f72b17eb7db16591c4d8649e594cd5","unresolved":false,"context_lines":[{"line_number":584,"context_line":"        consumer_uuid \u003d uuidsentinel.consumer"},{"line_number":585,"context_line":"        consumer_uuid2 \u003d uuidsentinel.consumer2"},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"        # Create one resource providers with 2 classes"},{"line_number":588,"context_line":"        rp1_name \u003d uuidsentinel.rp1_name"},{"line_number":589,"context_line":"        rp1_uuid \u003d uuidsentinel.rp1_uuid"},{"line_number":590,"context_line":"        rp1_class \u003d fields.ResourceClass.DISK_GB"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_93dcd1e5","line":587,"range":{"start_line":587,"start_character":30,"end_line":587,"end_character":39},"updated":"2016-09-06 21:12:32.000000000","message":"\"provider\"","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9eb547c3d19475f43a7512448bc9d25493272960","unresolved":false,"context_lines":[{"line_number":625,"context_line":"        # create the allocations for a second consumer, until we have"},{"line_number":626,"context_line":"        # allocations for more than one consumer in the db, then we"},{"line_number":627,"context_line":"        # won\u0027t actually be doing real allocation math, which triggers"},{"line_number":628,"context_line":"        # the sql monster."},{"line_number":629,"context_line":"        allocation_1 \u003d objects.Allocation(resource_provider\u003drp1,"},{"line_number":630,"context_line":"                                          consumer_id\u003dconsumer_uuid2,"},{"line_number":631,"context_line":"                                          resource_class\u003drp1_class,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_733f4dd6","line":628,"updated":"2016-09-06 21:15:02.000000000","message":"heh, \"sql monster\". :)","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a806511c42f72b17eb7db16591c4d8649e594cd5","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        # because a new allocataion is created, adding to the total"},{"line_number":713,"context_line":"        # used, not replacing."},{"line_number":714,"context_line":"        rp1_used +\u003d 1"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        allocation_1 \u003d objects.Allocation(resource_provider\u003drp1,"},{"line_number":717,"context_line":"                                          consumer_id\u003dconsumer_uuid,"},{"line_number":718,"context_line":"                                          resource_class\u003drp1_class,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_13c8c121","line":715,"updated":"2016-09-06 21:12:32.000000000","message":"Stray whitespace.","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"9eb547c3d19475f43a7512448bc9d25493272960","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        # because a new allocataion is created, adding to the total"},{"line_number":713,"context_line":"        # used, not replacing."},{"line_number":714,"context_line":"        rp1_used +\u003d 1"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        allocation_1 \u003d objects.Allocation(resource_provider\u003drp1,"},{"line_number":717,"context_line":"                                          consumer_id\u003dconsumer_uuid,"},{"line_number":718,"context_line":"                                          resource_class\u003drp1_class,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_0f017505","line":715,"updated":"2016-09-06 21:15:02.000000000","message":"meh, unrelated","commit_id":"9ddd41ca707228b14ae578f282f820fb78bd6a42"}]}
