manila nfs 删除 share 分析

1、mania/share/manager.py 2144行,调用delete_share_instance删除share instance

    def delete_share_instance(self, context, share_instance_id, force=False):
        """Delete a share instance."""
        context = context.elevated()
        share_instance = self._get_share_instance(context, share_instance_id)
        share_server = self._get_share_server(context, share_instance)

        try:
            self.access_helper.update_access_rules(
                context,
                share_instance_id,
                delete_rules="all",
                share_server=share_server
            )
        except exception.ShareResourceNotFound:
            LOG.warning(_LW("Share instance %s does not exist in the "
                            "backend."), share_instance_id)
        except Exception:
            with excutils.save_and_reraise_exception() as exc_context:
                if force:
                    msg = _LE("The driver was unable to delete access rules "
                              "for the instance: %s. Will attempt to delete "
                              "the instance anyway.")
                    LOG.error(msg, share_instance_id)
                    exc_context.reraise = False
                else:
                    self.db.share_instance_update(
                        context,
                        share_instance_id,
                        {‘status‘: constants.STATUS_ERROR_DELETING})

        try:
            self.driver.delete_share(context, share_instance,
                                     share_server=share_server)
        except exception.ShareResourceNotFound:
            LOG.warning(_LW("Share instance %s does not exist in the "
                            "backend."), share_instance_id)
        except Exception:
            with excutils.save_and_reraise_exception() as exc_context:
                if force:
                    msg = _LE("The driver was unable to delete the share "
                              "instance: %s on the backend. Since this "
                              "operation is forced, the instance will be "
                              "deleted from Manila‘s database. A cleanup on "
                              "the backend may be necessary.")
                    LOG.error(msg, share_instance_id)
                    exc_context.reraise = False
                else:
                    self.db.share_instance_update(
                        context,
                        share_instance_id,
                        {‘status‘: constants.STATUS_ERROR_DELETING})

        self.db.share_instance_delete(context, share_instance_id)
        LOG.info(_LI("Share instance %s: deleted successfully."),
                 share_instance_id)

        self._check_delete_share_server(context, share_instance)

2、在2175行,有如下方法

self.driver.delete_share(context, share_instance,
             share_server=share_server)

3、self.driver.delete_share调用mania/share/drivers/generic.py中的delete_share

    def delete_share(self, context, share, share_server=None):
        """Deletes share."""
        helper = self._get_helper(share)
        if not self.driver_handles_share_servers:
            share_server = self.service_instance_manager.get_common_server()
        if self._is_share_server_active(context, share_server):
            helper.remove_export(
                share_server[‘backend_details‘], share[‘name‘])
            self._unmount_device(share, share_server[‘backend_details‘])
            self._detach_volume(self.admin_context, share,
                                share_server[‘backend_details‘])
        # Note(jun): It is an intended breakage to deal with the cases
        # with any reason that caused absence of Nova instances.
        self._deallocate_container(self.admin_context, share)
        self.private_storage.delete(share[‘id‘])

4、generic.py中的delete_share执行如下操作:

  1. remove_export:移除所有nfs export,remove_export位于mania/share/drivers/helpers.py156行,remove_export没有做实际操作,remove_export实际由manager.py中delete_share_instance方法2151行,self.access_helper.update_access_rules完成
  2. 卸载volume文件系统:self._umount_device
  3. 卸载cinder volume:self._detach_volume
  4. 删除cinder volume,保留nova instance,如果有新的share instance 创建,会将保留的nova instance用于提供share instance

5、manager.py中delete_share_instance方法2151行,self.access_helper.update_access_rules 调用,mania/share/access.py中的update_access_rules

    def update_access_rules(self, context, share_instance_id, add_rules=None,
                            delete_rules=None, share_server=None):
        """Update access rules in driver and database for given share instance.

        :param context: current context
        :param share_instance_id: Id of the share instance model
        :param add_rules: list with ShareAccessMapping models or None - rules
        which should be added
        :param delete_rules: list with ShareAccessMapping models, "all", None
        - rules which should be deleted. If "all" is provided - all rules will
        be deleted.
        :param share_server: Share server model or None
        """
        share_instance = self.db.share_instance_get(
            context, share_instance_id, with_share_data=True)
        share_id = share_instance["share_id"]

        @utils.synchronized(
            "update_access_rules_for_share_%s" % share_id, external=True)
        def _update_access_rules_locked(*args, **kwargs):
            return self._update_access_rules(*args, **kwargs)

        _update_access_rules_locked(
            context=context,
            share_instance_id=share_instance_id,
            add_rules=add_rules,
            delete_rules=delete_rules,
            share_server=share_server,
        )

6、update_access_rules通过self._update_access_rules方法,调用self.driver.update_access完成access的删除

