Skip to content

Commit 4f420ee

Browse files
committed
metadata: improve error messages when vdi_type is missing
Explicit error message pointing to missing vdi_type on SRMetadata update Add a distinction for unpacking corrupted empty metadata headers for easier diagnostic Signed-off-by: Antoine Bartuccio <[email protected]>
1 parent e3e8daf commit 4f420ee

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

drivers/LVHDSR.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ def updateSRMetadata(self, allocation):
262262
for vdi in self.session.xenapi.SR.get_VDIs(self.sr_ref):
263263
vdi_uuid = self.session.xenapi.VDI.get_uuid(vdi)
264264

265+
if self.session.xenapi.VDI.get_sm_config(vdi).get('vdi_type') is None:
266+
raise xs_errors.XenError('MetadataError', opterr=f"Missing vdi_type for vdi {vdi_uuid}")
267+
265268
# Create the VDI entry in the SR metadata
266269
vdi_info[vdi_uuid] = \
267270
{

drivers/srmetadata.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,11 @@ def file_read_wrapper(fd, offset, bytesToRead=METADATA_BLK_SIZE):
138138
([fd, offset, bytesToRead], e.errno))
139139

140140

141-
def to_utf8(s):
141+
def to_utf8(s: str) -> bytes:
142142
return s.encode("utf-8")
143143

144144

145-
def from_utf8(bs):
145+
def from_utf8(bs: bytes) -> str:
146146
return bs.decode("utf-8")
147147

148148

@@ -182,13 +182,15 @@ def buildHeader(length, major=metadata.MD_MAJOR, minor=metadata.MD_MINOR):
182182
+ str(minor))
183183

184184

185-
def unpackHeader(header):
186-
vals = from_utf8(header).split(HEADER_SEP)
185+
def unpackHeader(header: bytes):
186+
decoded = from_utf8(header)
187+
if len(decoded.rstrip('\x00')) == 0:
188+
util.SMlog("Empty metadata header")
189+
raise xs_errors.XenError('MetadataError', opterr='Empty header')
190+
vals = decoded.split(HEADER_SEP)
187191
if len(vals) != 4 or vals[0] != metadata.HDR_STRING:
188-
util.SMlog("Exception unpacking metadata header: "
189-
"Error: Bad header '%s'" % (header))
190-
raise xs_errors.XenError('MetadataError', \
191-
opterr='Bad header')
192+
util.SMlog(f"Exception unpacking metadata header: Error: Bad header {header}")
193+
raise xs_errors.XenError('MetadataError', opterr='Bad header')
192194
return (vals[0], vals[1], vals[2], vals[3])
193195

194196

0 commit comments

Comments
 (0)