CN106802922B - 一种基于对象的溯源存储系统及方法 - Google Patents

一种基于对象的溯源存储系统及方法 Download PDF

Info

Publication number
CN106802922B
CN106802922B CN201611175918.5A CN201611175918A CN106802922B CN 106802922 B CN106802922 B CN 106802922B CN 201611175918 A CN201611175918 A CN 201611175918A CN 106802922 B CN106802922 B CN 106802922B
Authority
CN
China
Prior art keywords
file
information
traceability information
traceability
tracing
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
Application number
CN201611175918.5A
Other languages
English (en)
Other versions
CN106802922A (zh
Inventor
谢雨来
廖雪龙
秦磊华
冯丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN201611175918.5A priority Critical patent/CN106802922B/zh
Publication of CN106802922A publication Critical patent/CN106802922A/zh
Application granted granted Critical
Publication of CN106802922B publication Critical patent/CN106802922B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于对象的溯源存储系统及方法,该系统由对象存储客户端和对象存储设备端组成。对象存储客户端用于对系统状态、文件格式及应用程序执行等溯源信息进行收集,将溯源信息存入缓冲区,并向对象存储设备端发送包含溯源信息的对象命令;对象存储设备端用于解析对象命令,提取出溯源信息,并将溯源信息写入对象文件及数据库中,然后利用要查询的关键字对数据库进行检索,最后将查询得到的数据以报表形式进行展示。可以使得溯源信息得以高效地收集及查询。

Description

一种基于对象的溯源存储系统及方法
技术领域
本发明属于计算机数据存储技术领域,更具体地,涉及一种基于对象的溯源存储系统及方法。
背景技术
在计算机存储领域,如今的存储系统已经在可靠性、可用性和高效性方面取得了巨大的进步。然而随着数据量的增大和数据复杂度的提高,利用溯源来管理存储系统也变得越发重要。溯源是描述一个数据对象的历史操作的元数据。溯源提高了数据本身所描述的价值,它给出了“对象是如何创建的,对象依赖了哪些其他对象以及这两个对象的历史操作有何不同”等问题的答案。在系统领域,一个对象的溯源是所有影响该对象最终状态的过程和数据。
由于溯源表露了数据的起源和产生过程,让用户对数据的理解更加透彻,相关研究机构已经认识到了数据溯源的重要性并且在积极地探索如科学计算、档案系统和数据库等多个领域的相关问题。然而,上述研究限定在了特定的领域或者获取数据溯源时需要对应用程序进行修改,降低了溯源信息的收集效率。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于对象的溯源存储系统及方法,充分利用对象存储体系结构,在对象存储客户端收集系统内核信息、文件格式信息及普通应用程序信息等溯源信息,并将收集到的溯源信息封装成对象,存储到对象存储设备端的数据库或日志文件中,可以使溯源信息得以高效地收集及查询。由此解决现有技术中对溯源信息的收集效率较低的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于对象的溯源存储系统,包括:对象存储客户端以及对象存储设备端;
所述对象存储客户端,用于收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向所述对象存储设备端发送对象命令;
所述对象存储设备端,用于接收并解析所述对象命令,提取出所述对象存储客户端缓冲区中的溯源信息,将提取出的溯源信息写入对象文件以及数据库中;
所述对象存储设备端,还用于在接收到用户输入的查询关键字时,对数据库进行检索,将与查询关键字匹配的查询结果进行展示。
优选地,所述对象存储客户端包括系统状态溯源收集模块、文件格式溯源收集模块、应用程序溯源收集模块以及第一对象文件系统模块;
所述系统状态溯源收集模块,用于分析系统状态文件,将系统内核信息转换为系统状态溯源信息;
所述文件格式溯源收集模块,用于调用格式分析程序分析文件,将文件格式信息转换为文件格式溯源信息;
所述应用程序溯源收集模块,用于拦截系统调用,将系统调用序列号以及进程信息转换为应用程序溯源信息;
所述第一对象文件系统模块,用于将所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息存入缓冲区,并向所述对象存储设备端发送对象命令。
优选地,所述对象存储设备端包括对象命令处理模块、第二对象文件系统模块以及溯源查询模块;
所述对象命令处理模块,用于接收并分析所述对象命令,从所述对象存储客户端的缓冲区中解析出所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息,并转发给所述第二对象文件系统模块;
所述第二对象文件系统模块,用于将解析出的所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息写入文件和数据库,并分别把文件和数据库记录封装成对象;
所述第二对象文件系统模块,还用于通过用户输入的关键字对数据库进行搜索得到溯源查询结果;
所述溯源查询模块,用于将所述溯源查询结果写入到本地磁盘和/或返回给所述对象存储客户端。
按照本发明的另一方面,提供了一种基于对象的溯源存储方法,包括以下步骤:
(1)对象存储客户端收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向对象存储设备端发送对象命令,其中,所述对象命令中携带有收集得到的溯源信息;
(2)对象存储设备端接收并解析所述对象命令,提取出溯源信息,将溯源信息写入对象文件和数据库中;
(3)对象存储设备端在接收到用户输入的查询关键字时,对数据库进行检索,将查询结果写入到本地磁盘和/或返回给对象存储客户端。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,主要有以下的技术优点:通过利用对象存储体系结构,在对象存储客户端收集系统内核信息、文件格式信息及普通应用程序信息等溯源信息,并将收集到的溯源信息封装成对象,存储到对象存储设备端的数据库或日志文件中,可以使溯源信息得以高效地收集及查询。
附图说明
图1为本发明实施例公开的一种基于对象的溯源存储系统的结构示意图;
图2为一种用于处理溯源信息的基于对象的主动存储机制的交互图;
图3为本发明实施例公开的一种基于对象的溯源存储方法的流程示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
图1为本发明实施例公开的一种基于对象的溯源存储系统的结构示意图,该系统由对象存储客户端以及对象存储设备端组成:上述对象存储客户端,用于收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向所述对象存储设备端发送对象命令,其中,所述对象命令中携带有收集得到的溯源信息;上述对象存储设备端,用于接收并解析对象命令,提取出溯源信息,将溯源信息写入新创建的对象文件和数据库中;上述对象存储设备端,还用于在接收到用户输入的查询关键字时,对数据库进行检索,将与查询关键字匹配的查询结果进行展示。
其中,在对象存储客户端中,包括系统状态溯源收集模块、文件格式溯源收集模块、应用程序溯源收集模块以及第一对象文件系统模块:
系统状态溯源收集模块,用于分析系统状态文件,将系统内核信息转换为系统状态溯源信息;
具体地,系统状态溯源收集模块利用系统状态文件收集内核信息,对系统状态文件中的内容进行逐条分析和筛选即可得到需要的内核信息,当前系统中的重要溯源信息包括操作系统的名称、网络节点名、内核发行级别、内核发行版本以及CPU架构等信息。然后将这些信息存储到数据输出缓冲区中。
文件格式溯源收集模块,用于调用格式分析程序分析文件,将文件格式信息转换为文件格式溯源信息;
具体地,文件格式溯源收集模块利用文件格式分析的应用程序JHOVE分析得到的文件格式信息,即此文件是利用何种格式建立的,以及能够得到其中的创建时间以及最近更新时间等溯源信息,并将这些溯源信息存储到数据输出缓冲区中。
应用程序溯源收集模块,用于拦截系统调用,将系统调用序列号以及进程信息转换为应用程序溯源信息;
具体地,应用程序溯源收集模块能够记录系统调用和文件访问并生成日志文件。此功能能够通过对任何目录下的注册文件进行编辑或者通过使用图像接口。一旦注册成功,事件的通知便会生成日志文件存储在指定目录下的日志文件中。
可选地,可以有以下三种应用程序的监测方式。
(1)对创建文件操作进行监测;
对文件进行创建和删除操作时,利用audit监听该文件目录便可得到添加和/或删除产生的溯源信息。例如,对简单的Vim操作文本的指令:
#vitest.txt
同时利用auditctl指令对该目录下的文件进行监测,便可在生成的日志文件中得到基本文件操作的溯源信息。利用aureport指令对日志文件的内容进行筛选,便可得到我们编辑文件时产生的溯源信息,得到多个系统用户与组的ID。同时我们还可得到节点号inode,系统调用退出值exit,系统调用的成功值success,系统调用的处理器体系结构arch等溯源信息。
(2)对postmark应用程序执行文件添加/删除进行监测;
利用postmark对大量文件的添加或删除操作,可以通过审计功能audit对postmark所操作的文件区进行监测操作,便可得到一系列文件添加或删除操作以及读或写操作。其中,postmark是一个I/O密集型的应用程序。
将audit监测postmark运行过程中的数据变更输出日志文件存储在/var/log/audit/result.log中。
(3)对内核编译过程进行监测;
与postmark对文件进行大量添加或删除不同,编译内核的过程可视为CPU密集型的应用程序。编译内核时会对系统下的多个部分均产生影响。因此我们在/usr/src目录对内核执行编译指令时,需要利用audit对根目录进行监控来查看内核编译所产生的溯源信息。然后在/usr/src目录中对内核编译做出操作,执行makebzImage指令生成内核映像进行编译。编译完成后,audit功能便在日志文件中生成内核编译过程的溯源信息。
第一对象文件系统模块,用于将系统状态溯源信息、文件格式溯源信息以及应用程序溯源信息存入缓冲区,并向对象存储设备端发送对象命令,其中,对象命令中携带有系统状态溯源信息、文件格式溯源信息以及应用程序溯源信息。
可选地,将溯源信息从对象存储客户端传输到对象存储设备端,并进行存储和访问的对象命令流程如下:
(1)首先在对象存储客户端收集溯源信息后,将其读到对象存储客户端缓冲区buffer中。
(2)然后调用osd_create_and_write()函数,将溯源信息传输到对象存储设备端,并由对象存储设备端写入到新创建的对象文件内。其中,对象文件的路径由无符号整数的进程身份标识符(Process Identifier,PID)和无符号整数的用户身份标识符(UserIdentification,UID)共同标识。例如对对象存储设备端目录路径为/0/64的文件进行操作,则需要令PID=0x0,UID=0x64。
(3)新产生的对象文件ID(即PID和UID)既可以由osd_create_and_write()函数中的随机算法确定,也能由对象存储设备端中创建对象时进行指定。
(4)在对象存储客户端可利用对象读写命令对对象存储设备端的溯源信息进行访问。
其中,在对象存储设备端中,包括对象命令处理模块、第二对象文件系统模块以及溯源查询模块;
对象命令处理模块,用于接收并分析对象命令,从对象存储客户端的缓冲区中解析出系统状态溯源信息、文件格式溯源信息以及应用程序溯源信息,并转发给第二对象文件系统模块;
第二对象文件系统模块,用于将解析出的系统状态溯源信息、文件格式溯源信息以及应用程序溯源信息写入文件和数据库,并分别把文件和数据库记录封装成对象;
第二对象文件系统模块,还用于通过用户输入的关键字对数据库进行搜索得到溯源查询结果;
溯源查询模块,用于将查询结果写入到本地磁盘和/或返回给对象存储客户端。
如图2所示为一种用于处理溯源信息的基于对象的主动存储机制的交互图,对象命令处理模块获取和分析对象存储设备端接收到的基于对象的存储设备(Object-basedStorage Device,OSD)命令,从OSD命令的数据输出缓冲区buffer中解析出数据和溯源信息,并转发给第二对象文件系统模块,由第二对象文件系统模块将溯源信息分别写入文件和数据库,并分别把文件和数据库封装成OSD对象和功能对象,然后功能调度根据功能对象的ID,负责调度相关的功能对象去执行,功能对象被调度到用户空间,执行结果写入本地磁盘或返回给对象存储客户端,最后,对象存储客户端通过溯源查询即可以列表的方式得到相关的溯源信息。
在对象存储客户端收集内核信息后,调用对象创建命令在对象存储设备端创建一个文件对象,并将所获取的系统内核溯源信息传输到该文件对象中。然后分析此文件对象中的字符串,将首字符串系统名称作为数据库的key,将多项溯源信息作为data存储到BerkeleyDB所创建的数据库中。
从图2可以看出,将溯源处理的工作放到对象存储设备端,而只将处理后的数据传给对象存储客户端,避免了大量溯源数据在网络上传输,从而节约了网络带宽。同时将溯源查询结果返回给对象存储客户端,提高了溯源查询的效率和性能。
图3所示为本发明实施例公开的一种基于对象的溯源存储方法的流程示意图。在图3所示的方法中,包括以下步骤:
(1)对象存储客户端收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向对象存储设备端发送对象命令,其中,对象命令中携带有收集得到的溯源信息;
(2)对象存储设备端接收并解析该对象命令,提取出溯源信息,将溯源信息写入对象文件和数据库中;
(3)对象存储设备端在接收到用户输入的查询关键字时,对数据库进行检索,将查询结果写入到本地磁盘和/或返回给对象存储客户端。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (3)

1.一种基于对象的溯源存储系统,其特征在于,包括:对象存储客户端以及对象存储设备端;
所述对象存储客户端,用于收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向所述对象存储设备端发送对象命令;所述对象命令中携带有收集得到的溯源信息;
所述对象存储设备端,用于接收并解析所述对象命令,提取出所述对象存储客户端缓冲区中的溯源信息,将提取出的溯源信息写入对象文件以及数据库中;
所述对象存储设备端,还用于在接收到用户输入的查询关键字时,对数据库进行检索,将与查询关键字匹配的查询结果进行展示;
所述对象存储客户端包括系统状态溯源收集模块、文件格式溯源收集模块、应用程序溯源收集模块以及第一对象文件系统模块;
所述系统状态溯源收集模块,用于分析系统状态文件,将系统内核信息转换为系统状态溯源信息;所述系统状态溯源信息包括操作系统的名称、网络节点名、内核发行级别、内核发行版本以及CPU架构;
所述文件格式溯源收集模块,用于调用格式分析程序分析文件,将文件格式信息转换为文件格式溯源信息;所述文件格式溯源信息包括文件的建立格式、创建时间以及最近更新时间;
所述应用程序溯源收集模块,用于拦截系统调用,将系统调用序列号以及进程信息转换为应用程序溯源信息;所述应用程序溯源收集模块对应用程序的监测方式包括对创建文件操作进行监测;对postmark应用程序执行文件添加/删除进行监测;以及对内核编译过程进行监测;
所述第一对象文件系统模块,用于将所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息存入缓冲区,并向所述对象存储设备端发送对象命令。
2.根据权利要求1所述的系统,其特征在于,所述对象存储设备端包括对象命令处理模块、第二对象文件系统模块以及溯源查询模块;
所述对象命令处理模块,用于接收并分析所述对象命令,从所述对象存储客户端的缓冲区中解析出所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息,并转发给所述第二对象文件系统模块;
所述第二对象文件系统模块,用于将解析出的所述系统状态溯源信息、所述文件格式溯源信息以及所述应用程序溯源信息写入文件和数据库,并分别把文件和数据库记录封装成对象;
所述第二对象文件系统模块,还用于通过用户输入的关键字对数据库进行搜索得到溯源查询结果;
所述溯源查询模块,用于将所述溯源查询结果写入到本地磁盘和/或返回给所述对象存储客户端。
3.一种基于权利要求1所述的基于对象的溯源存储系统的基于对象的溯源存储方法,其特征在于,包括以下步骤:
(1)对象存储客户端收集系统内核、文件格式以及应用程序的溯源信息,将收集得到的溯源信息存入缓冲区,并向对象存储设备端发送对象命令,其中,所述对象命令中携带有收集得到的溯源信息;
(2)对象存储设备端接收并解析所述对象命令,提取出溯源信息,将溯源信息写入对象文件和数据库中;
(3)对象存储设备端在接收到用户输入的查询关键字时,对数据库进行检索,将查询结果写入到本地磁盘和/或返回给对象存储客户端。
CN201611175918.5A 2016-12-19 2016-12-19 一种基于对象的溯源存储系统及方法 Active CN106802922B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611175918.5A CN106802922B (zh) 2016-12-19 2016-12-19 一种基于对象的溯源存储系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611175918.5A CN106802922B (zh) 2016-12-19 2016-12-19 一种基于对象的溯源存储系统及方法

Publications (2)

Publication Number Publication Date
CN106802922A CN106802922A (zh) 2017-06-06
CN106802922B true CN106802922B (zh) 2020-07-10

Family

ID=58984751

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611175918.5A Active CN106802922B (zh) 2016-12-19 2016-12-19 一种基于对象的溯源存储系统及方法

Country Status (1)

Country Link
CN (1) CN106802922B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109409096B (zh) * 2018-11-15 2021-02-26 百度在线网络技术(北京)有限公司 内核漏洞修复方法、装置、服务器及系统
CN113434359B (zh) * 2021-06-22 2022-09-27 深圳赛安特技术服务有限公司 数据溯源系统构建方法、装置、电子设备及可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101043381A (zh) * 2007-04-20 2007-09-26 北京航空航天大学 服务网格溯源信息收集系统及方法
CN103970871A (zh) * 2014-05-12 2014-08-06 华中科技大学 存储系统中基于溯源信息的文件元数据查询方法与系统
CN105930234A (zh) * 2016-05-25 2016-09-07 华中科技大学 一种基于溯源信息的数据重建系统及方法
CN106027529A (zh) * 2016-05-25 2016-10-12 华中科技大学 一种基于溯源信息的入侵检测系统及方法
CN106055676A (zh) * 2016-06-03 2016-10-26 电子科技大学 一种基于大数据模型分析平台的数据溯源方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8271461B2 (en) * 2010-01-18 2012-09-18 Battelle Memorial Institute Storing and managing information artifacts collected by information analysts using a computing device

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101043381A (zh) * 2007-04-20 2007-09-26 北京航空航天大学 服务网格溯源信息收集系统及方法
CN103970871A (zh) * 2014-05-12 2014-08-06 华中科技大学 存储系统中基于溯源信息的文件元数据查询方法与系统
CN105930234A (zh) * 2016-05-25 2016-09-07 华中科技大学 一种基于溯源信息的数据重建系统及方法
CN106027529A (zh) * 2016-05-25 2016-10-12 华中科技大学 一种基于溯源信息的入侵检测系统及方法
CN106055676A (zh) * 2016-06-03 2016-10-26 电子科技大学 一种基于大数据模型分析平台的数据溯源方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
溯源的高效存储管理及在安全方面的应用研究;谢雨来;《中国博士学位论文全文数据库信息科技辑》;20150215(第02期);I137-1,8-9,46,60,66,80-81,85,90 *

Also Published As

Publication number Publication date
CN106802922A (zh) 2017-06-06

Similar Documents

Publication Publication Date Title
US12067007B1 (en) Analyzing a pipelined search to determine data on which to execute the pipelined search
US9787706B1 (en) Modular architecture for analysis database
CN108920659B (zh) 数据处理系统及其数据处理方法、计算机可读存储介质
US9367574B2 (en) Efficient query processing in columnar databases using bloom filters
Rupprecht et al. Improving reproducibility of data science pipelines through transparent provenance capture
US9582541B2 (en) Systems, methods, and computer program products to ingest, process, and output large data
JP3742177B2 (ja) 並列データベースシステムルーチン実行方法
KR101785959B1 (ko) 레코드들의 컬럼형 스토리지 표현
US8209297B2 (en) Data processing device and method
GB2499500A (en) Document merge
Rozsnyai et al. Large-scale distributed storage system for business provenance
US20180129712A1 (en) Data provenance and data pedigree tracking
JP2006318146A (ja) 情報管理システム
CN114416670A (zh) 适用于网盘文档的索引创建方法、装置、网盘及存储介质
CN106802922B (zh) 一种基于对象的溯源存储系统及方法
CN117349323B (zh) 数据库的数据处理方法及装置、存储介质及电子设备
CN118035204A (zh) 数据血缘显示方法、分布式任务调度系统及存储介质
Kumar et al. Data governance in a database operating system (dbos)
US11755430B2 (en) Methods and systems for storing and querying log messages using log message bifurcation
Venkatesan et al. PoN: Open source solution for real-time data analysis
Dhanda Big data storage and analysis
US20130218893A1 (en) Executing in-database data mining processes
Cheah Quality, retrieval and analysis of provenance in large-scale data
US20240028622A1 (en) Personal information management system having graph-based management and storage architecture
CN113553320B (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