* All pool, dataset, and nvlist keys must be of type bytes.
Reviewed-by: John Ramsden <johnramsden@riseup.net>
Reviewed-by: Neal Gompa <ngompa@datto.com>
Reviewed-by: loli10K <ezomori.nozomu@gmail.com>
Signed-off-by: John Kennedy <john.kennedy@delphix.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #8096
'@' separates a snapshot name from the rest of the dataset name.
'#' separates a bookmark name from the rest of the dataset name.
'''
- return re.split('[/@#]', name, 1)[0]
+ return re.split(b'[/@#]', name, 1)[0]
def _fs_name(name):
'@' separates a snapshot name from the rest of the dataset name.
'#' separates a bookmark name from the rest of the dataset name.
'''
- return re.split('[@#]', name, 1)[0]
+ return re.split(b'[@#]', name, 1)[0]
def _is_valid_name_component(component):
- allowed = string.ascii_letters + string.digits + '-_.: '
- return component and all(x in allowed for x in component)
+ allowed = string.ascii_letters + string.digits + u'-_.: '
+ return component and all(x in allowed.encode() for x in component)
def _is_valid_fs_name(name):
- return name and all(_is_valid_name_component(c) for c in name.split('/'))
+ return name and all(_is_valid_name_component(c) for c in name.split(b'/'))
def _is_valid_snap_name(name):
- parts = name.split('@')
+ parts = name.split(b'@')
return (len(parts) == 2 and _is_valid_fs_name(parts[0]) and
_is_valid_name_component(parts[1]))
def _is_valid_bmark_name(name):
- parts = name.split('#')
+ parts = name.split(b'#')
return (len(parts) == 2 and _is_valid_fs_name(parts[0]) and
_is_valid_name_component(parts[1]))
if props is None:
props = {}
if key is None:
- key = bytes("")
+ key = b""
else:
key = bytes(key)
if ds_type == 'zfs':
if props is None:
props = {}
if key is None:
- key = bytes("")
+ key = b""
else:
key = bytes(key)
cmd = {
error.
'''
output = {}
- params_nv = nvlist_in({"argv": params})
+ params_nv = nvlist_in({b"argv": params})
with nvlist_out(output) as outnvl:
ret = _lib.lzc_channel_program(
poolname, program, instrlimit, memlimit, params_nv, outnvl)
errors.lzc_channel_program_translate_error(
- ret, poolname, output.get("error"))
- return output.get("return")
+ ret, poolname, output.get(b"error"))
+ return output.get(b"return")
def lzc_channel_program_nosync(
error.
'''
output = {}
- params_nv = nvlist_in({"argv": params})
+ params_nv = nvlist_in({b"argv": params})
with nvlist_out(output) as outnvl:
ret = _lib.lzc_channel_program_nosync(
poolname, program, instrlimit, memlimit, params_nv, outnvl)
errors.lzc_channel_program_translate_error(
- ret, poolname, output.get("error"))
- return output.get("return")
+ ret, poolname, output.get(b"error"))
+ return output.get(b"return")
def lzc_receive_resumable(
if cmdprops is None:
cmdprops = {}
if key is None:
- key = bytes("")
+ key = b""
else:
key = bytes(key)
`innvl` has been replaced by the `force` boolean and `outnvl` has been
conveniently removed since it's not used.
'''
- innvl = nvlist_in({"force": force})
+ innvl = nvlist_in({b"force": force})
with nvlist_out({}) as outnvl:
ret = _lib.lzc_sync(poolname, innvl, outnvl)
errors.lzc_sync_translate_error(ret, poolname)
# only integer properties need to be here
_prop_name_to_type_str = {
- "rewind-request": "uint32",
- "type": "uint32",
- "N_MORE_ERRORS": "int32",
- "pool_context": "int32",
+ b"rewind-request": "uint32",
+ b"type": "uint32",
+ b"N_MORE_ERRORS": "int32",
+ b"pool_context": "int32",
}
try:
type_info.elements[value]
except KeyError as e:
- raise OverflowError('Invalid enum <%s> value %s' %
- (type_info.cname, e.message))
+ raise OverflowError('Invalid enum <%s> value %s: %s' %
+ (type_info.cname, value, e))
else:
_ffi.new(type_name + '*', value)
return _ffi.cast(type_name, value)