)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7c2960e61cb9107940223bebd91c843604b5fa93","unresolved":false,"context_lines":[{"line_number":14,"context_line":"directory specified in libvirt\u0027s qemu.conf file \u0027memory_backing_dir\u0027"},{"line_number":15,"context_line":"config option."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Current remaining TODO:"},{"line_number":18,"context_line":"Create functional tests"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: I676291ec0faa1dea0bd5050ef8e3426d171de4c6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5f7c97a3_b88eb176","line":17,"updated":"2018-05-11 16:37:56.000000000","message":"nit: if this is indeed work in progress, please prepend \u0027WIP:\u0027 to the commit message title.","commit_id":"1162e3fbbbba529a7394514420cc1d5c672a4781"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2396e11584ab8266999037ac9f0f99bf8fd2cdcc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"config option."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I676291ec0faa1dea0bd5050ef8e3426d171de4c6"},{"line_number":18,"context_line":"Implements: blueprint file-backed-memory"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f7c97a3_ee741a00","line":18,"range":{"start_line":18,"start_character":22,"end_line":18,"end_character":40},"updated":"2018-05-15 23:13:33.000000000","message":"This should be libvirt-file-backed-memory to match the blueprint you have created.","commit_id":"748089e128288fd92deaf7d1c5f7446c28020659"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement file backed memory for instances in libvirt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"File backed memory is enabled per Nova compute host. When enabled, host"},{"line_number":10,"context_line":"will report \u0027file_backed_memory_capacity\u0027 for available memory, and will"},{"line_number":11,"context_line":"override the ram_allocation_ratio to 1.0."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5f7c97a3_0a5d46e8","line":9,"updated":"2018-05-23 08:35:29.000000000","message":"You should probably update the commit message.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"config option."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature is not compatible with memory overcommit, and requires"},{"line_number":17,"context_line":"\u0027ram_allocation_ration\u0027 to be set to 1.0"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I676291ec0faa1dea0bd5050ef8e3426d171de4c6"},{"line_number":20,"context_line":"Implements: blueprint libvirt-file-backed-memory"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"5f7c97a3_6244711a","line":17,"range":{"start_line":17,"start_character":16,"end_line":17,"end_character":22},"updated":"2018-06-15 15:34:13.000000000","message":"ratio","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement file backed memory for instances in libvirt"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"File backed memory is enabled per Nova compute host. When enabled, host"},{"line_number":10,"context_line":"will report \u0027file_backed_memory_capacity\u0027 for available memory."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"When enabled, instances will create memory backing files in the"},{"line_number":13,"context_line":"directory specified in libvirt\u0027s qemu.conf file \u0027memory_backing_dir\u0027"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"5f7c97a3_0dcece5a","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":11},"updated":"2018-06-19 15:47:59.000000000","message":"report to what? placement? the compute_nodes table for scheduling?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":13,"context_line":"directory specified in libvirt\u0027s qemu.conf file \u0027memory_backing_dir\u0027"},{"line_number":14,"context_line":"config option."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This feature is not compatible with memory overcommit, and requires"},{"line_number":17,"context_line":"\u0027ram_allocation_ratio\u0027 to be set to 1.0"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I676291ec0faa1dea0bd5050ef8e3426d171de4c6"},{"line_number":20,"context_line":"Implements: blueprint libvirt-file-backed-memory"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"5f7c97a3_cd4536b6","line":17,"range":{"start_line":16,"start_character":0,"end_line":17,"end_character":39},"updated":"2018-06-19 15:47:59.000000000","message":"I\u0027m assuming this is talking about the ram_allocation_ratio config option which is per-host, but can also be set via host aggregates in the API:\n\nhttps://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#aggregateramfilter\n\nWhat happens then? Should that scheduler filter, if enabled, check something in the compute node stats (modeled as a HostState object in the scheduler filter) and reject the host if it\u0027s using file-backed memory and ram_allocation_ratio !\u003d 1.0?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"}],"doc/source/admin/file-backed-memory.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2a233d1f22c821734df2b50c5fae697b47f0fb09","unresolved":false,"context_lines":[{"line_number":9,"context_line":""},{"line_number":10,"context_line":"When configured, ``nova-compute`` will report the capacity configured for file"},{"line_number":11,"context_line":"backed memory in place of the total system memory capacity. This allows the"},{"line_number":12,"context_line":"node to run more virts than would normally fit within system memory."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"To enable file backed memory, follow the steps below"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_34d0321f","line":12,"range":{"start_line":12,"start_character":17,"end_line":12,"end_character":22},"updated":"2018-06-13 13:47:03.000000000","message":"This is nova, so \"instances\"","commit_id":"72c0f29248956455b054eb06310f0f9a9a63057e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2a233d1f22c821734df2b50c5fae697b47f0fb09","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":".. note::"},{"line_number":36,"context_line":"   ``/dev/sdb`` and the ``ext4`` filesystem are used here as an example. This"},{"line_number":37,"context_line":"   will differ between environments."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"By default, Libvirt with qemu/KVM allocates memory within"},{"line_number":40,"context_line":"``/var/lib/libvirt/qemu/ram/``. To utilize this, you need to have the backing"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_549e0e54","line":37,"updated":"2018-06-13 13:47:03.000000000","message":"Maybe say something like \"sdb is used as an example. In the real world, sdb needs to be something very fast like flash or RAM.\" Or maybe explain up top in the intro paragraphs that this is only useful if you have a block device or other filesystem-looking-thing that is very very fast. Ideally they would know what\u0027s up if they come looking for this feature, but if they stumble on this and think it\u0027s penalty-free...\n\nJust so we don\u0027t have people configuring spinny disks for this and wondering why performance is terrible?","commit_id":"72c0f29248956455b054eb06310f0f9a9a63057e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2a233d1f22c821734df2b50c5fae697b47f0fb09","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"   .. code-block:: console"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"      # mount /dev/sdb /var/lib/libvirt/qemu/ram"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Configure Nova Compute for file backed memory"},{"line_number":61,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_94b106e3","line":58,"updated":"2018-06-13 13:47:03.000000000","message":"Maybe note this is the default location, and must match /etc/libvirt/qemu.conf?","commit_id":"72c0f29248956455b054eb06310f0f9a9a63057e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2a233d1f22c821734df2b50c5fae697b47f0fb09","unresolved":false,"context_lines":[{"line_number":63,"context_line":"#. Enable File backed memory in nova-compute"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"   Configure Nova to utilize file backed memory, with a capacity of 1 TiB"},{"line_number":66,"context_line":"   (1048576 MiB)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"   Edit ``/etc/nova/nova.conf``"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"5f7c97a3_f4c15a30","line":66,"updated":"2018-06-13 13:47:03.000000000","message":"...or however much space on the backing store should be used?","commit_id":"72c0f29248956455b054eb06310f0f9a9a63057e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f7c97a3_c25c65f2","line":1,"range":{"start_line":1,"start_character":18,"end_line":1,"end_character":40},"updated":"2018-06-15 15:34:13.000000000","message":"drop these","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"The file backed memory feature in Openstack allows a Nova node to serve guest"},{"line_number":6,"context_line":"memory from a file backing store. This mechanism uses the libvirt file memory"},{"line_number":7,"context_line":"source, causing guest instance memory to be allocated as files within the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f7c97a3_820bcdd3","line":4,"updated":"2018-06-15 15:34:13.000000000","message":"We should have a big information section stating that this only applies to libvirt. Something like.\n\n    .. important::\n\n        The feature described below is only supported by the libvirt\n        driver.\n\n[later] I see you\u0027ve actually done this below. You should probably move this up","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":".. note::"},{"line_number":40,"context_line":"   ``/dev/sdb`` and the ``ext4`` filesystem are used here as an example. This"},{"line_number":41,"context_line":"   will differ between environments."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f7c97a3_c2cf8589","line":40,"updated":"2018-06-15 15:34:13.000000000","message":"style nit: newline here is not necessary but would be consistent","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Configure Nova Compute for file backed memory"},{"line_number":71,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"#. Enable File backed memory in nova-compute"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"   Configure Nova to utilize file backed memory with the capacity of the"},{"line_number":76,"context_line":"   backing store in MiB. 1048576 MiB (1 TiB) is used in this example."}],"source_content_type":"text/x-rst","patch_set":15,"id":"5f7c97a3_42e37507","line":73,"range":{"start_line":73,"start_character":32,"end_line":73,"end_character":44},"updated":"2018-06-15 15:34:13.000000000","message":"``nova-compute``","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_eddcb2e2","line":2,"updated":"2018-06-19 15:47:59.000000000","message":"Should mention minimum required versions of libvirt/qemu in here somewhere.\n\nDon\u0027t we also need to mention the ram_allocation_ratio limitation in here?\n\nShould also mention the restriction on using huge pages.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_582eaa8c","line":2,"in_reply_to":"5f7c97a3_a3624b3c","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_3833aef8","line":2,"in_reply_to":"5f7c97a3_eddcb2e2","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"47f84aca05e0d9037722e03714854a24e07658ca","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_a3624b3c","line":2,"in_reply_to":"5f7c97a3_eddcb2e2","updated":"2018-06-19 16:06:59.000000000","message":"In addition, I\u0027d make a note in the docs on huge pages that they can\u0027t be used on hosts configured for file-backed memory when using the libvirt driver:\n\nhttps://docs.openstack.org/nova/latest/admin/huge-pages.html\n\nSince we have a mutually exclusive situation here we should be clear in docs on both features.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"   The functionality described below is currently only supported by the"},{"line_number":8,"context_line":"   libvirt/KVM driver."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The file backed memory feature in Openstack allows a Nova node to serve guest"},{"line_number":11,"context_line":"memory from a file backing store. This mechanism uses the libvirt file memory"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_6db2e2e7","line":8,"range":{"start_line":7,"start_character":3,"end_line":8,"end_character":22},"updated":"2018-06-19 15:47:59.000000000","message":"We should have a release-specific caveat here, so something like:\n\n\"As of the 18.0.0 Rocky release, the functionality...\"\n\n--\n\nwe could also be updating the feature support matrix for per-virt features:\n\nhttps://docs.openstack.org/nova/latest/user/support-matrix.html\n\n--\n\nSee above - we might just want a dedicated \"Limitations\" section.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"   The functionality described below is currently only supported by the"},{"line_number":8,"context_line":"   libvirt/KVM driver."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The file backed memory feature in Openstack allows a Nova node to serve guest"},{"line_number":11,"context_line":"memory from a file backing store. This mechanism uses the libvirt file memory"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_e4d112ce","line":8,"range":{"start_line":7,"start_character":3,"end_line":8,"end_character":22},"in_reply_to":"5f7c97a3_6db2e2e7","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The file backed memory feature in Openstack allows a Nova node to serve guest"},{"line_number":11,"context_line":"memory from a file backing store. This mechanism uses the libvirt file memory"},{"line_number":12,"context_line":"source, causing guest instance memory to be allocated as files within the"},{"line_number":13,"context_line":"libvirt memory backing dir."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Since instance performance will be related to the speed of the backing store,"},{"line_number":16,"context_line":"this feature works best when used with very fast block devices or virtual file"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_cd1e96ba","line":13,"range":{"start_line":13,"start_character":23,"end_line":13,"end_character":26},"updated":"2018-06-19 15:47:59.000000000","message":"directory - for non-native English speakers","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The file backed memory feature in Openstack allows a Nova node to serve guest"},{"line_number":11,"context_line":"memory from a file backing store. This mechanism uses the libvirt file memory"},{"line_number":12,"context_line":"source, causing guest instance memory to be allocated as files within the"},{"line_number":13,"context_line":"libvirt memory backing dir."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Since instance performance will be related to the speed of the backing store,"},{"line_number":16,"context_line":"this feature works best when used with very fast block devices or virtual file"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_9e068685","line":13,"range":{"start_line":13,"start_character":23,"end_line":13,"end_character":26},"in_reply_to":"5f7c97a3_cd1e96ba","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":16,"context_line":"this feature works best when used with very fast block devices or virtual file"},{"line_number":17,"context_line":"systems - such as flash or RAM devices."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"When configured, ``nova-compute`` will report the capacity configured for file"},{"line_number":20,"context_line":"backed memory in place of the total system memory capacity. This allows the"},{"line_number":21,"context_line":"node to run more instances than would normally fit within system memory."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_6d83c2cc","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":45},"updated":"2018-06-19 15:47:59.000000000","message":"report to....placement?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"this feature works best when used with very fast block devices or virtual file"},{"line_number":17,"context_line":"systems - such as flash or RAM devices."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"When configured, ``nova-compute`` will report the capacity configured for file"},{"line_number":20,"context_line":"backed memory in place of the total system memory capacity. This allows the"},{"line_number":21,"context_line":"node to run more instances than would normally fit within system memory."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_7e036a77","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":45},"in_reply_to":"5f7c97a3_6d83c2cc","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"To enable file backed memory, follow the steps below:"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Configure the backing store"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#. Configure Nova Compute for file backed memory"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_ad623a3c","line":25,"range":{"start_line":25,"start_character":3,"end_line":25,"end_character":30},"updated":"2018-06-19 15:47:59.000000000","message":"Section titles are implicit links, so you can do:\n\n`Configure a backing store`_","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"To enable file backed memory, follow the steps below:"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Configure the backing store"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#. Configure Nova Compute for file backed memory"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_ded2befd","line":25,"range":{"start_line":25,"start_character":3,"end_line":25,"end_character":30},"in_reply_to":"5f7c97a3_ad623a3c","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Configure the backing store"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#. Configure Nova Compute for file backed memory"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. important::"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_cd4c56ca","line":27,"range":{"start_line":27,"start_character":3,"end_line":27,"end_character":48},"updated":"2018-06-19 15:47:59.000000000","message":"`Configure Nova Compute for file backed memory`_","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#. Configure the backing store"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"#. Configure Nova Compute for file backed memory"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. important::"},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_1ec91650","line":27,"range":{"start_line":27,"start_character":3,"end_line":27,"end_character":48},"in_reply_to":"5f7c97a3_cd4c56ca","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. important::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"   It is not possible to migrate from a node running a version of OpenStack"},{"line_number":32,"context_line":"   that does not support file backed memory to a node with file backed memory"},{"line_number":33,"context_line":"   enabled. It is recommended that all Nova compute nodes are upgraded to"},{"line_number":34,"context_line":"   Rocky before enabling file backed memory."}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_8dc41e10","line":31,"range":{"start_line":31,"start_character":25,"end_line":31,"end_character":32},"updated":"2018-06-19 15:47:59.000000000","message":"live migrate specifically, right? It would be possible to do a cold migration though, right?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":".. important::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"   It is not possible to migrate from a node running a version of OpenStack"},{"line_number":32,"context_line":"   that does not support file backed memory to a node with file backed memory"},{"line_number":33,"context_line":"   enabled. It is recommended that all Nova compute nodes are upgraded to"},{"line_number":34,"context_line":"   Rocky before enabling file backed memory."}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_5e00ee66","line":31,"range":{"start_line":31,"start_character":25,"end_line":31,"end_character":32},"in_reply_to":"5f7c97a3_8dc41e10","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":83,"context_line":"      [libvirt]"},{"line_number":84,"context_line":"      file_backed_memory\u003d1048576"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   .. note::"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"      The value of ``file_backed_memory`` is in MiB"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"#. Restart the ``nova-compute`` service"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_8d92defb","line":88,"range":{"start_line":86,"start_character":3,"end_line":88,"end_character":51},"updated":"2018-06-19 15:47:59.000000000","message":"Remove since this is redundant with L77, \"in MiB\".","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"      [libvirt]"},{"line_number":84,"context_line":"      file_backed_memory\u003d1048576"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"   .. note::"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"      The value of ``file_backed_memory`` is in MiB"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"#. Restart the ``nova-compute`` service"}],"source_content_type":"text/x-rst","patch_set":18,"id":"5f7c97a3_fef69a90","line":88,"range":{"start_line":86,"start_character":3,"end_line":88,"end_character":51},"in_reply_to":"5f7c97a3_8d92defb","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"File backed memory"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":".. important::"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_31b66940","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":11},"updated":"2018-06-20 17:15:40.000000000","message":"grammar nit: this should probably be \u0027File-backed\u0027 here and everywhere else","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":53,"context_line":"   File backed memory is not compatible with huge pages. Instances with huge"},{"line_number":54,"context_line":"   pages configured will not start on a host with file backed memory enabled. It"},{"line_number":55,"context_line":"   is recommended to use host aggregates to ensure instances configured for"},{"line_number":56,"context_line":"   huge pages are not placed on hosts with file backed memory configured"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Handling these limitations could be optimized with a scheduler filter in the"},{"line_number":59,"context_line":"future"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_7387f3b7","line":56,"range":{"start_line":56,"start_character":62,"end_line":56,"end_character":72},"updated":"2018-06-21 13:48:59.000000000","message":"missing period","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"   huge pages are not placed on hosts with file backed memory configured"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Handling these limitations could be optimized with a scheduler filter in the"},{"line_number":59,"context_line":"future"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_b3990b1f","line":59,"updated":"2018-06-21 13:48:59.000000000","message":"missing period","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":58,"context_line":"Handling these limitations could be optimized with a scheduler filter in the"},{"line_number":59,"context_line":"future"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Configure the backing store"},{"line_number":64,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_d17e1569","line":61,"updated":"2018-06-20 17:15:40.000000000","message":"nit: extra whitespace","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"doc/source/admin/huge-pages.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. important::"},{"line_number":59,"context_line":"   Huge pages may not be used on a host configured for file backed memory. See"},{"line_number":60,"context_line":"   `File backed memory`_ for details"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Persistent huge pages are required owing to their guaranteed availability."},{"line_number":63,"context_line":"However, persistent huge pages are not enabled by default in most environments."}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_b1afd97b","line":60,"range":{"start_line":60,"start_character":3,"end_line":60,"end_character":24},"updated":"2018-06-20 17:15:40.000000000","message":"This should use the :doc: role to cross-reference. If you don\u0027t do that, the doc could be moved and no one would be any the wiser.","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":".. important::"},{"line_number":59,"context_line":"   Huge pages may not be used on a host configured for file backed memory. See"},{"line_number":60,"context_line":"   `File backed memory`_ for details"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"Persistent huge pages are required owing to their guaranteed availability."},{"line_number":63,"context_line":"However, persistent huge pages are not enabled by default in most environments."}],"source_content_type":"text/x-rst","patch_set":19,"id":"5f7c97a3_d3b7e784","line":60,"range":{"start_line":60,"start_character":3,"end_line":60,"end_character":24},"in_reply_to":"5f7c97a3_b1afd97b","updated":"2018-06-21 13:48:59.000000000","message":"agree","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"doc/source/user/support-matrix.ini":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":1476,"context_line":"driver-impl-libvirt-vz-vm\u003dcomplete"},{"line_number":1477,"context_line":"driver-impl-libvirt-vz-ct\u003dcomplete"},{"line_number":1478,"context_line":"driver-impl-powervm\u003dmissing"},{"line_number":1479,"context_line":"[operation.file-backed-memory]"},{"line_number":1480,"context_line":"title\u003dFile backed memory"},{"line_number":1481,"context_line":"status\u003doptional"},{"line_number":1482,"context_line":"notes\u003dThe file backed memory feature in Openstack allows a Nova node to serve"}],"source_content_type":"text/x-properties","patch_set":19,"id":"5f7c97a3_d1b295e5","line":1479,"range":{"start_line":1479,"start_character":0,"end_line":1479,"end_character":30},"updated":"2018-06-20 17:15:40.000000000","message":"nit: missing whitespace above this","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":1476,"context_line":"driver-impl-libvirt-vz-vm\u003dcomplete"},{"line_number":1477,"context_line":"driver-impl-libvirt-vz-ct\u003dcomplete"},{"line_number":1478,"context_line":"driver-impl-powervm\u003dmissing"},{"line_number":1479,"context_line":"[operation.file-backed-memory]"},{"line_number":1480,"context_line":"title\u003dFile backed memory"},{"line_number":1481,"context_line":"status\u003doptional"},{"line_number":1482,"context_line":"notes\u003dThe file backed memory feature in Openstack allows a Nova node to serve"}],"source_content_type":"text/x-properties","patch_set":19,"id":"5f7c97a3_f361c312","line":1479,"range":{"start_line":1479,"start_character":0,"end_line":1479,"end_character":30},"in_reply_to":"5f7c97a3_d1b295e5","updated":"2018-06-21 13:48:59.000000000","message":"yup, doesn\u0027t seem to break the formatting:\n\nhttp://logs.openstack.org/76/567876/19/check/build-openstack-sphinx-docs/0aefbb7/html/user/support-matrix.html#operation_file_backed_memory","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":1488,"context_line":"driver-impl-xenserver\u003dmissing"},{"line_number":1489,"context_line":"driver-impl-libvirt-kvm-x86\u003dcomplete"},{"line_number":1490,"context_line":"driver-impl-libvirt-kvm-aarch64\u003dcomplete"},{"line_number":1491,"context_line":"driver-impl-libvirt-kvm-ppc64\u003dcomplete"},{"line_number":1492,"context_line":"driver-impl-libvirt-kvm-s390x\u003dcomplete"},{"line_number":1493,"context_line":"driver-impl-libvirt-qemu-x86\u003dcomplete"},{"line_number":1494,"context_line":"driver-impl-libvirt-lxc\u003dmissing"},{"line_number":1495,"context_line":"driver-impl-libvirt-xen\u003dmissing"}],"source_content_type":"text/x-properties","patch_set":19,"id":"5f7c97a3_7375b3cb","line":1492,"range":{"start_line":1491,"start_character":0,"end_line":1492,"end_character":38},"updated":"2018-06-21 13:48:59.000000000","message":"are you sure for these arches?","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"nova/conf/libvirt.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":721,"context_line":""},{"line_number":722,"context_line":"When enabled, report value of ``file_backed_memory_capacity`` for node memory"},{"line_number":723,"context_line":"capacity. Compute node system memory will be used as a cache for file backed"},{"line_number":724,"context_line":"memory, via the kernel\u0027s pagecache mechanism. Override value of"},{"line_number":725,"context_line":"``ram_allocation_ratio`` to 1.0"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"Note: Not compatible with hugepages."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_72903a44","line":724,"range":{"start_line":724,"start_character":46,"end_line":724,"end_character":54},"updated":"2018-05-11 15:30:26.000000000","message":"\"Overrides\"","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":720,"context_line":"location is ``/var/lib/libvirt/qemu/ram``."},{"line_number":721,"context_line":""},{"line_number":722,"context_line":"When enabled, report value of ``file_backed_memory_capacity`` for node memory"},{"line_number":723,"context_line":"capacity. Compute node system memory will be used as a cache for file backed"},{"line_number":724,"context_line":"memory, via the kernel\u0027s pagecache mechanism. Override value of"},{"line_number":725,"context_line":"``ram_allocation_ratio`` to 1.0"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"Note: Not compatible with hugepages."}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_127c661d","line":724,"range":{"start_line":723,"start_character":10,"end_line":724,"end_character":44},"updated":"2018-05-11 15:30:26.000000000","message":"This is specific to your implementation I think. If I mounted /dev/ram0 on /var/lib/libvirt/qemu/ram, then this wouldn\u0027t be quite as accurate. Just leave it out I think.","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"372bdef12a11a8bcd2148ea28e049c2671460803","unresolved":false,"context_lines":[{"line_number":725,"context_line":"``ram_allocation_ratio`` to 1.0"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"Note: Not compatible with hugepages."},{"line_number":728,"context_line":"Note: Not compatible with memory overcommit. Overrides value of"},{"line_number":729,"context_line":"``ram_allocation_ratio`` with 1.0"},{"line_number":730,"context_line":"\"\"\"),"},{"line_number":731,"context_line":"    cfg.IntOpt(\u0027file_backed_memory_capacity\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6f37d64e","line":728,"updated":"2018-05-14 10:03:33.000000000","message":"Instead of transparently overriding the value I would have checked compatibility of the two options during startup.","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":740,"context_line":"Default value \u00270\u0027 moves calculating amount of ports to libvirt."},{"line_number":741,"context_line":"\"\"\"),"},{"line_number":742,"context_line":"    cfg.IntOpt(\u0027file_backed_memory\u0027,"},{"line_number":743,"context_line":"                default\u003d0,"},{"line_number":744,"context_line":"                min\u003d0,"},{"line_number":745,"context_line":"                help\u003d\"\"\""},{"line_number":746,"context_line":"Available capacity in MiB for file backed memory."}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_e2bde1d7","line":743,"range":{"start_line":743,"start_character":15,"end_line":743,"end_character":16},"updated":"2018-06-15 15:34:13.000000000","message":"alignment off by one (though I\u0027d actually only indent by 4 spaces","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                help\u003d\"\"\""},{"line_number":746,"context_line":"Available capacity in MiB for file backed memory."},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"Set to 0 to disable file_backed_memory."},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"When enabled, instances will create memory files in the directory specified"},{"line_number":751,"context_line":"in ``/etc/libvirt/qemu.conf``\u0027s ``memory_backing_dir`` option. The default"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_82b2ed05","line":748,"range":{"start_line":748,"start_character":20,"end_line":748,"end_character":38},"updated":"2018-06-15 15:34:13.000000000","message":"file backed memory (you\u0027re disabling the feature, not the configuration option)","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":752,"context_line":"location is ``/var/lib/libvirt/qemu/ram``."},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"When enabled, report value of ``file_backed_memory`` for node memory"},{"line_number":755,"context_line":"capacity. Compute node system memory will be used as a cache for file backed"},{"line_number":756,"context_line":"memory, via the kernel\u0027s pagecache mechanism."},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"Note: Not compatible with hugepages."}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_a285a909","line":755,"range":{"start_line":755,"start_character":65,"end_line":755,"end_character":76},"updated":"2018-06-15 15:34:13.000000000","message":"file-backed?","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":751,"context_line":"in ``/etc/libvirt/qemu.conf``\u0027s ``memory_backing_dir`` option. The default"},{"line_number":752,"context_line":"location is ``/var/lib/libvirt/qemu/ram``."},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"When enabled, report value of ``file_backed_memory`` for node memory"},{"line_number":755,"context_line":"capacity. Compute node system memory will be used as a cache for file backed"},{"line_number":756,"context_line":"memory, via the kernel\u0027s pagecache mechanism."},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"Note: Not compatible with hugepages."}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_c286a517","line":755,"range":{"start_line":754,"start_character":14,"end_line":755,"end_character":8},"updated":"2018-06-15 15:34:13.000000000","message":"the value defined for this option is reported as the node memory capacity.","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":755,"context_line":"capacity. Compute node system memory will be used as a cache for file backed"},{"line_number":756,"context_line":"memory, via the kernel\u0027s pagecache mechanism."},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"Note: Not compatible with hugepages."},{"line_number":759,"context_line":"Note: Not compatible with memory overcommit.  Requires"},{"line_number":760,"context_line":"``ram_allocation_ratio`` set to 1.0"},{"line_number":761,"context_line":"\"\"\"),"},{"line_number":762,"context_line":"]"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_02c25d35","line":760,"range":{"start_line":758,"start_character":0,"end_line":760,"end_character":35},"updated":"2018-06-15 15:34:13.000000000","message":"You can use rST directives here. You should also have a \"Related options\" section.\n\n  .. note::\n     This feature is not compatible with hugepages.\n\n  .. note::\n     This feature is not compatible with memory overcommit.\n\n  Related options:\n\n  * ``ram_allocation_ratio`` must be set to 0.","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":761,"context_line":".. note::"},{"line_number":762,"context_line":"   This feature is not compatible with memory overcommit."},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"Related options:"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"* ``ram_allocation_ratio`` must be set to 0."},{"line_number":767,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_685ad0f2","line":764,"updated":"2018-06-19 15:47:59.000000000","message":"``virt_type`` should also be in here since only kvm and qemu are supported","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":761,"context_line":".. note::"},{"line_number":762,"context_line":"   This feature is not compatible with memory overcommit."},{"line_number":763,"context_line":""},{"line_number":764,"context_line":"Related options:"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"* ``ram_allocation_ratio`` must be set to 0."},{"line_number":767,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_3e0bb27d","line":764,"in_reply_to":"5f7c97a3_685ad0f2","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"Related options:"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"* ``ram_allocation_ratio`` must be set to 0."},{"line_number":767,"context_line":"\"\"\"),"},{"line_number":768,"context_line":"]"},{"line_number":769,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_cda8d621","line":766,"range":{"start_line":766,"start_character":42,"end_line":766,"end_character":43},"updated":"2018-06-19 15:47:59.000000000","message":"The spec says 1.0:\n\nhttps://specs.openstack.org/openstack/nova-specs/specs/rocky/approved/libvirt-file-backed-memory.html#proposed-change\n\n\"As overcommit is not expected to work with file backed memory, enabling this option requires the value of ram_allocation_ratio in nova.conf, to be set to the value 1.0, and will block Nova startup if this is not configured properly.\"\n\nThe code does too:\n\nhttps://review.openstack.org/#/c/567876/18/nova/virt/libvirt/driver.py@535","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"Related options:"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":"* ``ram_allocation_ratio`` must be set to 0."},{"line_number":767,"context_line":"\"\"\"),"},{"line_number":768,"context_line":"]"},{"line_number":769,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_9e1446a1","line":766,"range":{"start_line":766,"start_character":42,"end_line":766,"end_character":43},"in_reply_to":"5f7c97a3_cda8d621","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"}],"nova/objects/migrate_data.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        super(LibvirtLiveMigrateData, self).obj_make_compatible("},{"line_number":156,"context_line":"            primitive, target_version)"},{"line_number":157,"context_line":"        target_version \u003d versionutils.convert_version_to_tuple(target_version)"},{"line_number":158,"context_line":"        if target_version \u003c (1, 6):"},{"line_number":159,"context_line":"            if \u0027file_backed_memory\u0027 in primitive:"},{"line_number":160,"context_line":"                del primitive[\u0027file_backed_memory\u0027]"},{"line_number":161,"context_line":"        if target_version \u003c (1, 5):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ca450e17","line":158,"updated":"2018-05-23 08:35:29.000000000","message":"You should update test units for this as-well.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"}],"nova/tests/unit/objects/test_migrate_data.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_2f5c6717","line":233,"updated":"2018-05-31 10:07:12.000000000","message":"You don\u0027t have any test where we assert that the field is present and the value is well took into account.","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"d09756ae4cc6ef6cc3182226a130675e75620238","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_53d38901","line":233,"in_reply_to":"5f7c97a3_2f5c6717","updated":"2018-05-31 18:45:41.000000000","message":"in test_migration.py, the test_update_memory_backing_xml_* tests validate that it\u0027s taken into account, but I did miss a test for it being properly set. I\u0027ll add that.","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"eb9bd054fee4624b6b0aaea19253e5869edd4545","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_fdc1364f","line":226,"updated":"2018-06-01 09:45:29.000000000","message":"Ok so we can see in test driver the \u0027dst_wants_file_backed_memory\u0027 attribute well set by these tests:\n\n  test_pre_live_migration_with_file_backed_memory\n  test_pre_live_migration_without_file_backed_memory\n\nI would have preferred a small assertion here","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"502d4e8e611094fd38132f6c1e25c1e5785d1f99","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"},{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":237,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":238,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":239,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":240,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":241,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":242,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.2\u0027)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":247,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.4\u0027)"},{"line_number":248,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":249,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)"},{"line_number":250,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_bdm_obj_make_compatible(self):"},{"line_number":253,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_a0ed7c8f","line":250,"range":{"start_line":226,"start_character":39,"end_line":250,"end_character":67},"updated":"2018-06-18 18:46:49.000000000","message":"Looks like this test (and others similar to it) is broken.\n\nobj_to_primitive returns a 2-layer dict, with the object fields within the \u0027nova_object.data\u0027 key.\n\nNot sure how to address this.","commit_id":"e3683e1b2039282b3e941d99691f404d34ed2893"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1de26a370502d6fbef12fce86508cca318e60abd","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"},{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":237,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":238,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":239,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":240,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":241,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":242,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.2\u0027)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":247,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.4\u0027)"},{"line_number":248,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":249,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)"},{"line_number":250,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_bdm_obj_make_compatible(self):"},{"line_number":253,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_866df3cd","line":250,"range":{"start_line":226,"start_character":39,"end_line":250,"end_character":67},"in_reply_to":"5f7c97a3_06000802","updated":"2018-06-18 23:15:01.000000000","message":"Rebase on top of this:\n\nhttps://review.openstack.org/#/c/576256/","commit_id":"e3683e1b2039282b3e941d99691f404d34ed2893"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b57640e9c33e5ce8002e4d7686ed82178e749c6d","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"},{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":237,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":238,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":239,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":240,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":241,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":242,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.2\u0027)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":247,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.4\u0027)"},{"line_number":248,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":249,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)"},{"line_number":250,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_bdm_obj_make_compatible(self):"},{"line_number":253,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_915a14f0","line":250,"range":{"start_line":226,"start_character":39,"end_line":250,"end_character":67},"in_reply_to":"5f7c97a3_a0ed7c8f","updated":"2018-06-18 20:24:16.000000000","message":"\u003e Not sure how to address this.\n\nJust doing something like this would make the test slightly less worthless:\n\n prim \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)[\u0027nova_object.data\u0027]\n self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, prim)\n\nOf course, to make the unit test totally non-worthless, we\u0027d probably want to do the following:\n\n prim \u003d obj.obj_to_primitive()[\u0027nova_object.data\u0027]\n self.assertIn(\u0027dst_wants_file_backed_memory\u0027, prim)\n\nat some point.","commit_id":"e3683e1b2039282b3e941d99691f404d34ed2893"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"eb4dd00b6b251bd595a60f687266a4e03abffccd","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"},{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":237,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":238,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":239,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":240,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":241,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":242,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.2\u0027)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":247,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.4\u0027)"},{"line_number":248,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":249,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)"},{"line_number":250,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_bdm_obj_make_compatible(self):"},{"line_number":253,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_06000802","line":250,"range":{"start_line":226,"start_character":39,"end_line":250,"end_character":67},"in_reply_to":"5f7c97a3_a0ed7c8f","updated":"2018-06-18 20:28:16.000000000","message":"That\u0027s the proper arrangement and yes, this test is broken.","commit_id":"e3683e1b2039282b3e941d99691f404d34ed2893"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e94a7a1e05d0afe20fee126c2801115936d0bf35","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                         obj2.to_legacy_dict())"},{"line_number":224,"context_line":"        self.assertEqual(obj.bdms[0].serial, obj2.bdms[0].serial)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":227,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateData("},{"line_number":228,"context_line":"            src_supports_native_luks\u003dTrue,"},{"line_number":229,"context_line":"            old_vol_attachment_ids\u003d{uuids.volume: uuids.attachment},"},{"line_number":230,"context_line":"            supported_perf_events\u003d[],"},{"line_number":231,"context_line":"            serial_listen_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":232,"context_line":"            target_connect_addr\u003d\u0027127.0.0.1\u0027,"},{"line_number":233,"context_line":"            dst_wants_file_backed_memory\u003dFalse)"},{"line_number":234,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.0\u0027)"},{"line_number":235,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":236,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":237,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":238,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":239,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":240,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":241,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.1\u0027)"},{"line_number":242,"context_line":"        self.assertNotIn(\u0027serial_listen_addr\u003d\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.2\u0027)"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.3\u0027)"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027old_vol_attachment_ids\u0027, primitive)"},{"line_number":247,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.4\u0027)"},{"line_number":248,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":249,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.5\u0027)"},{"line_number":250,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"    def test_bdm_obj_make_compatible(self):"},{"line_number":253,"context_line":"        obj \u003d migrate_data.LibvirtLiveMigrateBDMInfo("}],"source_content_type":"text/x-python","patch_set":17,"id":"5f7c97a3_265d0448","line":250,"range":{"start_line":226,"start_character":39,"end_line":250,"end_character":67},"in_reply_to":"5f7c97a3_a0ed7c8f","updated":"2018-06-18 20:21:05.000000000","message":"Zack is absolutely correct.","commit_id":"e3683e1b2039282b3e941d99691f404d34ed2893"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        primitive \u003d data(obj.obj_to_primitive())"},{"line_number":242,"context_line":"        self.assertIn(\u0027serial_listen_addr\u0027, primitive)"},{"line_number":243,"context_line":"        primitive \u003d data(obj.obj_to_primitive(target_version\u003d\u00271.0\u0027))"},{"line_number":244,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":245,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_31c3c93a","line":242,"range":{"start_line":242,"start_character":23,"end_line":242,"end_character":41},"updated":"2018-06-20 17:15:40.000000000","message":"This should be updated to dst_wants_file_backed_memory, which is now the most recently added field, to act as a positive check (i.e. we\u0027re not removing this always)","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"nova/tests/unit/virt/libvirt/test_config.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":3294,"context_line":"              \u003csource type\u003d\"file\"/\u003e"},{"line_number":3295,"context_line":"              \u003caccess mode\u003d\"shared\"/\u003e"},{"line_number":3296,"context_line":"              \u003callocation mode\u003d\"immediate\"/\u003e"},{"line_number":3297,"context_line":"            \u003c/memoryBacking\u003e\"\"\")"},{"line_number":3298,"context_line":""},{"line_number":3299,"context_line":""},{"line_number":3300,"context_line":"class LibvirtConfigGuestMemoryTuneTest(LibvirtConfigBaseTest):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_ef9f4fb1","line":3297,"updated":"2018-05-31 10:07:12.000000000","message":"nit: It would have been nice to have the parse_dom() method so you could have asserted the opposite. But I understand that it\u0027s out of the scope.","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":17517,"context_line":"                    \u0027step_size\u0027: 1,"},{"line_number":17518,"context_line":"                }"},{"line_number":17519,"context_line":"            })"},{"line_number":17520,"context_line":""},{"line_number":17521,"context_line":"        inv \u003d self.driver.get_inventory(mock.sentinel.nodename)"},{"line_number":17522,"context_line":"        self.assertEqual(expected_inv, inv)"},{"line_number":17523,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_9484cb5f","line":17520,"updated":"2018-05-31 10:07:12.000000000","message":"no needed","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"        self.flags(file_backed_memory\u003d1024, group\u003d\"libvirt\")"},{"line_number":1087,"context_line":"        self.flags(ram_allocation_ratio\u003d1.0)"},{"line_number":1088,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1089,"context_line":"        self.assertRaises(exception.NovaException,"},{"line_number":1090,"context_line":"                          drvr.init_host,"},{"line_number":1091,"context_line":"                          \"dummyhost\")"},{"line_number":1092,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_2fb1c744","line":1089,"updated":"2018-05-31 10:07:12.000000000","message":"Please assert with the most specific InternalError","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":1100,"context_line":"        self.flags(file_backed_memory\u003d1024, group\u003d\"libvirt\")"},{"line_number":1101,"context_line":"        self.flags(ram_allocation_ratio\u003d1.0)"},{"line_number":1102,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1103,"context_line":"        self.assertRaises(exception.NovaException,"},{"line_number":1104,"context_line":"                          drvr.init_host,"},{"line_number":1105,"context_line":"                          \"dummyhost\")"},{"line_number":1106,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_8f7b3b79","line":1103,"updated":"2018-05-31 10:07:12.000000000","message":"same here","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":1115,"context_line":"        self.flags(file_backed_memory\u003d1024, group\u003d\"libvirt\")"},{"line_number":1116,"context_line":"        self.flags(ram_allocation_ratio\u003d1.5)"},{"line_number":1117,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1118,"context_line":"        self.assertRaises(exception.NovaException,"},{"line_number":1119,"context_line":"                          drvr.init_host,"},{"line_number":1120,"context_line":"                          \"dummyhost\")"},{"line_number":1121,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_0f8f2b75","line":1118,"updated":"2018-05-31 10:07:12.000000000","message":"and here","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c5f1b17a7552ff1b677371a3b5cfe3aff3f23cc5","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"        drvr.init_host(\"dummyhost\")"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    @mock.patch.object("},{"line_number":1073,"context_line":"        libvirt_driver.LibvirtDriver, \"_check_file_backed_memory_support\",)"},{"line_number":1074,"context_line":"    def test_file_backed_memory_support_called(self, mock_file_backed_support):"},{"line_number":1075,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)"},{"line_number":1076,"context_line":"        drvr.init_host(\"dummyhost\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_d345a770","line":1073,"updated":"2018-06-21 13:48:59.000000000","message":"i would do the mock on the drvr var rather than the class global","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"nova/tests/unit/virt/libvirt/test_host.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from nova.virt.libvirt import guest as libvirt_guest"},{"line_number":35,"context_line":"from nova.virt.libvirt import host"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class StringMatcher(object):"},{"line_number":39,"context_line":"    def __eq__(self, other):"},{"line_number":40,"context_line":"        return isinstance(other, six.string_types)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_92be36b2","side":"PARENT","line":37,"updated":"2018-05-11 15:30:26.000000000","message":"Whitespace damage","commit_id":"79c75cf953096b6fffa16827f648fad353c53310"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":771,"context_line":"            def UUIDString(self):"},{"line_number":772,"context_line":"                return uuids.fake"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"        m \u003d mock.mock_open(read_data\u003d\"\"\""},{"line_number":775,"context_line":"MemTotal:       16194180 kB"},{"line_number":776,"context_line":"MemFree:          233092 kB"},{"line_number":777,"context_line":"MemAvailable:    8892356 kB"},{"line_number":778,"context_line":"Buffers:          567708 kB"},{"line_number":779,"context_line":"Cached:          8362404 kB"},{"line_number":780,"context_line":"SwapCached:            0 kB"},{"line_number":781,"context_line":"Active:          8381604 kB"},{"line_number":782,"context_line":"\"\"\")"},{"line_number":783,"context_line":""},{"line_number":784,"context_line":"        with test.nested("},{"line_number":785,"context_line":"                mock.patch.object(six.moves.builtins, \"open\", m, create\u003dTrue),"},{"line_number":786,"context_line":"                mock.patch.object(host.Host,"},{"line_number":787,"context_line":"                                  \"list_guests\"),"},{"line_number":788,"context_line":"                mock.patch.object(libvirt_driver.LibvirtDriver,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_6ff57fca","line":785,"range":{"start_line":774,"start_character":2,"end_line":785,"end_character":78},"updated":"2018-05-31 10:07:12.000000000","message":"Why do you need all of that? It\u0027s should be used only when virt_type is configured to use xen. file backend memory is only available for QEMU/KVM","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":790,"context_line":"                mock.patch(\u0027sys.platform\u0027, \u0027linux2\u0027),"},{"line_number":791,"context_line":"        ) as (mock_file, mock_list, mock_conn, mock_platform):"},{"line_number":792,"context_line":"            mock_list.return_value \u003d ["},{"line_number":793,"context_line":"                libvirt_guest.Guest(DiagFakeDomain(0, 15814)),"},{"line_number":794,"context_line":"                libvirt_guest.Guest(DiagFakeDomain(1, 750)),"},{"line_number":795,"context_line":"                libvirt_guest.Guest(DiagFakeDomain(2, 1042))]"},{"line_number":796,"context_line":"            mock_conn.getInfo.return_value \u003d ["}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_ef32efa6","line":793,"range":{"start_line":793,"start_character":55,"end_line":793,"end_character":59},"updated":"2018-05-31 10:07:12.000000000","message":"it would be easier if you use simple number (power of 2) so we can compute that without using calc :)","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"eb9bd054fee4624b6b0aaea19253e5869edd4545","unresolved":false,"context_lines":[{"line_number":782,"context_line":"                libvirt_guest.Guest(DiagFakeDomain(2, 1024)),"},{"line_number":783,"context_line":"                libvirt_guest.Guest(DiagFakeDomain(3, 1024))]"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":"            self.assertEqual(8192, self.host.get_memory_mb_used())"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"    def test_get_cpu_stats(self):"},{"line_number":788,"context_line":"        stats \u003d self.host.get_cpu_stats()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_7d99a66a","line":785,"updated":"2018-06-01 09:45:29.000000000","message":"Thanks for the easy to compute values :)","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":676,"context_line":"            self.assertEqual(\u0027one\u0027, self.host.get_memory_mb_total())"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"    def test_get_memory_total_file_backed(self):"},{"line_number":679,"context_line":"        self.flags(file_backed_memory\u003d1048576,"},{"line_number":680,"context_line":"                   group\u003d\"libvirt\")"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        self.assertEqual(1048576, self.host.get_memory_mb_total())"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_11decd0f","line":680,"range":{"start_line":679,"start_character":46,"end_line":680,"end_character":19},"updated":"2018-06-20 17:15:40.000000000","message":"nit: No need for these to be on newlines, right?","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":6463,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":6464,"context_line":"            mem_inv \u003d result[rc_fields.ResourceClass.MEMORY_MB]"},{"line_number":6465,"context_line":"            mem_inv[\u0027allocation_ratio\u0027] \u003d 1.0"},{"line_number":6466,"context_line":"            mem_inv[\u0027reserved\u0027] \u003d 0.0"},{"line_number":6467,"context_line":""},{"line_number":6468,"context_line":"        return result"},{"line_number":6469,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9231565d","line":6466,"updated":"2018-05-11 15:30:26.000000000","message":"Your config element didn\u0027t describe this overriding the reserved amount either. I wonder if it would be better to just comment that the operator should set reserved\u003d0 in the config instead of doing this, in case they have some reason to still reserve some amount?","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":7719,"context_line":"                        migrate_data.serial_listen_addr))"},{"line_number":7720,"context_line":""},{"line_number":7721,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":7722,"context_line":"            migrate_data.file_backed_memory \u003d True"},{"line_number":7723,"context_line":""},{"line_number":7724,"context_line":"        for vol in block_device_mapping:"},{"line_number":7725,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_d2d4aeeb","line":7722,"updated":"2018-05-11 15:30:26.000000000","message":"Better to just always set it, true or false I think.","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7c2960e61cb9107940223bebd91c843604b5fa93","unresolved":false,"context_lines":[{"line_number":4758,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":4759,"context_line":"            if wantsmempages:"},{"line_number":4760,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4761,"context_line":"                raise exception.MemoryPagesUnsupported()"},{"line_number":4762,"context_line":"            wantsfilebacked \u003d True"},{"line_number":4763,"context_line":""},{"line_number":4764,"context_line":"        membacking \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_78d33961","line":4761,"updated":"2018-05-11 16:37:56.000000000","message":"Where would this propagate up to? Are we going to end up with a 500 error if this happens?","commit_id":"1162e3fbbbba529a7394514420cc1d5c672a4781"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e594d65e4b9d0bdf19d3d5f11a02701ce9443b11","unresolved":false,"context_lines":[{"line_number":4755,"context_line":"        wantsrealtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":"        wantsfilebacked \u003d False"},{"line_number":4758,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":4759,"context_line":"            if wantsmempages:"},{"line_number":4760,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4761,"context_line":"                raise exception.MemoryPagesUnsupported()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d0e80a7d","line":4758,"updated":"2018-05-14 12:51:24.000000000","message":"You also need to add a check for libvirt and QEMU version here.","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"1594a3e99c1e81fd918f7fea1d9d80c38abb547e","unresolved":false,"context_lines":[{"line_number":4755,"context_line":"        wantsrealtime \u003d hardware.is_realtime_enabled(flavor)"},{"line_number":4756,"context_line":""},{"line_number":4757,"context_line":"        wantsfilebacked \u003d False"},{"line_number":4758,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":4759,"context_line":"            if wantsmempages:"},{"line_number":4760,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4761,"context_line":"                raise exception.MemoryPagesUnsupported()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e07447d1","line":4758,"in_reply_to":"5f7c97a3_d0e80a7d","updated":"2018-05-14 21:58:21.000000000","message":"This should probably be a check-once at startup (and fail if insufficient).\n\nI\u0027ll add that in, as well as the test for virt_type (discussed below)","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"372bdef12a11a8bcd2148ea28e049c2671460803","unresolved":false,"context_lines":[{"line_number":4758,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":4759,"context_line":"            if wantsmempages:"},{"line_number":4760,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4761,"context_line":"                raise exception.MemoryPagesUnsupported()"},{"line_number":4762,"context_line":"            wantsfilebacked \u003d True"},{"line_number":4763,"context_line":""},{"line_number":4764,"context_line":"        membacking \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_6fa11646","line":4761,"updated":"2018-05-14 10:03:33.000000000","message":"An other test should be done: This feature is only supported by QEMU/KVM. Since Nova only support such features for KVM I would recommend to add check whether virt_type is well KVM.\n\nThis is influencing the service so I would have done that check during startup.","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"372bdef12a11a8bcd2148ea28e049c2671460803","unresolved":false,"context_lines":[{"line_number":6460,"context_line":"                \u0027step_size\u0027: 1,"},{"line_number":6461,"context_line":"                }"},{"line_number":6462,"context_line":""},{"line_number":6463,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":6464,"context_line":"            mem_inv \u003d result[rc_fields.ResourceClass.MEMORY_MB]"},{"line_number":6465,"context_line":"            mem_inv[\u0027allocation_ratio\u0027] \u003d 1.0"},{"line_number":6466,"context_line":""},{"line_number":6467,"context_line":"        return result"},{"line_number":6468,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_0f2982e4","line":6465,"range":{"start_line":6463,"start_character":0,"end_line":6465,"end_character":45},"updated":"2018-05-14 10:03:33.000000000","message":"As note in conf/libvirt.py - I don\u0027t feel comfortable with it.. I would have checked whether \u0027allocation_ratio\u0027 is well configured during startup if file_backed_memory set.","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"372bdef12a11a8bcd2148ea28e049c2671460803","unresolved":false,"context_lines":[{"line_number":7717,"context_line":"                    serial_console.acquire_port("},{"line_number":7718,"context_line":"                        migrate_data.serial_listen_addr))"},{"line_number":7719,"context_line":""},{"line_number":7720,"context_line":"        migrate_data.file_backed_memory \u003d CONF.libvirt.file_backed_memory"},{"line_number":7721,"context_line":""},{"line_number":7722,"context_line":"        for vol in block_device_mapping:"},{"line_number":7723,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_4fce9a2d","line":7720,"updated":"2018-05-14 10:03:33.000000000","message":"Is that possible you separate all related migration changes to an other commit?","commit_id":"d1c4065f006b5c143cd834c6801b15f0b82fa420"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":555,"context_line":"                    _(\u0027Running Nova with file_backed_memory and virt_type \u0027"},{"line_number":556,"context_line":"                      \u0027%(type)s is not supported. file_backed_memory is only \u0027"},{"line_number":557,"context_line":"                      \u0027supported with qemu and kvm types.\u0027) %"},{"line_number":558,"context_line":"                    CONF.libvirt.virty_type)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"            # Check needed versions for file_backed_memory"},{"line_number":561,"context_line":"            if not self._host.has_min_version("}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ea7d6a6e","line":558,"updated":"2018-05-23 08:35:29.000000000","message":"Should be virt_type","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":549,"context_line":"                    libvirt_utils.version_to_string(MIN_QEMU_VERSION))"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":552,"context_line":"            # file_backed_memory is only compatible with qemu/kvm virts"},{"line_number":553,"context_line":"            if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":554,"context_line":"                raise exception.InternalError("},{"line_number":555,"context_line":"                    _(\u0027Running Nova with file_backed_memory and virt_type \u0027"},{"line_number":556,"context_line":"                      \u0027%(type)s is not supported. file_backed_memory is only \u0027"},{"line_number":557,"context_line":"                      \u0027supported with qemu and kvm types.\u0027) %"},{"line_number":558,"context_line":"                    CONF.libvirt.virty_type)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"            # Check needed versions for file_backed_memory"},{"line_number":561,"context_line":"            if not self._host.has_min_version("},{"line_number":562,"context_line":"                    MIN_LIBVIRT_FILE_BACKED_VERSION,"},{"line_number":563,"context_line":"                    hv_ver\u003dMIN_QEMU_FILE_BACKED_VERSION):"},{"line_number":564,"context_line":"                raise exception.InternalError("},{"line_number":565,"context_line":"                    _(\u0027Running Nova with file_backed_memory requires libvirt \u0027"},{"line_number":566,"context_line":"                      \u0027version %(libvirt)s and qemu version %(qemu)s\u0027) %"},{"line_number":567,"context_line":"                    {\u0027libvirt\u0027: libvirt_utils.version_to_string("},{"line_number":568,"context_line":"                        MIN_LIBVIRT_FILE_BACKED_VERSION),"},{"line_number":569,"context_line":"                    \u0027qemu\u0027: libvirt_utils.version_to_string("},{"line_number":570,"context_line":"                        MIN_QEMU_FILE_BACKED_VERSION)})"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"            # file backed memory doesn\u0027t work with memory overcommit."},{"line_number":573,"context_line":"            # Block service startup if file backed memory is enabled and"},{"line_number":574,"context_line":"            # ram_allocation_ratio is not 1.0"},{"line_number":575,"context_line":"            if CONF.ram_allocation_ratio !\u003d 1.0:"},{"line_number":576,"context_line":"                raise exception.InternalError("},{"line_number":577,"context_line":"                    \u0027Running Nova with file_backed_memory requires \u0027"},{"line_number":578,"context_line":"                    \u0027ram_allocation_ratio configured to 1.0\u0027)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027parallels\u0027:"},{"line_number":581,"context_line":"            if not self._host.has_min_version(hv_ver\u003dMIN_VIRTUOZZO_VERSION):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_4ad57e42","line":578,"range":{"start_line":552,"start_character":0,"end_line":578,"end_character":3},"updated":"2018-05-23 08:35:29.000000000","message":"All this block is big enough, can you put all of that in a function so we can add unittests. I already have noticed a mistake line 558.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":6606,"context_line":"        # Checks for file_backed_memory:"},{"line_number":6607,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":6608,"context_line":"            srv \u003d objects.Service.get_by_compute_host(context, instance.host)"},{"line_number":6609,"context_line":"            if srv.version \u003c 31:"},{"line_number":6610,"context_line":"                msg \u003d (\"Cannot migrate instance %(uuid)s from node %(node)s. \""},{"line_number":6611,"context_line":"                       \"Node %(node)s is not compatible with \""},{"line_number":6612,"context_line":"                       \"file_backed_memory\" % {\"uuid\": instance.uuid,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_6abf1afb","line":6609,"range":{"start_line":6609,"start_character":29,"end_line":6609,"end_character":32},"updated":"2018-05-23 08:35:29.000000000","message":"Can you add constant for this.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":7756,"context_line":"                    serial_console.acquire_port("},{"line_number":7757,"context_line":"                        migrate_data.serial_listen_addr))"},{"line_number":7758,"context_line":""},{"line_number":7759,"context_line":"        migrate_data.file_backed_memory \u003d (CONF.libvirt.file_backed_memory \u003e 0)"},{"line_number":7760,"context_line":""},{"line_number":7761,"context_line":"        for vol in block_device_mapping:"},{"line_number":7762,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_8abab607","line":7759,"updated":"2018-05-23 08:35:29.000000000","message":"nit: not sure the parenthesis are needed","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            # Check needed versions for file_backed_memory"},{"line_number":520,"context_line":"            if not self._host.has_min_version("},{"line_number":521,"context_line":"                    MIN_LIBVIRT_FILE_BACKED_VERSION,"},{"line_number":522,"context_line":"                    hv_ver\u003dMIN_QEMU_FILE_BACKED_VERSION):"},{"line_number":523,"context_line":"                raise exception.InternalError("},{"line_number":524,"context_line":"                    _(\u0027Running Nova with file_backed_memory requires libvirt \u0027"},{"line_number":525,"context_line":"                      \u0027version %(libvirt)s and qemu version %(qemu)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_8fda5b48","line":522,"range":{"start_line":522,"start_character":20,"end_line":522,"end_character":27},"updated":"2018-05-31 10:07:12.000000000","message":"no need of this","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":4693,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":4694,"context_line":"            if wantsmempages:"},{"line_number":4695,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4696,"context_line":"                raise exception.MemoryPagesUnsupported()"},{"line_number":4697,"context_line":"            wantsfilebacked \u003d True"},{"line_number":4698,"context_line":""},{"line_number":4699,"context_line":"        membacking \u003d None"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_8fb33b0a","line":4696,"range":{"start_line":4696,"start_character":17,"end_line":4696,"end_character":56},"updated":"2018-05-31 10:07:12.000000000","message":"I might have missed something but did not have seen test for this. Can you add one?","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"e288c23a3964f116d3f09074afc381dd277648ed","unresolved":false,"context_lines":[{"line_number":7647,"context_line":"                    serial_console.acquire_port("},{"line_number":7648,"context_line":"                        migrate_data.serial_listen_addr))"},{"line_number":7649,"context_line":""},{"line_number":7650,"context_line":"        migrate_data.file_backed_memory \u003d (CONF.libvirt.file_backed_memory \u003e 0)"},{"line_number":7651,"context_line":""},{"line_number":7652,"context_line":"        for vol in block_device_mapping:"},{"line_number":7653,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_cfa293ae","line":7650,"range":{"start_line":7650,"start_character":0,"end_line":7650,"end_character":79},"updated":"2018-05-31 10:07:12.000000000","message":"Same here, I did not find test where file_backed_memory is True.\n\nActually the attribute is *dst_file_backend_memory*.","commit_id":"5b56dac14f2e861b0554dc38305205d9269db389"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e2cc8f4989527899055883f37b2f234e2eba43c8","unresolved":false,"context_lines":[{"line_number":4691,"context_line":""},{"line_number":4692,"context_line":"        wantsfilebacked \u003d False"},{"line_number":4693,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":4694,"context_line":"            if wantsmempages:"},{"line_number":4695,"context_line":"                # Can\u0027t use file backed memory with hugepages"},{"line_number":4696,"context_line":"                raise exception.MemoryPagesUnsupported()"},{"line_number":4697,"context_line":"            wantsfilebacked \u003d True"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_56044ec6","line":4694,"updated":"2018-06-07 14:57:16.000000000","message":"This is a nit, but:\n\n wantsfilebacked \u003d CONF.libvirt.file_backed_memory \u003e 0\n if wantsfilebacked and wantsmempages:\n     raise ...","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e2cc8f4989527899055883f37b2f234e2eba43c8","unresolved":false,"context_lines":[{"line_number":6523,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":6524,"context_line":"        \"\"\""},{"line_number":6525,"context_line":""},{"line_number":6526,"context_line":"        # Checks for file_backed_memory:"},{"line_number":6527,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":6528,"context_line":"            srv \u003d objects.Service.get_by_compute_host(context, instance.host)"},{"line_number":6529,"context_line":"            if srv.version \u003c 31:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_36b432d1","line":6526,"updated":"2018-06-07 14:57:16.000000000","message":"I think more words here would be good, since at a high level, you should be able to do this. Maybe something like:\n\n If file_backed_memory is enabled on this host, we have to make sure \n the source is new enough to support it. Since the source generates the\n XML for the destination, we depend on the source generating a\n file-backed XML for us, so fail if it won\u0027t do that.","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e2cc8f4989527899055883f37b2f234e2eba43c8","unresolved":false,"context_lines":[{"line_number":6566,"context_line":"        if disk_over_commit is not None:"},{"line_number":6567,"context_line":"            data.disk_over_commit \u003d disk_over_commit"},{"line_number":6568,"context_line":"        data.disk_available_mb \u003d disk_available_mb"},{"line_number":6569,"context_line":"        return data"},{"line_number":6570,"context_line":""},{"line_number":6571,"context_line":"    def cleanup_live_migration_destination_check(self, context,"},{"line_number":6572,"context_line":"                                                 dest_check_data):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_764e2a97","line":6569,"updated":"2018-06-07 14:57:16.000000000","message":"We should be setting dst_wants_file_backed_memoryin this method right? This runs on the destination before we ever get the source involved, and it\u0027s where we get to collect the migratedata object ahead of time, so this is the right time to (a) fail if the source is old and (b) collect the flag.","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e2cc8f4989527899055883f37b2f234e2eba43c8","unresolved":false,"context_lines":[{"line_number":7648,"context_line":"                        migrate_data.serial_listen_addr))"},{"line_number":7649,"context_line":""},{"line_number":7650,"context_line":"        migrate_data.dst_wants_file_backed_memory \u003d \\"},{"line_number":7651,"context_line":"                CONF.libvirt.file_backed_memory \u003e 0"},{"line_number":7652,"context_line":""},{"line_number":7653,"context_line":"        for vol in block_device_mapping:"},{"line_number":7654,"context_line":"            connection_info \u003d vol[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_56944ee8","line":7651,"updated":"2018-06-07 14:57:16.000000000","message":"I think this should be set in the check call, per above.","commit_id":"37a7e53daac06fbb774f08a052de3e3c1be9ff9e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0f5ef2a674e98d3bd304bb00580a1a9c0170ad5","unresolved":false,"context_lines":[{"line_number":285,"context_line":"MIN_LIBVIRT_LUKS_VERSION \u003d (2, 2, 0)"},{"line_number":286,"context_line":"MIN_QEMU_LUKS_VERSION \u003d (2, 6, 0)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"MIN_LIBVIRT_FILE_BACKED_VERSION \u003d (4, 0, 0)"},{"line_number":289,"context_line":"MIN_QEMU_FILE_BACKED_VERSION \u003d (2, 6, 0)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"VGPU_RESOURCE_SEMAPHORE \u003d \"vgpu_resources\""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_027070a3","line":289,"range":{"start_line":288,"start_character":0,"end_line":289,"end_character":40},"updated":"2018-06-12 15:55:07.000000000","message":"The good news is we have these versions in our CI jobs on master via the queens UCA:\n\nhttp://logs.openstack.org/76/567876/10/check/tempest-full/dc1e491/controller/logs/dpkg-l.txt.gz\n\nAs discussed in IRC, we\u0027d need a devstack patch to add a variable to enable file-backed memory:\n\n(10:49:46 AM) dansmith: mriedem: mount tmpfs on /var/lib/qemu/whatever and configure it on\n\nAnd then we can write a do-not-merge one-off patch to make legacy-grenade-dsvm-neutron-multinode-live-migration run with file-backed memory, or turn that into an experimental queue job to be run on-demand.\n\nIf someone can hack up the devstack change, I can help with linking it to the legacy-grenade-dsvm-neutron-multinode-live-migration job.","commit_id":"20c899f52780f5566758bf03edbe80d66db21896"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b3d9758646fb5b485b81ddf1b3bffcd1282388b","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    _(\u0027Nova requires QEMU version %s or greater.\u0027) %"},{"line_number":509,"context_line":"                    libvirt_utils.version_to_string(MIN_QEMU_VERSION))"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":512,"context_line":"            # file_backed_memory is only compatible with qemu/kvm virts"},{"line_number":513,"context_line":"            if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":514,"context_line":"                raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_82b42d84","line":511,"range":{"start_line":511,"start_character":42,"end_line":511,"end_character":46},"updated":"2018-06-15 15:34:13.000000000","message":"nit: not necessary","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec3d1e2069c92e041e4a0619a8b516291b247e6d","unresolved":false,"context_lines":[{"line_number":6557,"context_line":"                       \"Node %(node)s is not compatible with \""},{"line_number":6558,"context_line":"                       \"file_backed_memory\" % {\"uuid\": instance.uuid,"},{"line_number":6559,"context_line":"                                               \"node\": srv.host})"},{"line_number":6560,"context_line":"                raise exception.MigrationPreCheckError(reason\u003dmsg)"},{"line_number":6561,"context_line":""},{"line_number":6562,"context_line":"        if disk_over_commit:"},{"line_number":6563,"context_line":"            disk_available_gb \u003d dst_compute_info[\u0027local_gb\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_bc24e961","line":6560,"updated":"2018-06-15 21:02:33.000000000","message":"The test patch on top of this shows this working when running against a queens compute that is not configured for file-backed memory:\n\nhttp://logs.openstack.org/66/575766/1/check/legacy-grenade-dsvm-neutron-multinode-live-migration/2bd7d1f/logs/screen-n-cpu.txt.gz#_Jun_15_17_06_09_888053","commit_id":"63db90dc71824257995cecaeac302e6c97d046a7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"83aca49779855738e71675ec6f2b8dedc9d8cbdf","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        self._supported_perf_events \u003d self._get_supported_perf_events()"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._set_multiattach_support()"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        if (CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and"},{"line_number":483,"context_line":"                not (CONF.libvirt.uid_maps and CONF.libvirt.gid_maps)):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_c38e6778","line":480,"updated":"2018-06-19 15:49:39.000000000","message":"Random musing: I wonder if we\u0027d want to report file-backed memory support as a compute capability so we could use it during scheduling. However, we don\u0027t have extra specs linking this up in any way from a user perspective so I\u0027m not sure how much a capability flag would buy us. For things like volume multiattach, it\u0027s useful since you can\u0027t boot from volume on a host that doesn\u0027t support it, and we need to determine that during scheduling. File-backed memory isn\u0027t really in the same boat.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"269709e87bc06cc5b22038072ca9e59ac129be18","unresolved":false,"context_lines":[{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        self._supported_perf_events \u003d self._get_supported_perf_events()"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self._set_multiattach_support()"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        if (CONF.libvirt.virt_type \u003d\u003d \u0027lxc\u0027 and"},{"line_number":483,"context_line":"                not (CONF.libvirt.uid_maps and CONF.libvirt.gid_maps)):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_433ed78b","line":480,"in_reply_to":"5f7c97a3_c38e6778","updated":"2018-06-19 15:52:14.000000000","message":"Although, we could use that for filtering out hosts that are configured for file-backed memory when the request includes a flavor that wants huge pages.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    _(\u0027Nova requires QEMU version %s or greater.\u0027) %"},{"line_number":509,"context_line":"                    libvirt_utils.version_to_string(MIN_QEMU_VERSION))"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":512,"context_line":"            # file_backed_memory is only compatible with qemu/kvm virts"},{"line_number":513,"context_line":"            if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":514,"context_line":"                raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_6841700a","line":511,"updated":"2018-06-19 15:47:59.000000000","message":"nit: init_host is already a big method, I\u0027d prefer if we did this validation in a private method, like what we do in _set_multiattach_support for multiattach support. That also makes unit testing just the validation logic for file-backed memory easier.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    _(\u0027Nova requires QEMU version %s or greater.\u0027) %"},{"line_number":509,"context_line":"                    libvirt_utils.version_to_string(MIN_QEMU_VERSION))"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":512,"context_line":"            # file_backed_memory is only compatible with qemu/kvm virts"},{"line_number":513,"context_line":"            if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":514,"context_line":"                raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_bea82220","line":511,"in_reply_to":"5f7c97a3_6841700a","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            # file backed memory doesn\u0027t work with memory overcommit."},{"line_number":533,"context_line":"            # Block service startup if file backed memory is enabled and"},{"line_number":534,"context_line":"            # ram_allocation_ratio is not 1.0"},{"line_number":535,"context_line":"            if CONF.ram_allocation_ratio !\u003d 1.0:"},{"line_number":536,"context_line":"                raise exception.InternalError("},{"line_number":537,"context_line":"                    \u0027Running Nova with file_backed_memory requires \u0027"},{"line_number":538,"context_line":"                    \u0027ram_allocation_ratio configured to 1.0\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_08cd5c85","line":535,"updated":"2018-06-19 15:47:59.000000000","message":"Note to self: ram_allocation_ratio defaults to 0.0 in config, and if not set, defaults to 1.5 in the compute node object:\n\nhttps://github.com/openstack/nova/blob/e2b71bacad0a8a06c4ed47a69eec97afbdc4e6ea/nova/objects/compute_node.py#L204\n\nSo explicitly setting it to 1.0 is definitely needed to overcome that.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            # file backed memory doesn\u0027t work with memory overcommit."},{"line_number":533,"context_line":"            # Block service startup if file backed memory is enabled and"},{"line_number":534,"context_line":"            # ram_allocation_ratio is not 1.0"},{"line_number":535,"context_line":"            if CONF.ram_allocation_ratio !\u003d 1.0:"},{"line_number":536,"context_line":"                raise exception.InternalError("},{"line_number":537,"context_line":"                    \u0027Running Nova with file_backed_memory requires \u0027"},{"line_number":538,"context_line":"                    \u0027ram_allocation_ratio configured to 1.0\u0027)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027parallels\u0027:"},{"line_number":541,"context_line":"            if not self._host.has_min_version(hv_ver\u003dMIN_VIRTUOZZO_VERSION):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_68289032","line":538,"range":{"start_line":535,"start_character":12,"end_line":538,"end_character":61},"updated":"2018-06-19 15:47:59.000000000","message":"How are we going to handle the ram_allocation_ratio being set per host aggregates?\n\nhttps://docs.openstack.org/nova/latest/admin/configuration/schedulers.html#aggregateramfilter","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":532,"context_line":"            # file backed memory doesn\u0027t work with memory overcommit."},{"line_number":533,"context_line":"            # Block service startup if file backed memory is enabled and"},{"line_number":534,"context_line":"            # ram_allocation_ratio is not 1.0"},{"line_number":535,"context_line":"            if CONF.ram_allocation_ratio !\u003d 1.0:"},{"line_number":536,"context_line":"                raise exception.InternalError("},{"line_number":537,"context_line":"                    \u0027Running Nova with file_backed_memory requires \u0027"},{"line_number":538,"context_line":"                    \u0027ram_allocation_ratio configured to 1.0\u0027)"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027parallels\u0027:"},{"line_number":541,"context_line":"            if not self._host.has_min_version(hv_ver\u003dMIN_VIRTUOZZO_VERSION):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_7b67e0eb","line":538,"range":{"start_line":535,"start_character":12,"end_line":538,"end_character":61},"in_reply_to":"5f7c97a3_68289032","updated":"2018-06-20 16:26:10.000000000","message":"As per the conversation on IRC, for now we\u0027re just going to document this isn\u0027t supported. \n\nIf this isn\u0027t done (someone has higher overcommit enabled on an aggregate), the instance will fail to allocate memory upfront when the backing store is out of space, because we use immediate allocation mode, so the behavior will still be sane.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":4711,"context_line":""},{"line_number":4712,"context_line":"        if wantsmempages and wantsfilebacked:"},{"line_number":4713,"context_line":"            # Can\u0027t use file backed memory with hugepages"},{"line_number":4714,"context_line":"            raise exception.MemoryPagesUnsupported()"},{"line_number":4715,"context_line":""},{"line_number":4716,"context_line":"        membacking \u003d None"},{"line_number":4717,"context_line":"        if wantsmempages:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_087b1c29","line":4714,"updated":"2018-06-19 15:47:59.000000000","message":"Should probably log something before raising this, since this exception will say \"Host does not support guests with custom memory page sizes\" - but really the host could support huge pages but it\u0027s the combination of that plus file-backed memory that\u0027s not supported, so we should log something as a hint that that is why it failed - probably not an ERROR since the operator can\u0027t really do anything about it, it\u0027s a user request failure. About the only thing the operator could do probably is setup host aggregates for hosts using file-backed memory and then make sure flavors that are configured for huge pages to not land on those hosts. Logging at WARNING or INFO is probably sufficient. Or use a different specific exception for this scenario.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":4711,"context_line":""},{"line_number":4712,"context_line":"        if wantsmempages and wantsfilebacked:"},{"line_number":4713,"context_line":"            # Can\u0027t use file backed memory with hugepages"},{"line_number":4714,"context_line":"            raise exception.MemoryPagesUnsupported()"},{"line_number":4715,"context_line":""},{"line_number":4716,"context_line":"        membacking \u003d None"},{"line_number":4717,"context_line":"        if wantsmempages:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_d9fad8b8","line":4714,"in_reply_to":"5f7c97a3_087b1c29","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":6380,"context_line":"            updated provider information."},{"line_number":6381,"context_line":"        \"\"\""},{"line_number":6382,"context_line":"        disk_gb \u003d int(self._get_local_gb_info()[\u0027total\u0027])"},{"line_number":6383,"context_line":"        memory_mb \u003d int(self._host.get_memory_mb_total())"},{"line_number":6384,"context_line":"        vcpus \u003d self._get_vcpu_total()"},{"line_number":6385,"context_line":""},{"line_number":6386,"context_line":"        # NOTE(sbauza): For the moment, the libvirt driver only supports"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_48cef42d","line":6383,"range":{"start_line":6383,"start_character":35,"end_line":6383,"end_character":54},"updated":"2018-06-19 15:47:59.000000000","message":"OK and this is what\u0027s going to determine file-backed memory inventory now, which yes will get reported into placement.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":6546,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":6547,"context_line":"        \"\"\""},{"line_number":6548,"context_line":""},{"line_number":6549,"context_line":"        # If file_backed_memory is enabled on this host, we have to make sure"},{"line_number":6550,"context_line":"        # the source is new enough to support it. Since the source generates"},{"line_number":6551,"context_line":"        # the XML for the destination, we depend on the source generating a"},{"line_number":6552,"context_line":"        # file-backed XML for us, so fail if it won\u0027t do that."}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_086a3c1a","line":6549,"updated":"2018-06-19 15:47:59.000000000","message":"nit: we could add a TODO that this check can be removed in Stein because in Stein we only support, at the oldest, Rocky computes, which would have file-backed memory code support.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":6546,"context_line":"        :returns: a LibvirtLiveMigrateData object"},{"line_number":6547,"context_line":"        \"\"\""},{"line_number":6548,"context_line":""},{"line_number":6549,"context_line":"        # If file_backed_memory is enabled on this host, we have to make sure"},{"line_number":6550,"context_line":"        # the source is new enough to support it. Since the source generates"},{"line_number":6551,"context_line":"        # the XML for the destination, we depend on the source generating a"},{"line_number":6552,"context_line":"        # file-backed XML for us, so fail if it won\u0027t do that."}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_99d30038","line":6549,"in_reply_to":"5f7c97a3_086a3c1a","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":6551,"context_line":"        # the XML for the destination, we depend on the source generating a"},{"line_number":6552,"context_line":"        # file-backed XML for us, so fail if it won\u0027t do that."},{"line_number":6553,"context_line":"        if CONF.libvirt.file_backed_memory \u003e 0:"},{"line_number":6554,"context_line":"            srv \u003d objects.Service.get_by_compute_host(context, instance.host)"},{"line_number":6555,"context_line":"            if srv.version \u003c 32:"},{"line_number":6556,"context_line":"                msg \u003d (\"Cannot migrate instance %(uuid)s from node %(node)s. \""},{"line_number":6557,"context_line":"                       \"Node %(node)s is not compatible with \""}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e81900d1","line":6554,"range":{"start_line":6554,"start_character":63,"end_line":6554,"end_character":76},"updated":"2018-06-19 15:47:59.000000000","message":"This looks a bit weird, but instance.host is currently pointed at the source host, so this is correct. We could have also used src_compute_info but this is fine.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"909d7d2b0ed877b8568afd1345eace323f797a65","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                      \u00272.10 or libvirt must be greater than or equal to 3.10.\u0027)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"    def _check_file_backed_memory_support(self):"},{"line_number":589,"context_line":"        if CONF.libvirt.file_backed_memory:"},{"line_number":590,"context_line":"            # file_backed_memory is only compatible with qemu/kvm virts"},{"line_number":591,"context_line":"            if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):"},{"line_number":592,"context_line":"                raise exception.InternalError("}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_d1005569","line":589,"range":{"start_line":589,"start_character":0,"end_line":589,"end_character":43},"updated":"2018-06-20 17:15:40.000000000","message":"side note: I tend to prefer\n\n  if not CONF.libvirt.file_backed_memory:\n      return\n\n  # file_backed_memory is only compatible with qemu/kvm virts\n  if CONF.libvirt.virt_type not in (\"qemu\", \"kvm\"):\n      ...\n\nbecause it reduces the indentation significantly. Purely stylistic though :)","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cd25aaaa758e397a29f92815ee0387391e8a9ca2","unresolved":false,"context_lines":[{"line_number":6552,"context_line":"        \"\"\""},{"line_number":6553,"context_line":""},{"line_number":6554,"context_line":"        # TODO(zcornelius): Remove this check in Stein, as we\u0027ll only support"},{"line_number":6555,"context_line":"        #                    Rocky and newer computes."},{"line_number":6556,"context_line":"        # If file_backed_memory is enabled on this host, we have to make sure"},{"line_number":6557,"context_line":"        # the source is new enough to support it. Since the source generates"},{"line_number":6558,"context_line":"        # the XML for the destination, we depend on the source generating a"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f7c97a3_aee774ac","line":6555,"range":{"start_line":6555,"start_character":28,"end_line":6555,"end_character":29},"updated":"2018-06-20 16:37:03.000000000","message":"Extra whitespace here :)","commit_id":"cbc28f0d15287dcf24a07f835210affa41c38993"}],"nova/virt/libvirt/host.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":797,"context_line":"                                {\"uuid\": guest.uuid, \"ex\": e})"},{"line_number":798,"context_line":"                    continue"},{"line_number":799,"context_line":"                # skip dom0"},{"line_number":800,"context_line":"                if guest.id !\u003d 0 or CONF.libvirt.file_backed_memory:"},{"line_number":801,"context_line":"                    used +\u003d dom_mem"},{"line_number":802,"context_line":"                else:"},{"line_number":803,"context_line":"                    # the mem reported by dom0 is be greater of what"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_72159a9b","line":800,"updated":"2018-05-11 15:30:26.000000000","message":"I\u0027m not sure I get this. On kvm, we should never have a guest zero, so we should always hit this anyway, right?","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"bcb16a2e448e7026a761ba3f8ac7a23d569dc271","unresolved":false,"context_lines":[{"line_number":797,"context_line":"                                {\"uuid\": guest.uuid, \"ex\": e})"},{"line_number":798,"context_line":"                    continue"},{"line_number":799,"context_line":"                # skip dom0"},{"line_number":800,"context_line":"                if guest.id !\u003d 0 or CONF.libvirt.file_backed_memory:"},{"line_number":801,"context_line":"                    used +\u003d dom_mem"},{"line_number":802,"context_line":"                else:"},{"line_number":803,"context_line":"                    # the mem reported by dom0 is be greater of what"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_7d648b22","line":800,"in_reply_to":"5f7c97a3_72159a9b","updated":"2018-05-11 16:09:33.000000000","message":"Wasn\u0027t sure if it was possible to have guest ID zero on KVM, so I added the check for file_backed_memory as a safety belt. It can be removed if we\u0027re sure guest id can never be 0 on KVM.","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7c2960e61cb9107940223bebd91c843604b5fa93","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        idx3 \u003d m.index(\u0027Cached:\u0027)"},{"line_number":786,"context_line":"        # With file_backed_memory, we report usage based on consumed guest"},{"line_number":787,"context_line":"        # size, not actual memory usage"},{"line_number":788,"context_line":"        if CONF.libvirt.virt_type \u003d\u003d \u0027xen\u0027 or CONF.libvirt.file_backed_memory:"},{"line_number":789,"context_line":"            used \u003d 0"},{"line_number":790,"context_line":"            for guest in self.list_guests(only_guests\u003dFalse):"},{"line_number":791,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b8b55134","line":788,"updated":"2018-05-11 16:37:56.000000000","message":"I find this mix of xen and kvm+file_backed_memory confusing. Would there be a way to refactor this a bit to make it clearer? For instance:\n\n  if xen:\n    _sum_memory_for_guests(exclude_id\u003d0)\n  if file_backed_memory:\n    _sum_memory_for_guests(exclude_id\u003dNone)\n\n  def sum_memory_for_gusts(exclude_id\u003dNon):\n     for all guests:\n        if guest.id \u003d\u003d exclude_id:\n          skip\n        else:\n          sum\n\nI feel like ^^^ (as an example, I\u0027m sure it can be improved) would help me understand what\u0027s going on.","commit_id":"1162e3fbbbba529a7394514420cc1d5c672a4781"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"372bdef12a11a8bcd2148ea28e049c2671460803","unresolved":false,"context_lines":[{"line_number":775,"context_line":"        if sys.platform.upper() not in [\u0027LINUX2\u0027, \u0027LINUX3\u0027]:"},{"line_number":776,"context_line":"            return 0"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"        with open(\u0027/proc/meminfo\u0027) as fp:"},{"line_number":779,"context_line":"            m \u003d fp.read().split()"},{"line_number":780,"context_line":"        idx1 \u003d m.index(\u0027MemFree:\u0027)"},{"line_number":781,"context_line":"        idx2 \u003d m.index(\u0027Buffers:\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_cfe14a9d","side":"PARENT","line":778,"updated":"2018-05-14 10:03:33.000000000","message":"The rafactor looks good I would have put it in a different commit.","commit_id":"79c75cf953096b6fffa16827f648fad353c53310"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"6236fb2e2907d9bc1e20be20817ba56e56c1d9ae","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        else:"},{"line_number":771,"context_line":"            return self._get_hardware_info()[1]"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def _sum_domain_memory_mb(self, host_id\u003dNone):"},{"line_number":774,"context_line":"        \"\"\"Get the total memory consumed by guest domains"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        For xen, subtract available host memory from the host_id domain to"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_eaa48a0a","line":773,"updated":"2018-05-23 08:35:29.000000000","message":"Can you move that refactoring out of this commit so we ensure that no unit tests are updated.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"a01926e387fa6259e1fca5f115eddf46ed32e35d","unresolved":false,"context_lines":[{"line_number":770,"context_line":"        else:"},{"line_number":771,"context_line":"            return self._get_hardware_info()[1]"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"    def _sum_domain_memory_mb(self, host_id\u003dNone):"},{"line_number":774,"context_line":"        \"\"\"Get the total memory consumed by guest domains"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        For xen, subtract available host memory from the host_id domain to"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_5d0bc128","line":773,"in_reply_to":"5f7c97a3_eaa48a0a","updated":"2018-05-29 22:01:37.000000000","message":"https://review.openstack.org/#/c/571030/ was created with just the refactor here.","commit_id":"a67f22e9a87b30a48c426db6f097a5c44e5ccc32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        \"\"\"Get the total memory consumed by guest domains"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        If include_host is True, subtract available host memory from guest 0"},{"line_number":777,"context_line":"        to get real used memory within dom0 within xem"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        used \u003d 0"},{"line_number":780,"context_line":"        for guest in self.list_guests(only_guests\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_689f3002","line":777,"range":{"start_line":777,"start_character":51,"end_line":777,"end_character":54},"updated":"2018-06-19 15:47:59.000000000","message":"xen?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        \"\"\"Get the total memory consumed by guest domains"},{"line_number":775,"context_line":""},{"line_number":776,"context_line":"        If include_host is True, subtract available host memory from guest 0"},{"line_number":777,"context_line":"        to get real used memory within dom0 within xem"},{"line_number":778,"context_line":"        \"\"\""},{"line_number":779,"context_line":"        used \u003d 0"},{"line_number":780,"context_line":"        for guest in self.list_guests(only_guests\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_f9e31405","line":777,"range":{"start_line":777,"start_character":51,"end_line":777,"end_character":54},"in_reply_to":"5f7c97a3_689f3002","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"}],"nova/virt/libvirt/migration.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    return xml_doc"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def _update_memory_backing_xml(xml_doc, migrate_data):"},{"line_number":227,"context_line":"    old_xml_has_memory_backing \u003d True"},{"line_number":228,"context_line":"    file_backed \u003d False"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_72f11a6b","line":226,"updated":"2018-05-11 15:30:26.000000000","message":"Can you make the variable names in here a little more descriptive? I think that xml_doc is the one from the source node, so memory_backing implies old_xml_has_memory_backing\u003dTrue?\n\nAlso, a docstring about the logic here and some comments might make this easier to review.","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"38087940ddc8e0d7a5834aa8d29c34c7cb7cc7f5","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    memory_backing \u003d xml_doc.findall(\u0027./memoryBacking\u0027)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    if \u0027file_backed_memory\u0027 in migrate_data:"},{"line_number":233,"context_line":"        file_backed \u003d migrate_data.file_backed_memory"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    if not memory_backing:"},{"line_number":236,"context_line":"        memory_backing \u003d etree.Element(\"memoryBacking\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_52489e85","line":233,"updated":"2018-05-11 15:30:26.000000000","message":"This means the destination wants file-backed memory right?\n\nSo, what happens if we\u0027re migrating from an old node to a new one, which is configured for file-backed memory? The old node won\u0027t generate a file-backed xml and thus will cause a regular instance to be spawned on the destination node?","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"bcb16a2e448e7026a761ba3f8ac7a23d569dc271","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    memory_backing \u003d xml_doc.findall(\u0027./memoryBacking\u0027)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    if \u0027file_backed_memory\u0027 in migrate_data:"},{"line_number":233,"context_line":"        file_backed \u003d migrate_data.file_backed_memory"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    if not memory_backing:"},{"line_number":236,"context_line":"        memory_backing \u003d etree.Element(\"memoryBacking\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_9d9ba716","line":233,"in_reply_to":"5f7c97a3_52489e85","updated":"2018-05-11 16:09:33.000000000","message":"Hmm. I think you\u0027re right here, and this could be an issue. Didn\u0027t see anything that would regenerate the XML on the destination though, not sure how this has been handled in the past.","commit_id":"2bf0efe9440fffee82ba30787477b02488d31bd6"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7c2960e61cb9107940223bebd91c843604b5fa93","unresolved":false,"context_lines":[{"line_number":223,"context_line":"    return xml_doc"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def _update_memory_backing_xml(xml_doc, migrate_data):"},{"line_number":227,"context_line":"    old_xml_has_memory_backing \u003d True"},{"line_number":228,"context_line":"    file_backed \u003d False"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_b8747137","line":226,"updated":"2018-05-11 16:37:56.000000000","message":"Sorry, the logic here is very hard to wrap my head around :( We definitely need source/dest distinction in variable names, and maybe split this into smaller methods.\n\nSo, thre are 3 source/dest cases:\n  file backed -\u003e \"normal\"\n  file backed -\u003e file backed\n  \"normal\" -\u003e file backed\n\nIf we have a method for each, called something like source_\u003ctype\u003e_to_dest_\u003ctype\u003e, and then just handle the if branching in the main _update method?","commit_id":"1162e3fbbbba529a7394514420cc1d5c672a4781"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"53e5cad7aebe6f3067590d89be9baaeb6ebc4be8","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def _update_memory_backing_xml(xml_doc, migrate_data):"},{"line_number":227,"context_line":"    \"\"\"Update libvirt domain XML for file backed memory"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    If incoming XML has a memoryBacking element, remove access, source,"},{"line_number":230,"context_line":"    and allocation children elements to get it to a known consistent state."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    If no incoming memoryBacking element, create one."},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    If destination wants file backed memory, add source, access,"},{"line_number":235,"context_line":"    and allocation children."},{"line_number":236,"context_line":"    \"\"\""},{"line_number":237,"context_line":"    old_xml_has_memory_backing \u003d True"},{"line_number":238,"context_line":"    file_backed \u003d False"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_40ca8d4f","line":236,"range":{"start_line":227,"start_character":0,"end_line":236,"end_character":7},"updated":"2018-05-18 15:23:41.000000000","message":"Ah, thanks for the doctext, I hadn\u0027t groked the \"remove it regardless, then re-create it if needed\" logic.","commit_id":"ed8b9fba502577aa0f896252c26e297de6c0ed37"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        file_backed \u003d migrate_data.dst_wants_file_backed_memory"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    if not memory_backing:"},{"line_number":246,"context_line":"        # Create memoryBacking element"},{"line_number":247,"context_line":"        memory_backing \u003d etree.Element(\"memoryBacking\")"},{"line_number":248,"context_line":"        old_xml_has_memory_backing \u003d False"},{"line_number":249,"context_line":"    else:"},{"line_number":250,"context_line":"        memory_backing \u003d memory_backing[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e87820c2","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":55},"updated":"2018-06-19 15:47:59.000000000","message":"Wouldn\u0027t we only need to add memoryBacking if file_backed is True?","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        file_backed \u003d migrate_data.dst_wants_file_backed_memory"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    if not memory_backing:"},{"line_number":246,"context_line":"        # Create memoryBacking element"},{"line_number":247,"context_line":"        memory_backing \u003d etree.Element(\"memoryBacking\")"},{"line_number":248,"context_line":"        old_xml_has_memory_backing \u003d False"},{"line_number":249,"context_line":"    else:"},{"line_number":250,"context_line":"        memory_backing \u003d memory_backing[0]"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e3a36342","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":55},"in_reply_to":"5f7c97a3_e87820c2","updated":"2018-06-20 16:26:10.000000000","message":"Yes. In the case the old XML didn\u0027t have a memoryBacking element, and didn\u0027t request file backed memory, we will create the element here, but never append it into the XML (Which would happen on line 267). Written this way to be consistent with _update_perf_events_xml() above","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                memory_backing.remove(tag[0])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # Leave empty memoryBacking element"},{"line_number":258,"context_line":"    if not file_backed:"},{"line_number":259,"context_line":"        return xml_doc"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    # Add file_backed memoryBacking children"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_286ff8fa","line":258,"range":{"start_line":258,"start_character":11,"end_line":258,"end_character":22},"updated":"2018-06-19 15:47:59.000000000","message":"This is going to be an error if \u0027dst_wants_file_backed_memory\u0027 is not in migrate_data, because variable \u0027file_backed\u0027 won\u0027t exist in scope. Looks like you\u0027re missing a test for that case.","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"                memory_backing.remove(tag[0])"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    # Leave empty memoryBacking element"},{"line_number":258,"context_line":"    if not file_backed:"},{"line_number":259,"context_line":"        return xml_doc"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    # Add file_backed memoryBacking children"}],"source_content_type":"text/x-python","patch_set":18,"id":"5f7c97a3_e347e3a2","line":258,"range":{"start_line":258,"start_character":11,"end_line":258,"end_character":22},"in_reply_to":"5f7c97a3_286ff8fa","updated":"2018-06-20 16:26:10.000000000","message":"file_backed is defined as false on line 238 above","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"}],"releasenotes/notes/libvirt-file-backed-memory-ea2cd292200fc11c.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``[libvirt]/file_backed_memory``, defaulting to 0 (disabled)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    ``[libvirt]/file_backed_memory`` specifies the available capacity in MiB"},{"line_number":9,"context_line":"    for file backed memory, at the folder configured for"},{"line_number":10,"context_line":"    ``memory_backing_dir`` in libvirt\u0027s ``qemu.conf``. When enabled, the"},{"line_number":11,"context_line":"    libvirt driver will report the configured value for the total memory"},{"line_number":12,"context_line":"    capacity of the node, and will report used memory as the sum of all"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"5f7c97a3_c319877a","line":9,"range":{"start_line":9,"start_character":35,"end_line":9,"end_character":41},"updated":"2018-06-19 15:47:59.000000000","message":"nit: directory","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``[libvirt]/file_backed_memory``, defaulting to 0 (disabled)."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    ``[libvirt]/file_backed_memory`` specifies the available capacity in MiB"},{"line_number":9,"context_line":"    for file backed memory, at the folder configured for"},{"line_number":10,"context_line":"    ``memory_backing_dir`` in libvirt\u0027s ``qemu.conf``. When enabled, the"},{"line_number":11,"context_line":"    libvirt driver will report the configured value for the total memory"},{"line_number":12,"context_line":"    capacity of the node, and will report used memory as the sum of all"}],"source_content_type":"text/x-yaml","patch_set":18,"id":"5f7c97a3_095ea7e8","line":9,"range":{"start_line":9,"start_character":35,"end_line":9,"end_character":41},"in_reply_to":"5f7c97a3_c319877a","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"225f7584d886968fd7b0d8163b162ee7acae7432","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ``ram_allocation_ratio`` must be configured to ``1.0``"},{"line_number":18,"context_line":"upgrade:"},{"line_number":19,"context_line":"  - |"},{"line_number":20,"context_line":"    Live migrations from nodes not compatible with file backed memory to nodes"},{"line_number":21,"context_line":"    with file backed memory is not allowed, and will result in an error. It\u0027s"},{"line_number":22,"context_line":"    recommended to upgrade all nodes before enabling file backed memory."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"5f7c97a3_23395bce","line":22,"range":{"start_line":20,"start_character":4,"end_line":22,"end_character":72},"updated":"2018-06-19 15:47:59.000000000","message":"I don\u0027t think we should really have a specific \u0027upgrade\u0027 item for this, since the upgrade notes are for people upgrading from \u003cRocky, where we didn\u0027t support file-backed memory, so there isn\u0027t really anything for them to do about this especially since file-backed memory is disabled by default in Rocky. So I\u0027d just merge this into the \u0027features\u0027 release note above.\n\nAlso, you could link to the admin docs on this if you wanted to avoid duplicating a lot of that documentation.\n\nSomething like:\n\nFor more details, see the admin guide documentation:\n\nhttps://docs.openstack.org/nova/latest/admin/file-backed-memory.html","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"},{"author":{"_account_id":26006,"name":"Zack Cornelius","email":"zack.cornelius@kove.net","username":"zcornelius"},"change_message_id":"8f8dd8ff42345884fc190d7dfbb5cf0b4fa388f5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ``ram_allocation_ratio`` must be configured to ``1.0``"},{"line_number":18,"context_line":"upgrade:"},{"line_number":19,"context_line":"  - |"},{"line_number":20,"context_line":"    Live migrations from nodes not compatible with file backed memory to nodes"},{"line_number":21,"context_line":"    with file backed memory is not allowed, and will result in an error. It\u0027s"},{"line_number":22,"context_line":"    recommended to upgrade all nodes before enabling file backed memory."}],"source_content_type":"text/x-yaml","patch_set":18,"id":"5f7c97a3_d553786b","line":22,"range":{"start_line":20,"start_character":4,"end_line":22,"end_character":72},"in_reply_to":"5f7c97a3_23395bce","updated":"2018-06-20 16:26:10.000000000","message":"Done","commit_id":"e031408b1e6ae973f34940417fc195a399da20f5"}]}
