)]}'
{"specs/ocata/approved/virt-driver-private-storage.rst":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2f6eeabaa2bcc1a19a58a2e77b970410a34445a2","unresolved":false,"context_lines":[{"line_number":55,"context_line":"In a sane Linux guest, interface A will probably be re-named eth1 and interface B"},{"line_number":56,"context_line":"will probably be renamed eth0. This re-ordering of PCI address will also break"},{"line_number":57,"context_line":"applications that depend on constant ordering."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_c31d3374","line":58,"updated":"2016-09-27 15:56:19.000000000","message":"This is describing a problem, but not really demonstrating why Nova needs to provide persistent storage of arbitrary blobs in the database.\n\nEven for libvirt I don\u0027t think nova needs to be doing this.\n\nWhenever nova creates a libvirt guest, it persists the XML record with libvirt. So even if we stop the guest, libvirt still has a record of the original guest XML config.\n\nThere are two problems with nova currently though\n\n- when re-starting a pre-existing guest, we throw away this previous XML data we persisted with libvirt. Nova just generates a new XML config and persists it again, overwriting what we already there. We need to stop being so stupid in the nova libvirt driver and take advantage of what we already persiste\n\n- certain operations the guest will be stopped on one host and recreated on the second host. In this scenario, we don\u0027t have access to the original libvirt XML we persisted, since its on a different host. For this we could use a mechanism to send the persistent XML config we previously stored, over to the new host. This doesn\u0027t require nova database storage, just something in the RPC args for the methods in question. eg evacuate and resize.","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"05120f46f973c3f0fbb4cc654158e10ac385578c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"In a sane Linux guest, interface A will probably be re-named eth1 and interface B"},{"line_number":56,"context_line":"will probably be renamed eth0. This re-ordering of PCI address will also break"},{"line_number":57,"context_line":"applications that depend on constant ordering."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_fdb3a7e7","line":58,"in_reply_to":"5a8bc5a2_c31d3374","updated":"2016-09-27 19:18:37.000000000","message":"The only exception to this is evacuate, where the source host is unavailable. Your suggestion is definitely more \u0027localised\u0027 and directly fixes the problem, as opposed to the way more general blob-in-db approach, but it doesn\u0027t handle evacuate.\n\nNow we can decide that the evacuate edge case isn\u0027t worth it, because it\u0027s too much hassle to sync the XML in the database with the XML actually running in libvirt, and honestly right now I can\u0027t formulate an argument for either choice. The only thing that comes to mind is that if we leave out evacuate, we\u0027d be saying \"we promise PCI addresses will remain in the same order, except when they won\u0027t.\"","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"cd9e208e4719928f4c7a01e5e4ebb54099311735","unresolved":false,"context_lines":[{"line_number":55,"context_line":"In a sane Linux guest, interface A will probably be re-named eth1 and interface B"},{"line_number":56,"context_line":"will probably be renamed eth0. This re-ordering of PCI address will also break"},{"line_number":57,"context_line":"applications that depend on constant ordering."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_557370b4","line":58,"in_reply_to":"5a8bc5a2_fdb3a7e7","updated":"2016-09-28 09:48:15.000000000","message":"I think it is totally acceptable to say that evacuate is out of scope.\n\nWe\u0027re saying we promise PCI addresses will remain the same for the instance as long it is running normally.  \n\nWhen you get a total host failure which looses your instance, forcing use of evacuation, we are essentially rebuilding the instance from scratch. In this scenario we already can\u0027t guarantee that the local instance emphemeral disks will be the same (unless your emphem disks used RBD storage). IOW evacuate is already more akin to creating the instance from scratch, unlike other commands which are clearly all about managing a pre-existing instance.  So I don\u0027t think  it is unreasonable that addresses change after evacuating during host failure.\n\nEven if we did decide we wanted todo something for evacuate, I think that is only something to be \"fixed\", /after/ we have fixed the rest of the libvirt driver to use the persistent XML stored in libvirt. eg evacuate would always be a special case no matter what.","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"2f6eeabaa2bcc1a19a58a2e77b970410a34445a2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"None."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Data model impact"},{"line_number":81,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_166bdbb7","line":78,"updated":"2016-09-27 15:56:19.000000000","message":"Come on, there\u0027s clearly many alternatives.\n\nI\u0027ve outlined one, which is to use the existing libvirt persistence mechanism that already exists, along with addition to the RPC api args where needed.\n\nAnother option is to explicitly do nothing, and tell people to use the role device tagging metadata to identify devices, not pci addrs or nic names.","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"05120f46f973c3f0fbb4cc654158e10ac385578c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"Alternatives"},{"line_number":76,"context_line":"------------"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"None."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Data model impact"},{"line_number":81,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_bd7cbfec","line":78,"in_reply_to":"5a8bc5a2_166bdbb7","updated":"2016-09-27 19:18:37.000000000","message":"Done","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"3031c207e1a9df9dc576306ac25bbeeb6d8b709e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"-----------------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"This spec proposes a new column instance_extra called"},{"line_number":84,"context_line":"\u0027driver_private\u0027. A corresponding object DriverPrivate is added, with a single"},{"line_number":85,"context_line":"list of objects field. Those objects inherit from a common type and can be"},{"line_number":86,"context_line":"anything a virt driver needs. They are serialized in the \u0027driver_private\u0027 column."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_96dfeb0b","line":84,"updated":"2016-09-27 16:05:03.000000000","message":"How big can this metadata be?  I\u0027d worry that some drivers may want a couple of kb, but others may want mb?","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"05120f46f973c3f0fbb4cc654158e10ac385578c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"-----------------"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"This spec proposes a new column instance_extra called"},{"line_number":84,"context_line":"\u0027driver_private\u0027. A corresponding object DriverPrivate is added, with a single"},{"line_number":85,"context_line":"list of objects field. Those objects inherit from a common type and can be"},{"line_number":86,"context_line":"anything a virt driver needs. They are serialized in the \u0027driver_private\u0027 column."},{"line_number":87,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_631ff6b7","line":84,"in_reply_to":"5a8bc5a2_96dfeb0b","updated":"2016-09-27 19:18:37.000000000","message":"I think megabytes is the wrong order of magnitude here. We need to limit the potential load on the database.","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"3031c207e1a9df9dc576306ac25bbeeb6d8b709e","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"Other virt driver are encouraged to apply this new driver private storage"},{"line_number":132,"context_line":"mechanism for their needs."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"Implementation"},{"line_number":135,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a8bc5a2_76ec1fbb","line":133,"updated":"2016-09-27 16:05:03.000000000","message":"Are there cases when the stored data (e.g. if you store the whole libvirt XML) could potentially mismatch with other Nova metadata?\n\nIs it possible to have two conflicting sources of truth - and what do we do in that case?","commit_id":"faaa49285010c56f79b136b370e435fc3badc9e1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c8da2a5ee36ee9ca12c5f81e5f3162d8491cd7f6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"there is a performance penalty for doing so. Since a significant portion of"},{"line_number":79,"context_line":"users is not interested in constamt PCI address order through a guest\u0027s"},{"line_number":80,"context_line":"lifetime, a new flavor extra spec is proposed, the boolean"},{"line_number":81,"context_line":"\u0027persistent_device_order\u0027. If set to True, it indicates to the virt driver that"},{"line_number":82,"context_line":"the user would like to use driver private storage in order to keep device"},{"line_number":83,"context_line":"address order constant throughout a guest\u0027s lifetime. By default,"},{"line_number":84,"context_line":"\u0027persistent_device_order\u0027 is set to false. The cloud administrator can create"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a8bc5a2_cc50f70d","line":81,"range":{"start_line":81,"start_character":1,"end_line":81,"end_character":24},"updated":"2016-09-27 19:18:33.000000000","message":"The name will most likely not stick, but I needed something to start with.","commit_id":"6afb45b8bb5bcf37a1a8ca12f8466b00d3806bc0"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"c8da2a5ee36ee9ca12c5f81e5f3162d8491cd7f6","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"In the libvirt case, keeping instance XML in the database introduces a"},{"line_number":89,"context_line":"potential confusion in terms of sources of truth. In order to keep instance XML"},{"line_number":90,"context_line":"in the database and on the host in sync, the driver\u0027s _get_guest_xml method is"},{"line_number":91,"context_line":"modified to save the XML in the database every time it\u0027s modified."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Alternatives"},{"line_number":94,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a8bc5a2_ac248bb2","line":91,"range":{"start_line":90,"start_character":54,"end_line":91,"end_character":65},"updated":"2016-09-27 19:18:33.000000000","message":"I\u0027m looking for someone with more libvirt to chime on weather this is at all realistic? Is it enough? Will it murder the database with a ridiculous number of writes?","commit_id":"6afb45b8bb5bcf37a1a8ca12f8466b00d3806bc0"}]}
