Juan Quintela <quint...@redhat.com> writes: > Fabiano Rosas <faro...@suse.de> wrote: >> The script is currently broken when the x-ignore-shared capability is >> used: >> >> Traceback (most recent call last): >> File "./scripts/analyze-migration.py", line 656, in <module> >> dump.read(dump_memory = args.memory) >> File "./scripts/analyze-migration.py", line 593, in read >> section.read() >> File "./scripts/analyze-migration.py", line 163, in read >> self.name = self.file.readstr(len = namelen) >> File "./scripts/analyze-migration.py", line 53, in readstr >> return self.readvar(len).decode('utf-8') >> UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 55: >> invalid start byte >> >> We're currently adding data to the middle of the ram section depending >> on the presence of the capability. As a consequence, any code loading >> the ram section needs to know about capabilities so it can interpret >> the stream. >> >> Skip the byte that's added when x-ignore-shared is used to fix the >> script. >> >> Signed-off-by: Fabiano Rosas <faro...@suse.de> > > Reviewed-by: Juan Quintela <quint...@redhat.com> > >> @@ -582,6 +586,7 @@ def read(self, desc_only = False, dump_memory = False, >> write_memory = False): >> config_desc = self.vmsd_desc.get('configuration') >> section = ConfigurationSection(file, config_desc) >> section.read() >> + ramargs['ignore_shared'] = >> section.has_capability('x-ignore-shared') > > should we consider s/x-ignore-shared/ignore-shared/? >
We can consider s/ignore-shared/x-ignore-shared/ if that's what you mean. The way you suggested doesn't work because the cap name comes from QEMU with the "x-" part in it. If you meant filtering the x out when parsing the capabilities in this script, I think that would cause a sort of a UX issue because we need to use x-ignore-shared to set the cap in QMP/HMP.