)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1302c62df9fe9b9108432506805df11a94958383","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When using the cpu_realtime and cpu_realtim_mask flag to create new"},{"line_number":10,"context_line":"instance, the \u0027cpuset\u0027 of \u0027emulatorpin\u0027 option is using the id of vcpu"},{"line_number":11,"context_line":"which is incorrect this commit fixes the issue to refer the host CPUs"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I7f50dde0753b059a690dc50172fee645c94b8e5b"},{"line_number":14,"context_line":"Closes-Bug: #1614054"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba5da102_93c2dd32","line":11,"updated":"2016-11-02 17:09:25.000000000","message":"Please reword this commit message. In particular, you say \"using the id of the vcpu which is incorrect this commit fixes the issue to refer the host CPUs\". That isn\u0027t a complete sentence and doesn\u0027t describe what is \"incorrect\" or \"correct\" about a particular setting.\n\nHow about something like:\n\n Realtime guarantees in certain operating systems require that the\n thread that is running the QEMU emulator is pinned to a physical\n CPU that is *not* the same as any physical CPU that the vCPUs for a\n realtime guest are pinned to. This patch ensures that the value\n of the hw:cpu_realtime_mask flavor extraspec property is respected\n when creating the libvirt configuration XML and sets emulatorpin\n values to a physical CPU matching the hw:cpu_realtime_mask value.","commit_id":"9da23b73dc261f769d51b043447e986c18514364"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1302c62df9fe9b9108432506805df11a94958383","unresolved":false,"context_lines":[{"line_number":2816,"context_line":"            self.assertEqual(set([6, 7]), cfg.cputune.vcpupin[2].cpuset)"},{"line_number":2817,"context_line":"            self.assertEqual(set([6, 7]), cfg.cputune.vcpupin[3].cpuset)"},{"line_number":2818,"context_line":""},{"line_number":2819,"context_line":"            self.assertEqual(set([4, 5]), cfg.cputune.emulatorpin.cpuset)"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"            self.assertEqual(set([2, 3]), cfg.cputune.vcpusched[0].vcpus)"},{"line_number":2822,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_13cfad29","line":2819,"updated":"2016-11-02 17:09:25.000000000","message":"Please add a code comment above here explaining why this is being asserted.","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9cb6b6d3d51eb07591d8adc2ffe468f320654159","unresolved":false,"context_lines":[{"line_number":2816,"context_line":"            self.assertEqual(set([6, 7]), cfg.cputune.vcpupin[2].cpuset)"},{"line_number":2817,"context_line":"            self.assertEqual(set([6, 7]), cfg.cputune.vcpupin[3].cpuset)"},{"line_number":2818,"context_line":""},{"line_number":2819,"context_line":"            self.assertEqual(set([4, 5]), cfg.cputune.emulatorpin.cpuset)"},{"line_number":2820,"context_line":""},{"line_number":2821,"context_line":"            self.assertEqual(set([2, 3]), cfg.cputune.vcpusched[0].vcpus)"},{"line_number":2822,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_2c0c523a","line":2819,"in_reply_to":"ba5da102_13cfad29","updated":"2016-11-02 18:14:55.000000000","message":"Done","commit_id":"9da23b73dc261f769d51b043447e986c18514364"}],"nova/virt/hardware.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1302c62df9fe9b9108432506805df11a94958383","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"    if not mask:"},{"line_number":1095,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    vcpus_rt \u003d parse_cpu_spec(\"0-%d,%s\" % (flavor.vcpus - 1, mask))"},{"line_number":1098,"context_line":"    if len(vcpus_rt) \u003c 1:"},{"line_number":1099,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_13108d58","line":1097,"updated":"2016-11-02 17:09:25.000000000","message":"Is this not going to account for which CPUs are \"online\" according to the virt driver\u0027s get_online_cpus() method?","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9cb6b6d3d51eb07591d8adc2ffe468f320654159","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"    if not mask:"},{"line_number":1095,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    vcpus_rt \u003d parse_cpu_spec(\"0-%d,%s\" % (flavor.vcpus - 1, mask))"},{"line_number":1098,"context_line":"    if len(vcpus_rt) \u003c 1:"},{"line_number":1099,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_2ca8d2da","line":1097,"in_reply_to":"ba5da102_13108d58","updated":"2016-11-02 18:14:55.000000000","message":"The mask is related to the guest vCPUs which always start from 0 to N, there is no online/offline assumption for them.","commit_id":"9da23b73dc261f769d51b043447e986c18514364"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"39aa69960d9e2b777c26e9cf64f00ab0deb5e210","unresolved":false,"context_lines":[{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_ce253b0b","line":3954,"updated":"2016-08-19 07:49:53.000000000","message":"guest_cpu_tune.emulatorpin.cpuset is set here, so you can\u0027t be sure how it is converted to a list. Order of that list is unpredictable.","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d3db2e4980a4bc8f5dfb2e151393e8ac1769dcd","unresolved":false,"context_lines":[{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_d8b879e8","line":3954,"in_reply_to":"1ac06dbe_774b585a","updated":"2016-08-19 12:06:11.000000000","message":"Ah, I get you now. We\u0027re storing the set here though rather than the list. Is it an issue that this would be sorted?","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d2e54d289b6b0f649e0001fad32f34c776fb70ca","unresolved":false,"context_lines":[{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_e99abfc4","line":3954,"in_reply_to":"1ac06dbe_d8b879e8","updated":"2016-08-19 14:40:16.000000000","message":"Hum yes interesting, I need to investigate too and see if it\u0027s an issue or not. thanks","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"1b95cc85f4eef85c1811c3a9e9fcd9008c2310e1","unresolved":false,"context_lines":[{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_774b585a","line":3954,"in_reply_to":"1ac06dbe_ec0e5fe4","updated":"2016-08-19 11:08:54.000000000","message":"Yes, sure.\nI mean list(guest_cpu_tune.emulatorpin.cpuset) expression converts from the set type to the list i.e. from the unordered type to the ordered type.\n\nIn [14]: a \u003d [1, 2]\n\nIn [15]: b \u003d [2, 1]\n\nIn [18]: list(set(a))\nOut[18]: [1, 2]\n\nIn [19]: list(set(b))\nOut[19]: [1, 2]","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c41f9d6c097590fb53c0c552b43eb1363c29ec7d","unresolved":false,"context_lines":[{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_ec0e5fe4","line":3954,"in_reply_to":"3ac371cc_ce253b0b","updated":"2016-08-19 10:53:28.000000000","message":"What do you mean? guest_cpu_tune.emulatorpin.cpuset on the left won\u0027t be set to a new value until after value on the right hand side has been evaluated, afaik?","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"c637dd883da8d4adbcc5b8b672d82fa6cadc02be","unresolved":false,"context_lines":[{"line_number":3950,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3951,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"},{"line_number":3958,"context_line":"                guest_numa_tune.memnodes \u003d numa_memnodes"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_904fa3bc","line":3955,"range":{"start_line":3953,"start_character":56,"end_line":3955,"end_character":43},"updated":"2016-08-22 09:49:41.000000000","message":"This expression deserves a note. If the order is important here let\u0027s try to use OrderedSet, If it\u0027s not remove this set-list-set transition.","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6b93e4fe284c777b5f21fa783b4bbe98b5756e62","unresolved":false,"context_lines":[{"line_number":3952,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3953,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3954,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3955,"context_line":"                        for x in vcpus_em])"},{"line_number":3956,"context_line":""},{"line_number":3957,"context_line":"                guest_numa_tune.memory \u003d numa_mem"},{"line_number":3958,"context_line":"                guest_numa_tune.memnodes \u003d numa_memnodes"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_a2afe792","line":3955,"in_reply_to":"1ac06dbe_904fa3bc","updated":"2016-08-22 13:52:19.000000000","message":"Why it is important ? we do need free host CPUs, it\u0027s not at matter where the vCPUs are pinned. There is no problem here.","commit_id":"4c1c07d61e62bbb74fa03bf4337f48831d60e57d"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"ff73543e7759287bde19e42a2e3489b6cdd42077","unresolved":false,"context_lines":[{"line_number":3873,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3874,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3875,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3876,"context_line":"                        for x in vcpus_em])"},{"line_number":3877,"context_line":""},{"line_number":3878,"context_line":"                guest_numa_tune.memory \u003d numa_mem"},{"line_number":3879,"context_line":"                guest_numa_tune.memnodes \u003d numa_memnodes"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_7818e51e","line":3876,"updated":"2016-09-16 09:00:40.000000000","message":"I think this code is getting pretty confusing now, with the way this line relies on the value set in line 3854, which in turn relies on values set in line 3834, and I\u0027m not actually convinced this is correct, as we\u0027re converting between set \u0026 list looses ordering.\n\nConsider we have 4 vCPUs, mapped to pCPUs  0 -\u003e 7, 1 -\u003e 8, 2 -\u003e 2, 3 -\u003e 3\n\nSo allpcpus is [7, 8, 2, 3]\n\nWe now convert that to a set so it becomes   set([7, 8, 2, 3]) but  sets are unordered, so it is actually set([2, 3, 7, 8]). When you convert that back to a list in line 3875, you\u0027ll get a list [2, 3, 7, 8]\n\nNow the non-realtime vCPUS are 0 and 1, so your code is selecting pCPUs 2, 3, but it should have selected 7, 8.\n\nI think we need to re-arrange this code. The call to hardware.vcpus_realtime_topology need to be made right at the start in line 3805.\n\nSecond, we should rename \u0027allpcpus\u0027  to \u0027emupcpus\u0027 to make it clear what we\u0027re recording.\n\nThen line 3834 should be changed from\n\n     allpcpus.extend(pin_cpuset.cpuset)\n\nto\n\n     if vcpus_em is None or cpu in vcpus_em:\n        emupcpus.extend(pin_cpuset.cpuset)","commit_id":"04807568c548105b367f863f1eae42d1e989bf9b"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3355de143a923a29a361fca9684abd7d508b2332","unresolved":false,"context_lines":[{"line_number":3873,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3874,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(["},{"line_number":3875,"context_line":"                        list(guest_cpu_tune.emulatorpin.cpuset)[x]"},{"line_number":3876,"context_line":"                        for x in vcpus_em])"},{"line_number":3877,"context_line":""},{"line_number":3878,"context_line":"                guest_numa_tune.memory \u003d numa_mem"},{"line_number":3879,"context_line":"                guest_numa_tune.memnodes \u003d numa_memnodes"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_e71eb05e","line":3876,"in_reply_to":"7a8ec9b2_7818e51e","updated":"2016-09-19 13:07:06.000000000","message":"I don\u0027t see how to make hardware.vcpus_realtime_topology called line 3805 because we need the list of pCPUs which is computed during the loop so I used the list instead of the set to get the relation between vCPUs used as non-realtime to a pCPUs.","commit_id":"04807568c548105b367f863f1eae42d1e989bf9b"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e328040cb154858867854505abfbd15f6f99138f","unresolved":false,"context_lines":[{"line_number":3793,"context_line":"        if wants_realtime:"},{"line_number":3794,"context_line":"            if not self._host.has_min_version("},{"line_number":3795,"context_line":"                    MIN_LIBVIRT_REALTIME_VERSION):"},{"line_number":3796,"context_line":"                raise exception.RealtimePolicyNotSupported()"},{"line_number":3797,"context_line":""},{"line_number":3798,"context_line":"        topology \u003d self._get_host_numa_topology()"},{"line_number":3799,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_07871cd8","line":3796,"updated":"2016-09-19 13:21:09.000000000","message":"Here we could call\n\n   mask \u003d _get_realtime_mask(flavor, image)\n   rt_cpus \u003d parse_cpu_spec(\"0-%d,%s\" % (flavor.vcpus - 1, mask))","commit_id":"a8b647d55611ff1a10160b0387d1380515820dc4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e328040cb154858867854505abfbd15f6f99138f","unresolved":false,"context_lines":[{"line_number":3848,"context_line":"                                    pin_cpuset.cpuset \u003d set([pcpu])"},{"line_number":3849,"context_line":"                                else:"},{"line_number":3850,"context_line":"                                    pin_cpuset.cpuset \u003d host_cell.cpuset"},{"line_number":3851,"context_line":"                                emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3852,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3853,"context_line":""},{"line_number":3854,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_2776d8d8","line":3851,"updated":"2016-09-19 13:21:09.000000000","message":"Here we could then be checking rt_cpus:\n\nif not wants_realtime or not cpu in rt_cpus:\n    emupcpus.extend(pin_cpuset.cpuset)","commit_id":"a8b647d55611ff1a10160b0387d1380515820dc4"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e328040cb154858867854505abfbd15f6f99138f","unresolved":false,"context_lines":[{"line_number":3883,"context_line":"                    vcpusched.scheduler \u003d \"fifo\""},{"line_number":3884,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3885,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3886,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3887,"context_line":"                    guest_cpu_tune.emulatorpin.cpuset \u003d set(emupcpus[x]"},{"line_number":3888,"context_line":"                        for x in vcpus_em)"},{"line_number":3889,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_c71b747f","line":3886,"updated":"2016-09-19 13:21:09.000000000","message":"And the this could easily be moved into the earlier loop too, so we don\u0027t need to re-recalculate vcpus_rt/vcpus_em again.","commit_id":"a8b647d55611ff1a10160b0387d1380515820dc4"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"778314d0af7af2b25a55de3442fdb8f1880329d9","unresolved":false,"context_lines":[{"line_number":3814,"context_line":"                numa_memnodes \u003d [vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":3815,"context_line":"                                 for _ in guest_cpu_numa_config.cells]"},{"line_number":3816,"context_line":""},{"line_number":3817,"context_line":"                vcpus_rt \u003d set([])"},{"line_number":3818,"context_line":"                wants_realtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":3819,"context_line":"                if wants_realtime:"},{"line_number":3820,"context_line":"                    if not self._host.has_min_version("},{"line_number":3821,"context_line":"                            MIN_LIBVIRT_REALTIME_VERSION):"},{"line_number":3822,"context_line":"                        raise exception.RealtimePolicyNotSupported()"},{"line_number":3823,"context_line":"                    # Prepare realtime config for libvirt"},{"line_number":3824,"context_line":"                    vcpus_rt \u003d hardware.vcpus_realtime_topology("},{"line_number":3825,"context_line":"                        flavor, image_meta)"},{"line_number":3826,"context_line":"                    vcpusched \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUSched()"},{"line_number":3827,"context_line":"                    vcpusched.vcpus \u003d vcpus_rt"},{"line_number":3828,"context_line":"                    vcpusched.scheduler \u003d \"fifo\""},{"line_number":3829,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3830,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3831,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"                for host_cell in topology.cells:"},{"line_number":3834,"context_line":"                    for guest_node_id, guest_config_cell in enumerate("}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_6df8aae6","line":3831,"range":{"start_line":3817,"start_character":0,"end_line":3831,"end_character":62},"updated":"2016-10-11 12:19:29.000000000","message":"nit: IMO, this could should be spun out into its own function","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"c9dc007ed2f655c360c82887286ce5e4a2574f41","unresolved":false,"context_lines":[{"line_number":3814,"context_line":"                numa_memnodes \u003d [vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":3815,"context_line":"                                 for _ in guest_cpu_numa_config.cells]"},{"line_number":3816,"context_line":""},{"line_number":3817,"context_line":"                vcpus_rt \u003d set([])"},{"line_number":3818,"context_line":"                wants_realtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":3819,"context_line":"                if wants_realtime:"},{"line_number":3820,"context_line":"                    if not self._host.has_min_version("},{"line_number":3821,"context_line":"                            MIN_LIBVIRT_REALTIME_VERSION):"},{"line_number":3822,"context_line":"                        raise exception.RealtimePolicyNotSupported()"},{"line_number":3823,"context_line":"                    # Prepare realtime config for libvirt"},{"line_number":3824,"context_line":"                    vcpus_rt \u003d hardware.vcpus_realtime_topology("},{"line_number":3825,"context_line":"                        flavor, image_meta)"},{"line_number":3826,"context_line":"                    vcpusched \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUSched()"},{"line_number":3827,"context_line":"                    vcpusched.vcpus \u003d vcpus_rt"},{"line_number":3828,"context_line":"                    vcpusched.scheduler \u003d \"fifo\""},{"line_number":3829,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3830,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3831,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"                for host_cell in topology.cells:"},{"line_number":3834,"context_line":"                    for guest_node_id, guest_config_cell in enumerate("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_b9f91fcb","line":3831,"range":{"start_line":3817,"start_character":0,"end_line":3831,"end_character":62},"in_reply_to":"5a8bc5a2_6df8aae6","updated":"2016-10-11 12:32:51.000000000","message":"Any such code refactoring should be a separate patch","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1302c62df9fe9b9108432506805df11a94958383","unresolved":false,"context_lines":[{"line_number":3814,"context_line":"                numa_memnodes \u003d [vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":3815,"context_line":"                                 for _ in guest_cpu_numa_config.cells]"},{"line_number":3816,"context_line":""},{"line_number":3817,"context_line":"                vcpus_rt \u003d set([])"},{"line_number":3818,"context_line":"                wants_realtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":3819,"context_line":"                if wants_realtime:"},{"line_number":3820,"context_line":"                    if not self._host.has_min_version("},{"line_number":3821,"context_line":"                            MIN_LIBVIRT_REALTIME_VERSION):"},{"line_number":3822,"context_line":"                        raise exception.RealtimePolicyNotSupported()"},{"line_number":3823,"context_line":"                    # Prepare realtime config for libvirt"},{"line_number":3824,"context_line":"                    vcpus_rt \u003d hardware.vcpus_realtime_topology("},{"line_number":3825,"context_line":"                        flavor, image_meta)"},{"line_number":3826,"context_line":"                    vcpusched \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUSched()"},{"line_number":3827,"context_line":"                    vcpusched.vcpus \u003d vcpus_rt"},{"line_number":3828,"context_line":"                    vcpusched.scheduler \u003d \"fifo\""},{"line_number":3829,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3830,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3831,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"                for host_cell in topology.cells:"},{"line_number":3834,"context_line":"                    for guest_node_id, guest_config_cell in enumerate("}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_160ddbe7","line":3831,"range":{"start_line":3817,"start_character":0,"end_line":3831,"end_character":62},"in_reply_to":"fa6399be_51d95356","updated":"2016-11-02 17:09:25.000000000","message":"Agreed with Stephen. Let\u0027s just do it right the first time here...","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"80b0b306e519209c258f4e477d13098d1a88f467","unresolved":false,"context_lines":[{"line_number":3814,"context_line":"                numa_memnodes \u003d [vconfig.LibvirtConfigGuestNUMATuneMemNode()"},{"line_number":3815,"context_line":"                                 for _ in guest_cpu_numa_config.cells]"},{"line_number":3816,"context_line":""},{"line_number":3817,"context_line":"                vcpus_rt \u003d set([])"},{"line_number":3818,"context_line":"                wants_realtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":3819,"context_line":"                if wants_realtime:"},{"line_number":3820,"context_line":"                    if not self._host.has_min_version("},{"line_number":3821,"context_line":"                            MIN_LIBVIRT_REALTIME_VERSION):"},{"line_number":3822,"context_line":"                        raise exception.RealtimePolicyNotSupported()"},{"line_number":3823,"context_line":"                    # Prepare realtime config for libvirt"},{"line_number":3824,"context_line":"                    vcpus_rt \u003d hardware.vcpus_realtime_topology("},{"line_number":3825,"context_line":"                        flavor, image_meta)"},{"line_number":3826,"context_line":"                    vcpusched \u003d vconfig.LibvirtConfigGuestCPUTuneVCPUSched()"},{"line_number":3827,"context_line":"                    vcpusched.vcpus \u003d vcpus_rt"},{"line_number":3828,"context_line":"                    vcpusched.scheduler \u003d \"fifo\""},{"line_number":3829,"context_line":"                    vcpusched.priority \u003d ("},{"line_number":3830,"context_line":"                        CONF.libvirt.realtime_scheduler_priority)"},{"line_number":3831,"context_line":"                    guest_cpu_tune.vcpusched.append(vcpusched)"},{"line_number":3832,"context_line":""},{"line_number":3833,"context_line":"                for host_cell in topology.cells:"},{"line_number":3834,"context_line":"                    for guest_node_id, guest_config_cell in enumerate("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_51d95356","line":3831,"range":{"start_line":3817,"start_character":0,"end_line":3831,"end_character":62},"in_reply_to":"fa6399be_b9f91fcb","updated":"2016-10-20 10:19:43.000000000","message":"But we\u0027re adding it here - why would we not do it right the first go \u0027round? This function is already long and confusing, and if we have the chance to avoid making it longer then we should","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"32a3ac6edac8c103f226f21ad2ea5567b19743e3","unresolved":false,"context_lines":[{"line_number":3858,"context_line":"                                    pin_cpuset.cpuset \u003d set([pcpu])"},{"line_number":3859,"context_line":"                                else:"},{"line_number":3860,"context_line":"                                    pin_cpuset.cpuset \u003d host_cell.cpuset"},{"line_number":3861,"context_line":"                                if not wants_realtime or cpu not in vcpus_rt:"},{"line_number":3862,"context_line":"                                    # A pCPU is configured for running"},{"line_number":3863,"context_line":"                                    # emulators if realtime is not"},{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_cec1c130","line":3867,"range":{"start_line":3861,"start_character":32,"end_line":3867,"end_character":70},"updated":"2016-09-22 11:12:11.000000000","message":"Is this correct? It feels like its about all the VMs on the host not having realtime guests present, rather than one specific VM. I could be missing something?","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"778314d0af7af2b25a55de3442fdb8f1880329d9","unresolved":false,"context_lines":[{"line_number":3858,"context_line":"                                    pin_cpuset.cpuset \u003d set([pcpu])"},{"line_number":3859,"context_line":"                                else:"},{"line_number":3860,"context_line":"                                    pin_cpuset.cpuset \u003d host_cell.cpuset"},{"line_number":3861,"context_line":"                                if not wants_realtime or cpu not in vcpus_rt:"},{"line_number":3862,"context_line":"                                    # A pCPU is configured for running"},{"line_number":3863,"context_line":"                                    # emulators if realtime is not"},{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_b6ca0c4e","line":3867,"range":{"start_line":3861,"start_character":32,"end_line":3867,"end_character":70},"in_reply_to":"5a8bc5a2_3409982d","updated":"2016-10-11 12:19:29.000000000","message":"^ that should be documented here","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"e9edb25360ae85429164cef0dd7baaa2e7578b7c","unresolved":false,"context_lines":[{"line_number":3858,"context_line":"                                    pin_cpuset.cpuset \u003d set([pcpu])"},{"line_number":3859,"context_line":"                                else:"},{"line_number":3860,"context_line":"                                    pin_cpuset.cpuset \u003d host_cell.cpuset"},{"line_number":3861,"context_line":"                                if not wants_realtime or cpu not in vcpus_rt:"},{"line_number":3862,"context_line":"                                    # A pCPU is configured for running"},{"line_number":3863,"context_line":"                                    # emulators if realtime is not"},{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bc5a2_3409982d","line":3867,"range":{"start_line":3861,"start_character":32,"end_line":3867,"end_character":70},"in_reply_to":"5a8bc5a2_cec1c130","updated":"2016-09-22 11:36:09.000000000","message":"Yes, its correct. There are two cases\n\n - If realtime IS NOT enabled, the the emulator threads are allowed to float across all the pCPUs associated with the guest vCPUs (\"not wants_realtime\" is true, so we add all pcpus)\n\n - If realtime IS enabled, then at least 1 vCPU is required to be set aside for non-realtime usage. The emulator threads are allowed to float acros the pCPUs that are associated with the non-realtime VCPUs (the \"cpu not in vcpu_rt\" check deals with this filtering)","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"9cb6b6d3d51eb07591d8adc2ffe468f320654159","unresolved":false,"context_lines":[{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_6c1f2a08","line":3867,"in_reply_to":"ba5da102_d60603cd","updated":"2016-11-02 18:14:55.000000000","message":"Done","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"1302c62df9fe9b9108432506805df11a94958383","unresolved":false,"context_lines":[{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5da102_d60603cd","line":3867,"in_reply_to":"fa6399be_1f04ab15","updated":"2016-11-02 17:09:25.000000000","message":"Sahid, please take the comment above from danpb and add it as a code comment here.","commit_id":"9da23b73dc261f769d51b043447e986c18514364"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fd9a7fc65e4da52b69c1eb1329c81d954f972943","unresolved":false,"context_lines":[{"line_number":3864,"context_line":"                                    # enabled or if its vCPU related"},{"line_number":3865,"context_line":"                                    # is not considered as a realtime"},{"line_number":3866,"context_line":"                                    # one regarding the mask."},{"line_number":3867,"context_line":"                                    emupcpus.extend(pin_cpuset.cpuset)"},{"line_number":3868,"context_line":"                                guest_cpu_tune.vcpupin.append(pin_cpuset)"},{"line_number":3869,"context_line":""},{"line_number":3870,"context_line":"                # TODO(berrange) When the guest has \u003e1 NUMA node, it will"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa6399be_1f04ab15","line":3867,"in_reply_to":"fa6399be_b6ca0c4e","updated":"2016-10-11 13:29:06.000000000","message":"It\u0027s documented","commit_id":"9da23b73dc261f769d51b043447e986c18514364"}]}
