On 26/10/15 09:48, Mark Cave-Ayland wrote: > On 06/09/15 12:54, Mark Cave-Ayland wrote: > >> On 06/09/15 09:36, Alexander Graf wrote: >> >>> On 05.09.15 21:51, Mark Cave-Ayland wrote: >>>> Commit 61964 "Add configuration section" broke the analyze-migration.py >>>> script >>>> which terminates due to the unrecognised section. Fix the script by parsing >>>> the contents of the configuration section directly into a new >>>> ConfigurationSection object (although nothing is done with it yet). >>>> >>>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> >>>> --- >>>> scripts/analyze-migration.py | 13 +++++++++++++ >>>> 1 file changed, 13 insertions(+) >>>> >>>> diff --git a/scripts/analyze-migration.py b/scripts/analyze-migration.py >>>> index f6894be..1455387 100755 >>>> --- a/scripts/analyze-migration.py >>>> +++ b/scripts/analyze-migration.py >>>> @@ -252,6 +252,15 @@ class HTABSection(object): >>>> def getDict(self): >>>> return "" >>>> >>>> + >>>> +class ConfigurationSection(object): >>>> + def __init__(self, file): >>>> + self.file = file >>>> + >>>> + def read(self): >>>> + name_len = self.file.read32() >>>> + name = self.file.readstr(len = name_len) >>>> + >>>> class VMSDFieldGeneric(object): >>>> def __init__(self, desc, file): >>>> self.file = file >>>> @@ -474,6 +483,7 @@ class MigrationDump(object): >>>> QEMU_VM_SECTION_FULL = 0x04 >>>> QEMU_VM_SUBSECTION = 0x05 >>>> QEMU_VM_VMDESCRIPTION = 0x06 >>>> + QEMU_VM_CONFIGURATION = 0x07 >>>> QEMU_VM_SECTION_FOOTER= 0x7e >>>> >>>> def __init__(self, filename): >>>> @@ -514,6 +524,9 @@ class MigrationDump(object): >>>> section_type = file.read8() >>>> if section_type == self.QEMU_VM_EOF: >>>> break >>>> + elif section_type == self.QEMU_VM_CONFIGURATION: >>>> + section = ConfigurationSection(file) >>>> + section.read() >>> >>> So since we don't have a normal section header, there is no version >>> field either. That in turn means that the format is determined by the >>> machine version only - bleks. >> >> Yes :( I double-checked the output of a migration file with hexdump and >> confirmed that just the raw fields are included without any additional >> metadata, even though the state is held in a VMStateDescription. >> >>> So if there ever has to be more in the configuration section than the >>> machine name, please move to a more detectable scheme. Ideally something >>> that contains >>> >>> * version >>> * length of dynamically sized fields >>> * lenght of full blob >>> >>> would be ideal, so that we have a chance to at least put code into the >>> analyze script to examine it. >>> >>> For now, I think the hard coded solution in the analyze script is >>> reasonable. >>> >>> However, I think we should print out the name if we find it. It should >>> be as simple as adding a special case for the configuration section in >>> MigrationDump.getDict(). >> >> I did play with adding a separate JSON object for configuration but was >> torn between whether configuration should have its own JSON object >> (better if we include extra fields and metadata as above) or to just >> embed it as a simple "machine" property similar to "page_size". I'll >> wait until we hear back from David/Juan and submit a v2 accordingly. > > Ping again from Juan/David? The analyze-migration.py script is currently > broken without this patch (or another equivalent) applied.
Ping^2? FWIW I've added this to the wiki at http://wiki.qemu.org/Planning/2.5 since without this patch or something similar applied, this feature is completely broken. ATB, Mark.