class CephfsClient(Generic[Module_T]):
def __init__(self, mgr: Module_T):
self.mgr = mgr
- self.stopping = Event()
self.connection_pool = CephfsConnectionPool(self.mgr)
- def is_stopping(self) -> bool:
- return self.stopping.is_set()
-
def shutdown(self) -> None:
logger.info("shutting down")
- # first, note that we're shutting down
- self.stopping.set()
# second, delete all libcephfs handles from connection pool
self.connection_pool.del_all_connections()
:param fs_name: fs name
:return: yields a fs handle (ceph filesystem handle)
"""
- if fsc.is_stopping():
- raise CephfsConnectionException(-errno.ESHUTDOWN,
- "shutdown in progress")
-
fs_handle = fsc.connection_pool.get_fs_handle(fs_name)
try:
yield fs_handle
def shutdown(self):
# Overrides CephfsClient.shutdown()
log.info("shutting down")
- # first, note that we're shutting down
- self.stopping.set()
# stop clones
self.cloner.shutdown()
# stop purge threads
### volume operations -- create, rm, ls
def create_fs_volume(self, volname, placement):
- if self.is_stopping():
- return -errno.ESHUTDOWN, "", "shutdown in progress"
return create_volume(self.mgr, volname, placement)
def delete_fs_volume(self, volname, confirm):
- if self.is_stopping():
- return -errno.ESHUTDOWN, "", "shutdown in progress"
-
if confirm != "--yes-i-really-mean-it":
return -errno.EPERM, "", "WARNING: this will *PERMANENTLY DESTROY* all data " \
"stored in the filesystem '{0}'. If you are *ABSOLUTELY CERTAIN* " \
return delete_volume(self.mgr, volname, metadata_pool, data_pools)
def list_fs_volumes(self):
- if self.stopping.is_set():
- return -errno.ESHUTDOWN, "", "shutdown in progress"
volumes = list_volumes(self.mgr)
return 0, json.dumps(volumes, indent=4, sort_keys=True), ""
def rename_fs_volume(self, volname, newvolname, sure):
- if self.is_stopping():
- return -errno.ESHUTDOWN, "", "shutdown in progress"
-
if not sure:
return (
-errno.EPERM, "",