)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"304f7d343575862e44ceb7b8c9e8a572828e78b9","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":"For some use cases we may 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":3,"id":"3a57f1b5_89b90bec","line":10,"range":{"start_line":10,"start_character":21,"end_line":10,"end_character":22},"updated":"2016-02-10 14:58:05.000000000","message":"nit: An example would be good, IMO.","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"304f7d343575862e44ceb7b8c9e8a572828e78b9","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9d4c07da3594847917c9dc67e6663717d9ab4ba2"},{"line_number":17,"context_line":"Closes-Bug: #1543149"},{"line_number":18,"context_line":"DocImpact: reserved_memory_pages"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a57f1b5_a9d3a737","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":32},"updated":"2016-02-10 14:58:05.000000000","message":"Do we still need this?","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c77d39bbed99d6ba4c45dbcb65d3d006930b123d","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9d4c07da3594847917c9dc67e6663717d9ab4ba2"},{"line_number":17,"context_line":"Closes-Bug: #1543149"},{"line_number":18,"context_line":"DocImpact: reserved_memory_pages"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3afc51ec_b8c75b11","line":18,"updated":"2016-03-12 21:55:33.000000000","message":"FYI, using DocImpact generates a bug for nova:\n\nhttps://bugs.launchpad.net/nova/+bug/1556208\n\nSince there is a release note for this change, it\u0027s already documented so you don\u0027t need this. The release note is pretty sparse, but the config option help is better.","commit_id":"70604db8dacd1d8ea8a054a9f548b24dcffc292c"}],"nova/conf/virt.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"19f2b3a7bc86e202e93b0e491f189157aa40d0be","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Note: Should be a valid JSON string which reflects NUMA node ID,"},{"line_number":45,"context_line":"page size and number reserved. Unit is in KiB."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* Example: Reserve 64 pages for 2MiB in host cell 0 and 1 page of 1GiB"},{"line_number":48,"context_line":"  on host cell 1."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"  reserved_memory_pages \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_e63fa185","line":47,"updated":"2016-02-09 10:34:28.000000000","message":"This example is wrong it does not describe this configuration - I will change that.","commit_id":"a5ddda80b9648e41e3b36f354e5534a66b63905d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"5549447e9388d4fe891be6c3f3a328cf86dc6849","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"1\": {"},{"line_number":56,"context_line":"      \"1048576\": 2,"},{"line_number":57,"context_line":"    }"},{"line_number":58,"context_line":"  }"},{"line_number":59,"context_line":"\"\"\")"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_26bb7977","line":58,"range":{"start_line":58,"start_character":2,"end_line":58,"end_character":3},"updated":"2016-02-09 10:45:17.000000000","message":"I\u0027m really not a huge fan of having JSON in configuration parameters, since I don\u0027t think it is particularly user friendly, with the need to escape quotes.\n\nI think it\u0027d be simpler to use a ListOpt and encode each element as a string \"node:pagesize:count\", eg \n\n  reserved_memory_pages \u003d [\"0:2M:64\", \"0:1G:1\", \"1:1G:2\"]\n\nWe should allow raw byte value for page size, or common suffixes K, M, G, etc","commit_id":"a5ddda80b9648e41e3b36f354e5534a66b63905d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"634105ddbedd6fad5a89342964a91e0f0a79a7d3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"* Example: Reserve 64 pages for 2MiB in host cell 0 and 1 page of 1GiB"},{"line_number":49,"context_line":"  on host cell 1."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  reserved_memory_pages \u003d [\"0:2M:64\"}, {\"1:1G:1\"}]"},{"line_number":52,"context_line":"\"\"\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_3ce8657c","line":51,"updated":"2016-02-10 10:02:43.000000000","message":"Typo there - remove all those curly brackets","commit_id":"fa5abe585b1fb79865fc7b449dac10875fefd819"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"df7658c7735f6fda3ca621ec808dcd50d543d6c5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"reserved_memory_pages \u003d cfg.MultiStrOpt("},{"line_number":41,"context_line":"    \"reserved_memory_pages\","},{"line_number":42,"context_line":"    default\u003d[],"},{"line_number":43,"context_line":"    help\u003d\"\"\"Used to reserve huge pages per NUMA host cells"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Note: Should be a valid JSON string which reflects NUMA node ID,"},{"line_number":46,"context_line":"page size and number reserved. Default unit is in KB."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"* Example: Reserve 64 pages for 2MiB on host cell 0 and 1 page of 1GiB"},{"line_number":49,"context_line":"  on host cell 1."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":52,"context_line":"\"\"\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_8e5fd171","line":51,"range":{"start_line":43,"start_character":12,"end_line":51,"end_character":50},"updated":"2016-02-10 14:57:19.000000000","message":"This should use the same format used above, per bp/centralize-config-options","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"19de689b9e5dd183237fe7c610b60462ea3e97ac","unresolved":false,"context_lines":[{"line_number":48,"context_line":"* Example: Reserve 64 pages for 2MiB on host cell 0 and 1 page of 1GiB"},{"line_number":49,"context_line":"  on host cell 1."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":52,"context_line":"\"\"\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_95d03555","line":51,"in_reply_to":"3a57f1b5_7a9ec857","updated":"2016-02-10 16:31:04.000000000","message":"Sure - see below (note that the spaces don\u0027t show, sadly):\n\n    Summary section here\n\n    Possible values:\n\n    * Possible values described here\n\n    Services which consume this:\n\n    * Service A\n\n    Related options:\n\n    * Any related options and how they relate","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1cc7f6802bf62656063848075da032644463fb44","unresolved":false,"context_lines":[{"line_number":48,"context_line":"* Example: Reserve 64 pages for 2MiB on host cell 0 and 1 page of 1GiB"},{"line_number":49,"context_line":"  on host cell 1."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":52,"context_line":"\"\"\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_7a9ec857","line":51,"in_reply_to":"3a57f1b5_8e5fd171","updated":"2016-02-10 16:19:57.000000000","message":"Can you elaborate?","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b11f641b1d0f89fe0f4106208359b5df8f4fdac7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"reserved_memory_pages\","},{"line_number":42,"context_line":"    default\u003d[],"},{"line_number":43,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":46,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":47,"context_line":"  colon. Default unit is KiB."}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_8ab1cbe3","line":44,"updated":"2016-02-11 09:49:11.000000000","message":"Insert the following here:\n\n    Possible values:","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84f68e7ed4f0b2b83b06c111febe5e7bbca2fd35","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    \"reserved_memory_pages\","},{"line_number":42,"context_line":"    default\u003d[],"},{"line_number":43,"context_line":"    help\u003d\"\"\"Reserves amount of huge pages per NUMA host cells"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"* A list of valid strings which reflect NUMA node ID, page size and"},{"line_number":46,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":47,"context_line":"  colon. Default unit is KiB."}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_9c4b4e87","line":44,"in_reply_to":"3a57f1b5_8ab1cbe3","updated":"2016-02-11 12:37:13.000000000","message":"Done","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ce15d94d9d29e0f0f4db9e40de8067c053bd6e97","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":47,"context_line":"  colon. Default unit is KiB."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Services which consume this:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_e5e190d1","line":49,"updated":"2016-02-11 10:54:03.000000000","message":"the huge page flavor spec hw:mem_page_size allows 2MB and 1GB as value so for consistency I would go for \"0:2MB:64\" instead of \"0:2048:64\"","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84f68e7ed4f0b2b83b06c111febe5e7bbca2fd35","unresolved":false,"context_lines":[{"line_number":46,"context_line":"  number of pages reserved separated by punctuation mark"},{"line_number":47,"context_line":"  colon. Default unit is KiB."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    reserved_memory_pages \u003d [\"0:2048:64\", \"1:1GB:1\"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Services which consume this:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_b08c3136","line":49,"in_reply_to":"3a57f1b5_e5e190d1","updated":"2016-02-11 12:37:13.000000000","message":"Huge pages spec accept both format. I wanted to illustrate the fact we can use number as KiB or suffixed-string.","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5efa6b578fcca8e095501bbd5cb3ce3c97c019c2","unresolved":false,"context_lines":[{"line_number":319,"context_line":"Services which consume this:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* nova-compute"},{"line_number":322,"context_line":"* nova-scheduler"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Related options:"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3afc51ec_2f900a43","line":322,"range":{"start_line":322,"start_character":2,"end_line":322,"end_character":16},"updated":"2016-03-14 09:57:43.000000000","message":"This seems to undo a lot of the work the scheduler team have done, finally making sure the conf of the scheduler is independent from the compute node config. (see allocation-ratio, etc).\n\nIf we keep this, I think we slow down the migration to the new reservation system by another cycle, or certainly make it an even more complicated transition.","commit_id":"70604db8dacd1d8ea8a054a9f548b24dcffc292c"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"8824560395f378de07993bff179cc5bf6009f4e0","unresolved":false,"context_lines":[{"line_number":319,"context_line":"Services which consume this:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* nova-compute"},{"line_number":322,"context_line":"* nova-scheduler"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Related options:"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3afc51ec_a650c00b","line":322,"range":{"start_line":322,"start_character":2,"end_line":322,"end_character":16},"in_reply_to":"3afc51ec_2f900a43","updated":"2016-03-14 11:06:38.000000000","message":"My understanding of the code changes here are that the reserved_memory_pages option is set on the compute node, and thus when the virt driver reports available NUMA resources to the compute manange, it subtracts the reserved memory pages from this data. So when schedular pulls this data out of the DB, the reserved memory pages should have already been applied. This allows for the fact that each compute node can have a different number of reserved pages.\n\nIIUC, the ability to set this in the nova-schedular is just an optional thing, so that if all your compute nodes happen to have the exact same number of reserved pages, you can just set it once in the schedular and not duplicate it in every compute node. I don\u0027t think this is that important really so if we want to restrict it to be only settable on the compute node that\u0027s fine with me.","commit_id":"70604db8dacd1d8ea8a054a9f548b24dcffc292c"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"bf6a74feebe5343df1c8d09486918b75da981783","unresolved":false,"context_lines":[{"line_number":319,"context_line":"Services which consume this:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"* nova-compute"},{"line_number":322,"context_line":"* nova-scheduler"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"Related options:"},{"line_number":325,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3afc51ec_ec01096c","line":322,"range":{"start_line":322,"start_character":2,"end_line":322,"end_character":16},"in_reply_to":"3afc51ec_a650c00b","updated":"2016-03-14 11:57:55.000000000","message":"So this is referenced from update_usage_from_instances which is ran both on the compute host (resource tracker) and in the scheduler by the HostManager for keeping it\u0027s in memory state up to date (this is racy atm but the fix for it almost merged).\n\nThe only way for scheduler to have it set for each compute node is for it to be part of the ComputeNode object, and ONLY a config option on compute hosts.","commit_id":"70604db8dacd1d8ea8a054a9f548b24dcffc292c"}],"nova/exception.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ce15d94d9d29e0f0f4db9e40de8067c053bd6e97","unresolved":false,"context_lines":[{"line_number":2075,"context_line":""},{"line_number":2076,"context_line":""},{"line_number":2077,"context_line":"class InvalidReservedMemoryPagesOption(Invalid):"},{"line_number":2078,"context_line":"    msg_fmt \u003d _(\"Option \u0027reserved_memory_pages\u0027 should be a valid syntax, \""},{"line_number":2079,"context_line":"                \"please refer yourself to the help (found \u0027%(conf)s\u0027).\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_8513fc65","line":2079,"range":{"start_line":2078,"start_character":17,"end_line":2079,"end_character":70},"updated":"2016-02-11 10:54:03.000000000","message":"Would it be better saying something like:\n\nThe format of the option \u0027reserved_memory_pages\u0027 is invalid. (found \u0027%(conf)s\u0027) Please refer to the nova config-reference.","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84f68e7ed4f0b2b83b06c111febe5e7bbca2fd35","unresolved":false,"context_lines":[{"line_number":2076,"context_line":""},{"line_number":2077,"context_line":"class InvalidReservedMemoryPagesOption(Invalid):"},{"line_number":2078,"context_line":"    msg_fmt \u003d _(\"Option \u0027reserved_memory_pages\u0027 should be a valid syntax, \""},{"line_number":2079,"context_line":"                \"please refer yourself to the help (found \u0027%(conf)s\u0027).\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_1c60be00","line":2079,"in_reply_to":"3a57f1b5_8513fc65","updated":"2016-02-11 12:37:13.000000000","message":"Yes I will change that.","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"}],"nova/tests/unit/virt/test_hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"df7658c7735f6fda3ca621ec808dcd50d543d6c5","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"        # to create tests in a same context to avoid errors when"},{"line_number":1373,"context_line":"        # running unit tests in parallel"},{"line_number":1374,"context_line":""},{"line_number":1375,"context_line":"        def test_success_int():"},{"line_number":1376,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"},{"line_number":1377,"context_line":"            self.flags(reserved_memory_pages\u003d[\"0:2048:64\"])"},{"line_number":1378,"context_line":"            hostusage \u003d hw.numa_usage_from_instances("},{"line_number":1379,"context_line":"                hosttopo, [instance1])"},{"line_number":1380,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)"},{"line_number":1381,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].total, 512)"},{"line_number":1382,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].used, 192)"},{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        def test_success_string():"},{"line_number":1385,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_4966b3ee","line":1382,"range":{"start_line":1375,"start_character":0,"end_line":1382,"end_character":70},"updated":"2016-02-10 14:57:19.000000000","message":"These should be different tests, IMO","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7319ffce80a2883eed37e0b586eca5bff8a57673","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"                hosttopo, [instance1])"},{"line_number":1380,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)"},{"line_number":1381,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].total, 512)"},{"line_number":1382,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].used, 192)"},{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        def test_success_string():"},{"line_number":1385,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_f9ba9f22","line":1382,"in_reply_to":"3a57f1b5_4966b3ee","updated":"2016-02-11 08:43:47.000000000","message":"Please refer yourself to my comment line 1371 OR elaborate your comment.","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"725243f59d05f4f4e3dc5f3a7a97cc4d69e9e9b8","unresolved":false,"context_lines":[{"line_number":1379,"context_line":"                hosttopo, [instance1])"},{"line_number":1380,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)"},{"line_number":1381,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].total, 512)"},{"line_number":1382,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].used, 192)"},{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        def test_success_string():"},{"line_number":1385,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_ea939f4d","line":1382,"in_reply_to":"3a57f1b5_f9ba9f22","updated":"2016-02-11 09:48:48.000000000","message":"I\u0027m sorry - I missed that.","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ce15d94d9d29e0f0f4db9e40de8067c053bd6e97","unresolved":false,"context_lines":[{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        def test_success_string():"},{"line_number":1385,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"},{"line_number":1386,"context_line":"            self.flags(reserved_memory_pages\u003d[\"0:2MB:64\"])"},{"line_number":1387,"context_line":"            hostusage \u003d hw.numa_usage_from_instances("},{"line_number":1388,"context_line":"                hosttopo, [instance1])"},{"line_number":1389,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_7a2a1a2e","line":1386,"updated":"2016-02-11 10:54:03.000000000","message":"Can we have a test with more than one value in the list?","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84f68e7ed4f0b2b83b06c111febe5e7bbca2fd35","unresolved":false,"context_lines":[{"line_number":1383,"context_line":""},{"line_number":1384,"context_line":"        def test_success_string():"},{"line_number":1385,"context_line":"            hw.RESERVED_MEMORY_PAGES \u003d None"},{"line_number":1386,"context_line":"            self.flags(reserved_memory_pages\u003d[\"0:2MB:64\"])"},{"line_number":1387,"context_line":"            hostusage \u003d hw.numa_usage_from_instances("},{"line_number":1388,"context_line":"                hosttopo, [instance1])"},{"line_number":1389,"context_line":"            self.assertEqual(hostusage.cells[0].mempages[0].size_kb, 2048)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_e2ff3ca8","line":1386,"in_reply_to":"3a57f1b5_7a2a1a2e","updated":"2016-02-11 12:37:13.000000000","message":"Done","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"}],"nova/virt/hardware.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"df7658c7735f6fda3ca621ec808dcd50d543d6c5","unresolved":false,"context_lines":[{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":"def _numa_reserved_memory_pages_from_cell(cell_id, pagesize):"},{"line_number":1245,"context_line":"    global RESERVED_MEMORY_PAGES"},{"line_number":1246,"context_line":"    try:"},{"line_number":1247,"context_line":"        if CONF.reserved_memory_pages and not RESERVED_MEMORY_PAGES:"},{"line_number":1248,"context_line":"            RESERVED_MEMORY_PAGES \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_098e7b78","line":1245,"range":{"start_line":1245,"start_character":4,"end_line":1245,"end_character":32},"updated":"2016-02-10 14:57:19.000000000","message":"So if I restart the `nova-compute` process then this gets reset, right? This should be stored in an object (read: into the DB)","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"7319ffce80a2883eed37e0b586eca5bff8a57673","unresolved":false,"context_lines":[{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":"def _numa_reserved_memory_pages_from_cell(cell_id, pagesize):"},{"line_number":1245,"context_line":"    global RESERVED_MEMORY_PAGES"},{"line_number":1246,"context_line":"    try:"},{"line_number":1247,"context_line":"        if CONF.reserved_memory_pages and not RESERVED_MEMORY_PAGES:"},{"line_number":1248,"context_line":"            RESERVED_MEMORY_PAGES \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_d99fa3b2","line":1245,"in_reply_to":"3a57f1b5_098e7b78","updated":"2016-02-11 08:43:47.000000000","message":"No, RESERVED_MEMORY_PAGES will be to None and so re-computed.","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"725243f59d05f4f4e3dc5f3a7a97cc4d69e9e9b8","unresolved":false,"context_lines":[{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":""},{"line_number":1244,"context_line":"def _numa_reserved_memory_pages_from_cell(cell_id, pagesize):"},{"line_number":1245,"context_line":"    global RESERVED_MEMORY_PAGES"},{"line_number":1246,"context_line":"    try:"},{"line_number":1247,"context_line":"        if CONF.reserved_memory_pages and not RESERVED_MEMORY_PAGES:"},{"line_number":1248,"context_line":"            RESERVED_MEMORY_PAGES \u003d collections.defaultdict(dict)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_ea7ddfe7","line":1245,"in_reply_to":"3a57f1b5_d99fa3b2","updated":"2016-02-11 09:48:48.000000000","message":"Hmm, this still seems very adhoc and \"racy\", but I can\u0027t think of a better solution right now. I won\u0027t block on this if no one else does.","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"df7658c7735f6fda3ca621ec808dcd50d543d6c5","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"                        pagesize, return_int\u003dTrue) / units.Ki"},{"line_number":1257,"context_line":"                RESERVED_MEMORY_PAGES[int(node)][pagesize] \u003d int(reserved)"},{"line_number":1258,"context_line":"        if RESERVED_MEMORY_PAGES:"},{"line_number":1259,"context_line":"            return RESERVED_MEMORY_PAGES.get("},{"line_number":1260,"context_line":"                cell_id, {}).get(pagesize, 0)"},{"line_number":1261,"context_line":"    except ValueError:"},{"line_number":1262,"context_line":"        raise exception.InvalidReservedMemoryPagesOption("},{"line_number":1263,"context_line":"            conf\u003dCONF.reserved_memory_pages)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a57f1b5_29b01743","line":1260,"range":{"start_line":1259,"start_character":12,"end_line":1260,"end_character":45},"updated":"2016-02-10 14:57:19.000000000","message":"nit: no need to wrap, afaict","commit_id":"20bd5c4478be92db1b28477a2915cb96ab1f7f3b"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd643dade33ff0d44191ed0302f5f0e938bafb1d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"MEMPAGES_LARGE \u003d -2"},{"line_number":39,"context_line":"MEMPAGES_ANY \u003d -3"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESERVED_MEMORY_PAGES \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_vcpu_pin_set():"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_3ae6eae7","line":41,"range":{"start_line":41,"start_character":0,"end_line":41,"end_character":21},"updated":"2016-02-24 14:06:54.000000000","message":"So it seems to me that this should live on the compute node or even better hody NUMATopology object. I don\u0027t like the fact that it\u0027s a global here","commit_id":"f3a8ba89b3a86161e325c1367a8e4fc03d7de074"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3c7dd90a61178d46d522076766c71a9b5c3b7bbe","unresolved":false,"context_lines":[{"line_number":38,"context_line":"MEMPAGES_LARGE \u003d -2"},{"line_number":39,"context_line":"MEMPAGES_ANY \u003d -3"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"RESERVED_MEMORY_PAGES \u003d None"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def get_vcpu_pin_set():"}],"source_content_type":"text/x-python","patch_set":9,"id":"5aef4532_48a90adf","line":41,"in_reply_to":"bae84128_3ae6eae7","updated":"2016-03-08 12:33:18.000000000","message":"It\u0027s probably not best place but actually this option is really related to virt driver so I\u0027m not sure it\u0027s worth to move it place on compute node.","commit_id":"f3a8ba89b3a86161e325c1367a8e4fc03d7de074"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd643dade33ff0d44191ed0302f5f0e938bafb1d","unresolved":false,"context_lines":[{"line_number":1244,"context_line":"def _numa_reserved_memory_pages_from_cell(cell_id, pagesize):"},{"line_number":1245,"context_line":"    global RESERVED_MEMORY_PAGES"},{"line_number":1246,"context_line":"    try:"},{"line_number":1247,"context_line":"        if CONF.reserved_memory_pages and not RESERVED_MEMORY_PAGES:"},{"line_number":1248,"context_line":"            RESERVED_MEMORY_PAGES \u003d collections.defaultdict(dict)"},{"line_number":1249,"context_line":"            for cfg in CONF.reserved_memory_pages:"},{"line_number":1250,"context_line":"                node, pagesize, reserved \u003d cfg.split(\":\", 2)"},{"line_number":1251,"context_line":"                node \u003d int(node)"},{"line_number":1252,"context_line":"                try:"},{"line_number":1253,"context_line":"                    pagesize \u003d int(pagesize)"},{"line_number":1254,"context_line":"                except ValueError:"},{"line_number":1255,"context_line":"                    pagesize \u003d strutils.string_to_bytes("},{"line_number":1256,"context_line":"                        pagesize, return_int\u003dTrue) / units.Ki"},{"line_number":1257,"context_line":"                RESERVED_MEMORY_PAGES[int(node)][pagesize] \u003d int(reserved)"},{"line_number":1258,"context_line":"        if RESERVED_MEMORY_PAGES:"},{"line_number":1259,"context_line":"            return RESERVED_MEMORY_PAGES.get(cell_id, {}).get(pagesize, 0)"},{"line_number":1260,"context_line":"    except ValueError:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_9a43b6ae","line":1257,"range":{"start_line":1247,"start_character":8,"end_line":1257,"end_character":74},"updated":"2016-02-24 14:06:54.000000000","message":"That way we could read this in on class load and not polute an otherwise straightforward method with it.","commit_id":"f3a8ba89b3a86161e325c1367a8e4fc03d7de074"},{"author":{"_account_id":5511,"name":"Nikola Dipanov","email":"ndipanov@redhat.com","username":"ndipanov"},"change_message_id":"fd643dade33ff0d44191ed0302f5f0e938bafb1d","unresolved":false,"context_lines":[{"line_number":1266,"context_line":"def _numa_reserved_memory_pages(hostcells):"},{"line_number":1267,"context_line":"    for hostcell in hostcells:"},{"line_number":1268,"context_line":"        for pages in hostcell.mempages:"},{"line_number":1269,"context_line":"            pages.used \u003d ("},{"line_number":1270,"context_line":"                pages.used + _numa_reserved_memory_pages_from_cell("},{"line_number":1271,"context_line":"                    hostcell.id, pages.size_kb))"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":""},{"line_number":1274,"context_line":"def _numa_pagesize_usage_from_cell(hostcell, instancecell, sign):"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_b5f04bca","line":1271,"range":{"start_line":1269,"start_character":12,"end_line":1271,"end_character":48},"updated":"2016-02-24 14:06:54.000000000","message":"Is this the right way to do it or subtract the reserved ones from the total... I am not sure. This is probably better","commit_id":"f3a8ba89b3a86161e325c1367a8e4fc03d7de074"}],"releasenotes/notes/reserved-hugepages-per-nodes-f36225d5fca807e4.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b11f641b1d0f89fe0f4106208359b5df8f4fdac7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds reserved_memory_pages\u0027s option to reserve"},{"line_number":4,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3a57f1b5_6acecf5b","line":3,"range":{"start_line":3,"start_character":30,"end_line":3,"end_character":32},"updated":"2016-02-11 09:49:11.000000000","message":"nit: drop this","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ce15d94d9d29e0f0f4db9e40de8067c053bd6e97","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds reserved_memory_pages\u0027s option to reserve"},{"line_number":4,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3a57f1b5_6d458615","line":3,"in_reply_to":"3a57f1b5_5745b76d","updated":"2016-02-11 10:54:03.000000000","message":"I think Stephen just suggested to do the following\n\n   s/reserved_memory_pages\u0027s/reserved_memory_pages/","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"06219c37e31a455b64dd3871736f2e1abb49fc32","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds reserved_memory_pages\u0027s option to reserve"},{"line_number":4,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3a57f1b5_5745b76d","line":3,"in_reply_to":"3a57f1b5_6acecf5b","updated":"2016-02-11 10:29:31.000000000","message":"Can you elaborate your comment, this file is not necessary anymore ?","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"84f68e7ed4f0b2b83b06c111febe5e7bbca2fd35","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds reserved_memory_pages\u0027s option to reserve"},{"line_number":4,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3a57f1b5_7c3f72d6","line":3,"in_reply_to":"3a57f1b5_6d458615","updated":"2016-02-11 12:37:13.000000000","message":"Done","commit_id":"86e39fe529c0fb77200307fd9875b9ca16790692"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3a5e8a1f59a5e55192e713cf14632213dc0ade5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds reserved_memory_pages option to reserve"},{"line_number":4,"context_line":"    amount of hugepages used by third part components."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3afc51ec_98f37f73","line":2,"updated":"2016-03-12 21:58:52.000000000","message":"It\u0027s pretty late to be sneaking features in for the release, especially under the guise of a bug.","commit_id":"70604db8dacd1d8ea8a054a9f548b24dcffc292c"}]}