7、self.driver.update_access即generic.py中的upate_access,genery.py update_access调用mania/share/drivers/helpers.py中class NFSHelper的upate_access方法完成access的删除

delete_share_instance(manager.py)------>update_access_rules(access.py)
                          |                     |
                          |                     |
                          |                     |
                          |                     ------>upate_access(generic.py)
                          |                     |
                          |                     |
                          |                     |
                          |                     ------>update_access(helpers.py,NFSHelper)
                          |
                          |
                          | 
                          |
                          ------>delete_share(generic.py)
时间: 2024-08-07 04:31:06

manila nfs 删除 share 分析的相关文章

NFS服务日志分析

NFS服务日志分析 在前面几篇博客中介绍的Apache.Ftp和iptable等网络服务,它们的日志都可以详细记录客户端的信息,例如IP地址.访问时间和内容等.而NFS在Linux的发行版中NFS服务的日志功能却很弱,例如某个远程IP地址,在什么时间访问了NFS服务器,在服务器端无法将其信息记录在日志中.但在Unix家族中的Oracle Solaris系统(被Oracle收购前称Sun OS),对NFS日志记录功能相对完善一些,例如与Kerberos V5完美集成,能够为系统提供更好的保密性.

NFS服务详细分析

1. NFS服务介绍 1.1什么是NFS服务 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样,也就是说客户端PC可以挂载NFS服务器所提供的目录并且挂载之后这个目录看起来如同本地的磁盘分区一样,可以使用cp.cd.mv.rm及df等与磁盘相关的命令. 1.2 NFS服务的优缺点 1.2.1优点 a.节省本地存储空间将常用的

待字闺中之删除字符分析

删除字符串中的"b"和"ac",需要满足如下的条件: 1. 字符串只能遍历一次 2. 不能够使用额外的空间 例如: 1. acbac ==> "" 2. aaac ==> aa 3. ababac ==> aa 4. bbbbd ==> d 进一步思考:如何处理aaccac呢,需要做哪些改变呢? 分析 首先要明白从字符串中删除某些字符该如何实现,显而易见我们可以把保留的字符拷贝新的字符串中来实现删除.但是题目要求不能使用额

【代码审计】CLTPHP_v5.5.3后台任意文件删除漏洞分析

  0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chichu/cltphp 默认后台地址: http://127.0.0.1/admin/login/index.html 默认账号密码: 后台登录名:admin  密码:admin123 测试网站首页: 0x01 代码分析 1./app/admin/controller/Database.php  第221

Eclipse 上传 删除 下载 分析 hdfs 上的文件

本篇讲解如何通过Eclipse 编写代码去操作分析hdfs 上的文件. 1.在eclipse 下新建Map/Reduce Project项目.如图:  项目建好后,会默认加载一系列相应的jar包. 下面还有很多包. 2.我们新建Java 类就可以了.代码如下: package org.hadoop.examples; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOExcep

2-5-RHEL6.5搭建NFS服务器案例分析与总结(Red Hat Enterprise Linux Server6.5)@

本节介绍内容: *一.NFS概述 *二.NFS服务器配置 *1.NFS配置文件 *2.选项解析 *3.环境搭建 *4.测试验证 *5.权限总结 三.自动挂载NFS 一.NFS概述 NFS网络文件系统(Network File System),由Sun公司开发,从名字上就能够知道 这个服务是通过网络的方式来共享文件系统,目前RHEL 6上使用的版本为NFSv4,提供有状态的连接,追踪连接状态可以增强安全性,监听端口为TCP2049端口.这里特别提一下rpcbind服务,rpcbind是RPC协议的

install nfs and share file

介绍一下NFS的安装,以及共享文件 NFS(Net File System),通过使用NFS,可以像使用本地文件一样访问远程文件. 它主要解决了数据共享的问题,可以备份容灾. 安装配置 1.以linux ubuntu为例,做nfs server的机器和 nfs client的机器分别安装 "nfs server" 1 sudo apt-get install nfs-kernel-server "nfs client" 1 sudo apt-get install

如何在CentOS 7.2上创建NFS的Share,然后让Client可以访问

讲得详细清楚明白的好文. Setting Up an NFS Server and Client on CentOS 7.2 https://www.howtoforge.com/tutorial/setting-up-an-nfs-server-and-client-on-centos-7/ 原文地址:https://www.cnblogs.com/awpatp/p/8889618.html

如何在Windows 10上访问NFS的share

大致过程是: 1. 开启名为"Services for NFS"的Windows Feature. 2. 如果需要拥有写权限,需要修改注册表. 3. Mount即可. 具体步骤详见下文: https://graspingtech.com/mount-nfs-share-windows-10/ 原文地址:https://www.cnblogs.com/awpatp/p/9835710.html