具体实施方式
以下将结合作为本发明一部分并示出用于实践本发明的特定实施例的附图来更详尽地描述各个实施例。然而各实施例被实现为许多不同的形式并且不应将其解释为限制在此处描述的实施例;相反地,提供这些实施例以使得本公开变得透彻和完整,并且将本发明的范围完全传达给本领域普通技术人员。因此,各实施例可以呈现完全是硬件实现、完全是软件实现或组合了软件和硬件方面的实现。因此,以下详细描述并非是局限性的。
图1示出了其中可实现各实施例的分布式文件系统100的实施例。系统100包括运行要求对文件和文件信息的访问的各个应用程序的客户机102和104。文件服务器106将文件和文件信息例如存储在数据存储108中。客户机102和104可通过例如网络110的网络访问文件服务器106。如本领域的技术人员可以理解地,网络110可以是LAN、WAN(例如,因特网)、存储区域网或允许客户机102和104与文件服务器106通信的其它网络。
分布式文件系统100可实现允许客户机102和104访问文件服务器106的协议。协议的一些非限定性示例包括服务器消息块(SMB)、SMB2和NFS。如本领域的技术人员可以理解地,文件访问协议提供客户机向文件服务器请求文件的不同格式。实施例不限于任何特定文件访问协议。相反,可使用包括但不限于以上所列的任何文件访问协议来实现所描述的实施例的特征。
在一个实施例中,客户机102和104可向文件服务器106请求允许它们本地高速缓存目录元数据的租约。如本领域的技术人员可以理解地,文件服务器106除存储实际的文件数据以外也可存储描述目录中文件的特性的目录元数据。例如,目录元数据可包括但不限于:目录中每一文件的最后修改的日期、创建日期、文件大小、文件类型和作者名。本实施例可通过提供租赁机制来实现。
如图1中所示,某些实施例允许诸如客户机102的客户机随元数据租约请求向文件服务器106发送分组112。在实施例中,分组112除租约请求以外还可包括对元数据的请求。例如,诸如浏览器应用程序的应用程序可请求特定目录的目录元数据。响应于该请求,客户机102可发送分组112,分组112将包括对该特定目录的元数据的请求以及元数据租约请求。
如图1中所示,分组112可指定读租约、写租约和/或句柄租约。读租约将允许客户机102在本地高速缓存中存储目录的元数据,并每当浏览器应用程序请求目录元数据时,该客户机可从本地高速缓存服务该请求。句柄租约将允许客户机102延迟目录句柄的关闭,这允许客户机102使用目录句柄来服务于来自浏览器应用程序以及请求目录的目录元数据的其它应用程序的后续请求。写租约允许客户机高速缓存应用程序对目录元数据进行的改变。
在图1所示的实施例中,文件服务器106发送响应分组114,分组114包括所请求的目录元数据和对是否授予所请求的租约的指示。基于响应分组,如果租约请求被准许,则客户机102高速缓存目录元数据,并将目录元数据提供给浏览器应用程序。如果响应分组指示租约未被授予,则客户机102将不会高速缓存目录元数据,而是仅将目录元数据提供给浏览器应用程序。如果客户机102未被授予租约,则浏览器应用程序对目录元数据的任何后续请求将导致客户机向文件服务器106请求目录元数据。
如下更详细描述地,向客户机授予租约在服务来自应用程序的请求方面提供了效率,并减少了客户机向文件服务器106发送多个请求的需求。从而,在一些实施例中,文件服务器106一般对客户机授予租约只要没有另一客户机当前持有冲突的租约。为确保目录元数据的相关性,文件服务器106确保不向不同的客户机授予对特定目录元数据的冲突的租约。
仅提供图1的描述来介绍一些实施例的一些特征。如下更详细描述地,其它实施例可提供其它特征。图1的描述不应被用来限制任何其它实施例的范围。
图2示出了可在一些实施例中使用的客户机和服务器的框图。如上所述,可使用不同的文件访问协议来实现所描述的各实施例的特征。图2的以下某些描述包括对SMB2的特征的一些描述。然而,这不应被用来限制其它实施例,因为可使用任何文件访问协议来实现所描述的特征。对SMB2的使用仅是一个示例,且仅用于说明的目的。
图2示出了作为分布式文件系统200的一部分的客户机202和文件服务器204的框图。在一些实施例中,客户机202可在系统100(图1)中被实现为客户机102和104,而文件服务器204可在系统100(图1)中被实现为文件服务器106。
如图2中所示,客户机202包括多个应用程序206A-C,这些应用程序请求对存储在服务器204的文件系统208中文件数据和元数据的访问。客户机202还包括重定向器210。在一个实施例中,重定向器210可被配置为SMB2重定向器,客户机202与服务器204使用根据SMB2协议格式化的分组来通信。当应用程序206A-C之一请求位于服务器204上的文件时,重定向器210将处理该请求。重定向器210将关于对文件数据和元数据的请求创建根据SMB2协议格式化的分组。如下更详细描述地,在各实施例中,SMB2协议被扩展成提供允许客户机202在客户机202上的本地高速缓存212中存储目录元数据的租赁机制。租赁机制利用客户机202上的查找表214,该查找表存储与由服务器204授予的租约相关联的租约键(目录键/文件键)。服务器204还为请求租约并被授予租约的客户机存储租约键。服务器204使用租约表216来存储租约键。
作为系统200的操作的一个示例,应用程序206A可请求存储在文件系统208的目录如目录1中的文件的元数据。作为结果,应用程序206A发出请求,该请求被重定向器210接收。响应于接收请求,重定向器210将通过发送协商请求分组218来启动与服务器204的会话。如本领域的技术人员将理解地,协商请求分组218将根据允许在客户机和服务器之间协商会话的SMB2协议格式化。协商请求分组218将包括指示该客户机是否能够处理目录元数据租赁的信息。在一个实施例中,目录元数据租赁可仅被SMB2协议的某些版本支持,协商请求分组218可提供客户机支持SMB2协议支持元数据租赁的一版本并想要使用SMB2协议的该版本与服务器通信的指示。
响应于协商请求分组218,服务器204将发送协商响应分组220,该分组可包括对服务器是否支持SMB2协议的该版本的指示。在当前示例中,协商响应分组220指示服务器同意使用SMB2协议支持目录元数据租赁的一版本通信。
当客户机202和服务器204之间的协商完成时,重定向器210然后可请求应用程序206A所请求的目录元数据。在一个实施例中,重定向器210将首先生成与正在请求的目录元数据相关联的元数据键,例如目录2键。另外,重定向器210也为包括被请求的目录元数据的父目录生成键,在此为目录1。这些键被存储在查找表214中。如图2的实施例中所示,查找表214使目录键与目录内存储的文件的各个文件键以及目录内子目录的目录键相关联。这些租约键在某些实施例中是全局唯一标识符(GUID)。然而,它们不限于GUID。
重定向器210然后发送包括对目录2中目录元数据的请求的分组222,还请求对目录2中目录元数据的租约。作为租约请求的一部分,重定向器210包括所生成的租约键(即,目录1的目录键和目录2的目录键)。在一不同的实施例中,重定向器210不生成任何目录键。相反,分组222允许重定向器210指示服务器应生成租约键。
当服务器204接收目录租约请求分组222时,它将从目录2检索目录元数据。服务器204还确定它是否可向客户机201授予所请求的租约。具体地,服务器可咨询存储它已经授予的其它租约的租约键(目录键和文件键)的租约表216。在此示例中,先前没有客户机请求对目录2的租约,作为结果,服务器204将来自目录租约请求分组222的目录1的目录键和目录2的目录键存储至租约表216。
服务器发送带有目录元数据和所请求的租约已被授予的指示的目录租约响应分组224。在这种情况中,所请求的租约可包括读租约、写租约和/或句柄租约。如果租约是读租约,则允许客户机202从高速缓存212服务来自应用程序206A对目录2的目录元数据的请求。如果租约是写租约,则可将对目录2的目录元数据的任何改变存储在高速缓存212中。如果租约包括句柄租约,客户机202可在应用程序206A关闭该句柄时对目录2延迟关闭该句柄。然后可重用该句柄以服务来自应用程序206A以及其它应用程序206B和206C的后续请求。重定向器210将向应用程序206A提供目录元数据并还将目录元数据存储在高速缓存212中。
稍后,如果第二客户机请求对存储在目录2中的同一目录元数据的访问,则在第二客户机请求与向客户机202基于的句柄租约不兼容的访问时,服务器204可撤销来自客户机202的句柄租约。服务器204将向客户机202发送指示句柄租约正在撤销的撤销通知226。在撤销之后,来自应用程序206A、206B和206C对目录元数据的任何请求将要求客户机202直接向服务器204请求新的目录句柄。在某些实施例中,对租约的撤销同步进行,且客户机202必须发送已经接收到撤销通知的确认228。如果在稍后时间,第二客户机对存储在目录2中的目录元数据作出修改,则服务器204可撤销来自客户机202的读租约,这将使存储在高速缓存212中的数据无效。在撤销之后,来自应用程序206A、206B和206C的对目录元数据的任何请求必须通过直接向服务器204请求信息来接受服务。
如本领域的技术人员将理解地,高速缓存212中的信息可由客户机202为除向应用程序206A、206B和206C提供目录元数据以外的目的而使用。作为一个示例,如果文件不存在于目录中,可使来自应用程序206A、206B和206C对遗失文件的请求失败,而不必将请求重定向至服务器204。这有助于减少目标文件不存在的开口(open)请求的网络通信量。
在一个实施例中,以上描述的租赁特征是可传递的。即,重定向器210可将租约的获取和撤销传至本地应用程序。然后可使用该本地应用程序来服务其它远程客户机。以此方式,租约授予和撤销实质上被传递回最终对等体。
图3-6示出根据各实施例的操作流程300、400、500和600。操作流程300、400、500和600可在任何合适的计算环境中执行。例如,操作流程可以由诸如图1和图2中所示的系统来执行。因此,对操作流程300、400、500和600的描述可参考图1和图2的组件中的至少一个。然而,对图1和图2的组件的任何这类参考是仅出于描述性目的的,并且应当理解,图1和图2的实现是操作流程300、400、500和600的非限制性环境。
此外,尽管以特定次序顺序地示出并描述了操作流程300、400、500和600,但在其它实施例中,能以不同的顺序、多次和/或并行执行各个操作。此外,在某些实施例中,一个或多个操作可被省略或组合。
图3示出了根据用于本地高速缓存目录元数据的一些实施例的操作流程300。流程300开始于操作302,此处从应用程序接收对目录元数据(包括目录元数据的一部分)的请求。在某些实施例中,操作302由客户机上的重定向器接收,重定向器是诸如系统100(图1)或系统200(图2)的分布式文件系统的一部分。流程300不限于使用任何特定的文件访问协议来实现。可使用任何合适的文件访问协议来实现流程300的实施例。
流程从操作302至判定304,在那里作出所请求的元数据是否被存储在本地高速缓存中的判断。如果在判定304,作出所请求的元数据被存储在本地高速缓存中的判断,则流程传至操作306,在那里从本地高速缓存检索元数据。在操作308,将从本地高速缓存检索到的元数据提供给应用程序。流程300在310处结束。
然而,如果在判定304,作出目录元数据未被存储在本地高速缓存中的判断,则控制从判定304传至操作312,在那里创建由目录元数据标识的文件的目录键。在某些实施例中,目录键是由执行流程300的重定向器生成的。在操作312之后,在操作314生成由目录元数据标识的目录的父目录的目录键。在某些实施例中,操作314可包括为目录的所有祖先生成键。键可被本地高速缓存。
在操作316,向文件服务器发送请求。请求是针对元数据以及允许对元数据进行本地高速缓存的租约的。在操作318,从文件服务器接收响应。在各实施例中,响应将包括对所请求的租约是否已由文件服务器授予的指示。流程从操作318传至操作320,将在那里来自响应的元数据提供给应用程序。在操作320之后,在判定322作出关于服务器是否授予所请求的对目录元数据的租约的判断。如果在判定322,作出租约未被批准的判断,则元数据不能被本地高速缓存,且流程在310结束。如果在判定322,作出租约被文件服务器批准的判断,则在操作324,元数据被存储在本地高速缓存。在操作324之后,流程在310结束。
现在参考图4,示出了根据用于服务对目录元数据持有句柄租约的客户机(它访问分布式文件系统)修改目录元数据的请求的某些实施例的流程400。在各实施例中,流程400可在流程300已被执行之后被执行。因此,流程400在其中已经授予用于高速缓存目录元数据的句柄租约的各实施例中执行。
流程400开始于操作402,在那里接收到修改目录元数据的请求。请求可以例如是向文件写信息的写请求,这会改变元数据;非限定性的示例包括修改日期和文件大小。之前已经由文件服务器向正在执行流程400的客户机授予用于高速缓存目录元数据的句柄租约。
在操作404处,用来自请求的信息即修改目录元数据的信息,例如要写至文件的数据,来创建分组。因为之前已授予租约,存在第一目录键和与租约相关联的父目录的目录键。从而,在操作406中,该目录键被包括在分组中,且在操作408处,各目录键被包括在分组中。分组然后在410处被发送给服务器。在某些实施例中,客户机一开始在对开口的请求中发送目录键和父目录的目录键。服务器然后将对该开口上的所有后续操作使用各键。然而,在其它实施例中,客户机可对每一操作提供目录键和父目录键。
在操作410之后,流程传至操作412,在那里更新本地高速缓存来反映改变后的元数据。换言之,更新本地高速缓存来反映在最新的修改日期、文件大小等中的改变。流程400在414处结束。
图5示出了用于处理撤销目录元数据上的读租约的通知的流程500。可在已经从诸如服务器204(图2)的服务器向客户机授予读租约之后执行流程500。流程500开始于操作502处,在那里从服务器接收到指示正在撤销之前授予的对目录元数据的读租约的撤销通知。在一些实施例中,由于另一客户机已经执行的动作影响了高速缓存的目录元数据的相关性,例如对目录中文件的修改,因此由服务器发送撤销通知。响应于接收撤销通知,流程500传至操作504,在那里使任何高速缓存的目录元数据无效。在某些实施例中,操作504包括由客户机采取的指示高速缓存不可再被使用来向请求目录元数据的应用程序提供目录元数据的多个步骤。
在操作504之后,流程传至操作506,在那里向服务器发送撤销通知被成功接收的确认。在某些实施例中,流程500可不包括操作506。在这些实施例中,客户机接收撤销通知而不向服务器发送确认。流程然后传至操作508,在那里通过向服务器请求目录元数据来服务对目录元数据的任何请求。流程500在510处结束。
图6示出了根据用于允许本地高速缓存目录元数据的一些实施例的操作流程600。在某些实施例中,流程600可由作为分布式文件系统的一部分的文件服务器执行。
流程600开始于操作602,在那里接收到对目录元数据和租约的请求。该请求在某些实施例中由客户机发送,或由作为分布式文件系统的一部分的客户机上的重定向器发送。在操作602之后,流程600传递至判定604,在那里作出是否授予在操作602接收的请求中所请求的租约的判断。判定604可基于多个因素,包括例如是否已对目录元数据授予租约。如果在判定600,作出不授予租约的判断,则流程传至操作606,在那里发送带有目录元数据的分组。分组将包括所请求的租约未被授予的指示。流程然后在操作608处结束。
如果在判定604,作为可授予租约的判断,则流程600传至操作610,在那里存储目录键和父附录键。在某些实施例中,目录键和父目录键是用作跟踪向客户机授予的租约的租约键的GUID。在某些实施例中,随对目录元数据的请求和租约请求,在操作602接收目录键和父目录键。在该实施例中,目录和父目录键由在操作602发送请求的客户机生成。在其它实施例中,目录键和父目录键可由服务器生成,并且然后在操作610处被存储在租约表中。
在某些实施例中,目录键和父目录键表达两个或多个开口句柄之间的容器-孩子关系。这对文件键和目录键成立,该文件键与该目录中的文件相关联。例如,假定存在两个句柄开口H1和H2。H1可与文件键=K1和目录键=D相关联。H2可与文件键=K2和目录键=D相关联。各键指示由这些句柄所指的文件驻留在同一目录内。
再次参考图6,在操作612,将带有所请求的目录元数据和对租约批准的指示的响应分组发送给客户机。客户机然后可根据所授予的租约本地地高速缓存目录元数据。
在操作614,接收修改目录元数据的请求。该请求例如可以是将附加信息写入文件中。这将例如通过改变最后修改时间或文件大小来修改目录元数据。流程从操作614传至判定616,在那里作出修改目录元数据的请求是否来自租约持有者的判断。
在一个实施例中,在判定616处所作的判断是通过将与其上执行修改目录元数据的句柄相关联的租约键同与先前提供给客户机的句柄相关联的租约键进行比较来作出的。如上所述,在某些实施例中,客户机生成与文件句柄(或目录句柄)相关联的租约键,且因此每一键对于特定客户机将是唯一的。在一个示例中,提供给客户机的句柄H1与文件键=K1和目录键=D相关联。如果稍后服务器接收修改与句柄H2相关联的元数据的操作,则服务器将与句柄H2相关联的租约键同与句柄H1相关联的租约键进行比较。如果例如H2与文件键=K2和目录键=D相关联,服务器判断,由于H1和H2的目录键相同,因此在目录D上具有租约的同一客户机作出了修改,且因此租约不必被撤销。然而,如果H2与文件键=K2和目录键=D1相关联,则服务器将判断由于与句柄H1和H2相关联的目录键是不同的,因此必须撤销租约。
如果作出租约持有者是对目录元数据作出修改的那个的判断,则流程传至操作618,其中更新文件系统以反映修改后的目录元数据。流程600在608处结束。
如果在判定616作出请求不是来自租约持有者的判断,则流程传至判定620,在那里作出所请求的修改是否与已给予另一客户机的租约不一致的判断。如果请求并非不一致,则流程传至操作618并在608结束。
如果在判定620处作出请求与租约不一致的判断,则流程传至操作622,在那里向当前正持有目录元数据上的租约的客户机发送撤销通知。发送撤销以便于在访问目录元数据的所有客户机之间维护目录元数据的相关性。在操作624处接收撤销通知的确认,之后流程传至操作618并在608结束。
图7示出可用于实现此处所描述的各实施例的通用计算机环境700。计算机系统700仅是计算环境的一个示例,而非旨在对计算机和网络体系结构的使用范围或功能提出任何限制。计算机系统700也不应被解释成对于在示例计算机系统700中所示出的任一组件或其组合有任何依赖或要求。在某些实施例中,系统700可用作以上参考图1和图2所述的客户机和/或服务器。
在其最基本配置中,系统700通常包括至少一个处理单元702和存储器704。取决于计算设备的确切配置和类型,存储器704可以是易失性的(如RAM)、非易失性的(如ROM、闪存等)或是两者的某种组合。该最基本配置在图7中由虚线706来例示。系统存储器704存储在系统700上执行的应用程序。例如,存储器704可存储以上参考图2描述的报告查找表214。
此处所使用的术语计算机可读介质可包括计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器704、可移动存储和不可移动存储708都是计算机存储介质示例(即,存储器存储)。计算机存储介质可包括,但不限于,RAM、ROM、电可擦除只读存储器(EEPROM)、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或可用于存储信息并且可由计算设备700访问的任何其它介质。任何这样的计算机存储介质可以是设备700的一部分。计算设备700还可具有输入设备714,诸如键盘、鼠标、笔、声音输入设备、触摸输入设备等。还可包括输出设备616,如显示器、扬声器、打印机等。上述设备是示例并且可使用其他设备。
此处所使用的术语计算机可读介质还可包括通信介质。通信介质可由诸如载波或其他传输机制的已调制数据信号中的计算机可读指令、数据结构、程序模块、或其他数据来体现,并且包括任何信息传递介质。术语“已调制数据信号”可描述具有以对该信号中的信息编码的方式设定或者改变的一个或多个特征的信号。作为示例而非限制,通信介质可包括诸如有线网络或直接线连接的有线介质,以及诸如声学、射频(RF)、红外线和其他无线介质的无线介质。
本说明书通篇引述了“一个实施例”或“实施例”,这意味着在至少一个实施例中包括特定描述的特征、结构或特性。因此,对这样短语的使用可指的是一个以上的实施例。而且,在一个或多个实施例中,可以用任何合适的方式组合所描述的特征、结构或特性。
然而,本领域技术人员会认识到本发明也可在没有一个或多个具体细节的情况下实施,或者采用其它方法、资源、材料等来实现。仅仅为了避免模糊本发明的各方面,在其它情况下,未示出和详述公知的结构、资源或操作。
虽然示出和描述了示例实施例和应用,但是应该理解本发明不限于上述精确配置和资源。可以对此处公开的方法和系统的排列、操作以及细节作出对本领域技术人员显而易见的各种修改、改变和变化,而不背离所要求保护的本发明的范围。