)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"800ae0d50b27f8e949283a50956b248224def3cf","unresolved":false,"context_lines":[{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    select \u003d sa.select(cols_in_output).select_from(disk_join)"},{"line_number":770,"context_line":"    select \u003d select.where(cn_tbl.c.deleted \u003d\u003d False)  # noqa"},{"line_number":771,"context_line":"    engine \u003d get_engine()"},{"line_number":772,"context_line":"    conn \u003d engine.connect()"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"    results \u003d conn.execute(select).fetchall()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_b79accc3","line":771,"updated":"2016-02-25 12:17:57.000000000","message":"Can you get the engine from the session in the contex manager that has been cooked by the decorator? That will preserve the \"this is a reader\" semantics that something somewhere mumble mumble is using?","commit_id":"528add6d35fc76aaca3c05fad7807a97f048383f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"969c4bb2acfab0a2047344742527a63649696065","unresolved":false,"context_lines":[{"line_number":623,"context_line":""},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"@main_context_manager.reader"},{"line_number":626,"context_line":"def compute_node_get_all(context):"},{"line_number":627,"context_line":"    # NOTE(jaypipes): With the addition of the resource-providers database"},{"line_number":628,"context_line":"    # schema, inventory and allocation information for various resources"},{"line_number":629,"context_line":"    # on a compute node are to be migrated from the compute_nodes and"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_db485030","line":626,"updated":"2016-02-26 14:15:56.000000000","message":"Actually, something is worrying me : as I can understand, does it mean that we\u0027re not providing the same SQLA returned object ? I don\u0027t see all the SQLA fields that ComputeNode is containing to be returned, so something which would call that method would get a very different semantic, no ?","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"362d4e06c209b17e54539a5e1ce4a8ccace513f5","unresolved":false,"context_lines":[{"line_number":623,"context_line":""},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"@main_context_manager.reader"},{"line_number":626,"context_line":"def compute_node_get_all(context):"},{"line_number":627,"context_line":"    # NOTE(jaypipes): With the addition of the resource-providers database"},{"line_number":628,"context_line":"    # schema, inventory and allocation information for various resources"},{"line_number":629,"context_line":"    # on a compute node are to be migrated from the compute_nodes and"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_dbe4d00e","line":626,"in_reply_to":"9aed3d3a_db485030","updated":"2016-02-26 14:17:52.000000000","message":"Nevermind, the test says the contrary, you\u0027re returning the ComputeNode fields augmented by the new cols you\u0027re adding by the JOINs...","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"43eedf8af97ca4afeb85f0541483df260f1f5db1","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    #     GROUP BY resource_provider_id"},{"line_number":693,"context_line":"    #   ) AS disk_usage"},{"line_number":694,"context_line":"    #     ON disk_inv.resource_provider_id \u003d disk_usage.resource_provider_id"},{"line_number":695,"context_line":"    # WHERE cn.deleted \u003d 0;"},{"line_number":696,"context_line":"    RAM_MB \u003d fields.ResourceClass.index(fields.ResourceClass.MEMORY_MB)"},{"line_number":697,"context_line":"    VCPU \u003d fields.ResourceClass.index(fields.ResourceClass.VCPU)"},{"line_number":698,"context_line":"    DISK_GB \u003d fields.ResourceClass.index(fields.ResourceClass.DISK_GB)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_db3e90b7","line":695,"updated":"2016-02-26 14:12:45.000000000","message":"Honestly, I don\u0027t get the point to provide the SQL statement here in the comment. Anyone who would wonder that could try to see what\u0027s going out (or maybe you could add that in the commit msg, I dunno)","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"abcbc78a43ccc061145599b12c1e0d0fd894c2e6","unresolved":false,"context_lines":[{"line_number":692,"context_line":"    #     GROUP BY resource_provider_id"},{"line_number":693,"context_line":"    #   ) AS disk_usage"},{"line_number":694,"context_line":"    #     ON disk_inv.resource_provider_id \u003d disk_usage.resource_provider_id"},{"line_number":695,"context_line":"    # WHERE cn.deleted \u003d 0;"},{"line_number":696,"context_line":"    RAM_MB \u003d fields.ResourceClass.index(fields.ResourceClass.MEMORY_MB)"},{"line_number":697,"context_line":"    VCPU \u003d fields.ResourceClass.index(fields.ResourceClass.VCPU)"},{"line_number":698,"context_line":"    DISK_GB \u003d fields.ResourceClass.index(fields.ResourceClass.DISK_GB)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_d7bf845e","line":695,"in_reply_to":"9aed3d3a_db3e90b7","updated":"2016-02-26 14:37:29.000000000","message":"I think it\u0027s helpful to those who have been trained to think in SQL. I know that it made things clearer to me, as I know SQL way better than SQLAlchemy.","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"443d1b22269d7908017a3a4194bd9499cfbcae5e","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    # compute_nodes table schema does."},{"line_number":754,"context_line":"    inv_cols \u003d ["},{"line_number":755,"context_line":"        ram_inv.c.total.label(\u0027inv_memory_mb\u0027),"},{"line_number":756,"context_line":"        ram_inv.c.reserved.label(\u0027inv_memory_mb_reserved\u0027),"},{"line_number":757,"context_line":"        ram_inv.c.allocation_ratio.label(\u0027inv_ram_allocation_ratio\u0027),"},{"line_number":758,"context_line":"        ram_usage.c.used.label(\u0027inv_memory_mb_used\u0027),"},{"line_number":759,"context_line":"        cpu_inv.c.total.label(\u0027inv_vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_bc018ab1","line":756,"updated":"2016-02-29 21:53:01.000000000","message":"just a question, why are you providing the reserved RAM, but not the CPU or Disk ones ?","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":15648,"name":"Yingxin","email":"yingxin.cheng@intel.com","username":"Yingxin"},"change_message_id":"49d59506255e896e48f7d99e60d47c68862337d5","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    # compute_nodes table schema does."},{"line_number":754,"context_line":"    inv_cols \u003d ["},{"line_number":755,"context_line":"        ram_inv.c.total.label(\u0027inv_memory_mb\u0027),"},{"line_number":756,"context_line":"        ram_inv.c.reserved.label(\u0027inv_memory_mb_reserved\u0027),"},{"line_number":757,"context_line":"        ram_inv.c.allocation_ratio.label(\u0027inv_ram_allocation_ratio\u0027),"},{"line_number":758,"context_line":"        ram_usage.c.used.label(\u0027inv_memory_mb_used\u0027),"},{"line_number":759,"context_line":"        cpu_inv.c.total.label(\u0027inv_vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_7b8b7f1f","line":756,"in_reply_to":"9aed3d3a_bc018ab1","updated":"2016-03-01 02:13:08.000000000","message":"AFAIK, the resource reservation is used in resource tracker:\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L45-L48\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L901-L902\n\nSo it is necessary to include the reserved Disk I think.\n\nBut I don\u0027t see any usage case in nova about VCPU reservation.","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"443d1b22269d7908017a3a4194bd9499cfbcae5e","unresolved":false,"context_lines":[{"line_number":767,"context_line":"    cols_in_output.extend(inv_cols)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    select \u003d sa.select(cols_in_output).select_from(disk_join)"},{"line_number":770,"context_line":"    select \u003d select.where(cn_tbl.c.deleted \u003d\u003d 0)"},{"line_number":771,"context_line":"    engine \u003d get_engine(context)"},{"line_number":772,"context_line":"    conn \u003d engine.connect()"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_3c0d7ae8","line":770,"updated":"2016-02-29 21:53:01.000000000","message":"so it took me a while to verify the SQLA statement, but that looks fine.","commit_id":"c61c526664954351656bcfe46ee89f524bee22b5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b4c2a0d751565a857f442349ab2feb566038b006","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    # compute_nodes table schema does."},{"line_number":754,"context_line":"    inv_cols \u003d ["},{"line_number":755,"context_line":"        ram_inv.c.total.label(\u0027inv_memory_mb\u0027),"},{"line_number":756,"context_line":"        ram_inv.c.reserved.label(\u0027inv_memory_mb_reserved\u0027),"},{"line_number":757,"context_line":"        ram_inv.c.allocation_ratio.label(\u0027inv_ram_allocation_ratio\u0027),"},{"line_number":758,"context_line":"        ram_usage.c.used.label(\u0027inv_memory_mb_used\u0027),"},{"line_number":759,"context_line":"        cpu_inv.c.total.label(\u0027inv_vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_d943a9ad","line":756,"updated":"2016-03-01 08:26:14.000000000","message":"so, after verifying, we\u0027re missing the reserved disk amount if we want to be feature-compatible, like I said in PS2 :\nhttps://github.com/openstack/nova/blob/master/nova/compute/resource_tracker.py#L901","commit_id":"e6f4ab5d92615acf1f149aad6cc4db9d253ba864"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cfe6c50874721fc3a77ff948245043244ae17b5b","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    # compute_nodes table schema does."},{"line_number":754,"context_line":"    inv_cols \u003d ["},{"line_number":755,"context_line":"        ram_inv.c.total.label(\u0027inv_memory_mb\u0027),"},{"line_number":756,"context_line":"        ram_inv.c.reserved.label(\u0027inv_memory_mb_reserved\u0027),"},{"line_number":757,"context_line":"        ram_inv.c.allocation_ratio.label(\u0027inv_ram_allocation_ratio\u0027),"},{"line_number":758,"context_line":"        ram_usage.c.used.label(\u0027inv_memory_mb_used\u0027),"},{"line_number":759,"context_line":"        cpu_inv.c.total.label(\u0027inv_vcpus\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_0f18e783","line":756,"in_reply_to":"9aed3d3a_d943a9ad","updated":"2016-03-01 14:55:33.000000000","message":"Done","commit_id":"e6f4ab5d92615acf1f149aad6cc4db9d253ba864"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"6a5007848d0900b0be5af5466b946111c3b86789","unresolved":false,"context_lines":[{"line_number":7383,"context_line":"        self.assertEqual(1, len(nodes))"},{"line_number":7384,"context_line":"        node \u003d nodes[0]"},{"line_number":7385,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb\u0027])"},{"line_number":7386,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb_used\u0027])"},{"line_number":7387,"context_line":""},{"line_number":7388,"context_line":"        RAM_MB \u003d fields.ResourceClass.index(fields.ResourceClass.MEMORY_MB)"},{"line_number":7389,"context_line":"        VCPU \u003d fields.ResourceClass.index(fields.ResourceClass.VCPU)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_0e727e7c","line":7386,"updated":"2016-02-25 14:28:41.000000000","message":"Why do this get returned as None instead of 0? It might be useful to be able to always subtract the used from the total to get the available, and you can\u0027t do that with None.","commit_id":"528add6d35fc76aaca3c05fad7807a97f048383f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"58b06c14b7d9d2f8507ef3b135dd18bbf16cbe56","unresolved":false,"context_lines":[{"line_number":7383,"context_line":"        self.assertEqual(1, len(nodes))"},{"line_number":7384,"context_line":"        node \u003d nodes[0]"},{"line_number":7385,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb\u0027])"},{"line_number":7386,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb_used\u0027])"},{"line_number":7387,"context_line":""},{"line_number":7388,"context_line":"        RAM_MB \u003d fields.ResourceClass.index(fields.ResourceClass.MEMORY_MB)"},{"line_number":7389,"context_line":"        VCPU \u003d fields.ResourceClass.index(fields.ResourceClass.VCPU)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_691ce477","line":7386,"in_reply_to":"bae84128_0e727e7c","updated":"2016-02-25 14:49:39.000000000","message":"Because None means NULL, not zero, and that\u0027s what we want to know. Something could have zero of some resource, and we\u0027d want to distinguish that from \"not yet converted.\"","commit_id":"528add6d35fc76aaca3c05fad7807a97f048383f"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"547bc9cb4e8ca1534766a2708f97f701b6f4e3ff","unresolved":false,"context_lines":[{"line_number":7383,"context_line":"        self.assertEqual(1, len(nodes))"},{"line_number":7384,"context_line":"        node \u003d nodes[0]"},{"line_number":7385,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb\u0027])"},{"line_number":7386,"context_line":"        self.assertIsNone(node[\u0027inv_memory_mb_used\u0027])"},{"line_number":7387,"context_line":""},{"line_number":7388,"context_line":"        RAM_MB \u003d fields.ResourceClass.index(fields.ResourceClass.MEMORY_MB)"},{"line_number":7389,"context_line":"        VCPU \u003d fields.ResourceClass.index(fields.ResourceClass.VCPU)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_9a5b642e","line":7386,"in_reply_to":"bae84128_691ce477","updated":"2016-02-25 15:18:32.000000000","message":"OK, that makes sense from a conversion POV. Thanks.","commit_id":"528add6d35fc76aaca3c05fad7807a97f048383f"}]}
