)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"c9568f79daeedc027554d2d92c01e3caf46852fa","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ie04d6362a4e99dcb2504698fc831a366ba746b44"},{"line_number":19,"context_line":"Closes-Bug: #1543149"},{"line_number":20,"context_line":"DocImpact: reserved_memory_pages"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1af94dfe_19911153","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":9},"updated":"2016-03-16 16:21:12.000000000","message":"I missed this in the last review. I don\u0027t think that \"DocImpact\" is needed. The new config option is introduced in the reno file of this change and the \"configuration reference\" manual will use the help text of the config option automatically. Is there another manual which should be updated because of this change? As a reminder, when the change merges in this form, a new bug will created because of the \"DocImpact\" flag [1]. This causes extra effort which could be avoided.\n\n[1] http://lists.openstack.org/pipermail/openstack-dev/2016-March/088382.html","commit_id":"30450d695e8bf103862c835d4c3299015ab723c1"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fd18dd7994ea0f09fd2db6349d1ad77663b4e59f","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ie04d6362a4e99dcb2504698fc831a366ba746b44"},{"line_number":19,"context_line":"Closes-Bug: #1543149"},{"line_number":20,"context_line":"DocImpact: reserved_memory_pages"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1af94dfe_f46eecc7","line":20,"in_reply_to":"1af94dfe_19911153","updated":"2016-03-16 16:27:42.000000000","message":"Done","commit_id":"30450d695e8bf103862c835d4c3299015ab723c1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"virt: reserved hugepages on compute host"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use cases need to reserved an amount of pages for"},{"line_number":10,"context_line":"third part components."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1af94dfe_00234806","line":9,"updated":"2016-03-16 20:00:25.000000000","message":"s/Use cases need to reserved an amount/Users need to mark as reserved some amount of/","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":7,"context_line":"virt: reserved hugepages on compute host"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Use cases need to reserved an amount of pages for"},{"line_number":10,"context_line":"third part components."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"},{"line_number":13,"context_line":"of string format to select on which host NUMA node and from which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1af94dfe_60220c02","line":10,"updated":"2016-03-16 20:00:25.000000000","message":"s/third part/third party/\n\nIt would be good to indicate in the commit message what an example third-party component might be that needs to reserve huge pages on particular NUMA nodes.","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The most common use case for using huge pages is NFV. In the current"},{"line_number":13,"context_line":"state of that feature we can\u0027t guarantee the necessary amount of pages"},{"line_number":14,"context_line":"to make running OVS-DPDK on the compute node which result a real"},{"line_number":15,"context_line":"leak. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does not take"},{"line_number":16,"context_line":"that page reserved for OVS-DPDK it results a leak when Nova is"},{"line_number":17,"context_line":"computing resources and so a boot fail."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_553da2db","line":15,"updated":"2016-03-18 16:19:02.000000000","message":"s/not take that/not take into account that/","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":13,"context_line":"state of that feature we can\u0027t guarantee the necessary amount of pages"},{"line_number":14,"context_line":"to make running OVS-DPDK on the compute node which result a real"},{"line_number":15,"context_line":"leak. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does not take"},{"line_number":16,"context_line":"that page reserved for OVS-DPDK it results a leak when Nova is"},{"line_number":17,"context_line":"computing resources and so a boot fail."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_b528669b","line":16,"updated":"2016-03-18 16:19:02.000000000","message":"s/a leak/in a leak/","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"to make running OVS-DPDK on the compute node which result a real"},{"line_number":15,"context_line":"leak. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does not take"},{"line_number":16,"context_line":"that page reserved for OVS-DPDK it results a leak when Nova is"},{"line_number":17,"context_line":"computing resources and so a boot fail."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"},{"line_number":20,"context_line":"of string format to select on which host NUMA nodes and from which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_9523aabc","line":17,"updated":"2016-03-18 16:19:02.000000000","message":"What exactly fails on nova boot? The bug doesn\u0027t show any failure condition at all, so it\u0027s very difficult to tell how to picture a functional test for the bug looking. Can you be specific about the nature of the boot failure? Saying \"a leak\" sounds really bad, but I don\u0027t know what exactly you are referring to. An OOM? A segfault? A nova.exc error? Something else?","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a82c43fb71fd02dd5a40dc642e145018003085aa","unresolved":false,"context_lines":[{"line_number":14,"context_line":"to make running OVS-DPDK on the compute node which result a real"},{"line_number":15,"context_line":"leak. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does not take"},{"line_number":16,"context_line":"that page reserved for OVS-DPDK it results a leak when Nova is"},{"line_number":17,"context_line":"computing resources and so a boot fail."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"},{"line_number":20,"context_line":"of string format to select on which host NUMA nodes and from which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa0719c6_fe30c0a0","line":17,"in_reply_to":"1af94dfe_9523aabc","updated":"2016-03-21 12:41:24.000000000","message":"I updated the commit message to make it less bad. When using huge pages, pages are thoroughly acquire by the process, in the case of that issue the process can\u0027t so the boot fail.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"},{"line_number":20,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":21,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":22,"context_line":"NUMAPageTopology to refer it and helps computing avail pages"},{"line_number":23,"context_line":"size on host for scheduling/claiming resources."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_f52e6ea3","line":21,"updated":"2016-03-18 16:19:02.000000000","message":"s/also update/also updates/","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"This commit adds new option \u0027reserved_memory_pages\u0027 which takes a list"},{"line_number":20,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":21,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":22,"context_line":"NUMAPageTopology to refer it and helps computing avail pages"},{"line_number":23,"context_line":"size on host for scheduling/claiming resources."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: Ie04d6362a4e99dcb2504698fc831a366ba746b44"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1af94dfe_d529b29c","line":22,"updated":"2016-03-18 16:19:02.000000000","message":"s/to refer it/to contain a reserved memory pages attribute/","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The most common use case for using huge/large pages is NFV. In the"},{"line_number":13,"context_line":"current state of that feature we can\u0027t guarantee the necessary amount"},{"line_number":14,"context_line":"of pages to make running OVS-DPDK on the compute node which result a"},{"line_number":15,"context_line":"the instance is failing to boot on a well selected"},{"line_number":16,"context_line":"compute-node. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does"},{"line_number":17,"context_line":"not take into account that page reserved for OVS-DPDK it results the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_7e0a4127","line":14,"updated":"2016-05-11 16:22:09.000000000","message":"s/pages to make running OVS-DPDK/pages to allow OVS-DPDK to run properly/\ns/compute node which results a/compute node, which results in/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The most common use case for using huge/large pages is NFV. In the"},{"line_number":13,"context_line":"current state of that feature we can\u0027t guarantee the necessary amount"},{"line_number":14,"context_line":"of pages to make running OVS-DPDK on the compute node which result a"},{"line_number":15,"context_line":"the instance is failing to boot on a well selected"},{"line_number":16,"context_line":"compute-node. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does"},{"line_number":17,"context_line":"not take into account that page reserved for OVS-DPDK it results the"},{"line_number":18,"context_line":"process can acquire that necessary memory which result a boot fail."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_de052d14","line":15,"updated":"2016-05-11 16:22:09.000000000","message":"s/is failing to boot/failing to boot/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":14,"context_line":"of pages to make running OVS-DPDK on the compute node which result a"},{"line_number":15,"context_line":"the instance is failing to boot on a well selected"},{"line_number":16,"context_line":"compute-node. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does"},{"line_number":17,"context_line":"not take into account that page reserved for OVS-DPDK it results the"},{"line_number":18,"context_line":"process can acquire that necessary memory which result a boot fail."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This commit adds new option \u0027reserved_huge_pages\u0027 which takes a list"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_be002903","line":17,"updated":"2016-05-11 16:22:09.000000000","message":"s/results the process/results in the process/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":15,"context_line":"the instance is failing to boot on a well selected"},{"line_number":16,"context_line":"compute-node. OVS-DPDK needs 1 GB hugepages reserved. Since Nova does"},{"line_number":17,"context_line":"not take into account that page reserved for OVS-DPDK it results the"},{"line_number":18,"context_line":"process can acquire that necessary memory which result a boot fail."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This commit adds new option \u0027reserved_huge_pages\u0027 which takes a list"},{"line_number":21,"context_line":"of string format to select on which host NUMA nodes and from which"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_2902410a","line":18,"updated":"2016-05-11 16:22:09.000000000","message":"s/can acquire that/not being able to acquire the/\ns/which result a boot fail/which results in a failed boot/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":17,"context_line":"not take into account that page reserved for OVS-DPDK it results the"},{"line_number":18,"context_line":"process can acquire that necessary memory which result a boot fail."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This commit adds new option \u0027reserved_huge_pages\u0027 which takes a list"},{"line_number":21,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":22,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":23,"context_line":"NUMAPageTopology to contain a reserved memory pages attribute it and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_0905bd0f","line":20,"updated":"2016-05-11 16:22:09.000000000","message":"s/adds new option/adds a new option/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"This commit adds new option \u0027reserved_huge_pages\u0027 which takes a list"},{"line_number":21,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":22,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":23,"context_line":"NUMAPageTopology to contain a reserved memory pages attribute it and"},{"line_number":24,"context_line":"helps computing avail pages size on host for scheduling/claiming"},{"line_number":25,"context_line":"resources."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_6908c928","line":22,"updated":"2016-05-11 16:22:09.000000000","message":"s/also update/also updates/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":20,"context_line":"This commit adds new option \u0027reserved_huge_pages\u0027 which takes a list"},{"line_number":21,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":22,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":23,"context_line":"NUMAPageTopology to contain a reserved memory pages attribute it and"},{"line_number":24,"context_line":"helps computing avail pages size on host for scheduling/claiming"},{"line_number":25,"context_line":"resources."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_490b4524","line":23,"updated":"2016-05-11 16:22:09.000000000","message":"s/attribute it/attribute/\ns/and helps/, which helps","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":21,"context_line":"of string format to select on which host NUMA nodes and from which"},{"line_number":22,"context_line":"pagesize we want to reserve a certain amount of pages. It also update"},{"line_number":23,"context_line":"NUMAPageTopology to contain a reserved memory pages attribute it and"},{"line_number":24,"context_line":"helps computing avail pages size on host for scheduling/claiming"},{"line_number":25,"context_line":"resources."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Change-Id: Ie04d6362a4e99dcb2504698fc831a366ba746b44"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"dab17558_a9163149","line":24,"updated":"2016-05-11 16:22:09.000000000","message":"s/computing/compute the/\ns/avail/available/","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"}],"nova/conf/virt.py":[{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"8b93ae05178eb63a06143c54c04edc98c13a0784","unresolved":false,"context_lines":[{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* None\"\"\")"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"ALL_OPTS \u003d [vcpu_pin_set,"},{"line_number":325,"context_line":"            compute_driver,"},{"line_number":326,"context_line":"            default_ephemeral_format,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_6112ec0a","line":323,"updated":"2016-03-15 09:06:31.000000000","message":"+1 for using the new template","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Related options:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* None\"\"\")"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"ALL_OPTS \u003d [vcpu_pin_set,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_a07a54ef","line":321,"updated":"2016-03-16 20:00:25.000000000","message":"Not sure there\u0027s much value in this last \"Related options\" section of the help text.","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"bef448d798b6106aff1bb9ba8282b8adb178ccdb","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"Related options:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* None\"\"\")"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"ALL_OPTS \u003d [vcpu_pin_set,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_4b38baa0","line":321,"in_reply_to":"1af94dfe_a07a54ef","updated":"2016-03-17 09:50:23.000000000","message":"@Jay: We used it in the other options in \"nova/conf/\" to make it explicit that this option is not directly influenced by others or it doesn\u0027t influence others. It\u0027s also used as a \"checklist-item\" to figure out if there are dependencies the ops should be aware of.","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    \u0027device start up.\u0027)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_94b5637f","line":303,"updated":"2016-03-18 19:29:24.000000000","message":"Shouldn\u0027t this have the word \"huge\" in it? I think it\u0027s probably confusing to people otherwise.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a82c43fb71fd02dd5a40dc642e145018003085aa","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    \u0027device start up.\u0027)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_c31d23bf","line":303,"in_reply_to":"1af94dfe_94b5637f","updated":"2016-03-21 12:41:24.000000000","message":"Huge pages is term used by Linux community whereas large pages is used Windows community. Not sure which one we should to prefer. If that option name is a real big deal I will change it but so far I prefer to only update the help message to be neutral.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"050488465d0ae36f0d71f42be3e1efe8e2520eae","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    \u0027device start up.\u0027)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_458d9030","line":303,"in_reply_to":"fa0719c6_c31d23bf","updated":"2016-03-21 14:50:46.000000000","message":"Either huge or large would be fine with me. I think that \"reserved memory pages\" means people are going to assume 4K pages and be confused.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Possible values:"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_949e0305","line":305,"range":{"start_line":305,"start_character":21,"end_line":305,"end_character":27},"updated":"2016-03-18 19:29:24.000000000","message":"This should probably be \"number\"","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"050488465d0ae36f0d71f42be3e1efe8e2520eae","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_25ae9c85","line":311,"updated":"2016-03-21 14:50:46.000000000","message":"So we\u0027re asking them to reserve a number of pages in KB? Shouldn\u0027t this be \"number of pages\" ?","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6e494e0fb33e2a9ae14db67a4581bddcbd7321e5","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_a279f731","line":311,"in_reply_to":"fa0719c6_25ae9c85","updated":"2016-03-21 17:25:17.000000000","message":"Actually no, a system can have different pages size. We are trying to reserve a number of pages for a particular size on a NUMA node, this size should be given in KiB by default.\n\nFor more information about how work hugepages you can start by reading [1] it\u0027s good introduction.\n\n[1] https://en.wikipedia.org/wiki/Page_%28computer_memory%29#Huge_pages","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9b41c9f21d3542bdb2588b06c43ac1e44bb767e2","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_cab521ce","line":311,"in_reply_to":"fa0719c6_a279f731","updated":"2016-03-21 18:28:29.000000000","message":"Yeah, I\u0027m well aware of the fact that they can have multiple sizes. What I\u0027m confused about is why you say that the default unit is KiB, when it seems to me that it should be \"number of pages\"","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9b41c9f21d3542bdb2588b06c43ac1e44bb767e2","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Services which consume this:"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_aa042d7e","line":313,"updated":"2016-03-21 18:28:29.000000000","message":"This is clearly not 64KiB of 2MB pages, nor 1KiB of 1GB pages. The first thing is a node number and \"2MB\" is a string. What in here is specified in KiB?","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ec519c402010c8ff49f020d7d2d8988504917d66","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Services which consume this:"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_ded163cf","line":313,"in_reply_to":"fa0719c6_aa042d7e","updated":"2016-03-21 20:24:53.000000000","message":"Hum... so my phrasing was probably not clear, on the help message I tried to say: first is NUMA node ID, then page size (default in KiB), then number of pages reserved. The only number which can be associated with a byte unit is the page size I thought that was obvious.\n\nAs example, this can work as well:\n  reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]\n\nYou can find several examples here [1] Jay Pipes requested for them.\n\n[1] https://review.openstack.org/#/c/292499/7/nova/tests/unit/virt/test_hardware.py\n\nIf you have better phrasing I\u0027d be happy to update the help message by your proposition.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"13bf3131e2ed1737304e4d40cd1f53102303b351","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Services which consume this:"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_de44c375","line":313,"in_reply_to":"fa0719c6_ded163cf","updated":"2016-03-21 20:27:43.000000000","message":"So 2048KiB is 2MB, but 1GB is not. If you are asking them to specify the page size in KiB, then that\u0027s fine, but your examples need to match and the help text needs to explain. I _definitely_ did not think that is what you were suggesting.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc8c6ab7d4eb18c6c6abfe95a6244298c9b2a99","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    help\u003d\u0027Amount of time, in seconds, to wait for NBD \u0027"},{"line_number":300,"context_line":"    \u0027device start up.\u0027)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves number of huge/large memory pages per NUMA host cells"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_fe2267b8","line":302,"updated":"2016-03-21 20:31:56.000000000","message":"Still think this should be something like \"reserved_huge_pages\" or \"reserved_large_pages\" or \"reserved_special_pagesizes\".","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc8c6ab7d4eb18c6c6abfe95a6244298c9b2a99","unresolved":false,"context_lines":[{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves number of huge/large memory pages per NUMA host cells"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Possible values:"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_b925a9ac","line":305,"range":{"start_line":305,"start_character":21,"end_line":305,"end_character":27},"updated":"2016-03-21 20:31:56.000000000","message":"s/number/a number/","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc8c6ab7d4eb18c6c6abfe95a6244298c9b2a99","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"Possible values:"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_5e07131c","line":309,"range":{"start_line":309,"start_character":54,"end_line":309,"end_character":63},"updated":"2016-03-21 20:31:56.000000000","message":"An easy fix would be to just put (in KiB) here after page size. Something like this:\n\n A list of valid strings which describe the NUMA node ID, page size (in KiB),\n and number of pages to be reserved separated by a colon.","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc8c6ab7d4eb18c6c6abfe95a6244298c9b2a99","unresolved":false,"context_lines":[{"line_number":307,"context_line":"Possible values:"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_f910c150","line":310,"range":{"start_line":310,"start_character":40,"end_line":310,"end_character":56},"updated":"2016-03-21 20:31:56.000000000","message":"\"punctuation mark\" here is strange and should be removed, IMHO.","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"dbdc6622a46eabaa11ec85a9746ebd03c65e5570","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_071b951c","line":311,"updated":"2016-03-21 17:03:35.000000000","message":"Please see my comments on a previous version about this help text and the naming of this conf variable.","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"bcc8c6ab7d4eb18c6c6abfe95a6244298c9b2a99","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":311,"context_line":"  colon. Default unit is KiB."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2MB:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"Services which consume this:"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa0719c6_39499960","line":313,"updated":"2016-03-21 20:31:56.000000000","message":"This should  be changed to actually use 2048 and 1073741824.\n\nAlternately, have you considered just allowing some standard suffixes here? K, M,  and G would be easy to support and *much* easier for operators.","commit_id":"bfa608ddd8f643fe8c1789f79e3bfbd5e53b0fd5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6c3b5a16e213302785f42392e7889713a15f4f28","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    help\u003d\u0027Amount of time, in seconds, to wait for NBD \u0027"},{"line_number":300,"context_line":"    \u0027device start up.\u0027)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":303,"context_line":"    \"reserved_memory_pages\","},{"line_number":304,"context_line":"    default\u003d[],"},{"line_number":305,"context_line":"    help\u003d\"\"\"Reserves a number of huge/large memory pages per NUMA host cells"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_89d58c1d","line":302,"updated":"2016-03-23 14:45:04.000000000","message":"I still think this needs to include either \"huge\", \"large\", or \"special\" in the name of the config opt.","commit_id":"e2c87e55c060d27ddf00c52c95ed01a411428d91"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6c3b5a16e213302785f42392e7889713a15f4f28","unresolved":false,"context_lines":[{"line_number":308,"context_line":""},{"line_number":309,"context_line":"* A list of valid strings which reflect NUMA node ID, page size"},{"line_number":310,"context_line":"  (Default unit is KiB) and number of pages to be reserved separated"},{"line_number":311,"context_line":"  by a colon."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_e9cd2886","line":311,"updated":"2016-03-23 14:45:04.000000000","message":"This is less confusing now, thanks.","commit_id":"e2c87e55c060d27ddf00c52c95ed01a411428d91"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e6a2893d28714f97884b2439b51df35765212755","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  (Default unit is KiB) and number of pages to be reserved separated"},{"line_number":311,"context_line":"  by a colon."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_huge_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"  In this example we are reserving on NUMA node 0; 64 pages of 2MiB"},{"line_number":316,"context_line":"  and on NUMA node 1; 1 page of 1GiB."}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_37e7a4b1","line":313,"updated":"2016-03-30 13:07:08.000000000","message":"Is this syntax correct? I only have 2MB pages available on my test system so I could only try with reserved_huge_pages \u003d [\"0:2048:64\"] and that fails with:\n\n2016-03-30 12:18:01.521 CRITICAL nova [-] InvalidReservedMemoryPagesOption: The format of the option \u0027reserved_huge_pages\u0027 is invalid. (found \u0027[\u0027[\"0:2048:64\"]\u0027]\u0027) Please refer to the nova config-reference.\n\n2016-03-30 12:18:01.521 TRACE nova Traceback (most recent call last):\n2016-03-30 12:18:01.521 TRACE nova   File \"/usr/local/bin/nova-compute\", line 10, in \u003cmodule\u003e\n2016-03-30 12:18:01.521 TRACE nova     sys.exit(main())\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/cmd/compute.py\", line 74, in main\n2016-03-30 12:18:01.521 TRACE nova     db_allowed\u003dCONF.conductor.use_local)\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/service.py\", line 296, in create\n2016-03-30 12:18:01.521 TRACE nova     db_allowed\u003ddb_allowed)\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/service.py\", line 182, in __init__\n2016-03-30 12:18:01.521 TRACE nova     self.manager \u003d manager_class(host\u003dself.host, *args, **kwargs)\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/compute/manager.py\", line 725, in __init__\n2016-03-30 12:18:01.521 TRACE nova     self.driver \u003d driver.load_compute_driver(self.virtapi, compute_driver)\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/virt/driver.py\", line 1622, in load_compute_driver\n2016-03-30 12:18:01.521 TRACE nova     virtapi)\n2016-03-30 12:18:01.521 TRACE nova   File \"/usr/local/lib/python2.7/dist-packages/oslo_utils/importutils.py\", line 65, in import_object_ns\n2016-03-30 12:18:01.521 TRACE nova     return cls(*args, **kwargs)\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/virt/libvirt/driver.py\", line 580, in __init__\n2016-03-30 12:18:01.521 TRACE nova     self._reserved_hugepages \u003d hardware.numa_get_reserved_huge_pages()\n2016-03-30 12:18:01.521 TRACE nova   File \"/opt/stack/nova/nova/virt/hardware.py\", line 1279, in numa_get_reserved_huge_pages\n2016-03-30 12:18:01.521 TRACE nova     conf\u003dCONF.reserved_huge_pages)\n2016-03-30 12:18:01.521 TRACE nova InvalidReservedMemoryPagesOption: The format of the option \u0027reserved_huge_pages\u0027 is invalid. (found \u0027[\u0027[\"0:2048:64\"]\u0027]\u0027) Please refer to the nova config-reference.\n\nIt seems reserved_huge_pages \u003d \"0:2048:64\" works and the DB content is valid.","commit_id":"6a407239acc00a003e1725cd3d9edb622e932974"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0515015807112f11ea2dac58caabe6680255e28a","unresolved":false,"context_lines":[{"line_number":310,"context_line":"  (Default unit is KiB) and number of pages to be reserved separated"},{"line_number":311,"context_line":"  by a colon."},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    reserved_huge_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"  In this example we are reserving on NUMA node 0; 64 pages of 2MiB"},{"line_number":316,"context_line":"  and on NUMA node 1; 1 page of 1GiB."}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_9ff4905b","line":313,"in_reply_to":"ba0121b8_37e7a4b1","updated":"2016-03-31 11:26:34.000000000","message":"Yes it is. I made mistake on the example you should to use:\n\n  reserved_huge_pages \u003d 0:2048:64 (with or without double-quotes)\n\nor:\n\n  reserved_huge_pages \u003d \"0:2048:64\" \n  reserved_huge_pages \u003d \"1:2048:64\"","commit_id":"6a407239acc00a003e1725cd3d9edb622e932974"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"fc859707c62b86c292a9f6ba4150fe31f34a6d7b","unresolved":false,"context_lines":[{"line_number":359,"context_line":"  (Default unit is KiB) and number of pages to be reserved."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    reserved_huge_pages \u003d 0:2048:64 (with or without quotes)"},{"line_number":362,"context_line":"    reserved_huge_pages \u003d 1:1GB:1"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"  In this example we are reserving on NUMA node 0 64 pages of 2MiB"},{"line_number":365,"context_line":"  and on NUMA node 1 1 page of 1GiB."}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_b5153a4a","line":362,"range":{"start_line":362,"start_character":32,"end_line":362,"end_character":33},"updated":"2016-05-10 10:38:20.000000000","message":"So I just learnt about the oslo.config  DictOpt option type. I\u0027m wondering if we are able to combine that with the MultiOpt type.\n\neg\n\n  from oslo_config import types\n  cfg.MultiOpt(\"reserved_huge_pages\",\n               item_type\u003dtypes.Dict,\n               default\u003d[])\n\nI\u0027ve not tested this, but IIUC, this should let users specify the options as follows:\n\n    reserved_huge_pages \u003d node\u003d0,size\u003d2048,count\u003d64\n    reserved_huge_pages \u003d node\u003d1,size\u003d1GB,count\u003d1\n\nWhich is slightly nicer as its more obvious what each value is for, without us having to resort to encoding JSON in the config option","commit_id":"1012069caa35bef4c85e1e4117594417e4c57655"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    reserved_huge_pages \u003d node\u003d1,size\u003d1GB,count\u003d1"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"  In this example we are reserving on NUMA node 0 64 pages of 2MiB"},{"line_number":366,"context_line":"  and on NUMA node 1 1 page of 1GiB."},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"Services which consume this:"},{"line_number":369,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"dab17558_e91cb96b","line":366,"updated":"2016-05-11 16:22:09.000000000","message":"++ MUCH better user experience than the previous configuration option format :)","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"}],"nova/exception.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"43d992ab5979cd376270a98e84a72220e2a17863","unresolved":false,"context_lines":[{"line_number":2122,"context_line":"    msg_fmt \u003d _(\"BuildRequest not found for instance %(uuid)s\")"},{"line_number":2123,"context_line":""},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"class InvalidReservedMemoryPagesOption(Invalid):"},{"line_number":2126,"context_line":"    msg_fmt \u003d _(\"The format of the option \u0027reserved_huge_pages\u0027 is invalid. \""},{"line_number":2127,"context_line":"                \"(found \u0027%(conf)s\u0027) Please refer to the nova \""},{"line_number":2128,"context_line":"                \"config-reference.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_efa1a547","line":2125,"updated":"2016-03-23 15:49:05.000000000","message":"I forgot to change name of that exception :/","commit_id":"bc337797c6c034f9f13fae12e0425db5dd3363e0"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d5e076c1bf47def5e2666f802785ee5e210439ed","unresolved":false,"context_lines":[{"line_number":2122,"context_line":"    msg_fmt \u003d _(\"BuildRequest not found for instance %(uuid)s\")"},{"line_number":2123,"context_line":""},{"line_number":2124,"context_line":""},{"line_number":2125,"context_line":"class InvalidReservedMemoryPagesOption(Invalid):"},{"line_number":2126,"context_line":"    msg_fmt \u003d _(\"The format of the option \u0027reserved_huge_pages\u0027 is invalid. \""},{"line_number":2127,"context_line":"                \"(found \u0027%(conf)s\u0027) Please refer to the nova \""},{"line_number":2128,"context_line":"                \"config-reference.\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_754446b6","line":2125,"in_reply_to":"fa0719c6_efa1a547","updated":"2016-03-23 16:08:23.000000000","message":"Actually other exceptions related to memory pages are called: MemoryPagesUnsupported, MemoryPageSizeInvalid, MemoryPageSizeForbidden... So I guess we can stay coherent *at least* here...","commit_id":"bc337797c6c034f9f13fae12e0425db5dd3363e0"}],"nova/objects/numa.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"93eac2174af963aeaf90f93dc232a9eeabc4d710","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        }"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def __eq__(self, other):"},{"line_number":162,"context_line":"        return all_things_equal(self, other)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def __ne__(self, other):"},{"line_number":165,"context_line":"        return not (self \u003d\u003d other)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_3fc65c48","line":162,"range":{"start_line":162,"start_character":15,"end_line":162,"end_character":31},"updated":"2016-03-14 17:16:32.000000000","message":"Do we care if reserved pages are equal here? I assume we do as this is used to check if we need to refresh the data in the compute nodes table, but worth a double check.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d108c6f05c049e9e256228a75196e391a4f13134","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        }"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def __eq__(self, other):"},{"line_number":162,"context_line":"        return all_things_equal(self, other)"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def __ne__(self, other):"},{"line_number":165,"context_line":"        return not (self \u003d\u003d other)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_c4b554d1","line":162,"in_reply_to":"3afc51ec_3fc65c48","updated":"2016-03-15 12:24:32.000000000","message":"Good to point this which i did not take into account. But I do not think it\u0027s big deal here. reserved can change only if compute service is restarted.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14e8955785ab888cbda0f06be1a1ffc20283369e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":149,"context_line":"class NUMAPagesTopology(base.NovaObject):"},{"line_number":150,"context_line":"    # Version 1.0: Initial version"},{"line_number":151,"context_line":"    # Version 1.1: Adds reserved\u0027s field"},{"line_number":152,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    fields \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_b5d74bec","line":151,"range":{"start_line":151,"start_character":32,"end_line":151,"end_character":34},"updated":"2016-03-16 14:24:07.000000000","message":"This should not have \"\u0027s\" after it","commit_id":"5ce810e6fc761d1b95d8ca1ce4edbc77e840270f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14e8955785ab888cbda0f06be1a1ffc20283369e","unresolved":false,"context_lines":[{"line_number":149,"context_line":"class NUMAPagesTopology(base.NovaObject):"},{"line_number":150,"context_line":"    # Version 1.0: Initial version"},{"line_number":151,"context_line":"    # Version 1.1: Adds reserved\u0027s field"},{"line_number":152,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    fields \u003d {"},{"line_number":155,"context_line":"        \u0027size_kb\u0027: fields.IntegerField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_15139fb9","line":152,"updated":"2016-03-16 14:24:07.000000000","message":"There is no backport routine for 1.0","commit_id":"5ce810e6fc761d1b95d8ca1ce4edbc77e840270f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14e8955785ab888cbda0f06be1a1ffc20283369e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        super(NUMAPagesTopology, self).__init__(**kwargs)"},{"line_number":169,"context_line":"        if \u0027reserved\u0027 not in kwargs:"},{"line_number":170,"context_line":"            self.reserved \u003d 0"},{"line_number":171,"context_line":"            self.obj_reset_changes([\u0027reserved\u0027])"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @property"},{"line_number":174,"context_line":"    def free(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_b5c0eb2b","line":171,"updated":"2016-03-16 14:24:07.000000000","message":"As I\u0027ve said before, please do not override the __init__ method to provide field defaults. The examples of this in other objects near this are why we couldn\u0027t get a uniform unit test for testing backporting.\n\nUse obj_set_defaults() if you want to enforce some defaults on a new object.","commit_id":"5ce810e6fc761d1b95d8ca1ce4edbc77e840270f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u0027size_kb\u0027: fields.IntegerField(),"},{"line_number":157,"context_line":"        \u0027total\u0027: fields.IntegerField(),"},{"line_number":158,"context_line":"        \u0027used\u0027: fields.IntegerField(default\u003d0),"},{"line_number":159,"context_line":"        \u0027reserved\u0027: fields.IntegerField(default\u003d0)"},{"line_number":160,"context_line":"        }"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def obj_make_compatible(self, primitive, target_version):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_544d9b98","line":159,"range":{"start_line":159,"start_character":49,"end_line":159,"end_character":50},"updated":"2016-03-18 19:29:24.000000000","message":"Trailing comma here please.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @property"},{"line_number":176,"context_line":"    def free(self):"},{"line_number":177,"context_line":"        \"\"\"Returns the number of avail pages.\"\"\""},{"line_number":178,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @property"},{"line_number":181,"context_line":"    def free_kb(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_37057110","line":178,"updated":"2016-03-18 19:29:24.000000000","message":"If this is sent from an older compute node to a newer node, reserved will be unset and this will fail. If this could never happen, then okay, but if it could due to a migration or even some sort of scheduler accounting routine or something, you need to handle this here.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a82c43fb71fd02dd5a40dc642e145018003085aa","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @property"},{"line_number":176,"context_line":"    def free(self):"},{"line_number":177,"context_line":"        \"\"\"Returns the number of avail pages.\"\"\""},{"line_number":178,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    @property"},{"line_number":181,"context_line":"    def free_kb(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa0719c6_08e29ad5","line":178,"in_reply_to":"1af94dfe_37057110","updated":"2016-03-21 12:41:24.000000000","message":"It\u0027s good point, if an old compute node is sharing resource to an updated scheduler that property will not been defined which will result an error when computing necessary resources for an instance.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9276b458a2ee5cec24d53c78b8c459a2ec52f18e","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        if not self.obj_attr_is_set(\u0027reserved\u0027):"},{"line_number":179,"context_line":"            # In case where an old compute node is sharing resource to"},{"line_number":180,"context_line":"            # an updated node we must ensure that this property is defined."},{"line_number":181,"context_line":"            setattr(self, \u0027reserved\u0027, 0)"},{"line_number":182,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":10,"id":"da0c15f0_7fdb271c","line":181,"updated":"2016-03-24 17:48:54.000000000","message":"You can just do:\n\n self.reserved \u003d 0\n\nhere, FWIW.","commit_id":"d3dc5fb7b22eb150e7a431d71bc0ec2769e63d25"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"78986ee85ea34bdbfb24d55648bd63b6b4385e07","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @property"},{"line_number":176,"context_line":"    def free(self):"},{"line_number":177,"context_line":"        \"\"\"Returns the number of avail pages.\"\"\""},{"line_number":178,"context_line":"        if not self.obj_attr_is_set(\u0027reserved\u0027):"},{"line_number":179,"context_line":"            # In case where an old compute node is sharing resource to"},{"line_number":180,"context_line":"            # an updated node we must ensure that this property is defined."},{"line_number":181,"context_line":"            self.reserved \u003d 0"},{"line_number":182,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_91ab421d","line":181,"range":{"start_line":178,"start_character":7,"end_line":181,"end_character":29},"updated":"2016-04-05 14:05:28.000000000","message":"Is this needed if the field is set to 0 by default?","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a187fe21b832ce804b444be2046d8d8bd5efc8a2","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @property"},{"line_number":176,"context_line":"    def free(self):"},{"line_number":177,"context_line":"        \"\"\"Returns the number of avail pages.\"\"\""},{"line_number":178,"context_line":"        if not self.obj_attr_is_set(\u0027reserved\u0027):"},{"line_number":179,"context_line":"            # In case where an old compute node is sharing resource to"},{"line_number":180,"context_line":"            # an updated node we must ensure that this property is defined."},{"line_number":181,"context_line":"            self.reserved \u003d 0"},{"line_number":182,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_9a307703","line":181,"range":{"start_line":178,"start_character":7,"end_line":181,"end_character":29},"in_reply_to":"9a061dce_91ab421d","updated":"2016-04-05 14:28:09.000000000","message":"Yes, because the above check is to see if it\u0027s loaded or not. If it\u0027s not loaded then we\u0027ll trigger a lazy-load when we touch it, which will fail.\n\nThe default\u003d0 really only comes into effect when you use obj_set_defaults()","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":175,"context_line":"    @property"},{"line_number":176,"context_line":"    def free(self):"},{"line_number":177,"context_line":"        \"\"\"Returns the number of avail pages.\"\"\""},{"line_number":178,"context_line":"        if not self.obj_attr_is_set(\u0027reserved\u0027):"},{"line_number":179,"context_line":"            # In case where an old compute node is sharing resource to"},{"line_number":180,"context_line":"            # an updated node we must ensure that this property is defined."},{"line_number":181,"context_line":"            self.reserved \u003d 0"},{"line_number":182,"context_line":"        return self.total - self.used - self.reserved"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_b69f334f","line":181,"range":{"start_line":178,"start_character":7,"end_line":181,"end_character":29},"in_reply_to":"9a061dce_9a307703","updated":"2016-04-06 07:15:54.000000000","message":"I see. Thanks.","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"}],"nova/tests/unit/objects/test_numa.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                objects.NUMAPagesTopology("},{"line_number":143,"context_line":"                    size_kb\u003d4, total\u003d1548736, used\u003d0, reserved\u003d0),"},{"line_number":144,"context_line":"                objects.NUMAPagesTopology("},{"line_number":145,"context_line":"                    size_kb\u003d2048, total\u003d513, used\u003d0, reserved\u003d0)])  # 1,002G"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        pagesize \u003d 2048"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_807d98e9","line":145,"updated":"2016-03-16 20:00:25.000000000","message":"How about adding a unit test that has a reserved value \u003e 0?","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        pagesize \u003d 1048576"},{"line_number":155,"context_line":"        self.assertTrue(cell.can_fit_hugepages(pagesize, 2 ** 20))"},{"line_number":156,"context_line":"        self.assertTrue(cell.can_fit_hugepages(pagesize, 2 ** 20 * 2))"},{"line_number":157,"context_line":"        self.assertFalse(cell.can_fit_hugepages(pagesize, 2 ** 20 * 3))"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        self.assertRaises("},{"line_number":160,"context_line":"            exception.MemoryPageSizeNotSupported,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_351bb682","line":157,"updated":"2016-03-18 16:19:02.000000000","message":"Cool, thanks for adding this test here.","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"78986ee85ea34bdbfb24d55648bd63b6b4385e07","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_pages_topology_wipe(self):"},{"line_number":128,"context_line":"        pages_topology \u003d objects.NUMAPagesTopology("},{"line_number":129,"context_line":"            size_kb\u003d2048, total\u003d1024, used\u003d512, reserved\u003d0)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        self.assertEqual(2048, pages_topology.size_kb)"},{"line_number":132,"context_line":"        self.assertEqual(1024, pages_topology.total)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_34f504cb","line":129,"range":{"start_line":129,"start_character":47,"end_line":129,"end_character":58},"updated":"2016-04-05 14:05:28.000000000","message":"Is it needed if the default value is 0?","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"99520e649132f887cf7e8a79d22e58107a761fc2","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_pages_topology_wipe(self):"},{"line_number":128,"context_line":"        pages_topology \u003d objects.NUMAPagesTopology("},{"line_number":129,"context_line":"            size_kb\u003d2048, total\u003d1024, used\u003d512, reserved\u003d0)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        self.assertEqual(2048, pages_topology.size_kb)"},{"line_number":132,"context_line":"        self.assertEqual(1024, pages_topology.total)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_a491d99b","line":129,"in_reply_to":"9a061dce_34f504cb","updated":"2016-04-05 16:40:04.000000000","message":"Done","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    def test_pages_topology_wipe(self):"},{"line_number":128,"context_line":"        pages_topology \u003d objects.NUMAPagesTopology("},{"line_number":129,"context_line":"            size_kb\u003d2048, total\u003d1024, used\u003d512, reserved\u003d0)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        self.assertEqual(2048, pages_topology.size_kb)"},{"line_number":132,"context_line":"        self.assertEqual(1024, pages_topology.total)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_16c6df47","line":129,"in_reply_to":"9a061dce_a491d99b","updated":"2016-04-06 07:15:54.000000000","message":"Could you remove it from the other two occurrences in this file? Sorry, I did not mark them yesterday.","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            siblings\u003d[], pinned_cpus\u003dset([]),"},{"line_number":141,"context_line":"            mempages\u003d["},{"line_number":142,"context_line":"                objects.NUMAPagesTopology("},{"line_number":143,"context_line":"                    size_kb\u003d4, total\u003d1548736, used\u003d0, reserved\u003d0),"},{"line_number":144,"context_line":"                objects.NUMAPagesTopology("},{"line_number":145,"context_line":"                    size_kb\u003d2048, total\u003d513, used\u003d0, reserved\u003d0),"},{"line_number":146,"context_line":"                objects.NUMAPagesTopology("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_b6cd735f","line":143,"range":{"start_line":143,"start_character":53,"end_line":143,"end_character":64},"updated":"2016-04-06 07:15:54.000000000","message":"we can rely on the default here","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e6c11ed502c4b3009ca7ccfa47d2b5d361de3416","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            siblings\u003d[], pinned_cpus\u003dset([]),"},{"line_number":141,"context_line":"            mempages\u003d["},{"line_number":142,"context_line":"                objects.NUMAPagesTopology("},{"line_number":143,"context_line":"                    size_kb\u003d4, total\u003d1548736, used\u003d0, reserved\u003d0),"},{"line_number":144,"context_line":"                objects.NUMAPagesTopology("},{"line_number":145,"context_line":"                    size_kb\u003d2048, total\u003d513, used\u003d0, reserved\u003d0),"},{"line_number":146,"context_line":"                objects.NUMAPagesTopology("}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_7d9b6218","line":143,"in_reply_to":"9a061dce_b6cd735f","updated":"2016-04-07 12:58:25.000000000","message":"There is no default value set for reserved as Dan Smith tried to explain. We can removed \u0027reserved\u0027 from here because the method can_fit_hugepages of NUMACellTopology is using the method \u0027free\u0027 of NUMAPages topology which provides a safe-guard.","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                objects.NUMAPagesTopology("},{"line_number":143,"context_line":"                    size_kb\u003d4, total\u003d1548736, used\u003d0, reserved\u003d0),"},{"line_number":144,"context_line":"                objects.NUMAPagesTopology("},{"line_number":145,"context_line":"                    size_kb\u003d2048, total\u003d513, used\u003d0, reserved\u003d0),"},{"line_number":146,"context_line":"                objects.NUMAPagesTopology("},{"line_number":147,"context_line":"                    size_kb\u003d1048576, total\u003d4, used\u003d1, reserved\u003d1)])"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_5605f777","line":145,"range":{"start_line":145,"start_character":53,"end_line":145,"end_character":63},"updated":"2016-04-06 07:15:54.000000000","message":"and here","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"}],"nova/tests/unit/scheduler/fakes.py":[{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"78986ee85ea34bdbfb24d55648bd63b6b4385e07","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d16,"},{"line_number":31,"context_line":"                                                           total\u003d387184,"},{"line_number":32,"context_line":"                                                           used\u003d0,"},{"line_number":33,"context_line":"                                                           reserved\u003d0),"},{"line_number":34,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d2048,"},{"line_number":35,"context_line":"                                                           total\u003d512, used\u003d0)],"},{"line_number":36,"context_line":"                               siblings\u003d[], pinned_cpus\u003dset([])),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_343b443a","line":33,"range":{"start_line":33,"start_character":59,"end_line":33,"end_character":69},"updated":"2016-04-05 14:05:28.000000000","message":"Is it needed if set to 0 by default?","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"99520e649132f887cf7e8a79d22e58107a761fc2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d16,"},{"line_number":31,"context_line":"                                                           total\u003d387184,"},{"line_number":32,"context_line":"                                                           used\u003d0,"},{"line_number":33,"context_line":"                                                           reserved\u003d0),"},{"line_number":34,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d2048,"},{"line_number":35,"context_line":"                                                           total\u003d512, used\u003d0)],"},{"line_number":36,"context_line":"                               siblings\u003d[], pinned_cpus\u003dset([])),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_e4e9111c","line":33,"in_reply_to":"9a061dce_343b443a","updated":"2016-04-05 16:40:04.000000000","message":"Done","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d4,"},{"line_number":41,"context_line":"                                                           total\u003d1548736,"},{"line_number":42,"context_line":"                                                           used\u003d0,"},{"line_number":43,"context_line":"                                                           reserved\u003d0),"},{"line_number":44,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d2048,"},{"line_number":45,"context_line":"                                                           total\u003d512, used\u003d0,"},{"line_number":46,"context_line":"                                                           reserved\u003d0)],"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_36996320","line":43,"range":{"start_line":43,"start_character":59,"end_line":43,"end_character":69},"updated":"2016-04-06 07:15:54.000000000","message":"here","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"2e8e9d5fdf5a68e86a3b7621184c6e147da1755b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                                           reserved\u003d0),"},{"line_number":44,"context_line":"                                 objects.NUMAPagesTopology(size_kb\u003d2048,"},{"line_number":45,"context_line":"                                                           total\u003d512, used\u003d0,"},{"line_number":46,"context_line":"                                                           reserved\u003d0)],"},{"line_number":47,"context_line":"                               siblings\u003d[], pinned_cpus\u003dset([]))])"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"NUMA_TOPOLOGY_W_HT \u003d objects.NUMATopology(cells\u003d["}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_96a02f45","line":46,"range":{"start_line":46,"start_character":59,"end_line":46,"end_character":69},"updated":"2016-04-06 07:15:54.000000000","message":"and here","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e738b3136312aa2142b93326a90b0aa2aa82b828","unresolved":false,"context_lines":[{"line_number":2610,"context_line":"                       return_value\u003dTrue)"},{"line_number":2611,"context_line":"    @mock.patch.object(host.Host, \"get_capabilities\")"},{"line_number":2612,"context_line":"    def test_does_want_hugepages(self, mock_caps, mock_numa, mock_hp):"},{"line_number":2613,"context_line":"        self.flags(reserved_huge_pages\u003d[\"0:2048:128\","},{"line_number":2614,"context_line":"                                        \"1:2048:1\","},{"line_number":2615,"context_line":"                                        \"3:2048:64\"])"},{"line_number":2616,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_894c69c9","line":2613,"updated":"2016-03-23 15:26:20.000000000","message":"This has nothing to do here...","commit_id":"bc337797c6c034f9f13fae12e0425db5dd3363e0"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":1394,"context_line":"        self.assertEqual(hostusage.cells[1].mempages[0].total, 5)"},{"line_number":1395,"context_line":"        self.assertEqual(hostusage.cells[1].mempages[0].used, 3)"},{"line_number":1396,"context_line":"        # 2 already used + 1 used by instance + 1 reserved"},{"line_number":1397,"context_line":"        self.assertEqual(hostusage.cells[1].mempages[0].free, 1)"},{"line_number":1398,"context_line":""},{"line_number":1399,"context_line":"    def test_reserved_hugepgaes_invalid_format(self):"},{"line_number":1400,"context_line":"        self.flags(reserved_memory_pages\u003d\"1:2:3\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_401d50bc","line":1397,"updated":"2016-03-16 20:00:25.000000000","message":"The above unit tests have aren\u0027t appropriately testing only the code that you added in this patch. It would have been good to see unit tests of just the hw.numa_get_reserved_memory_pages() function. For instance, what about a unit test that shows how the function behaves when the following CONF.reserved_memory_pages option is used?\n\n reserved_memory_pages \u003d [\"0:1K:24\", \"0:2M:8\"]","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":1410,"context_line":"        # 2 already used + 1 used by instance + 1 reserved"},{"line_number":1411,"context_line":"        self.assertEqual(hostusage.cells[1].mempages[0].free, 1)"},{"line_number":1412,"context_line":""},{"line_number":1413,"context_line":"    def test_reserved_hugepgaes_invalid_format(self):"},{"line_number":1414,"context_line":"        self.flags(reserved_memory_pages\u003d\"1:2:3\")"},{"line_number":1415,"context_line":"        self.assertRaises("},{"line_number":1416,"context_line":"            exception.InvalidReservedMemoryPagesOption,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_97560504","line":1413,"range":{"start_line":1413,"start_character":26,"end_line":1413,"end_character":31},"updated":"2016-03-18 19:29:24.000000000","message":"\"pages\" is misspelled :)","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2152f01f721ef21d3e986a39e6f2ce17195ba783","unresolved":false,"context_lines":[{"line_number":1416,"context_line":"            exception.InvalidReservedMemoryPagesOption,"},{"line_number":1417,"context_line":"            self._test_topo_usage_reserved_page_size)"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"    def test_reserved_hugepgaes_invalid_value(self):"},{"line_number":1420,"context_line":"        self.flags(reserved_memory_pages\u003d[\"0:foo:bar\"])"},{"line_number":1421,"context_line":"        self.assertRaises("},{"line_number":1422,"context_line":"            exception.InvalidReservedMemoryPagesOption,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_7759b934","line":1419,"updated":"2016-03-18 19:29:24.000000000","message":"here too","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9276b458a2ee5cec24d53c78b8c459a2ec52f18e","unresolved":false,"context_lines":[{"line_number":1382,"context_line":"        self.assertEqual({}, reserved)"},{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        self.flags(reserved_huge_pages\u003d[\"3:2048:128\","},{"line_number":1385,"context_line":"                                          \"3:1048576:4\","},{"line_number":1386,"context_line":"                                          \"6:2MB:64\","},{"line_number":1387,"context_line":"                                          \"9:1GB:1\","},{"line_number":1388,"context_line":"                                          ])"},{"line_number":1389,"context_line":"        reserved \u003d hw.numa_get_reserved_huge_pages()"},{"line_number":1390,"context_line":"        self.assertEqual({2048: 128, 1048576: 4}, reserved[3])"}],"source_content_type":"text/x-python","patch_set":10,"id":"da0c15f0_bf113fb2","line":1387,"range":{"start_line":1385,"start_character":40,"end_line":1387,"end_character":52},"updated":"2016-03-24 17:48:54.000000000","message":"Alignment!","commit_id":"d3dc5fb7b22eb150e7a431d71bc0ec2769e63d25"},{"author":{"_account_id":20873,"name":"Laszlo Hegedus","email":"hegedues.laszlo@gmail.com","username":"laszloh"},"change_message_id":"78986ee85ea34bdbfb24d55648bd63b6b4385e07","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                size_kb\u003d2048,"},{"line_number":1859,"context_line":"                total\u003d512,"},{"line_number":1860,"context_line":"                used\u003d0,"},{"line_number":1861,"context_line":"                reserved\u003d0)],"},{"line_number":1862,"context_line":"            siblings\u003d[], pinned_cpus\u003dset([]))"},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"        topo \u003d hw._numa_pagesize_usage_from_cell(hostcell, instcell, 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_f4470c75","line":1861,"range":{"start_line":1861,"start_character":16,"end_line":1861,"end_character":26},"updated":"2016-04-05 14:05:28.000000000","message":"Is it needed if set to 0 by default?","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"99520e649132f887cf7e8a79d22e58107a761fc2","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                size_kb\u003d2048,"},{"line_number":1859,"context_line":"                total\u003d512,"},{"line_number":1860,"context_line":"                used\u003d0,"},{"line_number":1861,"context_line":"                reserved\u003d0)],"},{"line_number":1862,"context_line":"            siblings\u003d[], pinned_cpus\u003dset([]))"},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"        topo \u003d hw._numa_pagesize_usage_from_cell(hostcell, instcell, 1)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_c4eccd2b","line":1861,"in_reply_to":"9a061dce_f4470c75","updated":"2016-04-05 16:40:04.000000000","message":"Done","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a17aa5119205c0a8b250f450b2d880ac15ff8375","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"        self.assertEqual(hostusage.cells[2].cpu_usage, 0)"},{"line_number":1368,"context_line":"        self.assertEqual(hostusage.cells[2].memory_usage, 0)"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"    def _test_topo_usage_reserved_page_size(self):"},{"line_number":1371,"context_line":"        reserved \u003d hw.numa_get_reserved_huge_pages()"},{"line_number":1372,"context_line":"        hosttopo \u003d objects.NUMATopology(cells\u003d["},{"line_number":1373,"context_line":"            objects.NUMACell(id\u003d0, cpuset\u003dset([0, 1]), memory\u003d512,"}],"source_content_type":"text/x-python","patch_set":19,"id":"dab17558_8911ad54","line":1370,"updated":"2016-05-11 16:22:09.000000000","message":"nit: meh, this isn\u0027t actually testing anything (which is a good thing!) so probably should be called _get_topo_usage_reserved_page_size()...","commit_id":"8a5188e17f6791024fe66c953ce953ae02bb46c4"}],"nova/virt/hardware.py":[{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"93eac2174af963aeaf90f93dc232a9eeabc4d710","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_225f630f","line":1264,"range":{"start_line":1264,"start_character":4,"end_line":1264,"end_character":15},"updated":"2016-03-14 17:16:32.000000000","message":"So this is generally an anti-pattern and we should never do this.\n\nWe do a similar (even more complicated) thing with pci whitelist and it has been a massive source of sad.\n\nI\u0027ll dub this Nikola\u0027s law: If a config option defines any kind of structure more complicated than a simple list of strings, it needs to define it\u0027s own grammar and an AST and needs to be parsed into it.\n\nThis means that if we are introducing this kind of thing in the config options - we want a set of objects to define the internal representation of the parse tree, not just the result, as that mini \"language\" becomes something we need to be backwards compatible with, which is impossible without a well defined structure.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"cc6da2bf159eae8d0d2e9d2f4ec07b804087dfa2","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_fa02a06e","line":1264,"in_reply_to":"1af94dfe_24ffd835","updated":"2016-03-15 14:14:14.000000000","message":"At some point in time we have to start. The others slipped through or it wasn\u0027t recognized as an issue back then.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c9b94e617cf366d866fe52f71c6030fc6d64116f","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_41b6448b","line":1264,"in_reply_to":"1af94dfe_bd35b2f8","updated":"2016-03-15 16:25:59.000000000","message":"\u003e So several options are currently like that. e.g how we parse vcpu_set_pin. Except that, good point raised here.\n\nAll of the other ones are arguably worse since they are request_specs which are almost a public API. This is the first one that comes from a config option.\n\nI feel that what makes this one different though, is that there is an actual structure that we build up from the config string as opposed to just simple values assigned to variables.\n\nMarkus gave some good pointers there although even with validation in a custom config option, we still won\u0027t check that there is no change in semantics.\n\nI think it\u0027s totally fair game to ask to make this less sucky seeing that this is the very beginning of a cycle.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9cd110ae9d6d75559000962adaeac82a77c279b1","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_bd35b2f8","line":1264,"in_reply_to":"1af94dfe_fa02a06e","updated":"2016-03-15 14:37:50.000000000","message":"Yes and it\u0027s a good blueprint to purpose. That said this is just 3 integers, this does not to pretend to be a mini-language at all.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"8b93ae05178eb63a06143c54c04edc98c13a0784","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_416090a5","line":1264,"range":{"start_line":1264,"start_character":4,"end_line":1264,"end_character":15},"in_reply_to":"3afc51ec_225f630f","updated":"2016-03-15 09:06:31.000000000","message":"+1 to everything Nikola said above. \n\nYou can see in [1][2] how the config option type \"IPOpt\" is defined. We could create a package \"nova/conf/types/\" where we place our Nova specific custom config option types. This has also the advantage that mistakes in the configuration get checked at service startup time, where the config options get slurped in from the \"nova.conf\" file, which is as early as it gets. The new option type will then host the logic from below and also raise the error you defined in another module.\n\nReferences:\n[1] https://github.com/openstack/oslo.config/blob/28324a7e1f272d8ec9fa491b1ccbadce29745d1b/oslo_config/cfg.py#L1195\n[2] https://github.com/openstack/oslo.config/blob/28324a7e1f272d8ec9fa491b1ccbadce29745d1b/oslo_config/types.py#L551","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d108c6f05c049e9e256228a75196e391a4f13134","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1af94dfe_24ffd835","line":1264,"in_reply_to":"3afc51ec_416090a5","updated":"2016-03-15 12:24:32.000000000","message":"Yes it\u0027s something good to have for sure but I do not see why this should be implemented right now.\n\nSo several options are currently like that. e.g how we parse vcpu_set_pin. Except that, good point raised here.","commit_id":"44b2ad61f6947875b44a7c25e2bb944c3a1418d8"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"c0b50e0ad16338d9e9e6f88a49dee72c448c1f9c","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"},{"line_number":1268,"context_line":"            for cfg in CONF.reserved_memory_pages:"},{"line_number":1269,"context_line":"                node, pagesize, reserved \u003d cfg.split(\":\", 2)"},{"line_number":1270,"context_line":"                node \u003d int(node)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_8125ecc3","line":1267,"range":{"start_line":1267,"start_character":12,"end_line":1267,"end_character":50},"updated":"2016-03-15 16:27:04.000000000","message":"I feel we need more of a structure than this as discussed on the previous patch.","commit_id":"5ce810e6fc761d1b95d8ca1ce4edbc77e840270f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"8740b2506a103810ea563de706ebfad62f4a6b71","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"},{"line_number":1262,"context_line":"              are pages size where values are the number reserved."},{"line_number":1263,"context_line":"    \"\"\""},{"line_number":1264,"context_line":"    bucket \u003d {}"},{"line_number":1265,"context_line":"    if CONF.reserved_memory_pages:"},{"line_number":1266,"context_line":"        try:"},{"line_number":1267,"context_line":"            bucket \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1af94dfe_e0845cd5","line":1264,"updated":"2016-03-16 20:00:25.000000000","message":"bucket? :)","commit_id":"92f96d6a327228ea68a8b357a4cfa62c88a64575"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9276b458a2ee5cec24d53c78b8c459a2ec52f18e","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"                bucket[int(node)][pagesize] \u003d int(reserved)"},{"line_number":1277,"context_line":"        except ValueError:"},{"line_number":1278,"context_line":"            raise exception.InvalidReservedMemoryPagesOption("},{"line_number":1279,"context_line":"                conf\u003dCONF.reserved_huge_pages)"},{"line_number":1280,"context_line":"    return bucket"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da0c15f0_9fc0bbe2","line":1279,"updated":"2016-03-24 17:48:54.000000000","message":"Note to others that this gets called from the libvirt driver __init__, which is a good place to explode. I was looking to see if we needed to handle this and default to zero or something in case the config was wrong. However, we\u0027ll explode early and not while handling a boot or something, which is cool.","commit_id":"d3dc5fb7b22eb150e7a431d71bc0ec2769e63d25"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a79deb8345e1f3a0c50a7f5572de17759e198d52","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"                bucket[int(node)][pagesize] \u003d int(reserved)"},{"line_number":1277,"context_line":"        except ValueError:"},{"line_number":1278,"context_line":"            raise exception.InvalidReservedMemoryPagesOption("},{"line_number":1279,"context_line":"                conf\u003dCONF.reserved_huge_pages)"},{"line_number":1280,"context_line":"    return bucket"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba0121b8_2fe2f6d5","line":1279,"in_reply_to":"da0c15f0_9fc0bbe2","updated":"2016-03-29 11:50:31.000000000","message":"Yes that is exactly why I put it to __init__ I want it to explode and stop the process to start if the option is invalid.","commit_id":"d3dc5fb7b22eb150e7a431d71bc0ec2769e63d25"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08d6ee4dfcc25417225ce0b70c6b0aa45efac36c","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                used\u003dmax(0, pages.used +"},{"line_number":1291,"context_line":"                         instancecell.memory * units.Ki /"},{"line_number":1292,"context_line":"                         pages.size_kb * sign),"},{"line_number":1293,"context_line":"                reserved\u003dpages.reserved))"},{"line_number":1294,"context_line":"        else:"},{"line_number":1295,"context_line":"            topo.append(pages)"},{"line_number":1296,"context_line":"    return topo"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_0848d35a","line":1293,"updated":"2016-04-04 06:52:40.000000000","message":"Based on the stack trace this line causes the problem. See the whole stack http://paste.openstack.org/show/492854/","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"90fb32e830ad3ea9a1c8191cbc2d61880f3d61f9","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                used\u003dmax(0, pages.used +"},{"line_number":1291,"context_line":"                         instancecell.memory * units.Ki /"},{"line_number":1292,"context_line":"                         pages.size_kb * sign),"},{"line_number":1293,"context_line":"                reserved\u003dpages.reserved))"},{"line_number":1294,"context_line":"        else:"},{"line_number":1295,"context_line":"            topo.append(pages)"},{"line_number":1296,"context_line":"    return topo"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_c4b6b189","line":1293,"in_reply_to":"9a061dce_5c7c5272","updated":"2016-04-05 07:32:22.000000000","message":"As far as I understand \u0027reserved\u0027 field is added in this patch and in the next patch only the libvirt driver will fill it so we anyhow need to handle if a given virt driver is not providing it. In the other hand this whole reservation does not seem to me virt driver specific at all so the change in the next patch is in the libvirt driver for some historical reasons as it could work the same way for every driver. However I don\u0027t know if we can factor this generic thing out from the libvirt driver easily. \n\nBottom line I would go for  defaulting the \u0027reserved\u0027 field in the object to 0 but Dan has a better view on this I guess.","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2c58bc065010282e3a16205c55b5de3590d1dfc7","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                used\u003dmax(0, pages.used +"},{"line_number":1291,"context_line":"                         instancecell.memory * units.Ki /"},{"line_number":1292,"context_line":"                         pages.size_kb * sign),"},{"line_number":1293,"context_line":"                reserved\u003dpages.reserved))"},{"line_number":1294,"context_line":"        else:"},{"line_number":1295,"context_line":"            topo.append(pages)"},{"line_number":1296,"context_line":"    return topo"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a061dce_5c7c5272","line":1293,"in_reply_to":"ba0121b8_0848d35a","updated":"2016-04-04 16:24:11.000000000","message":"Hum so \u0027reserved\u0027 has not been initialized by the virt driver which is expected but now, how to deal with that ? make it to 0 by default so do not recall pages.reserved, then the next patch will implement that part ?\n\n  ...\n  reserved\u003d0))\n  ...\n\nI do not know what we usually do in this condition","commit_id":"962aba937e08722c56d5536a2992c2f937a74b9f"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"1452310b9d2407a7bcb62c13e395ce0c8708cb04","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"    method will return a well formatted list of dict which can be used"},{"line_number":1256,"context_line":"    to build NUMATopology."},{"line_number":1257,"context_line":""},{"line_number":1258,"context_line":"    :raises: exceptionInvalidReservedMemoryPagesOption is option is"},{"line_number":1259,"context_line":"             not corretly set."},{"line_number":1260,"context_line":""},{"line_number":1261,"context_line":"    :returns: a list of dict ordered by NUMA node ids; keys of dict"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a061dce_9b3f59b3","line":1258,"range":{"start_line":1258,"start_character":13,"end_line":1258,"end_character":54},"updated":"2016-04-07 15:16:41.000000000","message":"nit: dot is missed here","commit_id":"52856672b260de76e7931d2be34ed774accc9a59"}],"releasenotes/notes/reserved-hugepages-per-nodes-f36225d5fca807e4.yaml":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"29c85b786c3adcaef30518606c69664df76a617e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"features:"},{"line_number":2,"context_line":"  - Adds reserved_memory_pages option to reserve"},{"line_number":3,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"1af94dfe_151e7a6f","line":3,"updated":"2016-03-18 16:19:02.000000000","message":"s/third part/third party/","commit_id":"6ef4980cc88815b7acea52d23137d8beb68d733f"}]}
