summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorRyan Moeller <[email protected]>2020-02-27 20:14:21 -0500
committerGitHub <[email protected]>2020-02-27 17:14:21 -0800
commit276410387ef40e2c9659729ad6813a2dea3b3aae (patch)
tree81c13ec6ace36edd4d091d2279e9ec36bfeb0b50 /contrib
parent13fac09868b4e4e08cc3ef7b937ac277c1c407b1 (diff)
pyzfs: Add constants for platform-specific errnos
FreeBSD doesn't have EBADE, ECHRNG, or ETIME. Add constants for these and set them appropriately for the platform. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ryan Moeller <[email protected]> Closes #10061
Diffstat (limited to 'contrib')
-rw-r--r--contrib/pyzfs/libzfs_core/_constants.py13
-rw-r--r--contrib/pyzfs/libzfs_core/_error_translation.py9
-rw-r--r--contrib/pyzfs/libzfs_core/exceptions.py9
3 files changed, 25 insertions, 6 deletions
diff --git a/contrib/pyzfs/libzfs_core/_constants.py b/contrib/pyzfs/libzfs_core/_constants.py
index 16057e9b3..e1364aa33 100644
--- a/contrib/pyzfs/libzfs_core/_constants.py
+++ b/contrib/pyzfs/libzfs_core/_constants.py
@@ -19,6 +19,19 @@ Important `libzfs_core` constants.
"""
from __future__ import absolute_import, division, print_function
+import errno
+import sys
+
+
+# Compat for platform-specific errnos
+if sys.platform.startswith('freebsd'):
+ ECHRNG = errno.ENXIO
+ ECKSUM = 97 # EINTEGRITY
+ ETIME = errno.ETIMEDOUT
+else:
+ ECHRNG = errno.ECHRNG
+ ECKSUM = errno.EBADE
+ ETIME = errno.ETIME
# https://stackoverflow.com/a/1695250
diff --git a/contrib/pyzfs/libzfs_core/_error_translation.py b/contrib/pyzfs/libzfs_core/_error_translation.py
index b97bdd89a..7881715c9 100644
--- a/contrib/pyzfs/libzfs_core/_error_translation.py
+++ b/contrib/pyzfs/libzfs_core/_error_translation.py
@@ -33,6 +33,9 @@ import re
import string
from . import exceptions as lzc_exc
from ._constants import (
+ ECHRNG,
+ ECKSUM,
+ ETIME,
MAXNAMELEN,
ZFS_ERR_CHECKPOINT_EXISTS,
ZFS_ERR_DISCARDING_CHECKPOINT,
@@ -462,7 +465,7 @@ def lzc_receive_translate_errors(
raise lzc_exc.ReadOnlyPool(_pool_name(snapname))
if ret == errno.EAGAIN:
raise lzc_exc.SuspendedPool(_pool_name(snapname))
- if ret == errno.EBADE: # ECKSUM
+ if ret == ECKSUM:
raise lzc_exc.BadStream()
if ret == ZFS_ERR_WRONG_PARENT:
raise lzc_exc.WrongParent(_fs_name(snapname))
@@ -550,7 +553,7 @@ def lzc_channel_program_translate_error(ret, name, error):
return
if ret == errno.ENOENT:
raise lzc_exc.PoolNotFound(name)
- if ret == errno.ETIME:
+ if ret == ETIME:
raise lzc_exc.ZCPTimeout()
if ret == errno.ENOMEM:
raise lzc_exc.ZCPMemoryError()
@@ -558,7 +561,7 @@ def lzc_channel_program_translate_error(ret, name, error):
raise lzc_exc.ZCPSpaceError()
if ret == errno.EPERM:
raise lzc_exc.ZCPPermissionError()
- if ret == errno.ECHRNG:
+ if ret == ECHRNG:
raise lzc_exc.ZCPRuntimeError(error)
if ret == errno.EINVAL:
if error is None:
diff --git a/contrib/pyzfs/libzfs_core/exceptions.py b/contrib/pyzfs/libzfs_core/exceptions.py
index 2206c2f2c..9eeab1d7c 100644
--- a/contrib/pyzfs/libzfs_core/exceptions.py
+++ b/contrib/pyzfs/libzfs_core/exceptions.py
@@ -21,6 +21,9 @@ from __future__ import absolute_import, division, print_function
import errno
from ._constants import (
+ ECHRNG,
+ ECKSUM,
+ ETIME,
ZFS_ERR_CHECKPOINT_EXISTS,
ZFS_ERR_DISCARDING_CHECKPOINT,
ZFS_ERR_NO_CHECKPOINT,
@@ -324,7 +327,7 @@ class DestinationModified(ZFSError):
class BadStream(ZFSError):
- errno = errno.EBADE
+ errno = ECKSUM
message = "Bad backup stream"
@@ -532,7 +535,7 @@ class ZCPSyntaxError(ZCPError):
class ZCPRuntimeError(ZCPError):
- errno = errno.ECHRNG
+ errno = ECHRNG
message = "Channel programs encountered a runtime error"
def __init__(self, details):
@@ -545,7 +548,7 @@ class ZCPLimitInvalid(ZCPError):
class ZCPTimeout(ZCPError):
- errno = errno.ETIME
+ errno = ETIME
message = "Channel program timed out"