)]}'
{".zuul.yaml":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            MAX_COMPUTE_NODES: 2"},{"line_number":51,"context_line":"            LIBVIRT_TYPE: kvm"},{"line_number":52,"context_line":"            TEMPEST_PLUGINS: /opt/stack/whitebox-tempest-plugin"},{"line_number":53,"context_line":"            WHITEBOX_PRIVKEY_PATH: /home/tempest/.ssh/id_rsa"},{"line_number":54,"context_line":"    group-vars:"},{"line_number":55,"context_line":"        subnode:"},{"line_number":56,"context_line":"            num_hugepages: 2048"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df33271e_fb02d308","line":53,"updated":"2020-03-26 21:27:39.000000000","message":"Come to think of it, we should probably set the new NUMA options here explicitly and not rely on the defaults. And actually the same would apply to a whole bunch of them.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            MAX_COMPUTE_NODES: 2"},{"line_number":51,"context_line":"            LIBVIRT_TYPE: kvm"},{"line_number":52,"context_line":"            TEMPEST_PLUGINS: /opt/stack/whitebox-tempest-plugin"},{"line_number":53,"context_line":"            WHITEBOX_PRIVKEY_PATH: /home/tempest/.ssh/id_rsa"},{"line_number":54,"context_line":"    group-vars:"},{"line_number":55,"context_line":"        subnode:"},{"line_number":56,"context_line":"            num_hugepages: 2048"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df33271e_06a90ede","line":53,"in_reply_to":"df33271e_5b5bfff5","updated":"2020-03-27 15:51:47.000000000","message":"ack","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"4a4ba9a916a84a48a72bfad322ac7af44fe15e97","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            MAX_COMPUTE_NODES: 2"},{"line_number":51,"context_line":"            LIBVIRT_TYPE: kvm"},{"line_number":52,"context_line":"            TEMPEST_PLUGINS: /opt/stack/whitebox-tempest-plugin"},{"line_number":53,"context_line":"            WHITEBOX_PRIVKEY_PATH: /home/tempest/.ssh/id_rsa"},{"line_number":54,"context_line":"    group-vars:"},{"line_number":55,"context_line":"        subnode:"},{"line_number":56,"context_line":"            num_hugepages: 2048"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df33271e_5b5bfff5","line":53,"in_reply_to":"df33271e_fb02d308","updated":"2020-03-26 21:28:22.000000000","message":"Clarifications: this if for a future cleanup, fine for now, you\u0027re continuing the precedent.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"}],"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new test method, test_colloc_migration, to"},{"line_number":10,"context_line":"NUMALiveMigrationTest. The method is designed to test blueprint [1]."},{"line_number":11,"context_line":"Downstream RedHat BZ can be referenced here [2].  Test requires a"},{"line_number":12,"context_line":"deployment of two compute nodes with at least two NUMA nodes of"},{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_0b4e0fc3","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":17},"updated":"2020-01-31 09:36:53.000000000","message":"Red Hat :)","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new test method, test_colloc_migration, to"},{"line_number":10,"context_line":"NUMALiveMigrationTest. The method is designed to test blueprint [1]."},{"line_number":11,"context_line":"Downstream RedHat BZ can be referenced here [2].  Test requires a"},{"line_number":12,"context_line":"deployment of two compute nodes with at least two NUMA nodes of"},{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_9180e9c0","line":11,"range":{"start_line":11,"start_character":11,"end_line":11,"end_character":17},"in_reply_to":"3fa7e38b_0b4e0fc3","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"NUMALiveMigrationTest. The method is designed to test blueprint [1]."},{"line_number":11,"context_line":"Downstream RedHat BZ can be referenced here [2].  Test requires a"},{"line_number":12,"context_line":"deployment of two compute nodes with at least two NUMA nodes of"},{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"},{"line_number":15,"context_line":"are used for the cpu_shared_set. Two instances will be created on the"},{"line_number":16,"context_line":"first compute node, one will require cpu pinning and the other will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_ab5fbb72","line":13,"range":{"start_line":13,"start_character":65,"end_line":13,"end_character":70},"updated":"2020-01-31 09:36:53.000000000","message":"Correct capitalization, though \"host CPUs\" would be less likely to get confused with PCPUs","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":10,"context_line":"NUMALiveMigrationTest. The method is designed to test blueprint [1]."},{"line_number":11,"context_line":"Downstream RedHat BZ can be referenced here [2].  Test requires a"},{"line_number":12,"context_line":"deployment of two compute nodes with at least two NUMA nodes of"},{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"},{"line_number":15,"context_line":"are used for the cpu_shared_set. Two instances will be created on the"},{"line_number":16,"context_line":"first compute node, one will require cpu pinning and the other will"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_51627143","line":13,"range":{"start_line":13,"start_character":65,"end_line":13,"end_character":70},"in_reply_to":"3fa7e38b_ab5fbb72","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"},{"line_number":15,"context_line":"are used for the cpu_shared_set. Two instances will be created on the"},{"line_number":16,"context_line":"first compute node, one will require cpu pinning and the other will"},{"line_number":17,"context_line":"simply float on the available shared pCPUs. Each instance should ‘fill’"},{"line_number":18,"context_line":"their respective NUMA node. This procedure is then repeated on the"},{"line_number":19,"context_line":"second host."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_6b59c38b","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":40},"updated":"2020-01-31 09:36:53.000000000","message":"CPU","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":13,"context_line":"identical topology. Test configures cpu_dedicated_set to use all pCPUs"},{"line_number":14,"context_line":"from the first NUMA node of each host. The pCPUs of the second NUMA node"},{"line_number":15,"context_line":"are used for the cpu_shared_set. Two instances will be created on the"},{"line_number":16,"context_line":"first compute node, one will require cpu pinning and the other will"},{"line_number":17,"context_line":"simply float on the available shared pCPUs. Each instance should ‘fill’"},{"line_number":18,"context_line":"their respective NUMA node. This procedure is then repeated on the"},{"line_number":19,"context_line":"second host."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_f16efd2b","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":40},"in_reply_to":"3fa7e38b_6b59c38b","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"second host."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"After validating all pinning schemes for each instance is correct, the"},{"line_number":22,"context_line":"floating instance on the first host will be migrated to the second. The"},{"line_number":23,"context_line":"dedicated instance on the target host will be deleted and the remaining"},{"line_number":24,"context_line":"dedicated instance will be migrated to the target host. The test method"},{"line_number":25,"context_line":"will validate all instance migrations were successful and the three"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_cb4797a4","line":22,"range":{"start_line":22,"start_character":44,"end_line":22,"end_character":52},"updated":"2020-01-31 09:36:53.000000000","message":"cold migrated (just so it\u0027s totally obvious)","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":19,"context_line":"second host."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"After validating all pinning schemes for each instance is correct, the"},{"line_number":22,"context_line":"floating instance on the first host will be migrated to the second. The"},{"line_number":23,"context_line":"dedicated instance on the target host will be deleted and the remaining"},{"line_number":24,"context_line":"dedicated instance will be migrated to the target host. The test method"},{"line_number":25,"context_line":"will validate all instance migrations were successful and the three"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_b1bf2578","line":22,"range":{"start_line":22,"start_character":44,"end_line":22,"end_character":52},"in_reply_to":"3fa7e38b_cb4797a4","updated":"2020-01-31 19:13:42.000000000","message":"The test also does some validation of [1]. so all migration is actually live, I will update the commit message to include the second RFE and clarify the nature of the migration.\n\n[1] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1222414","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"accurate after migration"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A helper method _get_shared_cpuset was added to NUMALiveMigrationTest as"},{"line_number":31,"context_line":"well. It parses an instance’s xml for the ‘cpuset’ attribute found in"},{"line_number":32,"context_line":"the vcpu tag. It then converts and returns the ‘cpuset’ value into a set"},{"line_number":33,"context_line":"of pCPUs."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_4bc96722","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":33},"updated":"2020-01-31 09:36:53.000000000","message":"XML","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":28,"context_line":"accurate after migration"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A helper method _get_shared_cpuset was added to NUMALiveMigrationTest as"},{"line_number":31,"context_line":"well. It parses an instance’s xml for the ‘cpuset’ attribute found in"},{"line_number":32,"context_line":"the vcpu tag. It then converts and returns the ‘cpuset’ value into a set"},{"line_number":33,"context_line":"of pCPUs."},{"line_number":34,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_d1c42110","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":33},"in_reply_to":"3fa7e38b_4bc96722","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A helper method _get_shared_cpuset was added to NUMALiveMigrationTest as"},{"line_number":31,"context_line":"well. It parses an instance’s xml for the ‘cpuset’ attribute found in"},{"line_number":32,"context_line":"the vcpu tag. It then converts and returns the ‘cpuset’ value into a set"},{"line_number":33,"context_line":"of pCPUs."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_6bcea32d","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":8},"updated":"2020-01-31 09:36:53.000000000","message":"\u0027vcpu\u0027","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"A helper method _get_shared_cpuset was added to NUMALiveMigrationTest as"},{"line_number":31,"context_line":"well. It parses an instance’s xml for the ‘cpuset’ attribute found in"},{"line_number":32,"context_line":"the vcpu tag. It then converts and returns the ‘cpuset’ value into a set"},{"line_number":33,"context_line":"of pCPUs."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_71c9ad22","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":8},"in_reply_to":"3fa7e38b_6bcea32d","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8bf5f75d4f0dee9d64d0f1949d09f6bcc073eef0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"determines the host CPUs needed for each parameter and generates the"},{"line_number":34,"context_line":"appropriate string configuration to add to nova.conf."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"},{"line_number":37,"context_line":"[2] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1693372"},{"line_number":38,"context_line":"[3] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1222414"},{"line_number":39,"context_line":"[4] https://review.rdoproject.org/r/gitweb?p\u003dopenstack/whitebox-tempest-plugin.git;a\u003dblob_plain;f\u003dwhitebox_tempest_plugin/api/compute/test_cpu_pinning.py;hb\u003drefs/changes/70/18070/52"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_82d1c4cc","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":81},"updated":"2020-02-13 09:32:05.000000000","message":"Wrong blueprint. You want https://blueprints.launchpad.net/nova/+spec/cpu-resources","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"bc480b5715cc54b598edc9c65045cd4cfbab8941","unresolved":false,"context_lines":[{"line_number":33,"context_line":"determines the host CPUs needed for each parameter and generates the"},{"line_number":34,"context_line":"appropriate string configuration to add to nova.conf."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"},{"line_number":37,"context_line":"[2] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1693372"},{"line_number":38,"context_line":"[3] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1222414"},{"line_number":39,"context_line":"[4] https://review.rdoproject.org/r/gitweb?p\u003dopenstack/whitebox-tempest-plugin.git;a\u003dblob_plain;f\u003dwhitebox_tempest_plugin/api/compute/test_cpu_pinning.py;hb\u003drefs/changes/70/18070/52"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_8b655ce4","line":36,"range":{"start_line":36,"start_character":4,"end_line":36,"end_character":81},"in_reply_to":"3fa7e38b_82d1c4cc","updated":"2020-02-13 13:35:39.000000000","message":"Done","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8bf5f75d4f0dee9d64d0f1949d09f6bcc073eef0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"[2] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1693372"},{"line_number":38,"context_line":"[3] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1222414"},{"line_number":39,"context_line":"[4] https://review.rdoproject.org/r/gitweb?p\u003dopenstack/whitebox-tempest-plugin.git;a\u003dblob_plain;f\u003dwhitebox_tempest_plugin/api/compute/test_cpu_pinning.py;hb\u003drefs/changes/70/18070/52"},{"line_number":40,"context_line":"Change-Id: If9eab53861079a1ca1530f6dd56ee0f39216077f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_02ef1486","line":40,"updated":"2020-02-13 09:32:05.000000000","message":"nit: a newline before this would be nice","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"bc480b5715cc54b598edc9c65045cd4cfbab8941","unresolved":false,"context_lines":[{"line_number":37,"context_line":"[2] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1693372"},{"line_number":38,"context_line":"[3] https://bugzilla.redhat.com/show_bug.cgi?id\u003d1222414"},{"line_number":39,"context_line":"[4] https://review.rdoproject.org/r/gitweb?p\u003dopenstack/whitebox-tempest-plugin.git;a\u003dblob_plain;f\u003dwhitebox_tempest_plugin/api/compute/test_cpu_pinning.py;hb\u003drefs/changes/70/18070/52"},{"line_number":40,"context_line":"Change-Id: If9eab53861079a1ca1530f6dd56ee0f39216077f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_eb6ad0b1","line":40,"in_reply_to":"3fa7e38b_02ef1486","updated":"2020-02-13 13:35:39.000000000","message":"Done","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Added instance collocation migration test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a two stage test meant to test both Nova feature [1] as well as"},{"line_number":10,"context_line":"Nova bug 1289064. The first stage tests basic colocation of instances"},{"line_number":11,"context_line":"using shared and dedicated cpu policies. With a two compute host"},{"line_number":12,"context_line":"deployment, create two instances on each host. On each host, one"},{"line_number":13,"context_line":"instance should use a standard cpu policy and the other should use a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9f560f44_03c37b58","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":16},"updated":"2020-08-24 19:15:50.000000000","message":"I think you\u0027re better off just saying NUMA live migration, it brings up more context in all of our heads than a 6 year old bug ;)","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Added instance collocation migration test"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a two stage test meant to test both Nova feature [1] as well as"},{"line_number":10,"context_line":"Nova bug 1289064. The first stage tests basic colocation of instances"},{"line_number":11,"context_line":"using shared and dedicated cpu policies. With a two compute host"},{"line_number":12,"context_line":"deployment, create two instances on each host. On each host, one"},{"line_number":13,"context_line":"instance should use a standard cpu policy and the other should use a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9f560f44_c38503af","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":16},"in_reply_to":"9f560f44_03c37b58","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":51,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"},{"line_number":52,"context_line":"[2] https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id67"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Depends-on: https://review.opendev.org/#/c/731557/"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Change-Id: If9eab53861079a1ca1530f6dd56ee0f39216077f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9f560f44_638a371b","line":54,"updated":"2020-08-24 19:15:50.000000000","message":"Don\u0027t need this anymore.","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"[1] https://blueprints.launchpad.net/nova/+spec/use-pcpu-and-vcpu-in-one-instance"},{"line_number":52,"context_line":"[2] https://docs.openstack.org/nova/latest/reference/api-microversion-history.html#id67"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Depends-on: https://review.opendev.org/#/c/731557/"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Change-Id: If9eab53861079a1ca1530f6dd56ee0f39216077f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"9f560f44_038c1bd5","line":54,"in_reply_to":"9f560f44_638a371b","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"}],"whitebox_tempest_plugin/api/compute/test_cpu_pinning.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    @testtools.skipUnless(compute."},{"line_number":757,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":758,"context_line":"                          \u0027SameHostFilter is required.\u0027)"},{"line_number":759,"context_line":"    def test_collocation_migration(self):"},{"line_number":760,"context_line":"        hv1, hv2 \u003d self.get_all_hypervisors()"},{"line_number":761,"context_line":"        numaclient_1 \u003d clients.NUMAClient(hv1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_2bd0abc6","line":758,"updated":"2020-01-31 09:36:53.000000000","message":"Why?","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    @testtools.skipUnless(compute."},{"line_number":757,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":758,"context_line":"                          \u0027SameHostFilter is required.\u0027)"},{"line_number":759,"context_line":"    def test_collocation_migration(self):"},{"line_number":760,"context_line":"        hv1, hv2 \u003d self.get_all_hypervisors()"},{"line_number":761,"context_line":"        numaclient_1 \u003d clients.NUMAClient(hv1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_c8da3349","line":758,"in_reply_to":"3fa7e38b_2bd0abc6","updated":"2020-01-31 19:13:42.000000000","message":"I wanted to ensure the shared instances were on separate hosts to do migration later on in the test.  Is it safe to assume that the scheduler will always place the second \u0027shared\u0027 instance on a host with free pCPU\u0027s or is there it chance it may end up on the same host as the first shared instance?","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":758,"context_line":"                          \u0027SameHostFilter is required.\u0027)"},{"line_number":759,"context_line":"    def test_collocation_migration(self):"},{"line_number":760,"context_line":"        hv1, hv2 \u003d self.get_all_hypervisors()"},{"line_number":761,"context_line":"        numaclient_1 \u003d clients.NUMAClient(hv1)"},{"line_number":762,"context_line":"        numaclient_2 \u003d clients.NUMAClient(hv2)"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_8be8bf7e","line":760,"updated":"2020-01-31 09:36:53.000000000","message":"I wonder should we check that there are in fact (only) two hypervisors here?\n\n  hypervisors \u003d self.get_all_hypervisors()\n  if len(hypervisors) !\u003d 2:\n      ...","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":758,"context_line":"                          \u0027SameHostFilter is required.\u0027)"},{"line_number":759,"context_line":"    def test_collocation_migration(self):"},{"line_number":760,"context_line":"        hv1, hv2 \u003d self.get_all_hypervisors()"},{"line_number":761,"context_line":"        numaclient_1 \u003d clients.NUMAClient(hv1)"},{"line_number":762,"context_line":"        numaclient_2 \u003d clients.NUMAClient(hv2)"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d1dae11a","line":760,"in_reply_to":"3fa7e38b_8be8bf7e","updated":"2020-01-31 19:13:42.000000000","message":"NUMALiveMigrationTest.skip_checks will checkfor min/max compute nodes and should only allow deployments with two hypervisors. I can certainly add a check if the skip_checks somehow fails though.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":772,"context_line":"        # All NUMA nodes need to have same number of CPUs"},{"line_number":773,"context_line":"        cpus_per_node \u003d self._get_cpus_per_node(topo_1.values(),"},{"line_number":774,"context_line":"                                                topo_2.values())"},{"line_number":775,"context_line":"        if len(cpus_per_node) !\u003d 1:"},{"line_number":776,"context_line":"            raise self.skipException(\u0027NUMA nodes must have same number of \u0027"},{"line_number":777,"context_line":"                                     \u0027CPUs\u0027)"},{"line_number":778,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_ab925bfa","line":775,"updated":"2020-01-31 09:36:53.000000000","message":"This confused me for a bit. This will return a set of possible CPU sizes. Because it\u0027s a set, if everything\u0027s the same size there\u0027ll only be one element.\n\nWith that said, there\u0027s no reason this has to be the case. We\u0027re setting the \u0027[compute] cpu_(shared|dedicated)_set\u0027 flags on each host independently. So long as there are two NUMA nodes, we\u0027re golden\n\nLater: come to think of it, there\u0027s not even a reason for us to have multiple NUMA nodes. We could easily code this to support a single NUMA node - we just split the host cores in half. The only check we\u0027d have to add here is that num_host_cores \u003e\u003d flavor_cores * 2. This particular point could be addressed later though, so a TODO would be fine","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":772,"context_line":"        # All NUMA nodes need to have same number of CPUs"},{"line_number":773,"context_line":"        cpus_per_node \u003d self._get_cpus_per_node(topo_1.values(),"},{"line_number":774,"context_line":"                                                topo_2.values())"},{"line_number":775,"context_line":"        if len(cpus_per_node) !\u003d 1:"},{"line_number":776,"context_line":"            raise self.skipException(\u0027NUMA nodes must have same number of \u0027"},{"line_number":777,"context_line":"                                     \u0027CPUs\u0027)"},{"line_number":778,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_68be9f02","line":775,"in_reply_to":"3fa7e38b_ab925bfa","updated":"2020-01-31 19:13:42.000000000","message":"No I agree as long as every potential compute has the capacity to hold a dedicated instance and a shared instance, requiring multi-numa should not be necessary.  I will re implement to address cores at the host level versus focusing on NUMA node count.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        hv1_sm \u003d clients.ServiceManager(hv1, \u0027nova-compute\u0027)"},{"line_number":780,"context_line":"        hv2_sm \u003d clients.ServiceManager(hv2, \u0027nova-compute\u0027)"},{"line_number":781,"context_line":"        with hv1_sm.config_option(\u0027compute\u0027,"},{"line_number":782,"context_line":"                                  \u0027cpu_dedicated_set\u0027,"},{"line_number":783,"context_line":"                                  self._get_cpu_spec(topo_1[0])), \\"},{"line_number":784,"context_line":"                hv1_sm.config_option(\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_4b9727ec","line":781,"updated":"2020-01-31 09:36:53.000000000","message":"We should poach the \u0027nested\u0027 helper from \u0027nova.test\u0027","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":778,"context_line":""},{"line_number":779,"context_line":"        hv1_sm \u003d clients.ServiceManager(hv1, \u0027nova-compute\u0027)"},{"line_number":780,"context_line":"        hv2_sm \u003d clients.ServiceManager(hv2, \u0027nova-compute\u0027)"},{"line_number":781,"context_line":"        with hv1_sm.config_option(\u0027compute\u0027,"},{"line_number":782,"context_line":"                                  \u0027cpu_dedicated_set\u0027,"},{"line_number":783,"context_line":"                                  self._get_cpu_spec(topo_1[0])), \\"},{"line_number":784,"context_line":"                hv1_sm.config_option(\u0027compute\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f1403da6","line":781,"in_reply_to":"3fa7e38b_4b9727ec","updated":"2020-01-31 19:13:42.000000000","message":"Do you mind providing a pointer? I have another commit [1] to setup context management for \u0027n\u0027 hosts versus a predetermined amount. If there is a well established approach I would not mind trying to implement the method.  \n\n\n[1] https://review.opendev.org/gitweb?p\u003dx/whitebox-tempest-plugin.git;f\u003dwhitebox_tempest_plugin/api/compute/test_cpu_pinning.py;hb\u003drefs/changes/43/687643/15#l543","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            # Servers A and C should be pinned to pCPUs on NUMA 0 of their"},{"line_number":796,"context_line":"            # repsective host and servers B and D should float on"},{"line_number":797,"context_line":"            # NUMA 1 of their respective host"},{"line_number":798,"context_line":"            dedi_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]),"},{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_cb8a37bc","line":798,"range":{"start_line":798,"start_character":12,"end_line":798,"end_character":23},"updated":"2020-01-31 09:36:53.000000000","message":"nit: dedicated_flavor","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":795,"context_line":"            # Servers A and C should be pinned to pCPUs on NUMA 0 of their"},{"line_number":796,"context_line":"            # repsective host and servers B and D should float on"},{"line_number":797,"context_line":"            # NUMA 1 of their respective host"},{"line_number":798,"context_line":"            dedi_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]),"},{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_71068d77","line":798,"range":{"start_line":798,"start_character":12,"end_line":798,"end_character":23},"in_reply_to":"3fa7e38b_cb8a37bc","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":798,"context_line":"            dedi_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]),"},{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_eb87f3b2","line":801,"range":{"start_line":801,"start_character":12,"end_line":801,"end_character":24},"updated":"2020-01-31 09:36:53.000000000","message":"nit: shared_flavor","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":798,"context_line":"            dedi_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]),"},{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_910b097b","line":801,"range":{"start_line":801,"start_character":12,"end_line":801,"end_character":24},"in_reply_to":"3fa7e38b_eb87f3b2","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"},{"line_number":805,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_abbb3b72","line":802,"range":{"start_line":802,"start_character":12,"end_line":802,"end_character":25},"updated":"2020-01-31 09:36:53.000000000","message":"nit: dedicated_server_a\n\n(and so forth)","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":799,"context_line":"                                             extra_specs\u003dself."},{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"},{"line_number":805,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_312015fa","line":802,"range":{"start_line":802,"start_character":12,"end_line":802,"end_character":25},"in_reply_to":"3fa7e38b_abbb3b72","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"},{"line_number":805,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"},{"line_number":806,"context_line":"                                        server_dedi_a[\u0027id\u0027]})"},{"line_number":807,"context_line":"            server_dedi_c \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_8bb67f8c","line":804,"range":{"start_line":803,"start_character":29,"end_line":804,"end_character":16},"updated":"2020-01-31 09:36:53.000000000","message":"nit: you don\u0027t need the backslash. Just move the function call up. Ditto below.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":800,"context_line":"                                             dedicated_cpu_policy)"},{"line_number":801,"context_line":"            share_flavor \u003d self.create_flavor(vcpus\u003dlen(topo_1[0]))"},{"line_number":802,"context_line":"            server_dedi_a \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"},{"line_number":803,"context_line":"            server_shared_b \u003d \\"},{"line_number":804,"context_line":"                self.create_test_server(flavor\u003dshare_flavor[\u0027id\u0027],"},{"line_number":805,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"},{"line_number":806,"context_line":"                                        server_dedi_a[\u0027id\u0027]})"},{"line_number":807,"context_line":"            server_dedi_c \u003d self.create_test_server(flavor\u003ddedi_flavor[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_511d91bd","line":804,"range":{"start_line":803,"start_character":29,"end_line":804,"end_character":16},"in_reply_to":"3fa7e38b_8bb67f8c","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"},{"line_number":811,"context_line":"                                        server_dedi_c[\u0027id\u0027]})"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"            # Servers A and C should have identical NUMA topos and pin sets"},{"line_number":814,"context_line":"            # from the nova database"},{"line_number":815,"context_line":"            db_topo_a \u003d self._get_db_numa_topology(server_dedi_a[\u0027id\u0027])"},{"line_number":816,"context_line":"            db_pins_a \u003d self._get_cpu_pins_from_db_topology(db_topo_a)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_eba05339","line":813,"range":{"start_line":813,"start_character":67,"end_line":813,"end_character":75},"updated":"2020-01-31 09:36:53.000000000","message":"...but this isn\u0027t necessarily. It\u0027s an implementation detail. Do we really need to check this? It seems rather brittle","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"},{"line_number":811,"context_line":"                                        server_dedi_c[\u0027id\u0027]})"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"            # Servers A and C should have identical NUMA topos and pin sets"},{"line_number":814,"context_line":"            # from the nova database"},{"line_number":815,"context_line":"            db_topo_a \u003d self._get_db_numa_topology(server_dedi_a[\u0027id\u0027])"},{"line_number":816,"context_line":"            db_pins_a \u003d self._get_cpu_pins_from_db_topology(db_topo_a)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_cba31744","line":813,"range":{"start_line":813,"start_character":30,"end_line":813,"end_character":62},"updated":"2020-01-31 09:36:53.000000000","message":"this is true","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":810,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"},{"line_number":811,"context_line":"                                        server_dedi_c[\u0027id\u0027]})"},{"line_number":812,"context_line":""},{"line_number":813,"context_line":"            # Servers A and C should have identical NUMA topos and pin sets"},{"line_number":814,"context_line":"            # from the nova database"},{"line_number":815,"context_line":"            db_topo_a \u003d self._get_db_numa_topology(server_dedi_a[\u0027id\u0027])"},{"line_number":816,"context_line":"            db_pins_a \u003d self._get_cpu_pins_from_db_topology(db_topo_a)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_e82fef54","line":813,"range":{"start_line":813,"start_character":67,"end_line":813,"end_character":75},"in_reply_to":"3fa7e38b_eba05339","updated":"2020-01-31 19:13:42.000000000","message":"Based on line 775 comment, will do comparison of pin pCPU\u0027s to their relative host\u0027s configured cpu_dedicated_set instead of each other.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                             \u0027instead have %s and %s\u0027 % (db_pins_a,"},{"line_number":822,"context_line":"                                                         db_pins_c))"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"            # Domain xml should have identical pin sets for both"},{"line_number":825,"context_line":"            # server A and server C"},{"line_number":826,"context_line":"            pin_a \u003d self.get_pinning_as_set(server_dedi_a[\u0027id\u0027])"},{"line_number":827,"context_line":"            pin_c \u003d self.get_pinning_as_set(server_dedi_c[\u0027id\u0027])"},{"line_number":828,"context_line":"            self.assertTrue(pin_a and pin_c,"},{"line_number":829,"context_line":"                            \u0027Pinned pCPU sets should be identical: \u0027"},{"line_number":830,"context_line":"                            \u0027%s, %s\u0027 % (pin_a, pin_c))"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"            # Servers B and D should not have a pin set and instead"},{"line_number":833,"context_line":"            # have the same cpuset they float across"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_ab601b0e","line":830,"range":{"start_line":824,"start_character":0,"end_line":830,"end_character":54},"updated":"2020-01-31 09:36:53.000000000","message":"I think this is the wrong check. You don\u0027t need to care whether they\u0027re identical. You just need to make sure they\u0027re on the cores from \u0027[compute] cpu_dedicated_set\u0027 or \u0027[compute] cpu_shared_set\u0027. You could make this whole thing less brittle if you avoided making this assumption","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":821,"context_line":"                             \u0027instead have %s and %s\u0027 % (db_pins_a,"},{"line_number":822,"context_line":"                                                         db_pins_c))"},{"line_number":823,"context_line":""},{"line_number":824,"context_line":"            # Domain xml should have identical pin sets for both"},{"line_number":825,"context_line":"            # server A and server C"},{"line_number":826,"context_line":"            pin_a \u003d self.get_pinning_as_set(server_dedi_a[\u0027id\u0027])"},{"line_number":827,"context_line":"            pin_c \u003d self.get_pinning_as_set(server_dedi_c[\u0027id\u0027])"},{"line_number":828,"context_line":"            self.assertTrue(pin_a and pin_c,"},{"line_number":829,"context_line":"                            \u0027Pinned pCPU sets should be identical: \u0027"},{"line_number":830,"context_line":"                            \u0027%s, %s\u0027 % (pin_a, pin_c))"},{"line_number":831,"context_line":""},{"line_number":832,"context_line":"            # Servers B and D should not have a pin set and instead"},{"line_number":833,"context_line":"            # have the same cpuset they float across"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_6843ff13","line":830,"range":{"start_line":824,"start_character":0,"end_line":830,"end_character":54},"in_reply_to":"3fa7e38b_ab601b0e","updated":"2020-01-31 19:13:42.000000000","message":"Same as comment on 813, comparisons will be relative to host\u0027s configured cpu_dedicated_pin set and cpu_shared_set instead of each other.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            pin_b \u003d self._get_shared_cpuset(server_shared_b[\u0027id\u0027])"},{"line_number":835,"context_line":"            pin_d \u003d self._get_shared_cpuset(server_shared_d[\u0027id\u0027])"},{"line_number":836,"context_line":"            self.assertEqual(pin_b, pin_d,"},{"line_number":837,"context_line":"                             \u0027CPUSets for should be identical but instead: \u0027"},{"line_number":838,"context_line":"                             \u0027%s, %s\u0027 % (pin_b, pin_d))"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"            # The cpusets of servers B and D should not intersect with the"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_0b6feffb","line":837,"range":{"start_line":837,"start_character":30,"end_line":837,"end_character":37},"updated":"2020-01-31 09:36:53.000000000","message":"nit: CPU sets","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            pin_b \u003d self._get_shared_cpuset(server_shared_b[\u0027id\u0027])"},{"line_number":835,"context_line":"            pin_d \u003d self._get_shared_cpuset(server_shared_d[\u0027id\u0027])"},{"line_number":836,"context_line":"            self.assertEqual(pin_b, pin_d,"},{"line_number":837,"context_line":"                             \u0027CPUSets for should be identical but instead: \u0027"},{"line_number":838,"context_line":"                             \u0027%s, %s\u0027 % (pin_b, pin_d))"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"            # The cpusets of servers B and D should not intersect with the"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_51d031c7","line":837,"range":{"start_line":837,"start_character":30,"end_line":837,"end_character":37},"in_reply_to":"3fa7e38b_0b6feffb","updated":"2020-01-31 19:13:42.000000000","message":"Done","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":846,"context_line":"            # Migrate server B to compute node with server D, they are"},{"line_number":847,"context_line":"            # both using shared set so migration should be successful"},{"line_number":848,"context_line":"            target_host \u003d self.get_host_for_server(server_shared_d[\u0027id\u0027])"},{"line_number":849,"context_line":"            self.live_migrate(server_shared_b[\u0027id\u0027], target_host, \u0027ACTIVE\u0027)"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"            # Delete server C and migrate server A to server C\u0027s host."},{"line_number":852,"context_line":"            # Server A should migrate successfully and should have same"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_0b584f56","line":849,"updated":"2020-01-31 09:36:53.000000000","message":"Oh, see now we\u0027re actually testing another feature here. This is testing the NUMA-aware live migration feature. It does make sense to do that, but if you hadn\u0027t automated this already then you just did","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"98500d5e999377e61bdf6ed64567f265a761a809","unresolved":false,"context_lines":[{"line_number":846,"context_line":"            # Migrate server B to compute node with server D, they are"},{"line_number":847,"context_line":"            # both using shared set so migration should be successful"},{"line_number":848,"context_line":"            target_host \u003d self.get_host_for_server(server_shared_d[\u0027id\u0027])"},{"line_number":849,"context_line":"            self.live_migrate(server_shared_b[\u0027id\u0027], target_host, \u0027ACTIVE\u0027)"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"            # Delete server C and migrate server A to server C\u0027s host."},{"line_number":852,"context_line":"            # Server A should migrate successfully and should have same"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d192e1fb","line":849,"in_reply_to":"3fa7e38b_0b584f56","updated":"2020-01-31 19:13:42.000000000","message":"Right sorry, this should have been documented in the commit message but you are correct it is testing both instance collocation and dedicated live migration in the same test.","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":872,"context_line":"            db_topo_a \u003d self._get_db_numa_topology(server_dedi_a[\u0027id\u0027])"},{"line_number":873,"context_line":"            db_pins_a \u003d self._get_cpu_pins_from_db_topology(db_topo_a)"},{"line_number":874,"context_line":"            self.assertEqual(db_pins_a, db_pins_c,"},{"line_number":875,"context_line":"                             \u0027server a should have identical pinset to \u0027"},{"line_number":876,"context_line":"                             \u0027recently deleted server c but instead \u0027"},{"line_number":877,"context_line":"                             \u0027have %s and %s\u0027 % (db_pins_a, db_pins_c))"},{"line_number":878,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_2b550b20","line":875,"range":{"start_line":875,"start_character":30,"end_line":875,"end_character":31},"updated":"2020-01-31 09:36:53.000000000","message":"S\n\nthough the assumption about identical pinsets is a bad one, as noted before","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"51e632c71d85511b0d0777360519d4949139e81a","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                             \u0027recently deleted server c but instead \u0027"},{"line_number":877,"context_line":"                             \u0027have %s and %s\u0027 % (db_pins_a, db_pins_c))"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"            # NOTE(jparker) Due to Nova bug 1836945, cleanUp methods will fail"},{"line_number":880,"context_line":"            # to delete servers when nova.conf configurations revert.  Need to"},{"line_number":881,"context_line":"            # manually delete the servers in the test method."},{"line_number":882,"context_line":"            self.delete_server(server_dedi_a[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_cb51d733","line":879,"range":{"start_line":879,"start_character":44,"end_line":879,"end_character":51},"updated":"2020-01-31 09:36:53.000000000","message":"TIL","commit_id":"b1ac10ae3e057259a0e0ea46eb152949313e50be"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8bf5f75d4f0dee9d64d0f1949d09f6bcc073eef0","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            min_cpus +\u003d num_shared"},{"line_number":193,"context_line":"            cpu_shared_set \u003d \u0027,\u0027.join(map(str, range("},{"line_number":194,"context_line":"                num_cpu_dedicated, num_cpu_dedicated + num_shared)))"},{"line_number":195,"context_line":"        return (min_cpus, cpu_dedicated_set, cpu_shared_set)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class CPUPolicyTest(BasePinningTest):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_42f0ac60","line":195,"updated":"2020-02-13 09:32:05.000000000","message":"This is going to be problematic for multi-node hosts because you\u0027re going to end up with cores from different host NUMA nodes.","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"bc480b5715cc54b598edc9c65045cd4cfbab8941","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            min_cpus +\u003d num_shared"},{"line_number":193,"context_line":"            cpu_shared_set \u003d \u0027,\u0027.join(map(str, range("},{"line_number":194,"context_line":"                num_cpu_dedicated, num_cpu_dedicated + num_shared)))"},{"line_number":195,"context_line":"        return (min_cpus, cpu_dedicated_set, cpu_shared_set)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class CPUPolicyTest(BasePinningTest):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_cb4ef46b","line":195,"in_reply_to":"3fa7e38b_42f0ac60","updated":"2020-02-13 13:35:39.000000000","message":"Done, per advice on line 790.  Do you mind clarifying a couple things though. I was under the impression that as long as hw:numa_nodes\u003d1 is not explicitly set and if there are no associated PCI/SRIOV affinity involved then a multi vcpu instance can pin cross NUMA, is that not valid? Also what is the suggested deployment approach in the field? Is it all pCPUs from say N NUMA different nodes are allocated as dedicated or would each NUMA node be broken up as X for host, Y for dedicated, and Z for shared?  Or is it simply each customer has their own approach?","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8ed297e5a048c8e3a95712ecbd1c801c878b8e60","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            min_cpus +\u003d num_shared"},{"line_number":193,"context_line":"            cpu_shared_set \u003d \u0027,\u0027.join(map(str, range("},{"line_number":194,"context_line":"                num_cpu_dedicated, num_cpu_dedicated + num_shared)))"},{"line_number":195,"context_line":"        return (min_cpus, cpu_dedicated_set, cpu_shared_set)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"class CPUPolicyTest(BasePinningTest):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_abfeea04","line":195,"in_reply_to":"3fa7e38b_cb4ef46b","updated":"2020-02-17 17:22:09.000000000","message":"\u003e Done, per advice on line 790.  Do you mind clarifying a couple\n \u003e things though. I was under the impression that as long as\n \u003e hw:numa_nodes\u003d1 is not explicitly set and if there are no\n \u003e associated PCI/SRIOV affinity involved then a multi vcpu instance\n \u003e can pin cross NUMA, is that not valid?\n\nAn instance\u0027s NUMA node will always be pinned to a single host NUMA node, and an instance will get a NUMA topology if you either enable it explicitly (through that \u0027hw:numa_nodes\u0027 extra spec) or implicitly (through use of CPU pinning, hugepages, or vPMEM). In this case, I\u0027m concerned about the pinned case. \n\n \u003e Also what is the suggested\n \u003e deployment approach in the field? Is it all pCPUs from say N NUMA\n \u003e different nodes are allocated as dedicated or would each NUMA node\n \u003e be broken up as X for host, Y for dedicated, and Z for shared?  Or\n \u003e is it simply each customer has their own approach?\n\nVery much per customer. We normally recommend at least the first core (+ thread sibling) on each socket is reserved for the host but until now, it wasn\u0027t possible have pinned and unpinned cores on the same host. Now, I guess the only hard advice we\u0027d have is to continue reserving the first cores for the host and to make sure you don\u0027t assign a core to one set (e.g. shared) and its thread sibling to another (e.g. dedicated)","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8bf5f75d4f0dee9d64d0f1949d09f6bcc073eef0","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        # and one instance of the shared flavor vcpu size"},{"line_number":788,"context_line":"        min_cpus, cpu_dedicated_str, cpu_shared_str \u003d \\"},{"line_number":789,"context_line":"            self._get_cpu_configs(2 * dedicated_flavor_vcpus,"},{"line_number":790,"context_line":"                                  shared_flavor_vcpus)"},{"line_number":791,"context_line":"        for numaclient in [numaclient_1, numaclient_2]:"},{"line_number":792,"context_line":"            if numaclient.get_num_cpus() \u003c min_cpus:"},{"line_number":793,"context_line":"                raise self.skipException(\u0027Need %d CPUs on the host but only \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_dd48fd62","line":790,"updated":"2020-02-13 09:32:05.000000000","message":"This seems overly complicated and could prove problematic as noted above. Could just simply assign half of our cores to dedicated and half to shared? For multi-node hosts, that would likely mean one or two sockets for each, while for single node hosts that would me literally half of the CPUs. We can get the node information from \u0027NUMAClient.get_host_topology\u0027 so something as trivial as:\n\n\n    def get_cpu_sets():\n        topology \u003d numaclient.get_host_topology()\n        if len(topology) \u003d\u003d 1:  # single-node host, split the node\n            cpu_shared_set \u003d set(topology[0][:len(topology[0])//2])\n            cpu_dedicated_set \u003d set(topology[0][len(topology[0])//2:])\n        else:  # multi-node host, use the first two nodes\n            cpu_shared_set \u003d set(topology[0])\n            cpu_dedicated_set \u003d set(topology[1])\n\n        assert len(cpu_shared_set) \u003e\u003d 2\n        assert len(cpu_dedicated_set) \u003e\u003d 2\n\n        return cpu_shared_set, cpu_dedicated_set\n\nThis would mean setting different values on each host but that\u0027s not a bad thing for users whose compute hosts are homogeneous","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"bc480b5715cc54b598edc9c65045cd4cfbab8941","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        # and one instance of the shared flavor vcpu size"},{"line_number":788,"context_line":"        min_cpus, cpu_dedicated_str, cpu_shared_str \u003d \\"},{"line_number":789,"context_line":"            self._get_cpu_configs(2 * dedicated_flavor_vcpus,"},{"line_number":790,"context_line":"                                  shared_flavor_vcpus)"},{"line_number":791,"context_line":"        for numaclient in [numaclient_1, numaclient_2]:"},{"line_number":792,"context_line":"            if numaclient.get_num_cpus() \u003c min_cpus:"},{"line_number":793,"context_line":"                raise self.skipException(\u0027Need %d CPUs on the host but only \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_8b3c7cc0","line":790,"in_reply_to":"3fa7e38b_dd48fd62","updated":"2020-02-13 13:35:39.000000000","message":"Done.","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8bf5f75d4f0dee9d64d0f1949d09f6bcc073eef0","unresolved":false,"context_lines":[{"line_number":821,"context_line":"            # a server with a cpu_dedicated policy and a server that will"},{"line_number":822,"context_line":"            # float across the respective host\u0027s cpu_shared_set"},{"line_number":823,"context_line":"            dedicated_server_a \u003d \\"},{"line_number":824,"context_line":"                self.create_test_server(flavor\u003ddedicated_flavor[\u0027id\u0027])"},{"line_number":825,"context_line":"            shared_server_b \u003d \\"},{"line_number":826,"context_line":"                self.create_test_server(flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":827,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_5daacdd2","line":824,"updated":"2020-02-13 09:32:05.000000000","message":"style nit: odd wrapping here. How about:\n\n  server_a_dedicated \u003d self.create_test_server(\n      flavor\u003ddedicated_flavor[\u0027id\u0027],\n  )\n  server_b_shared \u003d self.create_test_server(\n      flavor\u003dshared_flavor[\u0027id\u0027],\n      scheduler_hints\u003d{\u0027same_host\u0027: server_a_dedicated[\u0027id\u0027]},\n  )\n  ...","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"bc480b5715cc54b598edc9c65045cd4cfbab8941","unresolved":false,"context_lines":[{"line_number":821,"context_line":"            # a server with a cpu_dedicated policy and a server that will"},{"line_number":822,"context_line":"            # float across the respective host\u0027s cpu_shared_set"},{"line_number":823,"context_line":"            dedicated_server_a \u003d \\"},{"line_number":824,"context_line":"                self.create_test_server(flavor\u003ddedicated_flavor[\u0027id\u0027])"},{"line_number":825,"context_line":"            shared_server_b \u003d \\"},{"line_number":826,"context_line":"                self.create_test_server(flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":827,"context_line":"                                        scheduler_hints\u003d{\u0027same_host\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_4b42043e","line":824,"in_reply_to":"3fa7e38b_5daacdd2","updated":"2020-02-13 13:35:39.000000000","message":"Done.","commit_id":"b3f16a50e120900d52504aba8c80404a88c1108c"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"16a35a2154820ff7d6049da1f336a68afd345fb4","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        return_list \u003d []"},{"line_number":533,"context_line":"        # Remove vcpus that should be excluded from ranges and track them"},{"line_number":534,"context_line":"        # in skip_vcpus list"},{"line_number":535,"context_line":"        skip_vcpus \u003d [int(cpu_list.pop(cpu_list.index(x))[1:])"},{"line_number":536,"context_line":"                      for x in cpu_list if \u0027^\u0027 in x]"},{"line_number":537,"context_line":"        for cpu in cpu_list:"},{"line_number":538,"context_line":"            if \u0027-\u0027 in cpu:"},{"line_number":539,"context_line":"                start, end \u003d cpu.split(\u0027-\u0027)"},{"line_number":540,"context_line":"                return_list +\u003d [x for x in range(int(start), int(end) + 1)"},{"line_number":541,"context_line":"                                if x not in skip_vcpus]"},{"line_number":542,"context_line":"            else:"},{"line_number":543,"context_line":"                return_list.append(int(cpu))"},{"line_number":544,"context_line":"        return set(return_list)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_da21f7fd","line":543,"range":{"start_line":535,"start_character":0,"end_line":543,"end_character":44},"updated":"2020-03-24 20:31:12.000000000","message":"parse_cpu_spec() will do all of this for you","commit_id":"d11dfc0d34d046a3a74f29ec0ef20494d19052f5"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"29918c0bd3e56321f4ee183fc5c8fd09e14116fc","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        return_list \u003d []"},{"line_number":533,"context_line":"        # Remove vcpus that should be excluded from ranges and track them"},{"line_number":534,"context_line":"        # in skip_vcpus list"},{"line_number":535,"context_line":"        skip_vcpus \u003d [int(cpu_list.pop(cpu_list.index(x))[1:])"},{"line_number":536,"context_line":"                      for x in cpu_list if \u0027^\u0027 in x]"},{"line_number":537,"context_line":"        for cpu in cpu_list:"},{"line_number":538,"context_line":"            if \u0027-\u0027 in cpu:"},{"line_number":539,"context_line":"                start, end \u003d cpu.split(\u0027-\u0027)"},{"line_number":540,"context_line":"                return_list +\u003d [x for x in range(int(start), int(end) + 1)"},{"line_number":541,"context_line":"                                if x not in skip_vcpus]"},{"line_number":542,"context_line":"            else:"},{"line_number":543,"context_line":"                return_list.append(int(cpu))"},{"line_number":544,"context_line":"        return set(return_list)"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_5aea0775","line":543,"range":{"start_line":535,"start_character":0,"end_line":543,"end_character":44},"in_reply_to":"df33271e_da21f7fd","updated":"2020-03-24 20:33:10.000000000","message":"Done","commit_id":"d11dfc0d34d046a3a74f29ec0ef20494d19052f5"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"14654d936d8e2e5e2e360260f7728574478e0857","unresolved":false,"context_lines":[{"line_number":545,"context_line":""},{"line_number":546,"context_line":"    @staticmethod"},{"line_number":547,"context_line":"    def _get_dedicated_and_shared_sets(numaclient):"},{"line_number":548,"context_line":"        # This function assumes CONF.whitebox.min_pcpu_per_numa_node"},{"line_number":549,"context_line":"        # is configured to 2 or more CPUs"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        topology \u003d numaclient.get_host_topology()"}],"source_content_type":"text/x-python","patch_set":4,"id":"df33271e_9a6c8f37","line":548,"updated":"2020-03-24 20:26:13.000000000","message":"Based on current patchset this comment is not relevant, will remove if new parameter is needed in whitebox section for tempest.conf","commit_id":"d11dfc0d34d046a3a74f29ec0ef20494d19052f5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                cursor.fetchone()[\u0027numa_topology\u0027])"},{"line_number":177,"context_line":"        return numa_topology"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _get_cpu_configs(self, num_cpu_dedicated, num_shared):"},{"line_number":180,"context_line":"        \"\"\"Given how many CPUs should be in cpu_dedicated_set and"},{"line_number":181,"context_line":"        cpu_shared_set, calculate 3 things:"},{"line_number":182,"context_line":"        - total # of CPUs required on the host"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_d56c0138","line":179,"updated":"2020-03-26 19:00:29.000000000","message":"Is this still needed?","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                cursor.fetchone()[\u0027numa_topology\u0027])"},{"line_number":177,"context_line":"        return numa_topology"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _get_cpu_configs(self, num_cpu_dedicated, num_shared):"},{"line_number":180,"context_line":"        \"\"\"Given how many CPUs should be in cpu_dedicated_set and"},{"line_number":181,"context_line":"        cpu_shared_set, calculate 3 things:"},{"line_number":182,"context_line":"        - total # of CPUs required on the host"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_55c75113","line":179,"in_reply_to":"df33271e_d56c0138","updated":"2020-03-26 19:13:59.000000000","message":"Nope this should be removed, thanks.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"854b392390592434ab089307d9db681042452a5d","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        if (CONF.compute.min_compute_nodes \u003c 2 or"},{"line_number":462,"context_line":"                CONF.whitebox.max_compute_nodes \u003e 2):"},{"line_number":463,"context_line":"            raise cls.skipException(\u0027Exactly 2 compute nodes required.\u0027)"},{"line_number":464,"context_line":"        if not compute.is_scheduler_filter_enabled(\u0027DifferentHostFilter\u0027):"},{"line_number":465,"context_line":"            raise cls.skipException(\u0027DifferentHostFilter required.\u0027)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def get_pinning_as_set(self, server_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_756534e1","line":464,"updated":"2020-03-26 19:18:33.000000000","message":"Ah yeah, here\u0027s the DifferentHostFilter skip check.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        all cells and guest vCPUs."},{"line_number":497,"context_line":"        \"\"\""},{"line_number":498,"context_line":"        pcpus \u003d set()"},{"line_number":499,"context_line":"        for _, pins in cpu_pins.items():"},{"line_number":500,"context_line":"            pcpus.update(set(pins.values()))"},{"line_number":501,"context_line":"        return pcpus"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_b5785d2b","line":499,"updated":"2020-03-26 19:00:29.000000000","message":"nit: unrelated change","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"64548ffcc44cd325343fefad36c79e26afcc8a18","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        all cells and guest vCPUs."},{"line_number":497,"context_line":"        \"\"\""},{"line_number":498,"context_line":"        pcpus \u003d set()"},{"line_number":499,"context_line":"        for _, pins in cpu_pins.items():"},{"line_number":500,"context_line":"            pcpus.update(set(pins.values()))"},{"line_number":501,"context_line":"        return pcpus"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_95a3989e","line":499,"in_reply_to":"df33271e_35f3ad75","updated":"2020-03-26 19:45:40.000000000","message":"Done","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"854b392390592434ab089307d9db681042452a5d","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        all cells and guest vCPUs."},{"line_number":497,"context_line":"        \"\"\""},{"line_number":498,"context_line":"        pcpus \u003d set()"},{"line_number":499,"context_line":"        for _, pins in cpu_pins.items():"},{"line_number":500,"context_line":"            pcpus.update(set(pins.values()))"},{"line_number":501,"context_line":"        return pcpus"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_159ca8be","line":499,"in_reply_to":"df33271e_35f3ad75","updated":"2020-03-26 19:18:33.000000000","message":"Yeah, a different trivial patch would be better.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        all cells and guest vCPUs."},{"line_number":497,"context_line":"        \"\"\""},{"line_number":498,"context_line":"        pcpus \u003d set()"},{"line_number":499,"context_line":"        for _, pins in cpu_pins.items():"},{"line_number":500,"context_line":"            pcpus.update(set(pins.values()))"},{"line_number":501,"context_line":"        return pcpus"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_35f3ad75","line":499,"in_reply_to":"df33271e_b5785d2b","updated":"2020-03-26 19:13:59.000000000","message":"Should I leave this as it was before, in this case \u0027cell\u0027? Noticed it was an unused variable and was changing it, should it be done in a separate patch?","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            dedicated_server_a \u003d self.create_test_server("},{"line_number":808,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027]"},{"line_number":809,"context_line":"            )"},{"line_number":810,"context_line":"            shared_server_b \u003d self.create_test_server("},{"line_number":811,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":812,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":813,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_75ea55ac","line":810,"range":{"start_line":810,"start_character":12,"end_line":810,"end_character":27},"updated":"2020-03-26 19:00:29.000000000","message":"Could we call this shared_server_a, if it\u0027s on the same compute as dedicated_server_a?","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":807,"context_line":"            dedicated_server_a \u003d self.create_test_server("},{"line_number":808,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027]"},{"line_number":809,"context_line":"            )"},{"line_number":810,"context_line":"            shared_server_b \u003d self.create_test_server("},{"line_number":811,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":812,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":813,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_15aca932","line":810,"range":{"start_line":810,"start_character":12,"end_line":810,"end_character":27},"in_reply_to":"df33271e_75ea55ac","updated":"2020-03-26 19:13:59.000000000","message":"Yeah if this naming scheme is not very clear I can update it accordingly to show they land on the same host.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            )"},{"line_number":810,"context_line":"            shared_server_b \u003d self.create_test_server("},{"line_number":811,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":812,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":813,"context_line":"            )"},{"line_number":814,"context_line":"            dedicated_server_c \u003d self.create_test_server("},{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_35928d4c","line":812,"range":{"start_line":812,"start_character":34,"end_line":812,"end_character":43},"updated":"2020-03-26 19:00:29.000000000","message":"This means you need the SameHostFilter enabled","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            )"},{"line_number":810,"context_line":"            shared_server_b \u003d self.create_test_server("},{"line_number":811,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":812,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":813,"context_line":"            )"},{"line_number":814,"context_line":"            dedicated_server_c \u003d self.create_test_server("},{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_55be3165","line":812,"range":{"start_line":812,"start_character":34,"end_line":812,"end_character":43},"in_reply_to":"df33271e_35928d4c","updated":"2020-03-26 19:13:59.000000000","message":"Done","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":813,"context_line":"            )"},{"line_number":814,"context_line":"            dedicated_server_c \u003d self.create_test_server("},{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":816,"context_line":"                scheduler_hints\u003d{\u0027different_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":817,"context_line":"            )"},{"line_number":818,"context_line":"            shared_server_d \u003d self.create_test_server("},{"line_number":819,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_95b279e5","line":816,"range":{"start_line":816,"start_character":34,"end_line":816,"end_character":48},"updated":"2020-03-26 19:00:29.000000000","message":"Ditto for DifferentHostFilter. This test needs to skip if any of those aren\u0027t enabled.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":813,"context_line":"            )"},{"line_number":814,"context_line":"            dedicated_server_c \u003d self.create_test_server("},{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":816,"context_line":"                scheduler_hints\u003d{\u0027different_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":817,"context_line":"            )"},{"line_number":818,"context_line":"            shared_server_d \u003d self.create_test_server("},{"line_number":819,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_f58dc5d3","line":816,"range":{"start_line":816,"start_character":34,"end_line":816,"end_character":48},"in_reply_to":"df33271e_95b279e5","updated":"2020-03-26 19:13:59.000000000","message":"There is a class level skip for this, but based on the comment for L812 I would still need a test method level skip for SameHostFilter","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"854b392390592434ab089307d9db681042452a5d","unresolved":false,"context_lines":[{"line_number":813,"context_line":"            )"},{"line_number":814,"context_line":"            dedicated_server_c \u003d self.create_test_server("},{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":816,"context_line":"                scheduler_hints\u003d{\u0027different_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":817,"context_line":"            )"},{"line_number":818,"context_line":"            shared_server_d \u003d self.create_test_server("},{"line_number":819,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_55a63012","line":816,"range":{"start_line":816,"start_character":34,"end_line":816,"end_character":48},"in_reply_to":"df33271e_f58dc5d3","updated":"2020-03-26 19:18:33.000000000","message":"Doh, didn\u0027t notice the class-level skip for that.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":816,"context_line":"                scheduler_hints\u003d{\u0027different_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":817,"context_line":"            )"},{"line_number":818,"context_line":"            shared_server_d \u003d self.create_test_server("},{"line_number":819,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":820,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_c[\u0027id\u0027]}"},{"line_number":821,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_15db091b","line":818,"range":{"start_line":818,"start_character":12,"end_line":818,"end_character":27},"updated":"2020-03-26 19:00:29.000000000","message":"Ditto, shared_server_c - or more likely, the pair should be called dedicated_server_b and shared_server_b.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":815,"context_line":"                flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":816,"context_line":"                scheduler_hints\u003d{\u0027different_host\u0027: dedicated_server_a[\u0027id\u0027]}"},{"line_number":817,"context_line":"            )"},{"line_number":818,"context_line":"            shared_server_d \u003d self.create_test_server("},{"line_number":819,"context_line":"                flavor\u003dshared_flavor[\u0027id\u0027],"},{"line_number":820,"context_line":"                scheduler_hints\u003d{\u0027same_host\u0027: dedicated_server_c[\u0027id\u0027]}"},{"line_number":821,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_f5a66553","line":818,"range":{"start_line":818,"start_character":12,"end_line":818,"end_character":27},"in_reply_to":"df33271e_15db091b","updated":"2020-03-26 19:13:59.000000000","message":"Done","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":755,"context_line":"                        \u0027Cells not actually pinned: %s, %s\u0027 % (pin_a, pin_b))"},{"line_number":756,"context_line":"        self.assertTrue(pin_a[0].isdisjoint(pin_b[0]))"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    @decorators.attr(type\u003d[\u0027slow\u0027])"},{"line_number":759,"context_line":"    @testtools.skipUnless((CONF.whitebox.cpus_per_numa_node *"},{"line_number":760,"context_line":"                           CONF.whitebox.numa_nodes_per_compute_host) \u003e\u003d 4,"},{"line_number":761,"context_line":"                          \u0027Requires 4 or more host CPUs to execute test.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_1b4e976e","line":758,"updated":"2020-03-26 21:27:39.000000000","message":"nit: eeehhhhh - we don\u0027t have slow job, this is currently useless","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":755,"context_line":"                        \u0027Cells not actually pinned: %s, %s\u0027 % (pin_a, pin_b))"},{"line_number":756,"context_line":"        self.assertTrue(pin_a[0].isdisjoint(pin_b[0]))"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"    @decorators.attr(type\u003d[\u0027slow\u0027])"},{"line_number":759,"context_line":"    @testtools.skipUnless((CONF.whitebox.cpus_per_numa_node *"},{"line_number":760,"context_line":"                           CONF.whitebox.numa_nodes_per_compute_host) \u003e\u003d 4,"},{"line_number":761,"context_line":"                          \u0027Requires 4 or more host CPUs to execute test.\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_038740d9","line":758,"in_reply_to":"df33271e_1b4e976e","updated":"2020-03-27 15:51:47.000000000","message":"I can remove this, I figured if down the road it became necessary I might as well start marking tests that would be considered slow. But it would be fairly easy to do all at once in a future patch if that was an issue.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    @testtools.skipUnless((CONF.whitebox.cpus_per_numa_node *"},{"line_number":760,"context_line":"                           CONF.whitebox.numa_nodes_per_compute_host) \u003e\u003d 4,"},{"line_number":761,"context_line":"                          \u0027Requires 4 or more host CPUs to execute test.\u0027)"},{"line_number":762,"context_line":"    @testtools.skipUnless(compute."},{"line_number":763,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":764,"context_line":"                          \u0027SameHostFilter required\u0027)"},{"line_number":765,"context_line":"    def test_collocation_migration(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_5b581f31","line":762,"updated":"2020-03-26 21:27:39.000000000","message":"nit: Ugh, this is really weird formatting, could the \u0027compute\u0027 not go on the next line?","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":759,"context_line":"    @testtools.skipUnless((CONF.whitebox.cpus_per_numa_node *"},{"line_number":760,"context_line":"                           CONF.whitebox.numa_nodes_per_compute_host) \u003e\u003d 4,"},{"line_number":761,"context_line":"                          \u0027Requires 4 or more host CPUs to execute test.\u0027)"},{"line_number":762,"context_line":"    @testtools.skipUnless(compute."},{"line_number":763,"context_line":"                          is_scheduler_filter_enabled(\u0027SameHostFilter\u0027),"},{"line_number":764,"context_line":"                          \u0027SameHostFilter required\u0027)"},{"line_number":765,"context_line":"    def test_collocation_migration(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_c3f39872","line":762,"in_reply_to":"df33271e_5b581f31","updated":"2020-03-27 15:51:47.000000000","message":"Done","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":817,"context_line":"                                \u0027 of %s\u0027 % (server_dedicated_cpus,"},{"line_number":818,"context_line":"                                            dedicated_server[\u0027id\u0027],"},{"line_number":819,"context_line":"                                            configured_dedicated_set))"},{"line_number":820,"context_line":"                self.assertTrue(server_dedicated_cpus.isdisjoint("},{"line_number":821,"context_line":"                                configured_shared_set),"},{"line_number":822,"context_line":"                                \u0027Pinned CPU\\\u0027s %s of server %s intersects \u0027"},{"line_number":823,"context_line":"                                \u0027with cpu_shared_set %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_5ba65f12","line":820,"updated":"2020-03-26 21:27:39.000000000","message":"Given the configuration that the test itself has set, if the previous assertion is True, this assertion is useless.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":817,"context_line":"                                \u0027 of %s\u0027 % (server_dedicated_cpus,"},{"line_number":818,"context_line":"                                            dedicated_server[\u0027id\u0027],"},{"line_number":819,"context_line":"                                            configured_dedicated_set))"},{"line_number":820,"context_line":"                self.assertTrue(server_dedicated_cpus.isdisjoint("},{"line_number":821,"context_line":"                                configured_shared_set),"},{"line_number":822,"context_line":"                                \u0027Pinned CPU\\\u0027s %s of server %s intersects \u0027"},{"line_number":823,"context_line":"                                \u0027with cpu_shared_set %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_c31d5874","line":820,"in_reply_to":"df33271e_5ba65f12","updated":"2020-03-27 15:51:47.000000000","message":"Correct, I had this as more of a validation that shared_set was configured accurately, but I would have to imagine it would never even get to this point if that were the case. I can remove this.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":844,"context_line":""},{"line_number":845,"context_line":"            # Validate shared server A now has a shared cpuset that is a equal"},{"line_number":846,"context_line":"            # to it\u0027s new host\u0027s cpu_shared_set"},{"line_number":847,"context_line":"            shared_set_b \u003d self._get_shared_cpuset(shared_server_a[\u0027id\u0027])"},{"line_number":848,"context_line":"            self.assertItemsEqual(shared_set_b, configured_shared_set,"},{"line_number":849,"context_line":"                                  \u0027After migration of server %s, shared CPU \u0027"},{"line_number":850,"context_line":"                                  \u0027set %s is not equal to new shared set %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_bb5fab0c","line":847,"range":{"start_line":847,"start_character":12,"end_line":847,"end_character":24},"updated":"2020-03-26 21:27:39.000000000","message":"This should be _a?","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":844,"context_line":""},{"line_number":845,"context_line":"            # Validate shared server A now has a shared cpuset that is a equal"},{"line_number":846,"context_line":"            # to it\u0027s new host\u0027s cpu_shared_set"},{"line_number":847,"context_line":"            shared_set_b \u003d self._get_shared_cpuset(shared_server_a[\u0027id\u0027])"},{"line_number":848,"context_line":"            self.assertItemsEqual(shared_set_b, configured_shared_set,"},{"line_number":849,"context_line":"                                  \u0027After migration of server %s, shared CPU \u0027"},{"line_number":850,"context_line":"                                  \u0027set %s is not equal to new shared set %s\u0027 %"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_03a3c050","line":847,"range":{"start_line":847,"start_character":12,"end_line":847,"end_character":24},"in_reply_to":"df33271e_bb5fab0c","updated":"2020-03-27 15:51:47.000000000","message":"Correct I need to change this along with the assertion check and error messages that need to be updated.","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"bbf8ae9a1bc80819ae013dddfddb12f70bd976d7","unresolved":false,"context_lines":[{"line_number":845,"context_line":"            # Validate shared server A now has a shared cpuset that is a equal"},{"line_number":846,"context_line":"            # to it\u0027s new host\u0027s cpu_shared_set"},{"line_number":847,"context_line":"            shared_set_b \u003d self._get_shared_cpuset(shared_server_a[\u0027id\u0027])"},{"line_number":848,"context_line":"            self.assertItemsEqual(shared_set_b, configured_shared_set,"},{"line_number":849,"context_line":"                                  \u0027After migration of server %s, shared CPU \u0027"},{"line_number":850,"context_line":"                                  \u0027set %s is not equal to new shared set %s\u0027 %"},{"line_number":851,"context_line":"                                  (shared_server_a[\u0027id\u0027], shared_set_b,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_db554fc8","line":848,"updated":"2020-03-26 21:27:39.000000000","message":"What\u0027s the point of this assertion? The shared_set is identical on both hosts, so live migrating a \"shared\" server won\u0027t change anything. I guess this is left over from when you had a different cpu_shared_set on each host. I think that would still be doable, but you\u0027d have some extra complexity when setting cpu_(shared|dedicated)_set.\n\nYou could for exmaple have shared\u003d(0,1) dedicated\u003d(2,3) on one host, and flip them to shared\u003d(2,3) dedicated\u003d(0,1) on the other.\n\nThis is where forcing to a specific host could become handy (but we would [1] below this patch). If you force the server_a pair onto a host where you know the cpu configuration in advance, and then live migrate them to the other, we would be making sure that the server\u0027s pinset changes, and can assert the CPU IDs directly.\n\n[1] https://review.opendev.org/#/c/715076/","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"459e7addbcb957ffea53372329abf79f8a88c5b3","unresolved":false,"context_lines":[{"line_number":845,"context_line":"            # Validate shared server A now has a shared cpuset that is a equal"},{"line_number":846,"context_line":"            # to it\u0027s new host\u0027s cpu_shared_set"},{"line_number":847,"context_line":"            shared_set_b \u003d self._get_shared_cpuset(shared_server_a[\u0027id\u0027])"},{"line_number":848,"context_line":"            self.assertItemsEqual(shared_set_b, configured_shared_set,"},{"line_number":849,"context_line":"                                  \u0027After migration of server %s, shared CPU \u0027"},{"line_number":850,"context_line":"                                  \u0027set %s is not equal to new shared set %s\u0027 %"},{"line_number":851,"context_line":"                                  (shared_server_a[\u0027id\u0027], shared_set_b,"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_a63662e5","line":848,"in_reply_to":"df33271e_db554fc8","updated":"2020-03-27 15:51:47.000000000","message":"Yes this is holdover from assuming all compute host configurations could be heterogeneous. I do like what you are recommending, that way there is a mix of configurations from host to host. Let me work on [1] and can use that to implement your idea here.\n\n[1] https://review.opendev.org/#/c/715076/","commit_id":"b84f43979622570b0b5902303c7a73be3030b7e7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def test_collocation_migration(self):"},{"line_number":778,"context_line":"        if len(CONF.whitebox_hardware.cpu_topology) \u003c 2:"},{"line_number":779,"context_line":"            raise self.skipException(\u0027Requires 2 or more NUMA nodes to \u0027"},{"line_number":780,"context_line":"                                     \u0027execute test.\u0027)"},{"line_number":781,"context_line":"        if any([len(cpu_list) \u003c 2 for numa, cpu_list in"},{"line_number":782,"context_line":"               CONF.whitebox_hardware.cpu_topology.items()]):"},{"line_number":783,"context_line":"            raise self.skipException(\u0027Requires all NUMA nodes to have at \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_43945337","line":780,"range":{"start_line":779,"start_character":0,"end_line":780,"end_character":53},"updated":"2020-08-24 19:15:50.000000000","message":"Could we not get rid of this requirement, and thus enable this to run upstream? IIUC nothing in this test actually required NUMA nodes, just the correct cpu_dedicated_set / cpu_shared_set configs.","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    def test_collocation_migration(self):"},{"line_number":778,"context_line":"        if len(CONF.whitebox_hardware.cpu_topology) \u003c 2:"},{"line_number":779,"context_line":"            raise self.skipException(\u0027Requires 2 or more NUMA nodes to \u0027"},{"line_number":780,"context_line":"                                     \u0027execute test.\u0027)"},{"line_number":781,"context_line":"        if any([len(cpu_list) \u003c 2 for numa, cpu_list in"},{"line_number":782,"context_line":"               CONF.whitebox_hardware.cpu_topology.items()]):"},{"line_number":783,"context_line":"            raise self.skipException(\u0027Requires all NUMA nodes to have at \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_4351f335","line":780,"range":{"start_line":779,"start_character":0,"end_line":780,"end_character":53},"in_reply_to":"9f560f44_43945337","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":792,"context_line":"        host1_addr, host2_addr \u003d [self.get_ctlplane_address(host) for host"},{"line_number":793,"context_line":"                                  in [hostname1, hostname2]]"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        dedicated_flavor \u003d self.create_flavor(vcpus\u003dflavor_vcpu_size,"},{"line_number":796,"context_line":"                                              extra_specs\u003dself."},{"line_number":797,"context_line":"                                              dedicated_cpu_policy)"},{"line_number":798,"context_line":"        shared_flavor \u003d self.create_flavor(vcpus\u003dflavor_vcpu_size)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        host1_sm \u003d clients.ServiceManager(host1_addr, \u0027nova-compute\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_a3ae0f7e","line":797,"range":{"start_line":795,"start_character":0,"end_line":797,"end_character":67},"updated":"2020-08-24 19:15:50.000000000","message":"nit: eww, we need to lose the hanging dedicated_cpu_policy:\n\n  dedicated_flavor \u003d self.create_flavor(\n    vcpus\u003dflavor_vcpu_size,\n    extra_specs\u003dself.dedicated_cpu_policy)","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":792,"context_line":"        host1_addr, host2_addr \u003d [self.get_ctlplane_address(host) for host"},{"line_number":793,"context_line":"                                  in [hostname1, hostname2]]"},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"        dedicated_flavor \u003d self.create_flavor(vcpus\u003dflavor_vcpu_size,"},{"line_number":796,"context_line":"                                              extra_specs\u003dself."},{"line_number":797,"context_line":"                                              dedicated_cpu_policy)"},{"line_number":798,"context_line":"        shared_flavor \u003d self.create_flavor(vcpus\u003dflavor_vcpu_size)"},{"line_number":799,"context_line":""},{"line_number":800,"context_line":"        host1_sm \u003d clients.ServiceManager(host1_addr, \u0027nova-compute\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_43c3b3ed","line":797,"range":{"start_line":795,"start_character":0,"end_line":797,"end_character":67},"in_reply_to":"9f560f44_a3ae0f7e","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            # The pinned vCPU\u0027s in the domain XML\u0027s for dedicated server A and"},{"line_number":835,"context_line":"            # B should map to physical CPU\u0027s that are a subset of the"},{"line_number":836,"context_line":"            # cpu_dedicated_set of their respective compute host."},{"line_number":837,"context_line":"            for dedicated_server, host_dedicated_set in \\"},{"line_number":838,"context_line":"                zip([dedicated_server_a, dedicated_server_b],"},{"line_number":839,"context_line":"                    [host1_dedicated_set, host2_dedicated_set]):"},{"line_number":840,"context_line":"                server_dedicated_cpus \u003d \\"},{"line_number":841,"context_line":"                    self.get_pinning_as_set(dedicated_server[\u0027id\u0027])"},{"line_number":842,"context_line":"                self.assertTrue(server_dedicated_cpus.issubset("}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_e3f92780","line":839,"range":{"start_line":837,"start_character":0,"end_line":839,"end_character":64},"updated":"2020-08-24 19:15:50.000000000","message":"This is too smart for its own good - remember, I have to review and understand this, so lowest common denominator please ;)","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            # The pinned vCPU\u0027s in the domain XML\u0027s for dedicated server A and"},{"line_number":835,"context_line":"            # B should map to physical CPU\u0027s that are a subset of the"},{"line_number":836,"context_line":"            # cpu_dedicated_set of their respective compute host."},{"line_number":837,"context_line":"            for dedicated_server, host_dedicated_set in \\"},{"line_number":838,"context_line":"                zip([dedicated_server_a, dedicated_server_b],"},{"line_number":839,"context_line":"                    [host1_dedicated_set, host2_dedicated_set]):"},{"line_number":840,"context_line":"                server_dedicated_cpus \u003d \\"},{"line_number":841,"context_line":"                    self.get_pinning_as_set(dedicated_server[\u0027id\u0027])"},{"line_number":842,"context_line":"                self.assertTrue(server_dedicated_cpus.issubset("}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_c3aea32c","line":839,"range":{"start_line":837,"start_character":0,"end_line":839,"end_character":64},"in_reply_to":"9f560f44_e3f92780","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fc55d1a3264d7051e30461316566e4a973b10cc4","unresolved":false,"context_lines":[{"line_number":848,"context_line":""},{"line_number":849,"context_line":"            # Shared servers A and B should have a cpuset that is equal to"},{"line_number":850,"context_line":"            # their respective host\u0027s cpu_shared_set"},{"line_number":851,"context_line":"            for shared_server, host_shared_set in \\"},{"line_number":852,"context_line":"                zip([shared_server_a, shared_server_b],"},{"line_number":853,"context_line":"                    [host1_shared_set, host2_shared_set]):"},{"line_number":854,"context_line":"                server_shared_cpus \u003d \\"},{"line_number":855,"context_line":"                    self._get_shared_cpuset(shared_server[\u0027id\u0027])"},{"line_number":856,"context_line":"                self.assertItemsEqual(server_shared_cpus,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_c3f6a38f","line":853,"range":{"start_line":851,"start_character":0,"end_line":853,"end_character":58},"updated":"2020-08-24 19:15:50.000000000","message":"Ditto","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"cc325622c314bdd68e3844b0bfc9214a18e630c8","unresolved":false,"context_lines":[{"line_number":848,"context_line":""},{"line_number":849,"context_line":"            # Shared servers A and B should have a cpuset that is equal to"},{"line_number":850,"context_line":"            # their respective host\u0027s cpu_shared_set"},{"line_number":851,"context_line":"            for shared_server, host_shared_set in \\"},{"line_number":852,"context_line":"                zip([shared_server_a, shared_server_b],"},{"line_number":853,"context_line":"                    [host1_shared_set, host2_shared_set]):"},{"line_number":854,"context_line":"                server_shared_cpus \u003d \\"},{"line_number":855,"context_line":"                    self._get_shared_cpuset(shared_server[\u0027id\u0027])"},{"line_number":856,"context_line":"                self.assertItemsEqual(server_shared_cpus,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f560f44_23a83f1e","line":853,"range":{"start_line":851,"start_character":0,"end_line":853,"end_character":58},"in_reply_to":"9f560f44_c3f6a38f","updated":"2020-08-24 19:31:50.000000000","message":"Done","commit_id":"d8bac3210b3d5b707b35d9aa28f00c21f22fd049"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d99e788f0141d2724f3ed938c4ea85b228b6802d","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        Convert cpuset found into a set of integers."},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        root \u003d self.get_server_xml(server_id)"},{"line_number":490,"context_line":"        vcpu_ele \u003d root.find(\u0027./vcpu\u0027)"},{"line_number":491,"context_line":"        cpuset \u003d vcpu_ele.attrib.get(\u0027cpuset\u0027, None)"},{"line_number":492,"context_line":"        return parse_cpu_spec(cpuset)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def get_all_cpus(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_07930b02","line":491,"range":{"start_line":490,"start_character":0,"end_line":491,"end_character":52},"updated":"2020-09-01 14:49:06.000000000","message":"nit: I\u0027m pretty sure you could merge these into a single find().","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"dfbe232c4da8cdd5d037d3a65a0fb7735b212961","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        Convert cpuset found into a set of integers."},{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        root \u003d self.get_server_xml(server_id)"},{"line_number":490,"context_line":"        vcpu_ele \u003d root.find(\u0027./vcpu\u0027)"},{"line_number":491,"context_line":"        cpuset \u003d vcpu_ele.attrib.get(\u0027cpuset\u0027, None)"},{"line_number":492,"context_line":"        return parse_cpu_spec(cpuset)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"    def get_all_cpus(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_e2788590","line":491,"range":{"start_line":490,"start_character":0,"end_line":491,"end_character":52},"in_reply_to":"9f560f44_07930b02","updated":"2020-09-01 14:57:19.000000000","message":"Done","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d99e788f0141d2724f3ed938c4ea85b228b6802d","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        # shared pCPUs. Use the third and fourth cpu ids for host1\u0027s shared set"},{"line_number":808,"context_line":"        # and host2\u0027s dedicated set"},{"line_number":809,"context_line":"        host1_dedicated_set \u003d host2_shared_set \u003d cpu_list[:2]"},{"line_number":810,"context_line":"        host2_dedicated_set \u003d host1_shared_set \u003d cpu_list[2:4]"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        dedicated_flavor \u003d self.create_flavor("},{"line_number":813,"context_line":"            vcpus\u003dflavor_vcpu_size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_6783e7aa","line":810,"range":{"start_line":810,"start_character":60,"end_line":810,"end_character":61},"updated":"2020-09-01 14:49:06.000000000","message":"nit: don\u0027t need this, \u00272:\u0027 just means from the 3 element to the end","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0b4932b4336ef33a6c5ea8e77a8123346699f1c8","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        # shared pCPUs. Use the third and fourth cpu ids for host1\u0027s shared set"},{"line_number":808,"context_line":"        # and host2\u0027s dedicated set"},{"line_number":809,"context_line":"        host1_dedicated_set \u003d host2_shared_set \u003d cpu_list[:2]"},{"line_number":810,"context_line":"        host2_dedicated_set \u003d host1_shared_set \u003d cpu_list[2:4]"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        dedicated_flavor \u003d self.create_flavor("},{"line_number":813,"context_line":"            vcpus\u003dflavor_vcpu_size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_e2bec5d2","line":810,"range":{"start_line":810,"start_character":60,"end_line":810,"end_character":61},"in_reply_to":"9f560f44_025e59e8","updated":"2020-09-01 14:59:41.000000000","message":"Ah yeah, good point. As you said I don\u0027t think it\u0027ll affect the test logic since you\u0027re being smart and using subset/disjoin/etc, but the current way does make for a pleasing symmetry. Your call.","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"dfbe232c4da8cdd5d037d3a65a0fb7735b212961","unresolved":false,"context_lines":[{"line_number":807,"context_line":"        # shared pCPUs. Use the third and fourth cpu ids for host1\u0027s shared set"},{"line_number":808,"context_line":"        # and host2\u0027s dedicated set"},{"line_number":809,"context_line":"        host1_dedicated_set \u003d host2_shared_set \u003d cpu_list[:2]"},{"line_number":810,"context_line":"        host2_dedicated_set \u003d host1_shared_set \u003d cpu_list[2:4]"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        dedicated_flavor \u003d self.create_flavor("},{"line_number":813,"context_line":"            vcpus\u003dflavor_vcpu_size,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_025e59e8","line":810,"range":{"start_line":810,"start_character":60,"end_line":810,"end_character":61},"in_reply_to":"9f560f44_6783e7aa","updated":"2020-09-01 14:57:19.000000000","message":"I was hoping to keep the lists equivalent in size just in case the hosts have more than 4 CPU\u0027s, but functionally I don\u0027t think that would impact the test so I\u0027ll remove it.","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d99e788f0141d2724f3ed938c4ea85b228b6802d","unresolved":false,"context_lines":[{"line_number":835,"context_line":"            # Create a total of four instances, with each compute host holding"},{"line_number":836,"context_line":"            # a server with a cpu_dedicated policy and a server that will"},{"line_number":837,"context_line":"            # float across the respective host\u0027s cpu_shared_set"},{"line_number":838,"context_line":"            dedicated_server_a \u003d self.create_test_server("},{"line_number":839,"context_line":"                clients\u003dself.os_admin, flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":840,"context_line":"                host\u003dhost1"},{"line_number":841,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_47122364","line":838,"updated":"2020-09-01 14:49:06.000000000","message":"It kinda annoys my OCD that you\u0027re mixing letters and number (_a and _b and host1/host2), but since the servers are migrating it probably makes sense to have the named using different patterns","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"dfbe232c4da8cdd5d037d3a65a0fb7735b212961","unresolved":false,"context_lines":[{"line_number":835,"context_line":"            # Create a total of four instances, with each compute host holding"},{"line_number":836,"context_line":"            # a server with a cpu_dedicated policy and a server that will"},{"line_number":837,"context_line":"            # float across the respective host\u0027s cpu_shared_set"},{"line_number":838,"context_line":"            dedicated_server_a \u003d self.create_test_server("},{"line_number":839,"context_line":"                clients\u003dself.os_admin, flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":840,"context_line":"                host\u003dhost1"},{"line_number":841,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_e207e5c8","line":838,"in_reply_to":"9f560f44_47122364","updated":"2020-09-01 14:57:19.000000000","message":"Yeah that\u0027s why I have the difference in naming patterns since they will be migrating, but it was bothering me a little bit yesterday looking at them. I don\u0027t mind changing them to numerical only.","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0b4932b4336ef33a6c5ea8e77a8123346699f1c8","unresolved":false,"context_lines":[{"line_number":835,"context_line":"            # Create a total of four instances, with each compute host holding"},{"line_number":836,"context_line":"            # a server with a cpu_dedicated policy and a server that will"},{"line_number":837,"context_line":"            # float across the respective host\u0027s cpu_shared_set"},{"line_number":838,"context_line":"            dedicated_server_a \u003d self.create_test_server("},{"line_number":839,"context_line":"                clients\u003dself.os_admin, flavor\u003ddedicated_flavor[\u0027id\u0027],"},{"line_number":840,"context_line":"                host\u003dhost1"},{"line_number":841,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_62cab56e","line":838,"in_reply_to":"9f560f44_e207e5c8","updated":"2020-09-01 14:59:41.000000000","message":"Nah, keep it, it\u0027s fine and exists for a reason.","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d99e788f0141d2724f3ed938c4ea85b228b6802d","unresolved":false,"context_lines":[{"line_number":923,"context_line":"            # dedicated server B\u0027s CPU pin set or the cpu_shared_set of the"},{"line_number":924,"context_line":"            # host"},{"line_number":925,"context_line":"            dedicated_pin_a \u003d self.get_pinning_as_set(dedicated_server_a[\u0027id\u0027])"},{"line_number":926,"context_line":"            dedicated_pin_c \u003d self.get_pinning_as_set(dedicated_server_b[\u0027id\u0027])"},{"line_number":927,"context_line":"            self.assertTrue(dedicated_pin_a.issubset("},{"line_number":928,"context_line":"                            host2_dedicated_set),"},{"line_number":929,"context_line":"                            \u0027Pinned Host CPU\\\u0027s %s of server %s is \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_02fdb907","line":926,"range":{"start_line":926,"start_character":25,"end_line":926,"end_character":27},"updated":"2020-09-01 14:49:06.000000000","message":"_b please, _c is just confusing :)","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"dfbe232c4da8cdd5d037d3a65a0fb7735b212961","unresolved":false,"context_lines":[{"line_number":923,"context_line":"            # dedicated server B\u0027s CPU pin set or the cpu_shared_set of the"},{"line_number":924,"context_line":"            # host"},{"line_number":925,"context_line":"            dedicated_pin_a \u003d self.get_pinning_as_set(dedicated_server_a[\u0027id\u0027])"},{"line_number":926,"context_line":"            dedicated_pin_c \u003d self.get_pinning_as_set(dedicated_server_b[\u0027id\u0027])"},{"line_number":927,"context_line":"            self.assertTrue(dedicated_pin_a.issubset("},{"line_number":928,"context_line":"                            host2_dedicated_set),"},{"line_number":929,"context_line":"                            \u0027Pinned Host CPU\\\u0027s %s of server %s is \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f560f44_82f6e9d7","line":926,"range":{"start_line":926,"start_character":25,"end_line":926,"end_character":27},"in_reply_to":"9f560f44_02fdb907","updated":"2020-09-01 14:57:19.000000000","message":"Done","commit_id":"7f465bdf3055605b759b4081b0787e3cb7a71509"}],"whitebox_tempest_plugin/services/clients.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a463808a748c2f5588a7a376c22b6cdb8ba86cb4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        command \u003d \u0027virsh capabilities\u0027"},{"line_number":66,"context_line":"        return self.execute(command, container_name\u003d\u0027nova_libvirt\u0027, sudo\u003dTrue)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_fqdn_of_host(self):"},{"line_number":69,"context_line":"        command \u003d \u0027virsh hostname\u0027"},{"line_number":70,"context_line":"        host_name \u003d self.execute(command,"},{"line_number":71,"context_line":"                                 container_name\u003d\u0027nova_libvirt\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_f571450e","line":68,"updated":"2020-03-26 19:00:29.000000000","message":"This still needed?","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"},{"author":{"_account_id":31033,"name":"James Parker","email":"jparker@redhat.com","username":"jparker"},"change_message_id":"1f0d627624fb7b1f341ea9c88680a4c244c1b7f4","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        command \u003d \u0027virsh capabilities\u0027"},{"line_number":66,"context_line":"        return self.execute(command, container_name\u003d\u0027nova_libvirt\u0027, sudo\u003dTrue)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def get_fqdn_of_host(self):"},{"line_number":69,"context_line":"        command \u003d \u0027virsh hostname\u0027"},{"line_number":70,"context_line":"        host_name \u003d self.execute(command,"},{"line_number":71,"context_line":"                                 container_name\u003d\u0027nova_libvirt\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_d576c1d8","line":68,"in_reply_to":"df33271e_f571450e","updated":"2020-03-26 19:13:59.000000000","message":"Nope, will be removed.","commit_id":"8ed7c20d43750a60e8dcc2af8161479a4ba9405b"}]}
