CN111796972B - 文件热修复方法、装置、设备及存储介质 - Google Patents
文件热修复方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111796972B CN111796972B CN202010616093.6A CN202010616093A CN111796972B CN 111796972 B CN111796972 B CN 111796972B CN 202010616093 A CN202010616093 A CN 202010616093A CN 111796972 B CN111796972 B CN 111796972B
- Authority
- CN
- China
- Prior art keywords
- file
- read
- data structure
- inode
- repaired
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种文件热修复方法、装置、设备及存储介质,该方法包括:在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取文件读取命令所包含的文件标识;然后判断文件标识对应的预读文件是否属于待修复文件;在预读文件属于待修复文件时,获取预读文件的修复文件;再根据修复文件对预读文件进行修复获得目标文件;最后将目标文件返回至文件读取命令的发起端。由于本发明是在VFS层对文件读取命令进行拦截,从而能够避免底层文件系统的差异在文件热修复过程中引起过多的系统性能消耗,此外通过文件标识来判断文件是否属于待修复的文件,也能够准确地判断文件是否需要被热修复,提高了文件的热修复效率。
Description
技术领域
本发明涉及计算机软件技术领域,尤其涉及一种文件热修复方法、装置、设备及存储介质。
背景技术
目前,在代码文件存在漏洞(bug)时,一种方式是开发人员在后台修复 bug,然后用修复bug的代码文件替换掉原来的代码文件,但这种线下修复并进行文件替换的漏洞修复方案成本较高、效率较低;另一种方式就是采用热修复方案,即以动态加载的方式通过修复好的代码文件来对存在bug的代码文件进行覆盖,进而完成热修复。
现有的热修复方式虽然不需要开发人员在后台进行文件修复,但由于修复过程中需要考虑底层代码文件系统的差异,在修复代码过程中不可避免的需要进行各类代码文件的屏蔽操作,大大损耗了系统性能。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供了一种文件热修复方法、装置、设备及存储介质,旨在解决现有的代码漏洞热修复技术无法有效屏蔽底层文件系统的差异、文件修复操作需要损耗较大的系统性能的技术问题。
为实现上述目的,本发明提供了一种文件热修复方法,所述方法包括以下步骤:
在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
判断所述文件标识对应的预读文件是否属于待修复文件;
在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
根据所述修复文件对所述预读文件进行修复,以获得目标文件;
将所述目标文件返回至所述文件读取命令的发起端。
可选地,所述判断所述文件标识对应的预读文件是否属于待修复文件的步骤,包括:
确定所述文件标识对应的预读文件,并获取所述预读文件对应的inode数据结构;
根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件。
可选地,所述根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件的步骤,包括:
判断所述inode数据结构中是否包含文件更新标识符;
在所述inode数据结构中包含所述文件更新标识符时,判定所述预读文件属于待修复文件;
在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件。
可选地,所述在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件的步骤之后,所述方法还包括:
获取所述预读文件,并将所述预读文件返回至所述文件读取命令的发起端。
可选地,所述将所述目标文件返回至所述文件读取命令的发起端步骤之前,所述方法还包括:
释放所述预读文件以及所述修复文件所占用的内存;
将所述目标文件写入指定磁盘,并释放所述目标文件所占用的内存。
可选地,所述在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识的步骤之前,所述方法还包括:
在接收到文件修复指令时,根据所述文件修复指令确定待修复的文件;
为所述待修复的文件创建对应的inode数据结构,并在所述inode数据结构中写入文件更新标识符。
可选地,所述为所述待修复的文件创建对应的inode数据结构,并在所述 inode数据结构中写入文件更新标识符的步骤,包括:
在inode节点列表中确定所述待修复的文件对应的目标inode节点;
根据所述目标inode节点创建inode数据结构,并在所述inode数据结构中写入文件更新标识符。
可选地,所述判断所述文件标识对应的预读文件是否属于待修复文件的步骤之前,所述方法还包括:
根据所述文件标识确定预读文件,并查找所述预读文件对应的待访问 inode节点;
读取所述待访问inode节点中存放的文件访问权限信息;
根据所述文件访问权限信息对所述文件读取命令的发起端进行权限校验;
在权限校验通过时,执行判断所述文件标识对应的预读文件是否属于待修复文件的步骤。
可选地,所述查找所述预读文件对应的待访问inode节点的步骤,包括:
从内存中读取inode数据结构链表;
根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点。
可选地,所述根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
获取所述inode数据结构链表的链表长度;
在检测到所述链表长度超过预设链表长度时,对所述inode数据结构链表进行分段,获得若干个inode数据结构块;
根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问inode节点。
可选地,所述根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
根据所述文件标识采用异步操作调用不同的线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
可选地,所述根据所述文件标识采用异步操作调用不同的线程对所述 inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
获取所述内存的当前可用线程;
对所述当前可用线程进行筛选,获得有效线程;
根据所述文件标识采用异步操作调用所述有效线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
可选地,所述对所述当前可用线程进行筛选,获得有效线程的步骤,包括:
获取所述当前可用线程对应的繁忙度,并按从小到大的顺序对获取的所述繁忙度进行排序,获得排序结果;
获取所述inode数据结构块对应的数量;
根据所述排序结果从所述当前可用线程中选取所述数量的有效线程。
此外,为实现上述目的,本发明还提出一种文件热修复装置,所述文件热修复装置包括:
命令拦截模块,用于在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
文件判断模块,用于判断所述文件标识对应的预读文件是否属于待修复文件;
文件读取模块,用于在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
文件修复模块,用于根据所述修复文件对所述预读文件进行修复,以获得目标文件;
文件返回模块,用于将所述目标文件返回至所述文件读取命令的发起端。
此外,为实现上述目的,本发明还提出一种文件热修复设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的文件热修复程序,所述文件热修复程序配置为实现如上文所述的文件热修复方法的步骤。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有文件热修复程序,所述文件热修复程序被处理器执行时实现如上文所述的文件热修复方法的步骤。
本发明通过在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取文件读取命令所包含的文件标识;然后判断文件标识对应的预读文件是否属于待修复文件;在预读文件属于待修复文件时,获取预读文件的修复文件;再根据修复文件对预读文件进行修复获得目标文件;最后将目标文件返回至文件读取命令的发起端。由于本发明是在VFS层对文件读取命令进行拦截,从而能够避免底层文件系统的差异在文件热修复过程中引起过多的系统性能消耗,此外通过文件标识来判断文件是否属于待修复的文件,也能够准确地判断文件是否需要被热修复,提高了文件的热修复效率。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的文件热修复设备的结构示意图;
图2为本发明文件热修复方法第一实施例的流程示意图;
图3为本发明文件热修复方法第二实施例的流程示意图;
图4为本发明文件热修复方法第三实施例的流程示意图;
图5为本发明文件热修复方法第三实施例的流程示意图;
图6为本发明文件热修复装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的文件热修复设备结构示意图。
如图1所示,该文件热修复设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘 (Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(WIreless-FIdelity,WI-FI)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM)存储器,也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对文件热修复设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、数据存储模块、网络通信模块、用户接口模块以及文件热修复程序。
在图1所示的文件热修复设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明文件热修复设备中的处理器1001、存储器1005可以设置在文件热修复设备中,所述文件热修复设备通过处理器1001调用存储器1005中存储的文件热修复程序,并执行本发明实施例提供的文件热修复方法。
本发明实施例提供了一种文件热修复方法,参照图2,图2为本发明文件热修复方法第一实施例的流程示意图。
本实施例中,所述文件热修复方法包括以下步骤:
步骤S10:在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
需要说明的是,本实施例提供的文件热修复方法可应用于任何集成有虚拟文件系统(Virtual File System,VFS)的计算服务设备或系统(以下简称热修复设备)中。所述文件读取命令即携带有待读取的文件(或预读文件)的文件标识的计算机指令。所述文件标识可以是能够表征文件唯一性的标识字段和字符,例如文件名、文件存放路径或是文件编码等。
可理解的是,所谓热修复是相对于正常的版本迭代修复而言,它可以及时在应用内下载补丁更新程序逻辑修复bug,而不需要等到下一个版本发布。为了实现文件的热修复,避免底层文件系统的差异在文件热修复过程中引起过多的系统性能消耗,本实施例将在VFS层对接收到的文件读取命令进行拦截。
在具体实现中,热修复设备在接收到文件读取命令时,将在虚拟文件系统层对命令进行拦截,然后提取文件读取命令所包含的文件标识。
步骤S20:判断所述文件标识对应的预读文件是否属于待修复文件;
可理解的是,实际操作中为了准确地判断文件读取命令想要读取的文件是否属于待修复或待更新的文件,可预先在热修复设备中维护一个文件更新列表,用以存放所有待修复或待更新的文件的文件标识,当某个文件的文件标识出现在文件更新列表中时,表明该文件属于待修复或待更新的文件;反之,则表明该文件不属于待修复或待更新的文件,或者是已经修复或更新完成的文件。
在具体实现中,热修复设备可根据获取到的文件标识确定当前需要读取的文件,即所述预读文件,然后再通过上述文件更新列表去判断该预读文件是否属于待修复的文件。
当然,考虑到文件更新列表的维护和查询在待修复或待更新的文件数量较大时可能会占用过多的内存资源,本实施例热修复设备在判断预读文件是否属于待修复文件时,还可通过以下方式来实现:
具体的,考虑到在文件存储系统中无论文件是否属于待修复的文件,其所在系统的内存中都会存在相应的VFS inode节点(结点)以记录文件的相关信息,但每个文件对应的inode数据结构则并非是一直存在于系统内存中,这些inode数据结构只有在文件被访问时(例如被读取、写入或执行时)才会在内存中建立,因此对于已存在inode数据结构的文件,当开发人员确定需要对其进行热修复时,可以在该文件对应的inode数据结构中标记出它属于要被修复的文件,以使得该文件后续被访问时,由热修复设备直接对其进行热修复,然后基于热修复后的文件对进行请求响应。
步骤S30:在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
需要说明的是,所述修复文件,即diff文件,diff文件中通常包含有将旧版本的源代码更新为新版本的源代码的diff命令。
例如,diff命令:
---sources-orig/代码文件a。
+++sources-fixed/代码文件a。
上述diff命令中,前缀“---”表示在原文件里存在而在新文件里不存在的行将会从源代码里被“减去”;而前缀“+++”表示在新文件里需要被“加上”的行。sources-orig表示原代码所在的目录,sources-fixed表示修改后的代码所在的目录,代码文件a表示待修复或待更新的代码文件。
本实施例热修复设备在确定出预读文件属于待修复文件时,将在内存中读入预读文件和该预读文件对应的diff文件,然后根据diff文件对预读文件进行热修复。
步骤S40:根据所述修复文件对所述预读文件进行修复,以获得目标文件;
应理解的是,在实际修复过程中,热修复设备需要先对修复文件进行解析,获取其中包含的diff命令,然后根据diff命令中的命令字段确定预读文件中哪些代码是需要进行更新或修复,以及采用什么样的方式来更新或修复;最后再基于这些方式对预读文件中的这些需要更新或修复的代码进行更新或修复。
需要说明的是,本实施例对预读文件进行的修复操作均在内存中进行,在获得目标文件后,热修复设备即可释放预读文件以及修复文件所占用的内存,同时还在将获得的目标文件写入指定磁盘后,释放该目标文件所占用的内存。
步骤S50:将所述目标文件返回至所述文件读取命令的发起端。
应理解的是,热修复设备在将预读文件修复为目标文件后,即可将修复后的目标文件返回至发送该文件读取命令的发起端,从而能够在用户无感的情况下实现对文件的线上修复,保证了被修复的文件所在系统的稳定运行。
本实施例通过在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取文件读取命令所包含的文件标识;然后判断文件标识对应的预读文件是否属于待修复文件;在预读文件属于待修复文件时,获取预读文件的修复文件;再根据修复文件对预读文件进行修复获得目标文件;最后将目标文件返回至文件读取命令的发起端。由于本实施例是在VFS层对文件读取命令进行拦截,从而能够避免底层文件系统的差异在文件热修复过程中引起过多的系统性能消耗,此外通过文件标识来判断文件是否属于待修复的文件,也能够准确地判断文件是否需要被热修复,提高了文件的热修复效率。
参考图3,图3为本发明文件热修复方法第二实施例的流程示意图。
基于上述第一实施例,在本实施例中,所述步骤S20包括:
步骤S201:确定所述文件标识对应的预读文件,并获取所述预读文件对应的inode数据结构;
应理解的是,inode即索引节点,它可以用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等。inode分为内存中的inode和文件系统中的inode,内存中的inode即VFS inode。VFS inode中通常包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。
可理解的是,每个文件(和目录)都有且只有一个对应的inode,但inode 数据结构只有在文件被访问时才会建立,因此在对文件进行热修复前,需要先查找文件是否存在对应的inode数据结构,如果不存在就需要先为该文件创建一个inode数据结构。实际操作中为了对inode数据结构进行集中管理,不同文件的inode数据结构会形成一个链表,因此热修复设备在获取预读文件对应的inode数据结构时,可通过查询该链表来实现。
步骤S202:根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件。
需要说明的是,为了合理利用预读文件所在系统的现有资源,本实施例对需要进行更新或修复的文件,将预先在其对应的inode数据结构中写入一些能够表明该文件需要更新或修复的数据(例如某些特定的标识或字符),以使热修复设备可根据inode数据结构中存放的数据判断预读文件是否属于待修复文件。
进一步地,为了降低热修复设备的识别工作,可将用于判断所有的文件是否属于待修复文件的上述数据统一成某一个固定的文件更新标识符,使得修复设备可通过判断所述inode数据结构中是否包含文件更新标识符;在所述 inode数据结构中包含所述文件更新标识符时,判定所述预读文件属于待修复文件;在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件。
可理解的是,对于不属于待修复文件的预读文件,热修复设备可立即获取所述预读文件,并将所述预读文件返回至所述文件读取命令的发起端,以实现对接收到的文件读取命令的快速响应。
进一步地,为了能够更好的实现本实施例提供的文件热修复方法,本实施例在上述步骤S10之前,还包括以下步骤:
步骤S01:在接收到文件修复指令时,根据所述文件修复指令确定待修复的文件;
在实际应用中,当开发人员发现需要对某一个文件进行更新或修复时,可通过热修复设备的人机交互模块触发相应的文件修复指令,所述文件修复指令中需携带用于确定待修复的文件的文件标识,例如文件名称、存放路径等。
步骤S02:为所述待修复的文件创建对应的inode数据结构,并在所述 inode数据结构中写入文件更新标识符。
应理解的是,实际应用中,文件对应的inode节点都存放于inode节点列表中,因此在为待修复的文件创建inode数据结构时,需要先在inode节点列表中确定所述待修复的文件对应的目标inode节点;然后根据所述目标inode 节点创建inode数据结构;最后在所述inode数据结构中写入文件更新标识符。
本实施例通过预先在待修复的文件的inode数据结构中写入文件更新标识符,使得在接收到待修复的文件的文件读取命令时,通过查询文件的inode 数据结构中是否存放有上述文件更新标识符来判断预读文件是否需要被修复,能够保证文件修复的准确度以及修复效率。
参考图4,图4为本发明文件热修复方法第三实施例的流程示意图。
基于上述各实施例,在本实施例中,所述步骤S20之前,所述方法还包括:
步骤S101:根据所述文件标识确定预读文件,并查找所述预读文件对应的待访问inode节点;
应理解的是,为了保证文件读取的安全性,热修复设备对文件读取对象都将进行访问权限的校验。考虑到每个文件的VFS inode都中存放有文件访问权限相关的信息,因此在获取到文件读取命令中的文件标识后,热修复设备可根据所述文件标识确定预读文件,然后再确定该预读文件所属的inode节点,即所述待访问inode节点。
步骤S102:读取所述待访问inode节点中存放的文件访问权限信息;
在具体实现中,热修复设备在确定出所述待访问inode节点后,即可从待访问inode节点中存放的文件访问权限信息。
步骤S103:根据所述文件访问权限信息对所述文件读取命令的发起端进行权限校验;
应理解的是,文件访问权限通常可包括文件的读权限、写权限以及执行权限等。本实施例由于热修复设备接收到的是文件读取命令,因此热修复设备将对文件读取命令的发起端进行读权限的校验,即校验该发起端是否拥有预读文件的读取权限。
在具体实现中,热修复设备可从所述文件访问权限信息中提取对应的文件权限描述符,然后根据所述文件权限描述符中记录的权限字段rwx(分别是 read:读,write:写,execute:执行)来对文件读取命令的发起端进行权限校验。
步骤S104:在权限校验通过时,执行判断所述文件标识对应的预读文件是否属于待修复文件的步骤。
可理解的是,在权限校验通过时,表明文件读取命令的发起端能够读取所述预读文件,此时热修复设备即可开始判断预读文件是否属于待修复文件,然后根据判断结果执行相应的操作。
本实施例在接收到文件读取命令时,通过文件的inode节点中存放的文件访问权限信息来进行文件访问权限的校验,能够确保文件读取的安全性和可靠性。
基于上述各实施例,提出本发明文件热修复方法第四实施例。
参考图5,图5为本发明文件热修复方法第四实施例的流程示意图。
在本实施例中,所述步骤S101可具体包括以下步骤:
步骤S1011:从内存中读取inode数据结构链表;
需要说明的是,所述inode数据结构链表即由每个文件对应的inode数据结构构成的链表,该链表通常存放在内存中。
在实际应用中,热修复设备可以通过遍历这个链表去确定预读文件存放在哪一个inode结点。
步骤S1012:根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点。
应理解的是,每个文件的inode数据结构中都存放有文件相关的信息,因此热修复设备可先根据文件标识从inode数据结构中查找出inode数据结构,然后再根据查找到的inode数据结构确定预读文件对应的待访问inode节点。
进一步地,考虑到在文件数量较多的设备或系统中,inode数据结构链表可能较长,若采用顺序遍历或倒序遍历的方式对inode数据结构链表进行遍历将会耗费较多的时间,不利于文件的快速读取和访问权限的快速校验。
为克服上述缺陷,本实施例中热修复设备可先获取所述inode数据结构链表的链表长度;然后在检测到所述链表长度超过预设链表长度时,对所述inode 数据结构链表进行分段,获得若干个inode数据结构块;最后根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问inode 节点。
需要说明的是,所述链表长度可以是整个链表所占的字节数,链表长度越大,表明链表所包含的inode数据结构越多,为了快速的确定出待访问inode 节点,本实施例热修复设备在检查到链表长度超过预设链表长度时,将对inode 数据结构链表进行分段,获得若干个inode数据结构块;然后再分别对inode 数据结构块进行遍历,来确定预读文件对应的待访问inode节点。
进一步地,为了提高对inode数据结构块的遍历效率,本实施例热修复设备还可根据所述文件标识采用异步操作调用不同的线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
应理解的是,所述异步操作即并行处理机制,通过采用并行处理机制调用不同的线程分别来对inode数据结构块进行遍历,能够极大的提高遍历效率。
考虑到通常情况下内存中的可用线程有很多,其中的某些线程当前可能是被占用的状态,另外一些线程可能是空闲状态。为了进一步提高遍历效率,作为一种实施方式,本实施例热修复设备还可以获取所述内存的当前可用线程;然后对所述当前可用线程进行筛选,获得有效线程;再根据所述文件标识采用异步操作调用所述有效线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。其中,对当前可用线程的筛选可以是根据线程的当前工作状态,例如占用、空闲等来进行筛选,也可以是根据线程在过去某段时间内的平均历史任务处理效率来进行筛选,还可以是根据线程的繁忙度来进行筛选。
作为一种实施方式,本实施例中热修复设备可获取所述当前可用线程对应的繁忙度,并按从小到大的顺序对获取的所述繁忙度进行排序,获得排序结果;然后获取所述inode数据结构块对应的数量;再根据所述排序结果从所述当前可用线程中选取所述数量的有效线程。其中,所述繁忙度可以根据线程当前待处理的任务的数量来确定,任务数量越多繁忙度越高。
本实施例根据获取的文件标识对inode数据结构链表进行遍历能够快速准确地确定预读文件对应的inode节点,提高了文件访问权限信息的获取效率。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有文件热修复程序,所述文件热修复程序被处理器执行时实现如上文所述的文件热修复方法的步骤。
参照图6,图6为本发明文件热修复装置第一实施例的结构框图。
如图6所示,本发明实施例提出的文件热修复装置包括:
命令拦截模块601,用于在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
文件判断模块602,用于判断所述文件标识对应的预读文件是否属于待修复文件;
文件读取模块603,用于在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
文件修复模块604,用于根据所述修复文件对所述预读文件进行修复,以获得目标文件;
文件返回模块605,用于将所述目标文件返回至所述文件读取命令的发起端。
本实施例通过在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取文件读取命令所包含的文件标识;然后判断文件标识对应的预读文件是否属于待修复文件;在预读文件属于待修复文件时,获取预读文件的修复文件;再根据修复文件对预读文件进行修复获得目标文件;最后将目标文件返回至文件读取命令的发起端。由于本实施例是在VFS层对文件读取命令进行拦截,从而能够避免底层文件系统的差异在文件热修复过程中引起过多的系统性能消耗,此外通过文件标识来判断文件是否属于待修复的文件,也能够准确地判断文件是否需要被热修复,提高了文件的热修复效率。
基于本发明上述文件热修复装置第一实施例,提出本发明文件热修复装置的其他实施例。
作为一种实施方式,所述文件判断模块602,还用于确定所述文件标识对应的预读文件,并获取所述预读文件对应的inode数据结构;根据所述inode 数据结构中存放的数据判断所述预读文件是否属于待修复文件。
作为一种实施方式,所述文件判断模块602,还用于判断所述inode数据结构中是否包含文件更新标识符;在所述inode数据结构中包含所述文件更新标识符时,判定所述预读文件属于待修复文件;在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件。
作为一种实施方式,所述文件判断模块602,还用于获取所述预读文件,并将所述预读文件返回至所述文件读取命令的发起端。
作为一种实施方式,所述文件返回模块605,还用于释放所述预读文件以及所述修复文件所占用的内存;将所述目标文件写入指定磁盘,并释放所述目标文件所占用的内存。
作为一种实施方式,所述文件修复模块604,还用于在接收到文件修复指令时,根据所述文件修复指令确定待修复的文件;为所述待修复的文件创建对应的inode数据结构,并在所述inode数据结构中写入文件更新标识符。
作为一种实施方式,所述文件修复模块604,还用于在inode节点列表中确定所述待修复的文件对应的目标inode节点;根据所述目标inode节点创建 inode数据结构,并在所述inode数据结构中写入文件更新标识符。
作为一种实施方式,所述命令拦截模块601,还用于根据所述文件标识确定预读文件,并查找所述预读文件对应的待访问inode节点;读取所述待访问 inode节点中存放的文件访问权限信息;根据所述文件访问权限信息对所述文件读取命令的发起端进行权限校验;在权限校验通过时,执行判断所述文件标识对应的预读文件是否属于待修复文件的步骤。
作为一种实施方式,所述命令拦截模块601,还用于从内存中读取inode 数据结构链表;根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点。
作为一种实施方式,所述命令拦截模块601,还用于获取所述inode数据结构链表的链表长度;在检测到所述链表长度超过预设链表长度时,对所述 inode数据结构链表进行分段,获得若干个inode数据结构块;根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问 inode节点。
作为一种实施方式,所述命令拦截模块601,还用于根据所述文件标识采用异步操作调用不同的线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
作为一种实施方式,所述命令拦截模块601,还用于获取所述内存的当前可用线程;对所述当前可用线程进行筛选,获得有效线程;根据所述文件标识采用异步操作调用所述有效线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
作为一种实施方式,所述命令拦截模块601,还用于获取所述当前可用线程对应的繁忙度,并按从小到大的顺序对获取的所述繁忙度进行排序,获得排序结果;获取所述inode数据结构块对应的数量;根据所述排序结果从所述当前可用线程中选取所述数量的有效线程。
本发明文件热修复装置的其他实施例或具体实现方式可参照上述各方法实施例,此处不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器/随机存取存储器、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (20)
1.一种文件热修复方法,其特征在于,所述文件热修复方法包括:
在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
判断所述文件标识对应的预读文件是否属于待修复文件;
在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
根据所述修复文件对所述预读文件进行修复,以获得目标文件;
将所述目标文件返回至所述文件读取命令的发起端。
2.如权利要求1所述的文件热修复方法,其特征在于,所述判断所述文件标识对应的预读文件是否属于待修复文件的步骤,包括:
确定所述文件标识对应的预读文件,并获取所述预读文件对应的inode数据结构;
根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件。
3.如权利要求2所述的文件热修复方法,其特征在于,所述根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件的步骤,包括:
判断所述inode数据结构中是否包含文件更新标识符;
在所述inode数据结构中包含所述文件更新标识符时,判定所述预读文件属于待修复文件;
在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件。
4.如权利要求3所述的文件热修复方法,其特征在于,所述在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件的步骤之后,所述方法还包括:
获取所述预读文件,并将所述预读文件返回至所述文件读取命令的发起端。
5.如权利要求1所述的文件热修复方法,其特征在于,所述将所述目标文件返回至所述文件读取命令的发起端步骤之前,所述方法还包括:
释放所述预读文件以及所述修复文件所占用的内存;
将所述目标文件写入指定磁盘,并释放所述目标文件所占用的内存。
6.如权利要求1所述的文件热修复方法,其特征在于,所述在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识的步骤之前,所述方法还包括:
在接收到文件修复指令时,根据所述文件修复指令确定待修复的文件;
为所述待修复的文件创建对应的inode数据结构,并在所述inode数据结构中写入文件更新标识符。
7.如权利要求6所述的文件热修复方法,其特征在于,所述为所述待修复的文件创建对应的inode数据结构,并在所述inode数据结构中写入文件更新标识符的步骤,包括:
在inode节点列表中确定所述待修复的文件对应的目标inode节点;
根据所述目标inode节点创建inode数据结构,并在所述inode数据结构中写入文件更新标识符。
8.如权利要求1至7任一项所述的文件热修复方法,其特征在于,所述判断所述文件标识对应的预读文件是否属于待修复文件的步骤之前,所述方法还包括:
根据所述文件标识确定预读文件,并查找所述预读文件对应的待访问inode节点;
读取所述待访问inode节点中存放的文件访问权限信息;
根据所述文件访问权限信息对所述文件读取命令的发起端进行权限校验;
在权限校验通过时,执行判断所述文件标识对应的预读文件是否属于待修复文件的步骤。
9.如权利要求8所述的文件热修复方法,其特征在于,所述查找所述预读文件对应的待访问inode节点的步骤,包括:
从内存中读取inode数据结构链表;
根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点。
10.如权利要求9所述的文件热修复方法,其特征在于,所述根据所述文件标识对所述inode数据结构链表进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
获取所述inode数据结构链表的链表长度;
在检测到所述链表长度超过预设链表长度时,对所述inode数据结构链表进行分段,获得若干个inode数据结构块;
根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问inode节点。
11.如权利要求10所述的文件热修复方法,其特征在于,所述根据所述文件标识对所述inode数据结构块进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
根据所述文件标识采用异步操作调用不同的线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
12.如权利要求11所述的文件热修复方法,其特征在于,所述根据所述文件标识采用异步操作调用不同的线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点的步骤,包括:
获取所述内存的当前可用线程;
对所述当前可用线程进行筛选,获得有效线程;
根据所述文件标识采用异步操作调用所述有效线程对所述inode数据结构块分别进行遍历,以确定所述预读文件对应的待访问inode节点。
13.如权利要求12所述的文件热修复方法,其特征在于,所述对所述当前可用线程进行筛选,获得有效线程的步骤,包括:
获取所述当前可用线程对应的繁忙度,并按从小到大的顺序对获取的所述繁忙度进行排序,获得排序结果;
获取所述inode数据结构块对应的数量;
根据所述排序结果从所述当前可用线程中选取所述数量的有效线程。
14.一种文件热修复装置,其特征在于,所述文件热修复装置包括:
命令拦截模块,用于在虚拟文件系统层对接收到的文件读取命令进行拦截,并获取所述文件读取命令所包含的文件标识;
文件判断模块,用于判断所述文件标识对应的预读文件是否属于待修复文件;
文件读取模块,用于在所述预读文件属于待修复文件时,获取所述预读文件的修复文件;
文件修复模块,用于根据所述修复文件对所述预读文件进行修复,以获得目标文件;
文件返回模块,用于将所述目标文件返回至所述文件读取命令的发起端。
15.如权利要求14所述的文件热修复装置,其特征在于,所述文件判断模块,还用于确定所述文件标识对应的预读文件,并获取所述预读文件对应的inode数据结构;根据所述inode数据结构中存放的数据判断所述预读文件是否属于待修复文件。
16.如权利要求15所述的文件热修复装置,其特征在于,所述文件判断模块,还用于判断所述inode数据结构中是否包含文件更新标识符;在所述inode数据结构中包含所述文件更新标识符时,判定所述预读文件属于待修复文件;在所述inode数据结构中未包含所述文件更新标识符时,判定所述预读文件不属于待修复文件。
17.如权利要求16所述的文件热修复装置,其特征在于,所述文件判断模块,还用于获取所述预读文件,并将所述预读文件返回至所述文件读取命令的发起端。
18.如权利要求14所述的文件热修复装置,其特征在于,所述文件返回模块,还用于释放所述预读文件以及所述修复文件所占用的内存;将所述目标文件写入指定磁盘,并释放所述目标文件所占用的内存。
19.一种文件热修复设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的文件热修复程序,所述文件热修复程序配置为实现如权利要求1至13中任一项所述的文件热修复方法的步骤。
20.一种存储介质,其特征在于,所述存储介质上存储有文件热修复程序,所述文件热修复程序被处理器执行时实现如权利要求1至13任一项所述的文件热修复方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616093.6A CN111796972B (zh) | 2020-06-30 | 2020-06-30 | 文件热修复方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010616093.6A CN111796972B (zh) | 2020-06-30 | 2020-06-30 | 文件热修复方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111796972A CN111796972A (zh) | 2020-10-20 |
CN111796972B true CN111796972B (zh) | 2022-11-04 |
Family
ID=72809804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010616093.6A Active CN111796972B (zh) | 2020-06-30 | 2020-06-30 | 文件热修复方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796972B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515273A (zh) * | 2001-08-03 | 2009-08-26 | 易斯龙系统公司 | 提供用于在存储设备的分布式文件系统中进行信息追踪的元数据的系统和方法 |
CN102520944A (zh) * | 2011-12-06 | 2012-06-27 | 北京航空航天大学 | Windows应用程序虚拟化的实现方法 |
CN102662870A (zh) * | 2012-03-20 | 2012-09-12 | 武汉噢易科技有限公司 | 基于vfs层拦截读写请求的安卓操作系统保护方法 |
CN105677444A (zh) * | 2015-12-31 | 2016-06-15 | 联想(北京)有限公司 | 一种启动虚拟机的方法和装置 |
CN107329781A (zh) * | 2017-06-21 | 2017-11-07 | 努比亚技术有限公司 | 软件热修复方法、终端、系统及计算机可读存储介质 |
US20180089086A1 (en) * | 2016-09-29 | 2018-03-29 | Veritas Technologies Llc | Tracking access pattern of inodes and pre-fetching inodes |
CN110569650A (zh) * | 2019-08-26 | 2019-12-13 | 北京明朝万达科技股份有限公司 | 基于国产操作系统的可移动存储设备权限管理方法及系统 |
-
2020
- 2020-06-30 CN CN202010616093.6A patent/CN111796972B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515273A (zh) * | 2001-08-03 | 2009-08-26 | 易斯龙系统公司 | 提供用于在存储设备的分布式文件系统中进行信息追踪的元数据的系统和方法 |
CN102520944A (zh) * | 2011-12-06 | 2012-06-27 | 北京航空航天大学 | Windows应用程序虚拟化的实现方法 |
CN102662870A (zh) * | 2012-03-20 | 2012-09-12 | 武汉噢易科技有限公司 | 基于vfs层拦截读写请求的安卓操作系统保护方法 |
CN105677444A (zh) * | 2015-12-31 | 2016-06-15 | 联想(北京)有限公司 | 一种启动虚拟机的方法和装置 |
US20180089086A1 (en) * | 2016-09-29 | 2018-03-29 | Veritas Technologies Llc | Tracking access pattern of inodes and pre-fetching inodes |
CN107329781A (zh) * | 2017-06-21 | 2017-11-07 | 努比亚技术有限公司 | 软件热修复方法、终端、系统及计算机可读存储介质 |
CN110569650A (zh) * | 2019-08-26 | 2019-12-13 | 北京明朝万达科技股份有限公司 | 基于国产操作系统的可移动存储设备权限管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111796972A (zh) | 2020-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4436036B2 (ja) | 情報処理装置、トレース処理方法、プログラム及び記録媒体 | |
JP7090657B2 (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US7913265B2 (en) | Method of loading software with an intermediate object oriented language in a portable device | |
CN112015491B (zh) | 实现函数跳转的方法、装置及计算机存储介质 | |
US7886301B2 (en) | Namespace merger | |
CN108415736B (zh) | 利用进程文件系统标记程序进程的方法、装置和设备 | |
CN108920691B (zh) | 前端静态资源的管理方法、装置、计算机设备及存储介质 | |
CN109684298B (zh) | 数据库迁移方法、装置、设备及存储介质 | |
CN111078279A (zh) | 字节码文件的处理方法、装置、设备及存储介质 | |
CN112416860B (zh) | 数据回滚更新方法、装置、计算机设备和存储介质 | |
CN111796972B (zh) | 文件热修复方法、装置、设备及存储介质 | |
WO2023169164A1 (zh) | 应用程序的修复方法、装置、计算机设备以及存储介质 | |
KR102456017B1 (ko) | 응용 프로그램간 파일 공유 장치 및 방법 | |
CN106557572A (zh) | 一种安卓应用程序文件的提取方法及系统 | |
CN112650713A (zh) | 文件系统的运行方法、装置、设备和存储介质 | |
CN111240728A (zh) | 应用程序更新方法、装置、设备和存储介质 | |
CN115658033A (zh) | 一种rpa代码开发方法及系统 | |
CN110941471A (zh) | 一种软件系统基础数据国际化的方法及装置 | |
CN105610908B (zh) | 一种基于安卓设备的samba服务实现方法及系统 | |
US20150046414A1 (en) | Computer product, managing apparatus, and managing method | |
CN105302604A (zh) | 应用程序的版本更新方法及装置 | |
CN117573564B (zh) | 一种基于gitlab代码提交日志自动识别差异的方法 | |
CN115421785B (zh) | 应用程序的移植处理方法、装置和介质 | |
CN111831609B (zh) | 虚拟化环境中二进制度量值统一管理和分发的方法和系统 | |
CN118193337A (zh) | 数据转存方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |