Spdk/python/spdk/sma/device/device.py
Konrad Sztyber b7964a3c5a sma: forbid deleting devices with attached volumes
It makes it possible for stateless clients to send CreateDevice /
DeleteDevice each time a volume is attached / detached.  Deleting a
device with attached volumes results in FAILED_PRECONDITION error, which
a client can simply ignore.  The device will be deleted during the final
DeleteDevice call, once all volumes are detached.

We limit this behavior to device types that support AttachVolume /
DetachVolume methods, otherwise it would be impossible to delete such
devices.

Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: I244b2b09455ec1430970c70f3fbb739cc9069754
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15670
Reviewed-by: Jing Yan <jing1.yan@intel.com>
Reviewed-by: Filip Szufnarowski <filip.szufnarowski@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
2022-12-16 09:20:52 +00:00

45 lines
1.1 KiB
Python

# SPDX-License-Identifier: BSD-3-Clause
# Copyright (C) 2022 Intel Corporation.
# All rights reserved.
from ..proto import sma_pb2
class DeviceException(Exception):
def __init__(self, code, message):
self.code = code
self.message = message
class DeviceManager:
def __init__(self, name, protocol, client, allow_delete_volumes=False):
self._client = client
self.protocol = protocol
self.name = name
# Configures whether the device allows deleting a device with attached volumes
self.allow_delete_volumes = allow_delete_volumes
def init(self, config):
pass
def create_device(self, request):
raise NotImplementedError()
def delete_device(self, request):
raise NotImplementedError()
def attach_volume(self, request):
raise NotImplementedError()
def detach_volume(self, request):
raise NotImplementedError()
def owns_device(self, id):
raise NotImplementedError()
def set_qos(self, request):
raise NotImplementedError()
def get_qos_capabilities(self, request):
raise NotImplementedError()