)]}'
{"doc/source/admin/file-backed-memory.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":21,"context_line":"This allows the node to run more instances than would normally fit"},{"line_number":22,"context_line":"within system memory."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"When available in libivrt and qemu, instance memory will be discarded by qemu"},{"line_number":25,"context_line":"at shutdown by calling madvise(MADV_REMOVE), to avoid flushing any dirty memory"},{"line_number":26,"context_line":"to the backing store on exit."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_c7d71c22","line":24,"range":{"start_line":24,"start_character":18,"end_line":24,"end_character":25},"updated":"2018-06-21 17:05:30.000000000","message":"libvirt","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"within system memory."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"When available in libivrt and qemu, instance memory will be discarded by qemu"},{"line_number":25,"context_line":"at shutdown by calling madvise(MADV_REMOVE), to avoid flushing any dirty memory"},{"line_number":26,"context_line":"to the backing store on exit."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"To enable file-backed memory, follow the steps below:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_e7dc9846","line":25,"range":{"start_line":25,"start_character":23,"end_line":25,"end_character":43},"updated":"2018-06-21 17:05:30.000000000","message":"``literal``","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Libvirt"},{"line_number":45,"context_line":"   File-backed memory requires libvirt version 4.0.0 or newer"},{"line_number":46,"context_line":"   Discard capability requires libvirt ersion 4.4.0 or newer"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Qemu"},{"line_number":49,"context_line":"   File-backed memory requires qemu version 2.6.0 or newer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_07bbd4e4","line":46,"range":{"start_line":45,"start_character":0,"end_line":46,"end_character":60},"updated":"2018-06-21 17:05:30.000000000","message":"This will be merged into one line. You\u0027d be better off formatting this as a two-sentence paragraph","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Libvirt"},{"line_number":45,"context_line":"   File-backed memory requires libvirt version 4.0.0 or newer"},{"line_number":46,"context_line":"   Discard capability requires libvirt ersion 4.4.0 or newer"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Qemu"},{"line_number":49,"context_line":"   File-backed memory requires qemu version 2.6.0 or newer"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_67fac8ba","line":46,"range":{"start_line":46,"start_character":39,"end_line":46,"end_character":45},"updated":"2018-06-21 17:05:30.000000000","message":"version","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"}],"nova/objects/migrate_data.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    # Version 1.5: Added src_supports_native_luks"},{"line_number":135,"context_line":"    # Version 1.6: Added wait_for_vif_plugged"},{"line_number":136,"context_line":"    # Version 1.7: Added dst_wants_file_backed_memory"},{"line_number":137,"context_line":"    # Version 1.8: Added file_backed_memory_discard"},{"line_number":138,"context_line":"    VERSION \u003d \u00271.8\u0027"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    fields \u003d {"},{"line_number":141,"context_line":"        \u0027filename\u0027: fields.StringField(),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_c7e15cd1","line":138,"range":{"start_line":137,"start_character":0,"end_line":138,"end_character":19},"updated":"2018-06-21 17:05:30.000000000","message":"I\u0027m guessing that we can drop this in a future version once we bump the libvirt min to 4.4","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"}],"nova/tests/unit/objects/test_migrate_data.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"800ecc5cd75929e376195dcdf3fd0a2e7393a92c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        self.assertNotIn(\u0027src_supports_native_luks\u0027, primitive)"},{"line_number":259,"context_line":"        primitive \u003d data(obj.obj_to_primitive(target_version\u003d\u00271.6\u0027))"},{"line_number":260,"context_line":"        self.assertNotIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":261,"context_line":"        primitive \u003d obj.obj_to_primitive(target_version\u003d\u00271.7\u0027)"},{"line_number":262,"context_line":"        self.assertNotIn(\u0027file_backed_memory_discard\u0027, primitive)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def test_bdm_obj_make_compatible(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_d31cc667","line":261,"updated":"2018-06-21 13:55:36.000000000","message":"Should be:\n\nprimitive \u003d data(obj.obj_to_primitive(target_version\u003d\u00271.7\u0027))","commit_id":"bbdd304f1060df6a87914faf3fc4e06918a5266b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        data \u003d lambda x: x[\u0027nova_object.data\u0027]"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        primitive \u003d data(obj.obj_to_primitive())"},{"line_number":244,"context_line":"        self.assertIn(\u0027dst_wants_file_backed_memory\u0027, primitive)"},{"line_number":245,"context_line":"        primitive \u003d data(obj.obj_to_primitive(target_version\u003d\u00271.0\u0027))"},{"line_number":246,"context_line":"        self.assertNotIn(\u0027target_connect_addr\u0027, primitive)"},{"line_number":247,"context_line":"        self.assertNotIn(\u0027supported_perf_events\u0027, primitive)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_27c05050","line":244,"range":{"start_line":244,"start_character":23,"end_line":244,"end_character":51},"updated":"2018-06-21 17:05:30.000000000","message":"Should probably update this now too","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":8823,"context_line":""},{"line_number":8824,"context_line":"        self.assertTrue(return_value.dst_wants_file_backed_memory)"},{"line_number":8825,"context_line":""},{"line_number":8826,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027)"},{"line_number":8827,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027)"},{"line_number":8828,"context_line":"    @mock.patch.object(objects.Service, \u0027get_by_compute_host\u0027)"},{"line_number":8829,"context_line":"    @mock.patch.object(libvirt_driver.LibvirtDriver,"},{"line_number":8830,"context_line":"                       \u0027_create_shared_storage_test_file\u0027)"},{"line_number":8831,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027compareCPU\u0027)"},{"line_number":8832,"context_line":"    def test_check_can_live_migrate_dest_file_backed_discard("},{"line_number":8833,"context_line":"            self, mock_cpu, mock_test_file, mock_svc, mock_lib_version,"},{"line_number":8834,"context_line":"            mock_version):"},{"line_number":8835,"context_line":""},{"line_number":8836,"context_line":"        self.flags(file_backed_memory\u003d1024, group\u003d\u0027libvirt\u0027)"},{"line_number":8837,"context_line":""},{"line_number":8838,"context_line":"        mock_lib_version.return_value \u003d versionutils.convert_version_to_int("},{"line_number":8839,"context_line":"            libvirt_driver.MIN_LIBVIRT_FILE_BACKED_DISCARD_VERSION)"},{"line_number":8840,"context_line":"        mock_version.return_value \u003d versionutils.convert_version_to_int("},{"line_number":8841,"context_line":"            libvirt_driver.MIN_QEMU_FILE_BACKED_DISCARD_VERSION)"},{"line_number":8842,"context_line":""},{"line_number":8843,"context_line":"        instance_ref \u003d objects.Instance(**self.test_instance)"},{"line_number":8844,"context_line":"        instance_ref.vcpu_model \u003d test_vcpu_model.fake_vcpumodel"},{"line_number":8845,"context_line":""},{"line_number":8846,"context_line":"        drvr \u003d libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)"},{"line_number":8847,"context_line":"        compute_info \u003d {\u0027disk_available_least\u0027: 400,"},{"line_number":8848,"context_line":"                        \u0027cpu_info\u0027: \u0027asdf\u0027,"},{"line_number":8849,"context_line":"                        }"},{"line_number":8850,"context_line":""},{"line_number":8851,"context_line":"        filename \u003d \"file\""},{"line_number":8852,"context_line":""},{"line_number":8853,"context_line":"        svc \u003d objects.Service()"},{"line_number":8854,"context_line":"        svc.version \u003d 32"},{"line_number":8855,"context_line":"        mock_svc.return_value \u003d svc"},{"line_number":8856,"context_line":""},{"line_number":8857,"context_line":"        # _check_cpu_match"},{"line_number":8858,"context_line":"        mock_cpu.return_value \u003d 1"},{"line_number":8859,"context_line":"        # mounted_on_same_shared_storage"},{"line_number":8860,"context_line":"        mock_test_file.return_value \u003d filename"},{"line_number":8861,"context_line":"        # No need for the src_compute_info"},{"line_number":8862,"context_line":"        return_value \u003d drvr.check_can_live_migrate_destination(self.context,"},{"line_number":8863,"context_line":"                instance_ref, None, compute_info, False)"},{"line_number":8864,"context_line":""},{"line_number":8865,"context_line":"        self.assertTrue(return_value.dst_wants_file_backed_memory)"},{"line_number":8866,"context_line":"        self.assertTrue(return_value.file_backed_memory_discard)"},{"line_number":8867,"context_line":""},{"line_number":8868,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getVersion\u0027)"},{"line_number":8869,"context_line":"    @mock.patch.object(fakelibvirt.Connection, \u0027getLibVersion\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_078e7426","line":8866,"range":{"start_line":8826,"start_character":0,"end_line":8866,"end_character":64},"updated":"2018-06-21 17:05:30.000000000","message":"These can all be significantly condensed. Something like the following should do the trick:\n\n  def _test_check_can_live_migrate_dest_file_backed_discard(\n         self, libvirt_version, qemu_version, mock_cpu, ...\n         ...):\n\n      self.flags(file_backed_memory\u003d1024, group\u003d\u0027libvirt\u0027)\n\n      mock_lib_version.return_value \u003d versionutils.convert_version_to_int(\n          libvirt_version)\n              mock_version.return_value \u003d versionutils.convert_version_to_int(\n           qemu_version)\n\n      ...\n\n      return return_value\n\n  def test_check_can_live_migrate_dest_file_backed_discard(self):\n      libvirt_version \u003d libvirt_driver.MIN_LIBVIRT_FILE_BACKED_DISCARD_VERSION\n      qemu_version \u003d libvirt_driver.MIN_QEMU_FILE_BACKED_DISCARD_VERSION\n\n      return_value \u003d self._test_check_can_live_migrate_dest_file_backed_discard(\n          libvirt_version, qemu_version)\n\n      self.assertTrue(return_value.dst_wants_file_backed_memory)\n      self.assertTrue(return_value.file_backed_memory_discard)\n\n  ...","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"}],"nova/tests/unit/virt/libvirt/test_migration.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f1816e79d98d6592dba548ae04bf0797ab92e2c","unresolved":false,"context_lines":[{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    def test_update_memory_backing_discard_remove(self):"},{"line_number":623,"context_line":"        data \u003d objects.LibvirtLiveMigrateData("},{"line_number":624,"context_line":"            dst_wants_file_backed_memory\u003dTrue,"},{"line_number":625,"context_line":"            file_backed_memory_discard\u003dFalse)"},{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        xml \u003d \"\"\"\u003cdomain\u003e"},{"line_number":628,"context_line":"  \u003cmemoryBacking\u003e"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_c7acfc89","line":625,"range":{"start_line":624,"start_character":0,"end_line":625,"end_character":45},"updated":"2018-06-21 17:05:30.000000000","message":"nit: switched styles","commit_id":"e9683f143257496bf7c9c033c1a0f60e943cc723"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"800ecc5cd75929e376195dcdf3fd0a2e7393a92c","unresolved":false,"context_lines":[{"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":"MIN_LIBVIRT_FILE_BACKED_DISCARD_VERSION \u003d (4, 4, 0)"},{"line_number":292,"context_line":"MIN_QEMU_FILE_BACKED_DISCARD_VERSION \u003d (2, 10, 0)"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"VGPU_RESOURCE_SEMAPHORE \u003d \"vgpu_resources\""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_933aceca","line":291,"updated":"2018-06-21 13:55:36.000000000","message":"You should make a note of the discard support, what it means, and the version restrictions in the admin guide doc you created before.","commit_id":"bbdd304f1060df6a87914faf3fc4e06918a5266b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3e3be8452de0f8d308e8d8cc504d52b602c351f6","unresolved":false,"context_lines":[{"line_number":6607,"context_line":"        data.disk_available_mb \u003d disk_available_mb"},{"line_number":6608,"context_line":"        data.dst_wants_file_backed_memory \u003d \\"},{"line_number":6609,"context_line":"                CONF.libvirt.file_backed_memory \u003e 0"},{"line_number":6610,"context_line":"        data.file_backed_memory_discard \u003d (CONF.libvirt.file_backed_memory and"},{"line_number":6611,"context_line":"                                    self._host.has_min_version("},{"line_number":6612,"context_line":"                                        MIN_LIBVIRT_FILE_BACKED_DISCARD_VERSION,"},{"line_number":6613,"context_line":"                                        MIN_QEMU_FILE_BACKED_DISCARD_VERSION)"},{"line_number":6614,"context_line":"                                    )"},{"line_number":6615,"context_line":""},{"line_number":6616,"context_line":"        return data"},{"line_number":6617,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_bccc7761","line":6614,"range":{"start_line":6610,"start_character":43,"end_line":6614,"end_character":37},"updated":"2018-06-21 16:09:30.000000000","message":"Can you line this all up on the next line under L6610? Also, please avoid the dangling paren. One of my pet peeves :)","commit_id":"bbdd304f1060df6a87914faf3fc4e06918a5266b"}]}
