include/block/block_int.h | 8 ++- include/block/dirty-bitmap.h | 1 + block/commit.c | 2 + block/dirty-bitmap.c | 13 ++++ block/mirror.c | 2 + migration/block-dirty-bitmap.c | 114 +++++++++++++++++++++++---------- tests/qemu-iotests/194 | 14 ++-- tests/qemu-iotests/194.out | 6 ++ 8 files changed, 119 insertions(+), 41 deletions(-)
Hi all! It's a continuation for "bitmap migration bug with -drive while block mirror runs" <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html The problem is that bitmaps migrated to node with same node-name or blk-parent name. And currently only the latter actually work in libvirt. And with mirror-top filter it doesn't work, because bdrv_get_device_or_node_name don't go through filters. Fix this by handling filtered children of block backends in separate. v2: rebase on current master Max Reitz (1): block: Mark commit and mirror as filter drivers Vladimir Sementsov-Ogievskiy (4): migretion/block-dirty-bitmap: refactor init_dirty_bitmap_migration block/dirty-bitmap: add bdrv_has_named_bitmaps helper migration/block-dirty-bitmap: fix bitmaps migration during mirror job iotests: 194: test also migration of dirty bitmap include/block/block_int.h | 8 ++- include/block/dirty-bitmap.h | 1 + block/commit.c | 2 + block/dirty-bitmap.c | 13 ++++ block/mirror.c | 2 + migration/block-dirty-bitmap.c | 114 +++++++++++++++++++++++---------- tests/qemu-iotests/194 | 14 ++-- tests/qemu-iotests/194.out | 6 ++ 8 files changed, 119 insertions(+), 41 deletions(-) -- 2.21.0
John, I don't quite follow discussion in bugzilla. Do we need these series as at least temporary workaround, or not? Should I resend? 19.12.2019 11:51, Vladimir Sementsov-Ogievskiy wrote: > Hi all! > > It's a continuation for > "bitmap migration bug with -drive while block mirror runs" > <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> > https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html > > The problem is that bitmaps migrated to node with same node-name or > blk-parent name. And currently only the latter actually work in libvirt. > And with mirror-top filter it doesn't work, because > bdrv_get_device_or_node_name don't go through filters. > > Fix this by handling filtered children of block backends in separate. > > v2: rebase on current master > > Max Reitz (1): > block: Mark commit and mirror as filter drivers > > Vladimir Sementsov-Ogievskiy (4): > migretion/block-dirty-bitmap: refactor init_dirty_bitmap_migration > block/dirty-bitmap: add bdrv_has_named_bitmaps helper > migration/block-dirty-bitmap: fix bitmaps migration during mirror job > iotests: 194: test also migration of dirty bitmap > > include/block/block_int.h | 8 ++- > include/block/dirty-bitmap.h | 1 + > block/commit.c | 2 + > block/dirty-bitmap.c | 13 ++++ > block/mirror.c | 2 + > migration/block-dirty-bitmap.c | 114 +++++++++++++++++++++++---------- > tests/qemu-iotests/194 | 14 ++-- > tests/qemu-iotests/194.out | 6 ++ > 8 files changed, 119 insertions(+), 41 deletions(-) > -- Best regards, Vladimir
On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: > Hi all! > > It's a continuation for > "bitmap migration bug with -drive while block mirror runs" > <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> > https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html > > The problem is that bitmaps migrated to node with same node-name or > blk-parent name. And currently only the latter actually work in libvirt. > And with mirror-top filter it doesn't work, because > bdrv_get_device_or_node_name don't go through filters. I want to point out that since libvirt-5.10 we use -blockdev to configure the backend of storage devices with qemu-4.2 and later. This means unfortunately that the BlockBackend of the drive does not have a name any more and thus the above will not work even if you make the lookup code to see through filters. As I've pointed out separately node-names are not good idea to use for matching either as they can be distinct on the destination of migration. Having same node names for images during migration was not documented as a requiremend and even if it was the case when the mirror job is used the destination is a different image and thus having a different node name is expected. Since it's not documented, expect the same situation as with autogenerated nodenames, the destination may have different node-names and the same node-name may refer to a different image. Implicit matching based on node-names is thus impossible.
19.12.2019 13:36, Peter Krempa wrote: > On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >> Hi all! >> >> It's a continuation for >> "bitmap migration bug with -drive while block mirror runs" >> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >> >> The problem is that bitmaps migrated to node with same node-name or >> blk-parent name. And currently only the latter actually work in libvirt. >> And with mirror-top filter it doesn't work, because >> bdrv_get_device_or_node_name don't go through filters. > > I want to point out that since libvirt-5.10 we use -blockdev to > configure the backend of storage devices with qemu-4.2 and later. This > means unfortunately that the BlockBackend of the drive does not have a > name any more and thus the above will not work even if you make the > lookup code to see through filters. Not that this series doesn't make things worse, as it loops through named block backends when trying to use their name for migration. So with these patches applied, qemu will just work in more possible scenarios. > > As I've pointed out separately node-names are not good idea to use for > matching either as they can be distinct on the destination of migration. > > Having same node names for images during migration was not documented as > a requiremend and even if it was the case when the mirror job is used > the destination is a different image and thus having a different node > name is expected. > > Since it's not documented, expect the same situation as with > autogenerated nodenames, the destination may have different node-names > and the same node-name may refer to a different image. Implicit matching > based on node-names is thus impossible. > -- Best regards, Vladimir
On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: > 19.12.2019 13:36, Peter Krempa wrote: > > On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: > > > Hi all! > > > > > > It's a continuation for > > > "bitmap migration bug with -drive while block mirror runs" > > > <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> > > > https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html > > > > > > The problem is that bitmaps migrated to node with same node-name or > > > blk-parent name. And currently only the latter actually work in libvirt. > > > And with mirror-top filter it doesn't work, because > > > bdrv_get_device_or_node_name don't go through filters. > > > > I want to point out that since libvirt-5.10 we use -blockdev to > > configure the backend of storage devices with qemu-4.2 and later. This > > means unfortunately that the BlockBackend of the drive does not have a > > name any more and thus the above will not work even if you make the > > lookup code to see through filters. > > Not that this series doesn't make things worse, as it loops through named > block backends when trying to use their name for migration. So with these > patches applied, qemu will just work in more possible scenarios. Okay, if that's so it's fair enough in this case. I'm just very firmly against baking in the assumption that node names mean the same thing accross migration, because that will create a precedent situation and more stuff may be baked in on top of this in the future. It seems that it has already happened though and it's wrong. And the worst part is that it's never mentioned that this might occur. But again, don't do that and preferrably remove the matching of node names for bitmaps altogether until we can control it arbitrarily. We've also seen this already before with the backend name of memory devices being baked in to the migration stream which creates an unwanted dependancy.
03.04.2020 14:23, Peter Krempa wrote: > On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >> 19.12.2019 13:36, Peter Krempa wrote: >>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>> Hi all! >>>> >>>> It's a continuation for >>>> "bitmap migration bug with -drive while block mirror runs" >>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>> >>>> The problem is that bitmaps migrated to node with same node-name or >>>> blk-parent name. And currently only the latter actually work in libvirt. >>>> And with mirror-top filter it doesn't work, because >>>> bdrv_get_device_or_node_name don't go through filters. >>> >>> I want to point out that since libvirt-5.10 we use -blockdev to >>> configure the backend of storage devices with qemu-4.2 and later. This >>> means unfortunately that the BlockBackend of the drive does not have a >>> name any more and thus the above will not work even if you make the >>> lookup code to see through filters. >> >> Not that this series doesn't make things worse, as it loops through named >> block backends when trying to use their name for migration. So with these >> patches applied, qemu will just work in more possible scenarios. > > Okay, if that's so it's fair enough in this case. > > I'm just very firmly against baking in the assumption that > node names mean the same thing accross migration, because that will > create a precedent situation and more stuff may be baked in on top of > this in the future. It seems that it has already happened though and > it's wrong. And the worst part is that it's never mentioned that this > might occur. But again, don't do that and preferrably remove the > matching of node names for bitmaps altogether until we can control it > arbitrarily. > > We've also seen this already before with the backend name of memory > devices being baked in to the migration stream which creates an unwanted > dependancy. > Hmm. Actually, matching by node-name never worked. May be just drop it now, and allow only matching by blk-name? And then (in 5.1) implement special qmp commands for precise mapping. -- Best regards, Vladimir
03.04.2020 14:29, Vladimir Sementsov-Ogievskiy wrote: > 03.04.2020 14:23, Peter Krempa wrote: >> On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >>> 19.12.2019 13:36, Peter Krempa wrote: >>>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>>> Hi all! >>>>> >>>>> It's a continuation for >>>>> "bitmap migration bug with -drive while block mirror runs" >>>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>>> >>>>> The problem is that bitmaps migrated to node with same node-name or >>>>> blk-parent name. And currently only the latter actually work in libvirt. >>>>> And with mirror-top filter it doesn't work, because >>>>> bdrv_get_device_or_node_name don't go through filters. >>>> >>>> I want to point out that since libvirt-5.10 we use -blockdev to >>>> configure the backend of storage devices with qemu-4.2 and later. This >>>> means unfortunately that the BlockBackend of the drive does not have a >>>> name any more and thus the above will not work even if you make the >>>> lookup code to see through filters. >>> >>> Not that this series doesn't make things worse, as it loops through named >>> block backends when trying to use their name for migration. So with these >>> patches applied, qemu will just work in more possible scenarios. >> >> Okay, if that's so it's fair enough in this case. >> >> I'm just very firmly against baking in the assumption that >> node names mean the same thing accross migration, because that will >> create a precedent situation and more stuff may be baked in on top of >> this in the future. It seems that it has already happened though and >> it's wrong. And the worst part is that it's never mentioned that this >> might occur. But again, don't do that and preferrably remove the >> matching of node names for bitmaps altogether until we can control it >> arbitrarily. >> >> We've also seen this already before with the backend name of memory >> devices being baked in to the migration stream which creates an unwanted >> dependancy. >> > > Hmm. Actually, matching by node-name never worked. May be just drop it now, and allow only matching by blk-name? > > And then (in 5.1) implement special qmp commands for precise mapping. > Hmm, it may break someones setup... Bad idea. Probably we can forbid auto-generated node-names. -- Best regards, Vladimir
* Vladimir Sementsov-Ogievskiy (vsementsov@virtuozzo.com) wrote: > 03.04.2020 14:29, Vladimir Sementsov-Ogievskiy wrote: > > 03.04.2020 14:23, Peter Krempa wrote: > > > On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: > > > > 19.12.2019 13:36, Peter Krempa wrote: > > > > > On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: > > > > > > Hi all! > > > > > > > > > > > > It's a continuation for > > > > > > "bitmap migration bug with -drive while block mirror runs" > > > > > > <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> > > > > > > https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html > > > > > > > > > > > > The problem is that bitmaps migrated to node with same node-name or > > > > > > blk-parent name. And currently only the latter actually work in libvirt. > > > > > > And with mirror-top filter it doesn't work, because > > > > > > bdrv_get_device_or_node_name don't go through filters. > > > > > > > > > > I want to point out that since libvirt-5.10 we use -blockdev to > > > > > configure the backend of storage devices with qemu-4.2 and later. This > > > > > means unfortunately that the BlockBackend of the drive does not have a > > > > > name any more and thus the above will not work even if you make the > > > > > lookup code to see through filters. > > > > > > > > Not that this series doesn't make things worse, as it loops through named > > > > block backends when trying to use their name for migration. So with these > > > > patches applied, qemu will just work in more possible scenarios. > > > > > > Okay, if that's so it's fair enough in this case. > > > > > > I'm just very firmly against baking in the assumption that > > > node names mean the same thing accross migration, because that will > > > create a precedent situation and more stuff may be baked in on top of > > > this in the future. It seems that it has already happened though and > > > it's wrong. And the worst part is that it's never mentioned that this > > > might occur. But again, don't do that and preferrably remove the > > > matching of node names for bitmaps altogether until we can control it > > > arbitrarily. > > > > > > We've also seen this already before with the backend name of memory > > > devices being baked in to the migration stream which creates an unwanted > > > dependancy. > > > > > > > Hmm. Actually, matching by node-name never worked. May be just drop it now, and allow only matching by blk-name? > > > > And then (in 5.1) implement special qmp commands for precise mapping. > > > > Hmm, it may break someones setup... Bad idea. Probably we can forbid auto-generated node-names. If we want to remove it I guess we have to go through a proper deprecation; but that's OK. The thing to keep in mind is that when people say 'the commandline should match' on source/destination - that's just not true; so we have to define what actually needs to stay the same for bitmap migration to work. Dave > -- > Best regards, > Vladimir > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
03.04.2020 18:05, Dr. David Alan Gilbert wrote: > * Vladimir Sementsov-Ogievskiy (vsementsov@virtuozzo.com) wrote: >> 03.04.2020 14:29, Vladimir Sementsov-Ogievskiy wrote: >>> 03.04.2020 14:23, Peter Krempa wrote: >>>> On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>>> 19.12.2019 13:36, Peter Krempa wrote: >>>>>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>>>>> Hi all! >>>>>>> >>>>>>> It's a continuation for >>>>>>> "bitmap migration bug with -drive while block mirror runs" >>>>>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>>>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>>>>> >>>>>>> The problem is that bitmaps migrated to node with same node-name or >>>>>>> blk-parent name. And currently only the latter actually work in libvirt. >>>>>>> And with mirror-top filter it doesn't work, because >>>>>>> bdrv_get_device_or_node_name don't go through filters. >>>>>> >>>>>> I want to point out that since libvirt-5.10 we use -blockdev to >>>>>> configure the backend of storage devices with qemu-4.2 and later. This >>>>>> means unfortunately that the BlockBackend of the drive does not have a >>>>>> name any more and thus the above will not work even if you make the >>>>>> lookup code to see through filters. >>>>> >>>>> Not that this series doesn't make things worse, as it loops through named >>>>> block backends when trying to use their name for migration. So with these >>>>> patches applied, qemu will just work in more possible scenarios. >>>> >>>> Okay, if that's so it's fair enough in this case. >>>> >>>> I'm just very firmly against baking in the assumption that >>>> node names mean the same thing accross migration, because that will >>>> create a precedent situation and more stuff may be baked in on top of >>>> this in the future. It seems that it has already happened though and >>>> it's wrong. And the worst part is that it's never mentioned that this >>>> might occur. But again, don't do that and preferrably remove the >>>> matching of node names for bitmaps altogether until we can control it >>>> arbitrarily. >>>> >>>> We've also seen this already before with the backend name of memory >>>> devices being baked in to the migration stream which creates an unwanted >>>> dependancy. >>>> >>> >>> Hmm. Actually, matching by node-name never worked. May be just drop it now, and allow only matching by blk-name? >>> >>> And then (in 5.1) implement special qmp commands for precise mapping. >>> >> >> Hmm, it may break someones setup... Bad idea. Probably we can forbid auto-generated node-names. > > If we want to remove it I guess we have to go through a proper > deprecation; but that's OK. > > The thing to keep in mind is that when people say 'the commandline > should match' on source/destination - that's just not true; > so we have to define what actually needs to stay the same for bitmap > migration to work. Hmm. Let's add two qmp commands 1. migrate-set-outgoing-bitmap-mapping, which can set mapping (node-name, bitmap-name) -> (migration-node-name, migration-bitmap-name) 2. migrate-set-incoming-bitmap-mapping, which can set mapping (migration-node-name, migration-bitmap-name) -> (node-name, bitmap-name) So, if we want to migrate bitmap B1 from node N1 on source to node M1 on target, we'll have three possibilities: 1. call on source migrate-set-outgoing-bitmap-mapping, to set mapping (N1, B1) -> (M1, B1) (and target will use 'M1' from migration stream to search the node) 2. call on destination migrate-set-incoming-bitmap-mapping, to set mapping (N1, B1) -> (M1, B1) (source will just put 'N1' to migration stream, and target will made transformation) or even 3. Set mapping both on source and target, to make migration stream abstract, for example, (N1, B1) -> ('_abstract_bitmap_migration_node_', <bitmap-id>) -> (M1, B1) Using 1 and 2, it is possible to make any migration to/from older Qemu version.. And what should be deprecated is dirty-bitmaps migration capability, which is associated with old behavior. So, newer libvirt will call set-mapping commands both on source and target, instead of enabling capability. -- Best regards, Vladimir
reviving this thread... On 4/3/20 6:23 AM, Peter Krempa wrote: > On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >> 19.12.2019 13:36, Peter Krempa wrote: >>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>> Hi all! >>>> >>>> It's a continuation for >>>> "bitmap migration bug with -drive while block mirror runs" >>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>> >>>> The problem is that bitmaps migrated to node with same node-name or >>>> blk-parent name. And currently only the latter actually work in libvirt. >>>> And with mirror-top filter it doesn't work, because >>>> bdrv_get_device_or_node_name don't go through filters. >>> >>> I want to point out that since libvirt-5.10 we use -blockdev to >>> configure the backend of storage devices with qemu-4.2 and later. This >>> means unfortunately that the BlockBackend of the drive does not have a >>> name any more and thus the above will not work even if you make the >>> lookup code to see through filters. >> >> Not that this series doesn't make things worse, as it loops through named >> block backends when trying to use their name for migration. So with these >> patches applied, qemu will just work in more possible scenarios. > > Okay, if that's so it's fair enough in this case. > > I'm just very firmly against baking in the assumption that > node names mean the same thing accross migration, because that will > create a precedent situation and more stuff may be baked in on top of > this in the future. It seems that it has already happened though and > it's wrong. And the worst part is that it's never mentioned that this > might occur. But again, don't do that and preferrably remove the > matching of node names for bitmaps altogether until we can control it > arbitrarily. > > We've also seen this already before with the backend name of memory > devices being baked in to the migration stream which creates an unwanted > dependancy. Max is trying to tackle the node-name issue: https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03358.html And trying to apply that patch after staging this series hits a conflict in mnigration/block-dirty-bitmap.c. Which one should go in first? -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
14.05.2020 21:29, Eric Blake wrote: > reviving this thread... > > On 4/3/20 6:23 AM, Peter Krempa wrote: >> On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >>> 19.12.2019 13:36, Peter Krempa wrote: >>>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>>> Hi all! >>>>> >>>>> It's a continuation for >>>>> "bitmap migration bug with -drive while block mirror runs" >>>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>>> >>>>> The problem is that bitmaps migrated to node with same node-name or >>>>> blk-parent name. And currently only the latter actually work in libvirt. >>>>> And with mirror-top filter it doesn't work, because >>>>> bdrv_get_device_or_node_name don't go through filters. >>>> >>>> I want to point out that since libvirt-5.10 we use -blockdev to >>>> configure the backend of storage devices with qemu-4.2 and later. This >>>> means unfortunately that the BlockBackend of the drive does not have a >>>> name any more and thus the above will not work even if you make the >>>> lookup code to see through filters. >>> >>> Not that this series doesn't make things worse, as it loops through named >>> block backends when trying to use their name for migration. So with these >>> patches applied, qemu will just work in more possible scenarios. >> >> Okay, if that's so it's fair enough in this case. >> >> I'm just very firmly against baking in the assumption that >> node names mean the same thing accross migration, because that will >> create a precedent situation and more stuff may be baked in on top of >> this in the future. It seems that it has already happened though and >> it's wrong. And the worst part is that it's never mentioned that this >> might occur. But again, don't do that and preferrably remove the >> matching of node names for bitmaps altogether until we can control it >> arbitrarily. >> >> We've also seen this already before with the backend name of memory >> devices being baked in to the migration stream which creates an unwanted >> dependancy. > > Max is trying to tackle the node-name issue: > https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03358.html > > And trying to apply that patch after staging this series hits a conflict in mnigration/block-dirty-bitmap.c. Which one should go in first? > My patches are needed to fix migration for the pre-blockdev configuration with mirror-top filter. We ofcrouse need them in Virtuozzo, but it's not hard to keep the in downstream-only.. And it will be not simple to use new command from Max in pre-blockdev libvirt configuration, with auto-generated node-names. How much we care about pre-blockdev libvirt now in upstream Qemu? If we don't care, than these series are only for downstreams, and we don't need to apply them upstream.. On the other hand, Max have to resend anyway, to handle old code, which uses device name instead of node-name. And if we don't want to drop now the code which can use device name (needed for old libvirt), why not to apply the series, which just make old code better? ==== In other words: do we still support pre-blockdev libvirt (and any other pre-blockdev users)? If we support, than, as I said somewhere, I need to resend these series as I have updated version in our downstream. And I think, I can rebase Max's patch by myself and send together with this all, if no objections. -- Best regards, Vladimir
15.05.2020 08:52, Vladimir Sementsov-Ogievskiy wrote: > 14.05.2020 21:29, Eric Blake wrote: >> reviving this thread... >> >> On 4/3/20 6:23 AM, Peter Krempa wrote: >>> On Fri, Apr 03, 2020 at 14:02:47 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>> 19.12.2019 13:36, Peter Krempa wrote: >>>>> On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >>>>>> Hi all! >>>>>> >>>>>> It's a continuation for >>>>>> "bitmap migration bug with -drive while block mirror runs" >>>>>> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >>>>>> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >>>>>> >>>>>> The problem is that bitmaps migrated to node with same node-name or >>>>>> blk-parent name. And currently only the latter actually work in libvirt. >>>>>> And with mirror-top filter it doesn't work, because >>>>>> bdrv_get_device_or_node_name don't go through filters. >>>>> >>>>> I want to point out that since libvirt-5.10 we use -blockdev to >>>>> configure the backend of storage devices with qemu-4.2 and later. This >>>>> means unfortunately that the BlockBackend of the drive does not have a >>>>> name any more and thus the above will not work even if you make the >>>>> lookup code to see through filters. >>>> >>>> Not that this series doesn't make things worse, as it loops through named >>>> block backends when trying to use their name for migration. So with these >>>> patches applied, qemu will just work in more possible scenarios. >>> >>> Okay, if that's so it's fair enough in this case. >>> >>> I'm just very firmly against baking in the assumption that >>> node names mean the same thing accross migration, because that will >>> create a precedent situation and more stuff may be baked in on top of >>> this in the future. It seems that it has already happened though and >>> it's wrong. And the worst part is that it's never mentioned that this >>> might occur. But again, don't do that and preferrably remove the >>> matching of node names for bitmaps altogether until we can control it >>> arbitrarily. >>> >>> We've also seen this already before with the backend name of memory >>> devices being baked in to the migration stream which creates an unwanted >>> dependancy. >> >> Max is trying to tackle the node-name issue: >> https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03358.html >> >> And trying to apply that patch after staging this series hits a conflict in mnigration/block-dirty-bitmap.c. Which one should go in first? >> > > My patches are needed to fix migration for the pre-blockdev configuration with mirror-top filter. > > We ofcrouse need them in Virtuozzo, but it's not hard to keep the in downstream-only.. And it will be not simple to use new command from Max in pre-blockdev libvirt configuration, with auto-generated node-names. > > How much we care about pre-blockdev libvirt now in upstream Qemu? > > If we don't care, than these series are only for downstreams, and we don't need to apply them upstream.. > > On the other hand, Max have to resend anyway, to handle old code, which uses device name instead of node-name. And if we don't want to drop now the code which can use device name (needed for old libvirt), why not to apply the series, which just make old code better? > > ==== > > In other words: do we still support pre-blockdev libvirt (and any other pre-blockdev users)? > > If we support, than, as I said somewhere, I need to resend these series as I have updated version in our downstream. And I think, I can rebase Max's patch by myself and send together with this all, if no objections. > I'm going to resend the series today, let's look at it. -- Best regards, Vladimir
On 5/15/20 6:15 AM, Vladimir Sementsov-Ogievskiy wrote: >>> Max is trying to tackle the node-name issue: >>> https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03358.html >>> >>> And trying to apply that patch after staging this series hits a >>> conflict in mnigration/block-dirty-bitmap.c. Which one should go in >>> first? >>> >> >> My patches are needed to fix migration for the pre-blockdev >> configuration with mirror-top filter. >> >> We ofcrouse need them in Virtuozzo, but it's not hard to keep the in >> downstream-only.. And it will be not simple to use new command from >> Max in pre-blockdev libvirt configuration, with auto-generated >> node-names. Carrying a downstream fork forever is more work on you. If the patch is easy enough to maintain, incorporating it upstream is best all around, even if libvirt has moved on to the point of no longer caring since it no longer uses pre-blockdev. >> >> How much we care about pre-blockdev libvirt now in upstream Qemu? >> >> If we don't care, than these series are only for downstreams, and we >> don't need to apply them upstream.. Eventually, we may want to deprecate pre-blockdev, but I don't think we are there yet, and even when it does happen, it will be two more releases with it being deprecated before it is gone, so we might as well make it work correctly in the meantime. >> >> On the other hand, Max have to resend anyway, to handle old code, >> which uses device name instead of node-name. And if we don't want to >> drop now the code which can use device name (needed for old libvirt), >> why not to apply the series, which just make old code better? >> >> ==== >> >> In other words: do we still support pre-blockdev libvirt (and any >> other pre-blockdev users)? >> >> If we support, than, as I said somewhere, I need to resend these >> series as I have updated version in our downstream. And I think, I can >> rebase Max's patch by myself and send together with this all, if no >> objections. >> > > I'm going to resend the series today, let's look at it. > Sounds reasonable. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
15.05.2020 20:51, Eric Blake wrote: > On 5/15/20 6:15 AM, Vladimir Sementsov-Ogievskiy wrote: > >>>> Max is trying to tackle the node-name issue: >>>> https://lists.gnu.org/archive/html/qemu-devel/2020-05/msg03358.html >>>> >>>> And trying to apply that patch after staging this series hits a conflict in mnigration/block-dirty-bitmap.c. Which one should go in first? >>>> >>> >>> My patches are needed to fix migration for the pre-blockdev configuration with mirror-top filter. >>> >>> We ofcrouse need them in Virtuozzo, but it's not hard to keep the in downstream-only.. And it will be not simple to use new command from Max in pre-blockdev libvirt configuration, with auto-generated node-names. > > Carrying a downstream fork forever is more work on you. If the patch is easy enough to maintain, incorporating it upstream is best all around, even if libvirt has moved on to the point of no longer caring since it no longer uses pre-blockdev. I hope not forever, when Rhel moves to node-names, we will do it too (hmm, I don't know, may be future already came, and Rhel8 libvirt is node-name oriented?) Still, yes it's always better to reduce the downstream overhead > >>> >>> How much we care about pre-blockdev libvirt now in upstream Qemu? >>> >>> If we don't care, than these series are only for downstreams, and we don't need to apply them upstream.. > > Eventually, we may want to deprecate pre-blockdev, but I don't think we are there yet, and even when it does happen, it will be two more releases with it being deprecated before it is gone, so we might as well make it work correctly in the meantime. Agree. Better to fix old behavior first, and then do proper deprecation if needed. > >>> >>> On the other hand, Max have to resend anyway, to handle old code, which uses device name instead of node-name. And if we don't want to drop now the code which can use device name (needed for old libvirt), why not to apply the series, which just make old code better? >>> >>> ==== >>> >>> In other words: do we still support pre-blockdev libvirt (and any other pre-blockdev users)? >>> >>> If we support, than, as I said somewhere, I need to resend these series as I have updated version in our downstream. And I think, I can rebase Max's patch by myself and send together with this all, if no objections. >>> >> >> I'm going to resend the series today, let's look at it. >> > > Sounds reasonable. > -- Best regards, Vladimir
19.12.2019 13:36, Peter Krempa wrote: > On Thu, Dec 19, 2019 at 11:51:01 +0300, Vladimir Sementsov-Ogievskiy wrote: >> Hi all! >> >> It's a continuation for >> "bitmap migration bug with -drive while block mirror runs" >> <315cff78-dcdb-a3ce-2742-da3cc9f0ca97@redhat.com> >> https://lists.gnu.org/archive/html/qemu-devel/2019-09/msg07241.html >> >> The problem is that bitmaps migrated to node with same node-name or >> blk-parent name. And currently only the latter actually work in libvirt. >> And with mirror-top filter it doesn't work, because >> bdrv_get_device_or_node_name don't go through filters. > > I want to point out that since libvirt-5.10 we use -blockdev to > configure the backend of storage devices with qemu-4.2 and later. This > means unfortunately that the BlockBackend of the drive does not have a > name any more and thus the above will not work even if you make the > lookup code to see through filters. Should we support qemu-4.2 and later for earlier versions of libvirt? > > As I've pointed out separately node-names are not good idea to use for > matching either as they can be distinct on the destination of migration. > > Having same node names for images during migration was not documented as > a requiremend and even if it was the case when the mirror job is used > the destination is a different image and thus having a different node > name is expected. > > Since it's not documented, expect the same situation as with > autogenerated nodenames, the destination may have different node-names > and the same node-name may refer to a different image. Implicit matching > based on node-names is thus impossible. > So, it's time to implement explicit matching.. I remember we discussed a command to set this matching on source. So we call qmp command on source, which specifies where bitmaps go on target.. Is it OK? Or, is it better to do it symmetrically, calling on source command, which just binds some migration-ids to the bitmaps. And same command on target, to bind these ids to bitmaps on target.. Hmmm. I think better, to still set matching not to ids but to {node_name, bitmap_name} pair, but allow do it either on source or on target (or both), which will allow to migrate from old qemu version without such command to new qemu version which supports it. -- Best regards, Vladimir
© 2016 - 2024 Red Hat, Inc.