)]}'
{"nova/virt/hardware.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e00e57750b8d6bcb419067d8d4bbf7e6d7da3beb","unresolved":false,"context_lines":[{"line_number":941,"context_line":"    return flavor_policy, image_policy"},{"line_number":942,"context_line":""},{"line_number":943,"context_line":""},{"line_number":944,"context_line":"def _get_numa_pagesize_constraints(flavor, image_meta):"},{"line_number":945,"context_line":"    \"\"\"Validate and return the requested memory page size.\"\"\""},{"line_number":946,"context_line":""},{"line_number":947,"context_line":"    def check_and_return_pages_size(request):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_8c0f4538","line":944,"updated":"2016-10-20 15:10:05.000000000","message":"hum.. I\u0027m not very pro of that change, we have added the prefix \u0027_numa\u0027 because these methods are going to me moved on a new file numa.py so then this is going to be redundant","commit_id":"f875253a56617bb82c5f2223b56438a6faf361e6"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e00e57750b8d6bcb419067d8d4bbf7e6d7da3beb","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"        return hw_numa_cpus"},{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"def _get_numa_cpu_constraints(flavor, image_meta):"},{"line_number":1008,"context_line":"    flavor_cpu_list \u003d _numa_get_flavor_cpu_map_list(flavor)"},{"line_number":1009,"context_line":"    image_cpu_list \u003d image_meta.properties.get(\"hw_numa_cpus\", None)"},{"line_number":1010,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_87063e1a","line":1007,"updated":"2016-10-20 15:10:05.000000000","message":"same here","commit_id":"f875253a56617bb82c5f2223b56438a6faf361e6"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e00e57750b8d6bcb419067d8d4bbf7e6d7da3beb","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        return hw_numa_mem"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"def _get_numa_mem_constraints(flavor, image_meta):"},{"line_number":1034,"context_line":"    flavor_mem_list \u003d _numa_get_flavor_mem_map_list(flavor)"},{"line_number":1035,"context_line":"    image_mem_list \u003d image_meta.properties.get(\"hw_numa_mem\", None)"},{"line_number":1036,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa6399be_c714b645","line":1033,"updated":"2016-10-20 15:10:05.000000000","message":"same here","commit_id":"f875253a56617bb82c5f2223b56438a6faf361e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cf0890fd82b4b8b5fe19415364c275c31d1aa9ec","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"    return strutils.bool_from_string(flavor_rt)"},{"line_number":1130,"context_line":""},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"def _get_realtime_mask(flavor, image):"},{"line_number":1133,"context_line":"    \"\"\"Returns realtime mask based on flavor/image meta\"\"\""},{"line_number":1134,"context_line":"    flavor_mask, image_mask \u003d _get_flavor_image_meta("},{"line_number":1135,"context_line":"        \u0027cpu_realtime_mask\u0027, flavor, image)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_6473184e","side":"PARENT","line":1132,"range":{"start_line":1132,"start_character":4,"end_line":1132,"end_character":22},"updated":"2016-11-24 17:06:13.000000000","message":"Why did the function move, seems like realtime is grouped togther here.","commit_id":"58db7d9c9e4d5508f84aaa60ab5abbf78c719033"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cf0890fd82b4b8b5fe19415364c275c31d1aa9ec","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    return pagesize"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"def _numa_get_flavor_cpu_map_list(flavor):"},{"line_number":1004,"context_line":"    hw_numa_cpus \u003d []"},{"line_number":1005,"context_line":"    extra_specs \u003d flavor.get(\"extra_specs\", {})"},{"line_number":1006,"context_line":"    for cellid in range(objects.ImageMetaProps.NUMA_NODES_MAX):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_e4af2892","line":1003,"updated":"2016-11-24 17:06:13.000000000","message":"Seems odd to do only half of these.","commit_id":"e153646f8b3eb609dad544dc3331d821abac9a8a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3fa6af0f196ecf8142a0b2e8053d7d13313c16b5","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    return pagesize"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"def _numa_get_flavor_cpu_map_list(flavor):"},{"line_number":1004,"context_line":"    hw_numa_cpus \u003d []"},{"line_number":1005,"context_line":"    extra_specs \u003d flavor.get(\"extra_specs\", {})"},{"line_number":1006,"context_line":"    for cellid in range(objects.ImageMetaProps.NUMA_NODES_MAX):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_97957a88","line":1003,"in_reply_to":"5a74a57a_e43f28d4","updated":"2018-02-16 15:03:52.000000000","message":"I didn\u0027t fix these here as I significantly modified them in a subsequent patch. I\u0027ll reshuffle the patches to make this more evident","commit_id":"e153646f8b3eb609dad544dc3331d821abac9a8a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca4cd62231e2e67f6e636d454118baf9583186f0","unresolved":false,"context_lines":[{"line_number":1000,"context_line":"    return pagesize"},{"line_number":1001,"context_line":""},{"line_number":1002,"context_line":""},{"line_number":1003,"context_line":"def _numa_get_flavor_cpu_map_list(flavor):"},{"line_number":1004,"context_line":"    hw_numa_cpus \u003d []"},{"line_number":1005,"context_line":"    extra_specs \u003d flavor.get(\"extra_specs\", {})"},{"line_number":1006,"context_line":"    for cellid in range(objects.ImageMetaProps.NUMA_NODES_MAX):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_e43f28d4","line":1003,"in_reply_to":"5a74a57a_e4af2892","updated":"2016-11-24 17:24:13.000000000","message":"Maybe a class of NumaHelpers would help organise these better?","commit_id":"e153646f8b3eb609dad544dc3331d821abac9a8a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca4cd62231e2e67f6e636d454118baf9583186f0","unresolved":false,"context_lines":[{"line_number":1040,"context_line":"        return hw_numa_mem"},{"line_number":1041,"context_line":""},{"line_number":1042,"context_line":""},{"line_number":1043,"context_line":"def _get_numa_mem_constraints(flavor, image_meta):"},{"line_number":1044,"context_line":"    flavor_mem_list \u003d _numa_get_flavor_mem_map_list(flavor)"},{"line_number":1045,"context_line":"    image_mem_list \u003d image_meta.properties.get(\"hw_numa_mem\", None)"},{"line_number":1046,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_24092032","line":1043,"range":{"start_line":1043,"start_character":4,"end_line":1043,"end_character":29},"updated":"2016-11-24 17:24:13.000000000","message":"honestly, I would go for get_hw_numa_mem(...) and have all the methods here match the name of the thing they are getting from the flavor (or go with the image ones, one or the other).\n\nSplitting into files or helper classes could also work. It feels like there is an emergent \"request\" object for each aspect here, NUMA, realtime, pinning/placement, etc. Its tempting to say you want a get_hw_request_obj(), and this just populates each property of that object structure.  I am just thinking out loud now really. Thats probably overkill / adds confusion.","commit_id":"e153646f8b3eb609dad544dc3331d821abac9a8a"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ca4cd62231e2e67f6e636d454118baf9583186f0","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"        return flavor_mem_list"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":""},{"line_number":1056,"context_line":"def _get_numa_constraints(flavor, image_meta):"},{"line_number":1057,"context_line":"    \"\"\"Validate and return the requested numa nodes.\"\"\""},{"line_number":1058,"context_line":"    flavor_nodes, image_nodes \u003d _get_flavor_image_meta("},{"line_number":1059,"context_line":"        \u0027numa_nodes\u0027, flavor, image_meta)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a74a57a_671a3a70","line":1056,"updated":"2016-11-24 17:24:13.000000000","message":"Nit: I am not sure why some of these have moved, its better to rename in place, just for when you are fishing through history, and when reviewing the change.","commit_id":"e153646f8b3eb609dad544dc3331d821abac9a8a"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"f9e7e781ca2600c6d5f204aa16cbf0a7bfd1d0a3","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"    return pagesize"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":""},{"line_number":1104,"context_line":"def _numa_get_flavor_numa_map(flavor, key, func):"},{"line_number":1105,"context_line":"    hw_numa_map \u003d []"},{"line_number":1106,"context_line":"    extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {})"},{"line_number":1107,"context_line":"    for cellid in range(objects.ImageMetaProps.NUMA_NODES_MAX):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_0049a589","line":1104,"range":{"start_line":1104,"start_character":4,"end_line":1104,"end_character":29},"updated":"2017-10-16 00:21:56.000000000","message":"If we rename \u0027_numa_get_xxx_map_list\u0027 to \u0027_get_numa_xxx_constraints\u0027, isn\u0027t it good to rename this function not to start with \u0027_numa\u0027, as well? it would be something like \u0027_get_numa_map_from_flavor\u0027.","commit_id":"fb5e0d2853292c608107795d182fe9c7a32682dc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3fa6af0f196ecf8142a0b2e8053d7d13313c16b5","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"    return pagesize"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":""},{"line_number":1104,"context_line":"def _numa_get_flavor_numa_map(flavor, key, func):"},{"line_number":1105,"context_line":"    hw_numa_map \u003d []"},{"line_number":1106,"context_line":"    extra_specs \u003d flavor.get(\u0027extra_specs\u0027, {})"},{"line_number":1107,"context_line":"    for cellid in range(objects.ImageMetaProps.NUMA_NODES_MAX):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_1c885c1d","line":1104,"range":{"start_line":1104,"start_character":4,"end_line":1104,"end_character":29},"in_reply_to":"5f4e5783_0049a589","updated":"2018-02-16 15:03:52.000000000","message":"Not quite, because this is only a helper function. It doesn\u0027t need to be consistent. I renamed it all the same though as this stuff is tough enough to follow as is","commit_id":"fb5e0d2853292c608107795d182fe9c7a32682dc"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"f9e7e781ca2600c6d5f204aa16cbf0a7bfd1d0a3","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    return image_mask or flavor_mask"},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"def vcpus_realtime_topology(flavor, image):"},{"line_number":1265,"context_line":"    \"\"\"Determines instance vCPUs used as RT for a given spec\"\"\""},{"line_number":1266,"context_line":"    mask \u003d _get_realtime_constraints(flavor, image)"},{"line_number":1267,"context_line":"    if not mask:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f4e5783_a01f71b5","line":1264,"range":{"start_line":1264,"start_character":36,"end_line":1264,"end_character":41},"updated":"2017-10-16 00:21:56.000000000","message":"Isn\u0027t \"image_meta\" better for consistency?","commit_id":"fb5e0d2853292c608107795d182fe9c7a32682dc"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3fa6af0f196ecf8142a0b2e8053d7d13313c16b5","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"    return image_mask or flavor_mask"},{"line_number":1262,"context_line":""},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"def vcpus_realtime_topology(flavor, image):"},{"line_number":1265,"context_line":"    \"\"\"Determines instance vCPUs used as RT for a given spec\"\"\""},{"line_number":1266,"context_line":"    mask \u003d _get_realtime_constraints(flavor, image)"},{"line_number":1267,"context_line":"    if not mask:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_9c722c11","line":1264,"range":{"start_line":1264,"start_character":36,"end_line":1264,"end_character":41},"in_reply_to":"5f4e5783_a01f71b5","updated":"2018-02-16 15:03:52.000000000","message":"It is. Let me fix that.","commit_id":"fb5e0d2853292c608107795d182fe9c7a32682dc"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"72f5d5c30c5ea041adde4d757dcddf71412cc884","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1156,"context_line":"    example, the flavor extra spec ``hw:numa_cpus.0\u003d1`` will map 1 GB of guest"},{"line_number":1157,"context_line":"    to guest NUMA node ``0``."},{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"    :param flavor: An instance of ``nova.objects.Flavor`` from which to extract"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_1ea7e2a9","line":1156,"range":{"start_line":1156,"start_character":37,"end_line":1156,"end_character":53},"updated":"2018-02-17 06:53:22.000000000","message":"bad copy and paste","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"972353e63a49c13d95aa1806e41b8c88fc2d2e5c","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1156,"context_line":"    example, the flavor extra spec ``hw:numa_cpus.0\u003d1`` will map 1 GB of guest"},{"line_number":1157,"context_line":"    to guest NUMA node ``0``."},{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"    :param flavor: An instance of ``nova.objects.Flavor`` from which to extract"}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_6acc23bc","line":1156,"range":{"start_line":1156,"start_character":37,"end_line":1156,"end_character":53},"in_reply_to":"3fa0c359_1ea7e2a9","updated":"2018-03-09 10:46:56.000000000","message":"Done","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"72f5d5c30c5ea041adde4d757dcddf71412cc884","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"    return emu_threads_policy"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"def _validate_numa_nodes(nodes):"},{"line_number":1330,"context_line":"    \"\"\"Validate NUMA nodes number"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"    :param nodes: number of NUMA nodes"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_3e273e15","line":1329,"range":{"start_line":1329,"start_character":0,"end_line":1329,"end_character":32},"updated":"2018-02-17 06:53:22.000000000","message":"This sounds a deleting codes chance to me.","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"972353e63a49c13d95aa1806e41b8c88fc2d2e5c","unresolved":false,"context_lines":[{"line_number":1326,"context_line":"    return emu_threads_policy"},{"line_number":1327,"context_line":""},{"line_number":1328,"context_line":""},{"line_number":1329,"context_line":"def _validate_numa_nodes(nodes):"},{"line_number":1330,"context_line":"    \"\"\"Validate NUMA nodes number"},{"line_number":1331,"context_line":""},{"line_number":1332,"context_line":"    :param nodes: number of NUMA nodes"}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_27dbc6ed","line":1329,"range":{"start_line":1329,"start_character":0,"end_line":1329,"end_character":32},"in_reply_to":"3fa0c359_3e273e15","updated":"2018-03-09 10:46:56.000000000","message":"Good spot. /me wonder who he missed this\n\nDone.","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"72f5d5c30c5ea041adde4d757dcddf71412cc884","unresolved":false,"context_lines":[{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    rt \u003d is_realtime_enabled(flavor)"},{"line_number":1423,"context_line":""},{"line_number":1424,"context_line":"    if rt and cpu_policy !\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1425,"context_line":"        raise exception.RealtimeConfigurationInvalid()"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"    if rt and not rt_mask:"},{"line_number":1428,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_5e39ea3c","line":1425,"range":{"start_line":1424,"start_character":0,"end_line":1425,"end_character":54},"updated":"2018-02-17 06:53:22.000000000","message":"Isn\u0027t it good to gather the validation of \"dedicate cpu policy assuming features\" into the following \n\n  if cpu_policy \u003d\u003d fields.CPUAllocationPolicy.SHARED:\n\nclause this time?","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"972353e63a49c13d95aa1806e41b8c88fc2d2e5c","unresolved":false,"context_lines":[{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    rt \u003d is_realtime_enabled(flavor)"},{"line_number":1423,"context_line":""},{"line_number":1424,"context_line":"    if rt and cpu_policy !\u003d fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":1425,"context_line":"        raise exception.RealtimeConfigurationInvalid()"},{"line_number":1426,"context_line":""},{"line_number":1427,"context_line":"    if rt and not rt_mask:"},{"line_number":1428,"context_line":"        raise exception.RealtimeMaskNotFoundOrInvalid()"}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_4a511f62","line":1425,"range":{"start_line":1424,"start_character":0,"end_line":1425,"end_character":54},"in_reply_to":"3fa0c359_5e39ea3c","updated":"2018-03-09 10:46:56.000000000","message":"I assume you\u0027re referring to the below comment. Let me try that.","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"72f5d5c30c5ea041adde4d757dcddf71412cc884","unresolved":false,"context_lines":[{"line_number":1433,"context_line":""},{"line_number":1434,"context_line":"        if emu_threads_policy \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE:"},{"line_number":1435,"context_line":"            raise exception.BadRequirementEmulatorThreadsPolicy()"},{"line_number":1436,"context_line":""},{"line_number":1437,"context_line":"        return numa_topology"},{"line_number":1438,"context_line":""},{"line_number":1439,"context_line":"    if numa_topology:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa0c359_fef2369a","line":1436,"updated":"2018-02-17 06:53:22.000000000","message":"++!","commit_id":"7c474f83f53718d044eb745a77cc4d9908604e5d"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":""},{"line_number":1123,"context_line":"def _get_numa_cpu_constraints(flavor, image_meta):"},{"line_number":1124,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[List[Set[int]]]"},{"line_number":1125,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest CPU mapping."},{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    Extract the user-provided mapping of guest CPUs to guest NUMA nodes. For"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_2a9aa66d","line":1124,"range":{"start_line":1124,"start_character":4,"end_line":1124,"end_character":75},"updated":"2018-03-09 14:25:54.000000000","message":"oh my(py). :P","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1133,"context_line":"    :raises: exception.ImageNUMATopologyForbidden if both image metadata and"},{"line_number":1134,"context_line":"        flavor extra specs are defined."},{"line_number":1135,"context_line":"    :return: A ordered list of sets of CPU indexes to assign to each guest NUMA"},{"line_number":1136,"context_line":"        node if matching extra specs or image metadata properties found, else"},{"line_number":1137,"context_line":"        None."},{"line_number":1138,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_aab556cf","line":1135,"range":{"start_line":1135,"start_character":13,"end_line":1135,"end_character":15},"updated":"2018-03-09 14:25:54.000000000","message":"here and below.. \"An ordered\"","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1133,"context_line":"    :raises: exception.ImageNUMATopologyForbidden if both image metadata and"},{"line_number":1134,"context_line":"        flavor extra specs are defined."},{"line_number":1135,"context_line":"    :return: A ordered list of sets of CPU indexes to assign to each guest NUMA"},{"line_number":1136,"context_line":"        node if matching extra specs or image metadata properties found, else"},{"line_number":1137,"context_line":"        None."},{"line_number":1138,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_9422d051","line":1135,"range":{"start_line":1135,"start_character":13,"end_line":1135,"end_character":15},"in_reply_to":"df7087c5_aab556cf","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1158,"context_line":"    example, the flavor extra spec ``hw:numa_mem.0\u003d1`` will map 1 GB of guest"},{"line_number":1159,"context_line":"    to guest NUMA node ``0``."},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_eabb4ec1","line":1158,"range":{"start_line":1158,"start_character":64,"end_line":1158,"end_character":77},"updated":"2018-03-09 14:25:54.000000000","message":"\"1GB of guest memory\"","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1158,"context_line":"    example, the flavor extra spec ``hw:numa_mem.0\u003d1`` will map 1 GB of guest"},{"line_number":1159,"context_line":"    to guest NUMA node ``0``."},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_7417fcee","line":1158,"range":{"start_line":1158,"start_character":64,"end_line":1158,"end_character":77},"in_reply_to":"df7087c5_eabb4ec1","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"    return flavor_mem_list"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"def _get_numa_node_constraints(flavor, image_meta):"},{"line_number":1183,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[int]"},{"line_number":1184,"context_line":"    \"\"\"Validate and return the requested NUMA nodes."},{"line_number":1185,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_2a1dc6bc","line":1182,"range":{"start_line":1182,"start_character":9,"end_line":1182,"end_character":30},"updated":"2018-03-09 14:25:54.000000000","message":"would prefer it if this function was called _get_num_numa_nodes_constraint() since it\u0027s not returning the NUMA node identifiers but rather the number of NUMA nodes the constraints are calling for. Also, since it returns a singular item, would prefer it end in constraint() not constraints()..","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"    return flavor_mem_list"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":""},{"line_number":1182,"context_line":"def _get_numa_node_constraints(flavor, image_meta):"},{"line_number":1183,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[int]"},{"line_number":1184,"context_line":"    \"\"\"Validate and return the requested NUMA nodes."},{"line_number":1185,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_b4791430","line":1182,"range":{"start_line":1182,"start_character":9,"end_line":1182,"end_character":30},"in_reply_to":"df7087c5_2a1dc6bc","updated":"2018-03-12 15:06:09.000000000","message":"Called it \u0027numa_node_count_constraints\u0027 to keep the \u0027_get_numa_xxx_constraints\u0027 pattern.","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1193,"context_line":"    flavor_nodes, image_nodes \u003d _get_flavor_image_meta("},{"line_number":1194,"context_line":"        \u0027numa_nodes\u0027, flavor, image_meta)"},{"line_number":1195,"context_line":"    if flavor_nodes and image_nodes:"},{"line_number":1196,"context_line":"        raise exception.ImageNUMATopologyForbidden(name\u003d\u0027hw_numa_nodes\u0027)"},{"line_number":1197,"context_line":""},{"line_number":1198,"context_line":"    nodes \u003d flavor_nodes or image_nodes"},{"line_number":1199,"context_line":"    if nodes is not None and (not strutils.is_int_like(nodes) or"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_0adb221b","line":1196,"range":{"start_line":1196,"start_character":8,"end_line":1196,"end_character":72},"updated":"2018-03-09 14:25:54.000000000","message":"please include this in the docstring along with InvalidNUMANodesNumber.","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1193,"context_line":"    flavor_nodes, image_nodes \u003d _get_flavor_image_meta("},{"line_number":1194,"context_line":"        \u0027numa_nodes\u0027, flavor, image_meta)"},{"line_number":1195,"context_line":"    if flavor_nodes and image_nodes:"},{"line_number":1196,"context_line":"        raise exception.ImageNUMATopologyForbidden(name\u003d\u0027hw_numa_nodes\u0027)"},{"line_number":1197,"context_line":""},{"line_number":1198,"context_line":"    nodes \u003d flavor_nodes or image_nodes"},{"line_number":1199,"context_line":"    if nodes is not None and (not strutils.is_int_like(nodes) or"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_d499286e","line":1196,"range":{"start_line":1196,"start_character":8,"end_line":1196,"end_character":72},"in_reply_to":"df7087c5_0adb221b","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"    return int(nodes) if nodes else nodes"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":"def _get_cpu_policy_constraints(flavor, image_meta):"},{"line_number":1207,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[str]"},{"line_number":1208,"context_line":"    \"\"\"Validate and return the requested CPU policy."},{"line_number":1209,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_8a35f248","line":1206,"range":{"start_line":1206,"start_character":30,"end_line":1206,"end_character":31},"updated":"2018-03-09 14:25:54.000000000","message":"I always thought this method should be singular -- i.e. _get_cpu_policy_constraint() -- since it returns only a single thing.","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1203,"context_line":"    return int(nodes) if nodes else nodes"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":""},{"line_number":1206,"context_line":"def _get_cpu_policy_constraints(flavor, image_meta):"},{"line_number":1207,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[str]"},{"line_number":1208,"context_line":"    \"\"\"Validate and return the requested CPU policy."},{"line_number":1209,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_9404104c","line":1206,"range":{"start_line":1206,"start_character":30,"end_line":1206,"end_character":31},"in_reply_to":"df7087c5_8a35f248","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1230,"context_line":"    return cpu_policy"},{"line_number":1231,"context_line":""},{"line_number":1232,"context_line":""},{"line_number":1233,"context_line":"def _get_cpu_thread_policy_constraints(flavor, image_meta):"},{"line_number":1234,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[str]"},{"line_number":1235,"context_line":"    \"\"\"Validate and return the requested CPU thread policy."},{"line_number":1236,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_ca2beae8","line":1233,"range":{"start_line":1233,"start_character":37,"end_line":1233,"end_character":38},"updated":"2018-03-09 14:25:54.000000000","message":"ditto about the singular naming...","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1313,"context_line":"    return strutils.bool_from_string(flavor_rt)"},{"line_number":1314,"context_line":""},{"line_number":1315,"context_line":""},{"line_number":1316,"context_line":"def _get_realtime_constraints(flavor, image_meta):"},{"line_number":1317,"context_line":"    # type: (objects.Flavor, objects.ImageMeta) -\u003e Optional[str]"},{"line_number":1318,"context_line":"    \"\"\"Validate and return the requested realtime CPU mask."},{"line_number":1319,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_ea7caeec","line":1316,"range":{"start_line":1316,"start_character":28,"end_line":1316,"end_character":29},"updated":"2018-03-09 14:25:54.000000000","message":"singular...","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":""},{"line_number":1353,"context_line":"# NOTE(stephenfin): This must be public as it\u0027s used elsewhere"},{"line_number":1354,"context_line":"def get_emulator_threads_constraints(flavor):"},{"line_number":1355,"context_line":"    # type: (objects.Flavor) -\u003e Optional[str]"},{"line_number":1356,"context_line":"    \"\"\"Validate and return the requested emulator threads policy."},{"line_number":1357,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_aa86b6da","line":1354,"range":{"start_line":1354,"start_character":35,"end_line":1354,"end_character":36},"updated":"2018-03-09 14:25:54.000000000","message":"singular, and should be get_emulator_threads_policy_constraint() since it returns the policy string not the identifier of the emulator threads...","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1356,"context_line":"    \"\"\"Validate and return the requested emulator threads policy."},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"},{"line_number":1359,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1360,"context_line":"    :raises: exception.RealtimeMaskNotFoundOrInvalid if mask was not found or"},{"line_number":1361,"context_line":"        is invalid."},{"line_number":1362,"context_line":"    :returns: The realtime CPU mask requested, else None."}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_aad476be","line":1359,"range":{"start_line":1359,"start_character":0,"end_line":1359,"end_character":58},"updated":"2018-03-09 14:25:54.000000000","message":"this is no longer an argument.","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1356,"context_line":"    \"\"\"Validate and return the requested emulator threads policy."},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"},{"line_number":1359,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1360,"context_line":"    :raises: exception.RealtimeMaskNotFoundOrInvalid if mask was not found or"},{"line_number":1361,"context_line":"        is invalid."},{"line_number":1362,"context_line":"    :returns: The realtime CPU mask requested, else None."}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_f4b54cce","line":1359,"range":{"start_line":1359,"start_character":0,"end_line":1359,"end_character":58},"in_reply_to":"df7087c5_aad476be","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"},{"line_number":1359,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1360,"context_line":"    :raises: exception.RealtimeMaskNotFoundOrInvalid if mask was not found or"},{"line_number":1361,"context_line":"        is invalid."},{"line_number":1362,"context_line":"    :returns: The realtime CPU mask requested, else None."},{"line_number":1363,"context_line":"    \"\"\""},{"line_number":1364,"context_line":"    emu_threads_policy \u003d flavor.get(\u0027extra_specs\u0027, {}).get("}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_2ae06696","line":1361,"range":{"start_line":1360,"start_character":4,"end_line":1361,"end_character":19},"updated":"2018-03-09 14:25:54.000000000","message":"this is the wrong exception being raised.","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"},{"line_number":1359,"context_line":"    :param image_meta: ``nova.objects.ImageMeta`` instance"},{"line_number":1360,"context_line":"    :raises: exception.RealtimeMaskNotFoundOrInvalid if mask was not found or"},{"line_number":1361,"context_line":"        is invalid."},{"line_number":1362,"context_line":"    :returns: The realtime CPU mask requested, else None."},{"line_number":1363,"context_line":"    \"\"\""},{"line_number":1364,"context_line":"    emu_threads_policy \u003d flavor.get(\u0027extra_specs\u0027, {}).get("}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_d4b288e6","line":1361,"range":{"start_line":1360,"start_character":4,"end_line":1361,"end_character":19},"in_reply_to":"df7087c5_2ae06696","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":1368,"context_line":"        return"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"    if emu_threads_policy not in fields.CPUEmulatorThreadsPolicy.ALL:"},{"line_number":1371,"context_line":"        raise exception.InvalidEmulatorThreadsPolicy("},{"line_number":1372,"context_line":"            requested\u003demu_threads_policy,"},{"line_number":1373,"context_line":"            available\u003dstr(fields.CPUEmulatorThreadsPolicy.ALL))"},{"line_number":1374,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_6ad65ec6","line":1371,"range":{"start_line":1371,"start_character":8,"end_line":1371,"end_character":52},"updated":"2018-03-09 14:25:54.000000000","message":"please include this raising exception in the docstring","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":1368,"context_line":"        return"},{"line_number":1369,"context_line":""},{"line_number":1370,"context_line":"    if emu_threads_policy not in fields.CPUEmulatorThreadsPolicy.ALL:"},{"line_number":1371,"context_line":"        raise exception.InvalidEmulatorThreadsPolicy("},{"line_number":1372,"context_line":"            requested\u003demu_threads_policy,"},{"line_number":1373,"context_line":"            available\u003dstr(fields.CPUEmulatorThreadsPolicy.ALL))"},{"line_number":1374,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_54c6784a","line":1371,"range":{"start_line":1371,"start_character":8,"end_line":1371,"end_character":52},"in_reply_to":"df7087c5_6ad65ec6","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"2af93d576546ab77f22de891a4ccea6b0b95527b","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1158,"context_line":"    example, the flavor extra spec ``hw:numa_mem.0\u003d1`` will map 1 GB of guest"},{"line_number":1159,"context_line":"    memory to guest NUMA node ``0``."},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"}],"source_content_type":"text/x-python","patch_set":16,"id":"df7087c5_c5a04293","line":1158,"range":{"start_line":1158,"start_character":34,"end_line":1158,"end_character":69},"updated":"2018-03-15 00:47:37.000000000","message":"This is at least inconsistent with the following document. I remember the following document (in MB) is right, isn\u0027t it?\n\nhttps://docs.openstack.org/nova/latest/admin/cpu-topologies.html#customizing-instance-numa-placement-policies","commit_id":"cfc77321b3a5f8f4f3fe6237a7abcc8f84e3d794"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"591a00102dae33ea5d252753f40dfbf8f8d6565c","unresolved":false,"context_lines":[{"line_number":1155,"context_line":"    \"\"\"Validate and return the requested guest NUMA-guest memory mapping."},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"    Extract the user-provided mapping of guest memory to guest NUMA nodes. For"},{"line_number":1158,"context_line":"    example, the flavor extra spec ``hw:numa_mem.0\u003d1`` will map 1 GB of guest"},{"line_number":1159,"context_line":"    memory to guest NUMA node ``0``."},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    :param flavor: ``nova.objects.Flavor`` instance"}],"source_content_type":"text/x-python","patch_set":16,"id":"df7087c5_8c07331d","line":1158,"range":{"start_line":1158,"start_character":34,"end_line":1158,"end_character":69},"in_reply_to":"df7087c5_c5a04293","updated":"2018-03-21 15:44:03.000000000","message":"Yup, it is MB. I\u0027ll fix this in a follow-up.","commit_id":"cfc77321b3a5f8f4f3fe6237a7abcc8f84e3d794"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"2af93d576546ab77f22de891a4ccea6b0b95527b","unresolved":false,"context_lines":[{"line_number":1464,"context_line":"        if emu_threads_policy \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE:"},{"line_number":1465,"context_line":"            raise exception.BadRequirementEmulatorThreadsPolicy()"},{"line_number":1466,"context_line":""},{"line_number":1467,"context_line":"        if is_realtime_enabled(flavor):"},{"line_number":1468,"context_line":"            raise exception.RealtimeConfigurationInvalid()"},{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":"        return numa_topology"},{"line_number":1471,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"df7087c5_45be72b4","line":1468,"range":{"start_line":1467,"start_character":0,"end_line":1468,"end_character":58},"updated":"2018-03-15 00:47:37.000000000","message":"thanks for catching my nit :)","commit_id":"cfc77321b3a5f8f4f3fe6237a7abcc8f84e3d794"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6aa79e24fe9959b282797a80313cba27451b05f5","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            instance_info)"},{"line_number":794,"context_line":"        if isinstance(instance_info, objects.Flavor):"},{"line_number":795,"context_line":"            # A flavor object is passed during case of migrate"},{"line_number":796,"context_line":"            if (hardware.get_emulator_threads_constraints(instance_info)"},{"line_number":797,"context_line":"                    \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE):"},{"line_number":798,"context_line":"                overhead[\u0027vcpus\u0027] +\u003d 1"},{"line_number":799,"context_line":"        else:"},{"line_number":800,"context_line":"            # An instance object is passed during case of spawing or a"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_aaa2364a","line":797,"range":{"start_line":796,"start_character":12,"end_line":797,"end_character":64},"updated":"2018-03-09 14:25:54.000000000","message":"would be a bit easier on the eyes like this I think:\n\n emu_policy \u003d hardware.get_emulator_threads_policy_constraint(\n     instance_info)\n if emu_policy \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE:","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"119449286a6546d51a95a822ce112610eeef13ca","unresolved":false,"context_lines":[{"line_number":793,"context_line":"            instance_info)"},{"line_number":794,"context_line":"        if isinstance(instance_info, objects.Flavor):"},{"line_number":795,"context_line":"            # A flavor object is passed during case of migrate"},{"line_number":796,"context_line":"            if (hardware.get_emulator_threads_constraints(instance_info)"},{"line_number":797,"context_line":"                    \u003d\u003d fields.CPUEmulatorThreadsPolicy.ISOLATE):"},{"line_number":798,"context_line":"                overhead[\u0027vcpus\u0027] +\u003d 1"},{"line_number":799,"context_line":"        else:"},{"line_number":800,"context_line":"            # An instance object is passed during case of spawing or a"}],"source_content_type":"text/x-python","patch_set":15,"id":"df7087c5_34f4245b","line":797,"range":{"start_line":796,"start_character":12,"end_line":797,"end_character":64},"in_reply_to":"df7087c5_aaa2364a","updated":"2018-03-12 15:06:09.000000000","message":"Done","commit_id":"6c7c90af1667aeb5f1c37739c5df04b4a28edb84"}]}
