CN101770513B - 用于分布式命名空间中的确认和修正的方法和系统 - Google Patents
用于分布式命名空间中的确认和修正的方法和系统 Download PDFInfo
- Publication number
- CN101770513B CN101770513B CN2010100023043A CN201010002304A CN101770513B CN 101770513 B CN101770513 B CN 101770513B CN 2010100023043 A CN2010100023043 A CN 2010100023043A CN 201010002304 A CN201010002304 A CN 201010002304A CN 101770513 B CN101770513 B CN 101770513B
- Authority
- CN
- China
- Prior art keywords
- synthesis
- namespace
- attribute data
- file system
- inconsistent
- 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.)
- Expired - Fee Related
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
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1435—Saving, restoring, recovering or retrying at system level using file system or storage system metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
- G06F16/1787—Details of non-transparently synchronising file systems
-
- 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/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2089—Redundant storage control functionality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及用于分布式命名空间中的确认和修正的方法和系统。具体地,公开了一种方法,包括:从综合体的确认者成员向综合体的第二成员发送指令,以阻止对综合体命名空间进行改变的操作;确定综合体的确认者成员是否与综合体的第二成员通信,以及综合体的成员是否保持当前的综合体状态信息;响应于确定综合体的确认者成员在与综合体的第二成员通信,以及综合体的成员保持当前的综合体状态信息,从确认者成员向第二成员发送指令,以向确认者成员发送与第二成员相关联的第一命名空间属性数据;确定与第二成员相关联的第一命名空间属性数据是否与第二命名空间属性数据一致;以及发送指令以修正第一命名空间属性数据。
Description
技术领域
实施例总体上涉及数据处理,更具体地,涉及在并行综合体复合系统中访问和储存数据。
背景技术
并行综合体复合系统(Parallel Sysplex multi-system)使用具有相互通信的系统处理器的多个系统,这些系统读取和写入存储在数据存储系统(如存储器设备、直接访问存储设备(DASD))中的数据。多个系统提供了系统冗余,这样,如果特定的系统发生故障,其他的系统可以执行类似的任务。
数据在系统处理器可访问的文件系统中分层次组织。在运行中,文件系统与被指定为文件系统所有者的系统处理器相关联。该所有者执行对文件系统进行维护、访问、读取和写入的相关任务。其他系统处理器可以与文件系统的客户端相关联。客户端可以与所有者通信,以读取、写入或执行其他文件系统相关的任务。
为了适当地管理文件系统,所有者和客户端系统处理器应当具有与存储在并行综合体复合系统中的文件系统的所有权和客户端关系有关的准确的当前数据。
发明内容
根据一个实施例,一种方法,包括:从综合体的确认者成员向综合体的第二成员发送指令,以阻止对综合体命名空间进行改变的操作;确定综合体的确认者成员是否与综合体的第二成员通信,以及综合体的成员是否保持当前的综合体状态信息;响应于确定综合体的确认者成员在与综合体的第二成员通信以及综合体的成员保持当前的综合体状态信息,从确认者成员向第二成员发送指令,以便向确认者成员发送与第二成员相关联的第一命名空间属性数据;确定与第二成员相关联的第一命名空间属性数据是否与第二命名空间属性数据一致;以及发送指令以修正第一命名空间属性数据。
根据另一个实施例,一种方法,包括:接收修正与综合体的第二成员相关联的不一致的第一命名空间属性数据的指令;从确认者成员向综合体的第二成员发送指令,以便向确认者成员发送与综合体通信错误相关联的文件系统的列表;确定不一致的第一命名空间属性数据是否对应于综合体通信错误;以及响应于确定第一命名空间属性数据对应于综合体通信错误,向综合体的第二成员发送包括修正的第一命名空间属性数据的指令。
根据又一个实施例,一种系统,包括综合体的确认者成员,其可操作以用于:向综合体的第二成员发送指令,以阻止对综合体命名空间进行改变的操作;确定综合体的确认者成员是否与综合体的第二成员通信以及综合体的成员是否保持当前的综合体状态信息;响应于确定综合体的确认者成员与综合体的第二成员通信以及综合体的成员保持当前的综合体状态信息,向第二成员发送指令,以便向确认者成员发送与第二成员相关联的第一命名空间属性数据;确定与第二成员相关联的第一命名空间属性数据是否与第二命名空间属性数据一致;以及响应于与第二成员相关联的第一命名空间属性数据与第二命名空间属性数据不一致,发送指令以修正第一命名空间属性数据。
附图说明
图1示出了并行综合体复合系统的一个示例。
图2A和2B示出了综合体中的文件系统所有者设置的示例。
图3示出了综合体的缓存数据结构的一个示例的框图。
图4示出了确认算法的一个示例的高层框图。
图5示出了图2A所示系统的命名空间查询中可以产生的散列表的一个示例。
图6示出了修正算法的高层结构图。
具体实施方式
提供了涉及并行综合体复合系统的系统和方法。描述了几个示例性的系统和方法。
图1示出了并行综合体复合系统(综合体)100的一个示例,该并行综合体复合系统100具有包括处理器的综合体成员系统1(S1)102、系统2(S2)104、系统3(S3)106和系统4(S4)108。综合体100包括文件系统树101,该文件系统树101具有多个安装的文件系统105。在运行中,当文件系统105安装到文件系统树101上时,文件系统105与所有者系统相关联,并且如果需要,还与一个或多个客户端系统相关联。客户端在文件系统安装时间“连接”到所有者以交换信息,这样客户端可以向所有者发送针对所需文件系统的文件请求(read、write、mkdir等等)。系统的所有者存储在全局资源串行化(GRS)中,该全局资源串行化(GRS)是分布式的系统锁和资源管理器;文件系统的所有者获取文件系统名称的入队(enqueue)以指示其拥有相关的文件系统。从而,可以查询GRS以找出来自任何系统的文件系统的所有者。Unix系统一般包括逻辑文件系统(LFS)层和物理文件系统(PFS)层。实施例在国际商业机器(IBM)z/OS操作系统中实现。z/OS中的逻辑文件系统层称为Unix系统服务(USS),并且物理文件系统是z系列文件系统(zFS)。
USS和管理员控制最初在哪些综合体成员上安装文件系统。USS可以提供将相同的文件系统安装在多个系统上。对于综合体感知系统,成员能够成功访问文件系统所处的DASD,以用于成功安装。由此,如果成员从USS接收了对于文件系统的安装请求,并且请求是成功的,则成员“缓存”文件系统。当文件系统不具有成功本地安装时,客户端系统不缓存文件系统,而且,当没有综合体成员具有用于文件系统的本地安装时,所有者系统不缓存文件系统。
并行综合体系统被设计用于从成员的故障中进行恢复;例如,如果文件系统的所有者发生故障,则另一个成员获取文件系统的所有权以保证访问不丢失。在一些示例中(如丢失的DASD访问),没有成员可以取得文件系统所有权;在这样的情况下,文件系统保留为无主的,直到某个系统成员取得所有权。所有权可以根据使用统计而转移,以保证多数活动系统拥有文件系统。
图2A和图2B示出了4个成员综合体中的文件系统所有权配置的示例。参考图2A,综合体包括3个文件系统F、H和G,其一致地分布作为命名空间。系统1(S1)拥有文件系统F,并与作为客户端的系统S2和S3相关联。S2和S3与作为F所有者的S1相关联。文件系统H仅安装在S4上,因此S4是对与H相关联的信息进行缓存的仅有系统。文件系统G安装在所有系统上,但它是无主的(U)。可能有多个原因造成G的所有权缺少,例如,作为G所有者的另一个综合体成员没有运行,并且所有权没有转移到另一个系统。图2A的命名空间是一致的,因为系统(S1、S2、S3和S4)同意S1是F的所有者,S1就S2和S3是客户端与S2和S3协商一致。对于G,所有的系统同意G为无主的,并且H仅由S4所有而其他系统没有对于H的冲突条目。
参考图2B,图2B示出了不一致命名空间的示例。在示出的示例中,S1将S2和S3关联为F的客户端,然而S2既没有F的本地安装,也没有与F相关联的信息。S2已将S3关联为G的所有者;然而S1、S3和S4将G关联为无主的。如果图2B中的不一致没有得到修正,则F不能全部从综合体上卸载,因为S1将不会卸载F。对于G,如果用户期望访问G,则系统S1、S3和S4的用户将接收到错误。
如果在安装或卸载文件系统时系统之间发生通信故障或超时,则可能出现图2B的不一致。例如,对于G,如果S3拥有G并且处于转移G所有权的过程中,则S3首先向其他系统发送消息以便将G移动到无主列表中。如果S2未接收到该消息,则其他系统可以将G移动到无主列表,但是S2可能将G保持为由S3所有。结果是文件损坏和丢失文件系统访问。
文件系统的所有权协定和客户端关联是维持一致综合体的一个因素。其他因素包括关于文件系统是否存在0个或多个克隆快照的协定、关于文件系统状态的协定(例如,文件系统是否是停顿的,这意味着暂时停止综合体范围内的用户活动,停顿的原因例如是整个文件系统备份或所有权转移),以及关于文件系统的处理属性的协定(例如,低空间监测和动态文件系统扩展)。
图3是缓存数据结构的示例的框图,该缓存数据结构可以用于维护综合体成员系统和文件系统的状态。该数据结构可以用于维护存储器中的综合体命名空间。块301表示包括字段Local(本地)、Unowned(无主)和Remote(远程)的程序全局存储。Local寻址表示本地综合体成员的SYSTEM结构。Unowned寻址表示“无主”系统的SYSTEM结构,并锚定(anchor)当前无主的文件系统列表。Remote寻址表示曾经加入过群组的每个综合体成员的SYSTEM结构的列表,即使该成员当前不是群组的部分。其他字段包括sysLock、InternalErr、XmitProb和Xmit_list。sysLock字段是本地系统锁,用以保护对结构的更新。如果本地系统怀疑与其他成员可能的命名空间一致性错误,则可以将InternalErr置位。如果本地系统与其他成员存在通信问题,则可以将XmitProb置位。Xmit_list是对于管理员命令遇到传输错误的文件系统列表的锚,该管理员命令针对本地系统的系统而被处理。(即,本地系统知道:由于通信问题,文件系统可能具有命名空间不一致。)
块303表示综合体中的成员系统,并包括字段as_state、as_level、as_name、as_nsquery_bit和as_fs。as_state字段表示系统的状态,可以包括以下之一:如果成员停机,则为AS_DOWN;如果成员运行并且在综合体中是活跃的,则为AS_READY;如果成员停机,并且本地系统已经接收到来自XCF(XCF是代码的z/OS层,其处理系统停机通知和处于故障状态的成员的系统划分)的成员停机的通知,并且本地系统已经冻结了针对原来由停机成员拥有的文件系统的用户活动,并将针对该成员的文件系统移动到无主列表中,则为AS_PARTIALLY_DOWN。字段as_level指示所支持的软件层次(即,是否支持读写综合体文件系统共享)。字段as_name指示系统的名称。字段as_nsquery_bit是在确认的命名空间检索部分期间为系统指定的编号。字段as_fs是综合体成员所拥有的文件系统的列表的锚。
以下附录部分中的表1包括可以用在示例性方法的管理命令示例。
在修正文件系统不一致之前,检测(确认)不一致。命名空间确认被整合为初始化过程的一部分;任何新成员都要执行确认以保证其在一致的命名空间开始。因为新成员是未损坏的(其命名空间为空),所以新成员是执行修正的优选系统。当成员正常地或异常地离开综合体时,执行修正。每当在与其他综合体成员通信时发生意外错误时,便由系统自动调度确认检查;例如,如果发生通信故障,或如果从远程成员接收到意外错误。确认检查还可以通过z/OS系统操作命令F ZFS,NSV于任何时候在任何综合体成员上运行(不管哪个成员将指令发起为成员的完全综合体确认)。
对于串行化,GRS被用作综合体锁管理器。管理命令(表1中的)可以使用以下的示例GRS入队以用于串行化:IOEZNS和IOEZTM.filesysname。管理命令(如MOUNT、UNMOUNT、文件系统所有权变化、备份停顿等等)以共享模式获得IOEZNS资源,并以独占模式获得文件系统资源。确认以独占模式获得IOEZNS资源,从而当确认运行时,其他管理命令不可以运行。没有新系统可以加入综合体,并且新系统在尝试GRS入队到IOEZNS时进行等待。入队的超时用于防止无限的等待。初始化使用IOEZJPIN作为用于加入XCF群组的新系统的串行化的GRS入队。所有新到来的成员在加入时获取锁,并且因为成员进行命名空间确认,所以成员在加入综合体时还获得IOEZNS。
虽然在确认和修正期间不可以运行新的管理命令,但是系统可能在命名空间提取过程期间停机。在确认期间,对系统停机时需要的工作进行处理。当成员停机时,XCF发送通知,并且每个活跃成员停止对停机成员所拥有的文件系统的任何用户动作。(在以上的示例中(图2A),如果系统S1停机,系统S2和S3停止对文件系统F的用户动作,并将F移动到无主列表,随后,系统之一可以尝试取得所有权)。
初始化例程包括调用XCF来查询当前成员群组部分,以加入群组并执行命名空间确认。以下附录部分的表2中描述了初始化例程的一个示例。
当子程序接收到意外消息或消息回复返回代码,或经历了用于更新综合体命名空间的消息的通信故障时,针对F ZFS,NSV命令,在初始化期间调用称为NSValidate的确认例程。
图4是确认算法的一个示例的高层框图。在块402中,IOEZNS资源保持为独占模式,其阻止任何其他可能对命名空间进行改变的管理相关操作,包括其他的确认命令。由此,命名空间被“锁定”在操作上。在块404中,确认系统向其他综合体成员提供确认系统假定其就绪的系统的列表,并与其他系统进行同步,以保证所有系统就综合体中哪些系统是活跃的达成一致。在块406中,将Namespace Query(命名空间查询)(NSQUERY)消息广播到综合体成员,以获取并行的每个命名空间的视图。因为每个成员具有不同的命名空间视图,所以每个系统在系统的缓存命名空间中具有不同的信息(例如,文件系统可以不安装在所有综合体成员上,并且所有者的文件系统视图不同于文件系统的客户端的视图)。在块408中,确认系统创建并更新了由每个系统报告的文件系统的散列表。每个散列表具有相同的行数,因此对于具有该文件系统的安装的每个成员多对应的每个散列表来说,文件系统F在同一行被散列。对于每个成员已知的每个文件系统,返回状态、所有者、哪些系统是客户端(所有者系统)、客户端是否连接(客户端系统)以及属性。在块410中,确认系统对散列表中的信息进行比较以用于一致性。在块412中,如果任何成员停机,或如果其他成员确定系统停机,则过程重新启动,直到产生没有成员停机的干净查询(clean query)。在块414中,如果不一致,则确认系统执行修正。
如果在任何确认或修正消息中存在任何通信故障,则确认从开始重新启动。确认系统警告操作者并“ping”每个系统,以保证确认系统与该系统通信,如果确认系统不能通信,则确认系统通知操作者哪个系统遇到了通信问题。操作者可以调查或终止有问题的成员。NSValidate例程的一个示例在表3中示出。
图5示出了可以在图2A所示系统的命名空间查询中产生的散列表的示例。如果确认创建例如具有3行的散列表,并且文件系统F和H被散列到该表的第2行,而G被散列到该表的第0行,则图5中示出了得到的散列表,其是作为用于检查一致性的命名空间查询过程的一部分而在确认系统存储中被创建的。散列表的每个条目包括文件系统状态、属性和所有者标识(根据散列表所表示的系统)。如果系统认为自己是所有者,则该系统将包括掩码,该掩码指示该系统认为哪些系统是文件系统的客户端。为每个系统指定掩码位置,并且可以简洁地表示已连接客户端的列表。
SynchronizeReadySystems例程与其他成员通信,以确保哪些系统运行的协定。SynchronizeReadySystems例程的一个示例在表4中示出。
在SYNCREADY消息的目标系统处调用rcv_syncready例程。该例程对发送者就绪系统列表与接收者所保持的就绪系统视图进行比较,并且在本地系统不知道停机系统时,等待针对发送者确认为停机的任何成员的系统停机通知。rcv_syncready例程的一个示例在表5中示出。
Retrieve_namespace例程将来自调用者(NSValidate)的ready_systems列表作为输入,确认并修正命名空间。如果发生任何传输故障,则该例程向NSValidate返回发生传输故障的指示,NSValidate警告管理员,并启动等待/ping进程,重新启动例程。Retrieve_namespace例程的一个示例在表6中示出。
send_nsquery例程向在其命名空间中仍然具有尚未返回到确认系统的条目的所有系统广播NSQuery消息。因为每个系统可以在系统命名空间中具有不同的文件系统数目,所以发送和应答的数目对于每个系统可以不同。send_nsquery例程的一个示例在表7中示出。
sh_compare_tables例程在命名空间已经从所有综合体成员检索之后,由retrieve_namespace调用。该例程指示命名空间是否一致。sh_compare_tables例程的一个示例在表8中示出。对于不一致的命名空间的命名空间属性数据的一个示例在表9中以C编程语言示出。
一旦确认完成,便可以修正命名空间。如果损坏是由通信故障造成的,则具有预期的特定损坏类型。在修正过程期间,确认成员从包括具有损坏和通信错误的每个文件系统的每个成员获取文件系统列表。对损坏类型进行分析,以确定损坏是否符合由于通信故障或消息超时可以发生的损坏简档。如果损坏符合简档,则修正例程通过与对成员命名空间中具有不正确信息的任何成员交流适合的修正而解决该问题。
如果损坏不符合简档,则一个或多个成员具有成员没有检测到的损坏。在确认检测到损坏的情况下,一个或多个成员具有不是自己检测到的损坏。如果具有损坏的成员的数目小于或等于阈值MIN(2,活跃综合体成员的数目),则具有损坏的成员重新启动。如果具有不一致的成员的数目大于该阈值,则调用USS以内部重装文件系统(重装的一个示例包括:停止用户对文件系统的文件活动,综合体范围内卸载文件系统,综合体范围内安装文件系统,以及恢复用户活动)。
图6示出了修正算法的示例性的高层框图。在块602中,从每个成员获取具有通信故障的文件系统的列表。确认者(进行确认的系统)处理可能在综合体成员之间具有不一致的文件系统的完整列表,其中该不一致不是由内部问题导致的。在块604中,对确认步骤期间提取出的命名空间进行复查,与GRS通信以保证zFS信息与GRS信息匹配。形成不一致的文件系统的列表,向操作者发布描述该不一致的详细消息。在块606中,将不一致文件系统的列表与具有通信故障的文件系统列表进行比较,并且将任何具有通信故障的文件系统、以及其不一致与对于通信故障所预期的相匹配的文件系统标记为“通信故障一致”。通信故障的不一致的类型的示例包括:所有者具有针对其他系统的连接,但是系统没有注册该系统具有连接;文件系统的客户端可能注册文件系统停顿,而所有者没有注册文件系统停顿;一个或多个成员可能注册文件系统是被拥有的,同时其他成员注册文件系统是无主的;客户端可能注册文件系统快照相关的错误信息。
在块608中,针对具有通信故障的任何文件系统执行修正(在该步骤之后,内部错误所导致的文件系统不一致保留),其中通信故障例如:连接问题——指示所有者为不具有连接的客户端移除所有者具有的任何额外连接;状态问题——指示具有停顿状态文件系统的任何客户端激活文件系统;所有权问题——指示任何不具有标记无主的文件系统将文件系统移动到无主列表;快照问题——向任何具有错误快照信息的客户端发送正确快照信息,以允许客户端保存正确快照信息。
在块610中,如果需要重新启动(基于发现的不一致)的综合体成员的数目小于或等于允许重新启动的最大成员(阈值),则受影响的成员重新启动。在系统重新启动自己时,该系统重新进行确认和修正。如果任何系统重新启动(zFS在成员处重新启动。USS层将文件请求路由到其他系统,直到zFS重新启动。一旦zFS重新启动,USS对重新启动的zFS进行安装),则进行新的确认。
在块612中,具有不一致的其余文件系统不能通过重新启动进行修正(因为不一致系统的数目大于重新启动阈值)。在这种情况下,获取不一致文件系统通过文件系统的重装而从所有zFS地址空间中被移除的证实,可以将以下处理示例用于每个文件系统:与所有系统进行通信,指示系统检查USS是否注册系统该系统向本地zFS提出文件系统的安装。如果成员注册了文件系统的缓存条目,但是USS没有注册文件系统被本地安装,则zFS成员对其所有缓存中与文件系统相关的任何和全部结构执行强制删除;与仍然具有文件系统的缓存条目的任何成员进行通信,以激活文件系统(在其为停顿的情况下);发布osi_ctl(重装)指令,以指示USS卸载并重装相同模式的文件系统。当每个zFS接收卸载时,zFS对文件系统相关的每个内部结构执行强制删除。从而,当对于文件系统的安装到达个体综合体成员时,综合体成员开始清除文件系统的缓存。
如果期望修正,则编译具有通信故障的文件系统的列表。列表包括来自综合体中所有系统的文件系统,并被用于确定适用什么修正。如果在编译列表时遇到通信故障,则重新启动确认过程。一旦确认完成,综合体中的每个系统清除具有通信故障的文件系统的列表。在sh_compare_tables例程完成之后,从retrieve_namespace调用send_getxmit_fail例程。send_getxmit_fail例程返回具有通信故障的文件系统的更新列表;并返回发送GET_XMITFAIL消息是否遇到通信问题的指示。send_getxmit_fail例程的一个示例在表10中示出。
使用get_fs_list例程来处理临时散列表,以创建具有不一致的文件系统的列表。根据所有的散列表每次分析一个文件系统。对于参与确认的每个系统具有一个散列表。如果关联的系统包括针对文件系统的缓存条目,即,如果文件系统安装在该系统上,则每个散列表包括针对文件系统的NS_ITEM条目。NS_ITEM是包含关于特定文件系统的文件系统状态的结构。get_fs_list例程的输入是临时散列表数组和ready_systems数组。输出是不一致文件系统的列表的地址,更新临时散列表从而仅包括不一致文件系统条目;并且移除具有相关于坏克隆的信息的临时散列表条目。get_fs_list例程的一个示例在表11中示出。
对于具有xmit_fail设置的不一致文件系统F,使用trim_xmit_failure例程对不一致进行分析,以保证没有内部错误导致的不一致。如果发现内部错误导致的不一致,则重置xmit_fail。trim_xmit_failure例程的输入是更新的临时散列表数组、ready_systems数组以及不一致文件系统的列表L。如果不一致与通信故障不对应,则输出是针对L中任何文件系统F而重置的xmit_fail标志。trim_xmit_failure例程的一个示例在表12中示出。
在开始修正之前,检查ready_systems列表中的所有系统,以保证就绪的系统仍然使用check_down_systems例程运行。check_down_systems例程的一个示例在表13中示出。
一旦编译了具有不一致的文件系统列表,则临时散列表仅包括针对不一致文件系统的条目,并且运行系统被验证,可以使用correct_namespace例程修正不一致。correct_namespace例程的输入是临时散列表数组、ready_systems数组和不一致文件系统的列表L。correct_namespace例程的输出是经过修正的文件系统、重新启动的系统和重装的文件系统。correct_namespace例程的一个示例在表14中示出。
如果在以上例程之一中系统确定为停机,则可以发送系统停机通知。当接收到系统停机通知时,可以运行系统停机例程以适应系统损失。system_down例程的一个示例在表15中示出。
上述系统和方法的技术效果和有益效果提供了在分布式命名空间中确认和修正文件系统的高效自动的方法,消除了人为干预修正问题或重新启动整个综合体的需要。该方法提供了良好的首次故障数据捕获,并提供了用于响应通信故障的有效方法,其不会使用户无限期挂起,并为出现问题的系统操作者提供适合的通知。
此处使用的术语仅用于描述特定实施例的目的,不是为了对本发明进行限制。如此处所使用的,单数形式的“一”、“一个”和“该”旨在也包括复数形式,除非上下文另外明确指示。进一步需要理解的是,当术语“包括”和/或“包含”用于本说明书时,其指明存在所描述的特征、整体、步骤、操作、元素和/或组件,但是并不排除存在或添加一个或多个其他特征、整体、步骤、操作、元素、组件和/或其组合。
如具体要求的,以下的权利要求中相应的结构、材料、行为和所有方法或步骤加功能元素的等同物旨在包括用于完成与其他所要求的元素组合的功能的任何结构、材料或行为。本发明的说明书已经用于示例和描述的目的而提出,但是其并不旨在为穷举性的或限制于本发明公开的形式。不脱离本发明的范围和精神的很多改进和变化对于本领域技术人员是显而易见的。为了更好地解释本发明的原理和实际应用,并使得本领域技术人员能够理解本发明用于具有适合于特定预期使用的不同改进的不同实施例,选择和描述了实施例。
表1:
管理命令
1.MOUNT-在文件系统树中安装文件系统。如果对于一个成员(其成为所有者)第一次提出,则将追赶型(catchup)安装广播到CONNECT(连接)到所有者的其他成员,以通知它们是客户端。
2.UNMOUNT-在文件系统树中卸载文件系统。以任何顺序表示。客户端系统将从所有者DISCONNECT(断开),当最后的系统进行卸载时,所有者将关闭该文件系统。
3.QUIESCE(用于备份)-停止综合体范围内对文件系统的写活动。所有者通过向客户端发送QUIESCE(用于备份)消息来协调命令。
4.CLONE-创建原始文件系统的克隆(磁盘上文件系统的备份)。所有者通过告知客户端QUIESCE(用于克隆/删除)来协调命令,QUIESCE停止综合体范围内的所有用户活动。它创建克隆并将CLONE消息发送到客户端以指示目前具有文件系统的新克隆。然后所有者发送UNQUIESCE消息,以告知客户端恢复用户活动。
5.DELETE-类似于克隆,然而克隆被删除。
6.UNQUIESCE(用于备份)-停顿的对立,所有者向客户端发送UNQUIESCE消息以恢复用户活动。(备份程序将调用zFS以QUIESCE文件系统,制作备份,然后调用zFS以激活文件系统)。
7.FSMOVE-将所有权从原始所有者转移到新所有者。原始所有者向客户端发送QUIESCE(用于转移),它们停止用户活动,然后原始所有者向客户端发送UNOWNED消息,这样它们将文件系统改变到无主状态(没有所有者)。这时,文件系统是无主的。然后,新所有者发送START_TAKEOVER消息以保证其他综合体成员同意新所有者可以真正进行,然后TAKEOVER消息告知客户端其真正恢复所有权,它们将文件系统从无主列表转移到新所有者SYSTEM列表。然后发送无关命名空间的其他消息,最终将向客户端发送UNQUIESCE消息以允许恢复用户活动。
8.GROW-扩展文件系统。与其他成员通信以使得文件系统在扩展时不被卸载。所有者在其扩展文件系统之前发送GROW_START消息,在扩展完成时发送GROW_STOP消息。在该过程中不停止用户活动(不需要)。
9.当文件系统的所有者离线时,所有其他综合体成员将转移停机系统无主列表的文件系统,并停止对该文件系统的用户活动。然后综合体成员通过尝试获取所需要的串行化(参见以下)而竞争成为文件系统的所有者,然后进行START_TAKEOVER...用于FSMOVE所描述的序列。
表2
Initilization
1.以独占模式入队IOEZJOIN资源(保证综合体中一次最多初始化一个系统)。
2.调用XCF以查询哪些系统是zFS群组的活跃成员(示出综合体的哪些成员是运行的,并运行zFS软件,因为每次只有一个系统(本系统)可以被初始化或终止),所以系统全部被初始化),为活跃成员提供系统名字列表。
3.调用XCF以加入zFS群组。
4.对于XCF群组的部分的每个成员(列表在步骤2中提供):
a.在本地缓存中为成员创建SYSTEM结构,并将其添加到remote(远程)列表中。
b.调用XCF以与目标成员建立通信连接。
c.如果步骤4b成功,在成员的SYSTEM结构中将as_state标记为AS_READY,否则将其标记为AS_DOWN。
d.→向目标成员发送JOIN消息以交换协议信息和软件层信息。
i.←消息的接收方将进行:
1.锁定其本地sysLock。
2.为发送者创建SYSTEM结构(如果不存在)并将它们标记为AS_DOWN,并保存软件发布层。
3.释放本地sysLock。
4.返回接收方的软件支持/层。
e.如果目标停机然后继续下一个成员(停机成员意味着我们的任务变得更加简单,初始化更少的成员)。
f.保存目标成员软件支持/层。(软件支持指示例如读写综合体是否安装共享支持)。
5.调用NSValidate以进行命名空间确认,以完成初始化序列。
表3
NSValidate
1.如果还没有进行,则以独占模式入队IOEZJOIN资源。(需要注意的是,该步骤已经进行了初始化,所以其跳过初始化,但是该例程在需要确认的任何时间被调用)。
2.以独占模式入队IOEZNS资源。(这保证了综合体中每次仅进行一个确认,使得管理命令如MOUNT、UNMOUNT等等进行等待)。从而命名空间被冻结。
3.以写模式锁定sysLock。
4.计算远程列表中的项目数目,使得N=远程列表中的项目计数。
5.如果由初始化调用,获取N个项目(本地系统还没有运行)的就绪系统列表数组,或者获取N+1个项目的就绪系统列表数组(本地系统已经运行)。该列表仅是系统名字的数组。在z/OS中,每个系统名字最多为8个字符。
6.如果internalErr或XmitProb置位(本地系统在综合体的一个或多个成员上检测到可能的zFS软件,或其在更新另外综合体成员的命名空间的消息中遇到传输故障),发布消息警告系统操作者命名空间确认由于遇到错误而运行。
7.基于远程列表中的哪个SYSTEM结构被标记为就绪而填充ready_systems列表,使ready_count=激活系统的当前数目。(需要注意,系统在确认期间可能停机,所以列表可能收缩)
8.如果XmitProb,则进行:
a.向所有就绪综合体成员广播PING消息(这仅是“喂,你好消息”)。
b.如果任何系统回复失败:
i.发布显示哪个系统具有故障的消息
ii.暂停短暂的时间
iii.转到步骤6。
9.调用SynchronizeReadySystems以与其他成员通信,并保证关于系统在运行的协定。ready_systems列表作为输入传递,输出为成功或失败(发生传输错误)的指示。
10.如果发生传输错误,将XmitProb置位并转到步骤6。
11.调用retrieve_namespace以获取综合体命名空间,对其进行确认并修正。ready_systems列表作为输入传递,输出为是否发生传输问题的指示。
12.如果发生传输错误,将XmitProb置位并转到步骤6。
13.清除InternalErr和XmitProb标志(命名空间已经被确认并修正)和Xmit_list。
14.向其他被请求成员发送NSV_Complete消息,它们将仅清除它们的InternalErr、XmitProb指示和它们的Xmit_list。
15.如果由初始化调用,则返回(初始化将进行更多无关本发明的工作)。
16.释放sysLock。
17.释放IOEZNS
18.释放IOEZJOIN
19.释放ready_systems列表存储。
20.返回。
表4
SynchronizeReadySystems
1.扫描远程系统列表,并更新输入的ready_systems列表,因此它正确地反映本地系统认为综合体的什么成员就绪。
2.在ready_systems列表中循环每个远程成员名字;
a.释放sysLock。
b.向成员传输SYNCREADY消息。本地系统的ready_systems列表被发送到目标成员,所以它能够将它与其本地缓冲相比较。
i.←成员将使用任何其知道为DOWN、发送者不了解的成员的指示回复。
c.在写模式锁定sysLock。(锁定保护本地命名空间缓存在传输中正常地释放以防止死锁)。
d.如果目标系统刚好停机,等待任何系统停机处理该有待完成的成员(系统停机处理意味着XCF调用具有群组-用户指示的zFS,zFS停止对该成员拥有的文件系统的任何用户活动,将那些文件系统移动到无主列表)。
e.如果目标系统返回其知道的停机的系统的名字,但是其名字在传递给它们的ready_systems列表中:
i.等待对于返回的成员名字的系统停机处理。
3.再次扫描远程系统列表,基于哪些系统被视作就绪来创建新的ready_systems列表。
4.如果步骤3中的列表与步骤1中获取的列表不匹配,转到步骤1。
5.向调用者返回更新的ready_systems列表。(此时,所有其他成员就综合体中哪些系统是活跃的达成一致)。
表5
rcv_syncready
1.以写模式锁定sysLock。
2.检查发送者仍然是活跃的,消息对于处理是有效的(发送者在其传输消息之后没有停机)。
3.扫描本地系统上的远程列表中的系统列表,如果不在由发送者提供的列表中的任何被标记为就绪:
a.等待来自XCF的系统停机通知,以及与其相关联的处理(文件系统转移到无主列表)。
4.扫描本地系统上的远程列表中的系统列表,如果存在于由发送者提供的列表中的任何被标记为未就绪:
a.返回向发送者的应答包中发现的第一个系统的名字。
5.释放sysLock。
6.向发送者发送应答包。
表6
Retrieve_namespace
1.设置变量try_again=0。
2.获取散列表指针数组(以上所述,并在图4中示出),每个指针数组用于ready_systems列表中的每个就绪系统。
3.获取8字节cookie数组,每个用于ready_systems列表中的每个就绪系统。每个系统具有不同的命名空间,如果命名空间大,可以对系统进行多次调用以检索命名空间,NSQuery消息的接收方将返回cookie,该cookie将传递到随后的调用(其指示在哪里恢复到命名空间列表中)。
4.获取返回代码(qcode)的数组,一个用于每个追踪查询期间哪个系统可能遇到错误的系统。
5.获取reached_end标志数组,指示特定系统何时返回其命名空间中的最后一项。基本上,因为每个系统具有不同大小的命名空间,因为NSQuery广播到每个综合体成员,所以一些系统可以已经完成查询,同时其他的将需要附加的NSQuery消息以获取更多命名空间。这用于保持哪个系统已经完成以及哪个还没有的追踪,以了解将未来的NSQuery消息广播到哪个系统。
6.创建SYSTEM指针(ready_sysp)数组,一个用于ready_systems列表中列出的每个系统名字。
7.清除散列表指针数组。
8.循环:
a.确定ready_systems列表中列出的每个系统仍然被本地系统视作AS_READY。如果不是,则转到步骤8f。
b.为ready_systems列表中的每个系统创建空的散列表(包括以上示出的NS_ITEMS)。
c.如果没有其他就绪系统(本地系统为综合体中仅有的系统),设置ended=1,否则设置ended=0。
d.在(ended=0,以及具有就绪远程系统)时:
i.调用send_nsquery,以向ready_systems列表中的所有成员广播具有更多条目返回的NSQuery包。输入为ready_systems列表。输入/输出参数为cookie数组和qcode数组,以及应答缓冲的数组,其中每个来自于它们的平的(flattened)命名空间的每个系统。
ii.如果发生传输故障,转到步骤8f。
iii.对于ready_systems列表中具有相应的为0的reached_end[i]值的每个系统ready_systems[i](系统在其命名空间中具有更多条目):
1.如果相应的系统在其应答中返回系统停机错误代码(来自NSQuery的qcode[i]消息),转到步骤8f(目标系统注意到成员停机)。
2.为系统取得应答包中列出的文件系统,并将其添加到用于该系统的相应的散列表中。从而,NS_ITEM对于应答包中列出的每个文件系统添加到适合的散列行中,应答包中的条目本质上是NS_ITEM结构本身,所以其正在从记录的平缓冲创建散列表。
3.如果对于该系统返回的cookie[i]指示没有更多的条目(zFS使用-1的cookie表示),则设置reached_end[i]=1。
iv.如果对于每个就绪系统的所有reached_end[]值都为1,则设置ended=1。
e.扫描ready_systems列表,确保每个系统仍然就绪,如果它们仍然就绪,则从主循环跳出(BREAK)。
f.删除在前步骤中创建的任何散列表和散列表中的所有条目。
g.调用synchronize_ready_systems来串行化其他系统,并更新ready_systems列表,以反映确认过程中哪个成员(或哪些成员)停机。
h.如果在synchronize_ready_systems期间发生传输故障,返回(因此NSValidate能够将问题通知操作者)。
9.填充ready_sysp数组,因此ready_systems列表中的名字和ready_sysp数组中的SYSTEM指针之间具有1-1对应。另外,因为命名空间中的一些文件系统可能是无主的,所以具有用于“无主”系统的特殊条目,从而将用于无主文件系统的SYSTEM结构添加到列表中。
10.调用sh_compare_tables,针对一致性而比较每个系统所知的命名空间。该功能本质上返回命名空间是否一致的指示。它将从发现一致的散列表中移除文件系统,并且其一旦在命名空间中发现不一致文件系统时就停止处理。
11.如果sh_compare_tables指示命名空间不一致;
a.调用send_get_xmitfail以从每个成员获取文件系统的列表,并将那些名字添加到本地Xmit_list。从而在该步骤之后,本地Xmit_list包括具有在其处理期间遇到通信故障的管理命令的所有(ALL)文件系统的列表。这些文件系统在命名空间中预期可能为不一致的,不需要表示zFS软件错误。
b.调用get_fs_list以从sh_compare_tables停止的地方继续。其本质上创建不一致的文件系统的列表。
c.调用trim_xmit_failure,以取得坏文件系统列表,并指示哪个文件系统具有通信故障类型不一致。
d.如果任何具有不一致的系统与通信故障不(NOT)相符,转存(dump)所有综合体成员上的zFS存储,因此问题能够报告给IBM服务。
e.PING_ready_systems列表中的每个系统,以确保与系统的通信。因为在消息传输中不保持sysLock,所以PING期间能够提出系统停机通知。从而如果系统停机或具有通信问题,需要返回调用者(NSValidate),因此其能够重试确认。
f.如果PING对于一个或多个成员失败或系统停机,设置try_again=1,并转到步骤12。
g.调用correct_namespace以修正命名空间。
h.设置try_again=1。
12.释放散列表存储和坏文件系统列表存储。
13.释放get_fs_list所列出的任何坏文件系统。
14.如果try_again,则转到步骤16
15.(此时,命名空间是一致的)。如果用于初始化调用:
a.向ready_systems列表中的每个系统发送READY消息。
i.←每个接收方将发送者SYSTEM状态标记为AS_READY。
b.(从而,此时,新系统在综合体中视作就绪,其确认命名空间并正式加入综合体)。
16.释放步骤2-5中获取的任何剩余存储。
17.如果try_again=1,则跳转(GOTO)步骤1。
表7
send_nsquery
该例程的输入/输出为:
1.将要发送到的系统的ready_systems列表。
2.对于每个系统的应答缓冲的数组。
3.更新的qcode数组,其指示来自每个系统的应答的返回代码。
4.以及cookie数组,其为每个成员返回的恢复cookie。
算法:
1.格式化广播到每个综合体成员的包。该包包括:
a.ready_systems数组,其列出发送者认为在综合体中就绪的所有系统。
b.cookie数组,虽然每个系统具有其自己唯一的cookie,但是cookie的完整数组也将广播到每个成员(以基本上允许单独广播,每个系统在接收到公共包之后定位其cookie)。
2.释放sysLock
3.向综合体中还没有返回值为-1的cookie的所有系统广播NSQuery消息。等待来自成员的所有应答。
4.以写模式锁定sysLock。
5.基于每个系统做出的应答更新cookie和qcode数组。
NSQuery消息的接收方进行以下步骤:
1.扫描到来的包中的输入ready_systems列表,用于与接收方系统相匹配的名字,并保存位置p。
2.使用输入包中的cookie数组的位置p中的相应cookie。
3.检查以保证就绪系统的接收方视图匹配调用者列出的输入ready_systems列表。如果其确定具有失配,其返回错误,因此确认系统将知道它将需要调用synchronize_ready_systems以保证综合体成员同意综合体中哪个系统就绪。
4.然后调用者使用输入cookie确定从哪里继续其命名空间查询。Cookie为8字节值,第一个4字节指示在其命名空间缓存中哪个SYSTEM结构停止,第二个4字节指示哪个文件系统由SYSTEM开始的指示被所有。<0,,0>意味着从起点开始,并返回值<-1,,-1>(或如果使用64比特机器语言为-1)指示扫描完成。
5.获取90K缓冲以容纳文件系统列表。
6.循环,从由cookie指示的第一个SYSTEM开始:
a.从cookie所指示的每个文件系统开始循环,该cookie由指示的SYSTEM所有:
i.将来自FILESYS结构的信息转换为平的NS_ITEM类型表示。
ii.如果缓冲中没有更多空间,则从BOTH循环跳出。
7.将输出cookie更新到停止的地方,或如果处理其余的文字空间则更新为<-1,,-1>。
8.向发送者回传应答。
9.释放应答缓冲存储。
表8
sh_compare_tables
1.如果由于初始化而没有被调用,则为本地系统创建NS_ITEM散列表(本地系统被初始化,从而也具有命名空间缓存)。
2.获取用于ready_item数组的存储,其条目与ready_systems列表中的系统1-1对应。该数组显示系统在查询过程中报告的对应的NS_ITEM,表示文件系统的系统视图。
3.对于每个系统s,在ready_systems列表(包括UNOWNED系统)中,循环:
a.对于对应于系统s的散列表的每行r,循环:
i.循环处理散列行r中的每个文件系统F:
1.查找表示文件系统所有者的SYSTEM结构,然后查找拥有该集合的文件系统的ready_systems列表中的相应索引o。这是数组中的所有者索引。
2.对于每个其他散列表(不是s)循环:
a.在它们相应的散列行r中搜索相同的文件系统F,如果存在则保存与ready_systems列表1-1对应的ready_item数组中相应的NS_ITEM地址。
b.确认所有系统同意所有者,如果不是则返回错误。
3.如果所有者索引o没有表示无主系统(从而文件系统确实被所有):
a.保证所有者系统实际认为它们拥有该文件系统,如果不是则返回错误。
4.如果文件系统安装R/W,所有者系统不支持复合系统读写安装,保证只有一个系统在其本地命名空间中具有文件系统F的条目。
5.如果文件系统仅安装在一个综合体成员上:
a.如果所有者认为任何其他系统已经安装,则返回错误(从而所有者在其NS_ITEM中具有非零连接位掩码)。
b.转到步骤9。
6.对于在其命名空间中具有文件系统F的每个系统:
a.确定它们的misc.attributes和文件系统状态是相同的。(如果系统在克隆期间停机,并且文件系统当前是无主的,则其他系统可能克隆了过期的信息。当系统恢复文件系统的所有权时得到纠正)。如果不一致,返回错误。
7.如果文件系统F为无主的:
a.保证没有系统认为其是所有者,或是已连接的,因此,它是一些所有者系统的客户端。如果不一致则返回错误。
b.转到步骤9。
8.对于不是文件系统所有者的每个系统:
a.确定所有者是否认为客户端连接到客户端系统认为它们自身是连接的文件系统(或其克隆)。如果不一致,则返回错误。
9.从所有散列表中移除对于文件系统F的NS_ITEM,其现在被视作一致的。
4.释放ready_item数组存储。
5.返回成功,命名空间是一致的。
表9
typedef struct badfs_t {
struct badfs_t*next;
int owner_index; /*所有者的ready_systems
数组中的索引*/
NS_ITEM*owner_itemp;
int first_index; /*具有对于本系统的条目的第一个系统的ready_systems数组中的索引*/
NS_ITEM*first_itemp;/*具有对于其命名空间中的文件系统的条目的第一个系统的NS_ITEM的地址*/
int slotnum;
int errflag;
#define OWNER_MISMATCH 0x80000000 /*客
户端上的所有者不匹配所有者上的所有者*/
#define BAD_OWNER 0x40000000 /*所有
者上的缓存条目丢失或具有坏的所有者指针*/
#define SYSADMIN_MULTIPLE_FS 0x20000000 /*对
于综合体admin拥有的fs的多个缓存条目*/
#define UNOWNED_GROWING 0x10000000 /*对
于无主的fs设置扩展标志*/
#define RW_MISMATCH 0x08000000 /*所
有者和客户端的RW标志不匹配*/
#define HASBAK_MISMATCH 0x04000000 /*所
有者和客户端的hasbak标志不匹配*/
#define GROWING_MISMATCH 0x02000000 /*所
有者和客户端的扩展标志不匹配*/
#define DYNMOVE_MISMATCH 0x00800000 /*所
有者和客户端的dynmove标志不匹配*/
#define NODYNMOVE_MISMATCH 0x00400000 /*
所有者和客户端的nofynmove标志不匹配*/
#define MONITOR_MISMATCH 0x00200000 /*所
有者和客户端的monitor标志不匹配*/
#define GROW_MISMATCH 0x00100000 /*所
有者和客户端的grow标志不匹配*/
#define NBS_MISMATCH 0x00080000 /*所有
者和客户端的nbs标志不匹配*/
#define CURSTATE_MISMATCH 0x00040000 /*所
有者和客户端的curstate不匹配*/
#define FSSTATE_MISMATCH 0x00020000 /*所
有者和客户端的fsstate不匹配*/
#define BAKSTATE_MISMATCH 0x00010000 /*所
有者和客户端的bakstate不匹配*/
#define THRESHOLD_MISMATCH 0x00008000 /*所
有者和客户端的threshold不匹配*/
#define INCREMENT_MISMATCH 0x00004000 /*所
有者和客户端的increment不匹配*/
#define MOVEPCT_MISMATCH 0x00002000 /*所
有者和客户端的movepct不匹配*/
#define MOVEINT_MISMATCH 0x00001000 /*所
有者和客户端的moveint不匹配*/
#define MOVEMIN_MISMATCH 0x00000800 /*所
有者和客户端的movemin不匹配*/
#define FSTOKID_MISMATCH 0x00000400 /*所
有者和客户端的fstokid不匹配*/
#define BAKTOKID_MISMATCH 0x00000200 /*所
有者和客户端的baktokid不匹配*/
#define FSID_MISMATCH 0x00000100 /*所有
者和客户端的fsid不匹配*/
#define BAKID_MISMATCH 0x00000080 /*所有
者和客户端的bakid不匹配*/
#define FSDEVNO_MISMATCH 0x00000040 /*所
有者和客户端的fsdevno不匹配*/
#define BAKDEVNO_MISMATCH 0x00000020 /*所
有者和客户端的bakdevno不匹配*/
#define FS_OWNERCONN_CLIENTNOCONN 0x00000010 /*
所有者连接比特置位但是客户端标志复位*/
#define FS_OWNERNOCONN_CLIENTCONN 0x00000008 /*
所有者连接比特复位但是客户端标志置位*/
#define BAK_OWNERCONN_CLIENTNOCONN 0x00000004 /*
所有者连接比特置位但是客户端标志复位*/
#define BAK_OWNERNOCONN_CLIENTCONN 0x00000002 /*
所有者连接比特复位但是客户端标志置位*/
#define FS_OWNERCONN_NOCLIENT 0x00000001 /*所
有者连接比特置位但是没有客户端缓存条目或客户端停机*/
int errflag2;
#define BAK_OWNERCONN_NOCLIENT 0x80000000 /*
所有者连接比特置位但是没有客户端缓存条目或客户端停机*/
#define FS_UNOWNED_CONNECTS 0x40000000 /*具
有非零连接掩码的无主*/
#define FS_SINGLE_CONNECTS 0x20000000 /*具有
非零连接掩码的单个条目*/
#define BAK_UNOWNED_CONNECTS 0x10000000 /*
具有非零连接掩码的无主*/
#define BAK_SINGLE_CONNECTS 0x08000000 /*具
有非零连接掩码的单个条目*/
#define UNOWNED_CONNECTFLAG 0x04000000 /*
具有非零连接标志的无主*/
#define SINGLE_CONNECTFLAG 0x02000000 /*具
有非零连接标志的单个条目*/
int reserved;
int flag; /*非错误
标志*/
#define HAD_XMITFAIL 0x80000000
#define FS_UNOWNED 0x40000000
#define ERROR_XMITFAIL_CONSISTENT 0x20000000
unsigned int cache_entry_count; /*具有缓存条目的系统计数*/
short cache_entry_mask[16]; /*具有缓存条目的系统列表*/
unsigned int attach_count; /*附加filesys的系统计数*/
short attach_mask[16]; /*附加filesys的系统列表*/
unsigned int quiesce_count; /*filesys停顿的系统计数*/
short quiesce_mask[16]; /*filesys停顿的系统列表*/
unsigned int otherstate_count; /*具有处于另外的curstate的filesys
的系统计数*/
short otherstate_mask[16]; /*具有处于另外的curstate的
filesys的系统列表*/
unsigned int owner_mismatch_count; /*具有所有者失配的系统计
数*/
short owner_mismatch_mask[16]; /*具有所有者失配的系统列表*/
unsigned int sysadmin_multiple_FSs_count;/*具有对于filesys的缓存条目的系统计数,所有者为sysadmin*/
short sysadmin_multiple_FSs_mask[16];/*具有缓存条目的系统列表,所有者为sysadmin*/
unsigned int unowned_growing_mismatch_count;/*filesys无主但是filesys在扩展的系统计数*/
short unowned_growing_mismatch_mask[16];/*FS无主但是filesys在扩展的系统列表*/
unsigned int rw_mismatch_count;/*RW标志不匹配的系统计数*/
short rw_mismatch_mask[16];/*RW标志不匹配的系统列表*/
unsigned int hasbak_mismatch_count;/*HAS_BAK标志不匹配的系统计数*/
short hasbak_mismatch_mask[16];/*HAS_BAK标志不匹配的系统列表*/
unsigned int growing_mismatch_count;/*GROWING标志不匹配的系统计数*/
short growing_mismatch_mask[16];/*GROWING标志不匹配的系统列表*/
unsigned int dynmove_mismatch_count;/*DYNMOVE标志不匹配的系统计数*/
short dynmove_mismatch_mask[16];/*DYNMOVE标志不匹配的系统列表*/
unsigned int nodynmove_mismatch_count;/*NODYNMOVE标志不匹配的系统计数*/
short nodynmove_mismatch_mask[16];/*NODYNMOVE标志不匹配的系统列表*/
unsigned int monitor_mismatch_count;/*MONITOR标志不匹配的系统计数*/
short monitor_mismatch_mask[16];/*MONITOR标志不匹配的系统列表*/
unsigned int grow_mismatch_count;/*GROW标志不匹配的系统计数*/
short grow_mismatch_mask[16];/*GROW标志不匹配的系统列表*/
unsigned int nbs_mismatch_count;/*NBS标志不匹配的系统计数*/
short nbs_mismatch_mask[16];/*NBS标志不匹配的系统列表*/
unsigned int curstate_mismatch_count;/*CURSTATE标志不匹配的系统计数*/
short curstate_mismatch_mask[16];/*CURSTATE标志不匹配的系统列表*/
unsigned int fsstate_mismatch_count;/*FSSTATE标志不匹配的系统计数*/
short fsstate_mismatch_mask[16];/*FSSTATE标志不匹配的系统列表*/
unsigned int bakstate_mismatch_count;/*BAKSTATE标志不匹配的系统计数*/
short bakstate_mismatch_mask[16];/*BAKSTATE标志不匹配的系统列表*/
unsigned int threshold_mismatch_count;/*THRESHOLD标志不匹配的系统计数*/
short threshold_mismatch_mask[16];/*THRESHOLD标志不匹配的系统列表*/
unsigned int increment_mismatch_count;/*INCREMENT标志不匹配的系统计数*/
short increment_mismatch_mask[16];/*INCREMENT标志不匹配的系统列表*/
unsigned int movepct_mismatch_count;/*MOVEPCT标志不匹配的系统计数*/
short movepct_mismatch_mask[16];/*MOVEPCT标志不匹配的系统列表*/
unsigned int moveint_mismatch_count;/*MOVEINT标志不匹配的系统计数*/
short moveint_mismatch_mask[16];/*MOVEINT标志不匹配的系统列表*/
unsigned int movemin_mismatch_count;/*MOVEMIN标志不匹配的系统计数*/
short movemin_mismatch_mask[16];/*MOVEMIN标志不匹配的系统列表*/
unsigned int fstokid_mismatch_count;/*FSTOKID标志不匹配的系统计数*/
short fstokid_mismatch_mask[16];/*FSTOKID标志不匹配的系统列表*/
unsigned int baktokid_mismatch_count;/*BAKTOKID标志不匹配的系统计数*/
short baktokid_mismatch_mask[16];/*BAKTOKID标志不匹配的系统列表*/
unsigned int fsid_mismatch_count;/*FSID标志不匹配的系统计数*/
short fsid_mismatch_mask[16];/*FSID标志不匹配的系统列表*/
unsigned int bakid_mismatch_count;/*BAKID标志不匹配的系统计数*/
short bakid_mismatch_mask[16];/*BAKID标志不匹配的系统列表*/
unsigned int fs_ownerconn_clientnoconn_count;/*所有者连接比特置位但是客户端标志复位的系统计数*/
short fs_ownerconn_clientnoconn_mask[16];/*所有者连接比特置位但是客户端标志复位的系统列表*/
unsigned int fs_ownernoconn_clientconn_count;/*所有者连接比特复位但是客户端标志置位的系统计数*/
short fs_ownernoconn_clientconn_mask[16];/*所有者连接比特复位但是客户端标志置位的系统列表*/
unsigned int bak_ownerconn_clientnoconn_count;/*所有者连接比特置位但是客户端标志复位的系统计数*/
short bak_ownerconn_clientnoconn_mask[16];/*所有者连接比特置位但是客户端标志复位的系统列表*/
unsigned int bak_ownernoconn_clientconn_count;/*所有者连接比特复位但是客户端标志置位的系统计数*/
short bak_ownernoconn_clientconn_mask[16];/*所有者连接比特复位但是客户端标志置位的系统列表*/
unsigned int fs_ownerconn_noclient_count;/*所有者连接比特置位但是没有客户端条目或客户端停机的系统计数*/
short fs_ownerconn_noclient_mask[16];/*所有者连接比特置位但是没有客户端条目或客户端停机的系统列表*/
unsigned int bak_ownerconn_noclient_count;/*所有者连接比特置位但是没有客户端条目或客户端停机的系统计数*/
short bak_ownerconn_noclient_mask[16];/*所有者连接比特置位但是没有客户端条目或客户端停机的系统列表*/
unsigned int fs_unowned_connects_count;/*具有非零连接掩码的无主filesys的系统计数*/
short fs_unowned_connects_mask[16];/*具有非零连接掩码的无主filesys的系统列表*/
unsigned int bak_unowned_connects_count;/*具有非零连接掩码的无主FS的系统计数*/
short bak_unowned_connects_mask[16];/*具有非零连接掩码的无主FS的系统列表*/
unsigned int unowned_connectflag_count;/*具有连接标志置位的无主FS的系统计数*/
short unowned_connectflag_mask[16];/*具有连接标志置位的无主FS的系统列表*/
unsigned int single_connectflag_count;/*具有连接标志置位的单个FS的系统计数*/
short single_connectflag_mask[16];/*具有连接标志置位的单个FS的系统列表*/
unsigned int fsdevno_mismatch_count;/*fs devno不匹配的系统计数*/
short fsdevno_mismatch_mask[16];/*fs devno不匹配的系统列表*/
unsigned int bakdevno_mismatch_count;/*bak devno不匹配的系统计数*/
short bakdevno_mismatch_mask[16];/*bak devno不匹配的系统列表*/
unsigned int had_xmitfail_count;/*具有XMIT故障的系统计数*/
short had_xmitfail_mask[16];/*具有XMIT故障的系统列表*/
unsigned int growing_count; /*growing比特置位的系统计数*/
short growing_mask[16]; /*growing比特置位的系统列表*/
unsigned int nobak_count; /*对filesys没有.bak的系统计数*/
short nobak_mask[16]; /*对filesys没有.bak的系统列表*/
}BADFS;
版权2009IBM
表10
send_getxmit_fail
1.对于每个远程系统,发送GET_XMITFAIL消息。
2.在接收到GET_XMITFAIL消息之后,每个远程系统返回管理命令中遇到影响文件系统的通信故障的文件系统名字数组。
3.在接收到应答之后,确认者添加返回到具有通信故障的文件系统的本地列表的文件系统,保证没有重复的条目。(此时,确认者系统具有所有具有某些XCF通信故障的文件系统的完整列表,同时在综合体中为其处理管理命令)。
表11
get_fs_list
1.获取用于ready_item数组的存储,其条目与ready_systems列表1-1对应。该数组显示查询过程期间系统报告的相应的NS_ITEM,并提出文件系统的系统视图。
2.对于每个系统s,ready_systems列表(包括UNOWNED系统),循环:
a.对于相应于系统s的散列表的每一行r,循环:
i.循环处理散列行r中的每个文件系统F:
1.如果F已经在L中,循环处理下一个文件系统。
2.对F初始化ready_item数组,通过遍历每个散列表的行r,在ready_item数组的相应位置(slot)保存相应的NS_ITEM地址(如果存在)。
3.遍历ready_item数组,如果任何系统指示存在坏克隆,保证在进行一致性检查时没有考虑该克隆。从ready_item数组中的所有条目移除关于克隆的信息。
4.查找表示文件系统所有者的SYSTEM结构,然后查找拥有该文件系统的系统的ready_systems列表中相应的索引o。这是进入数组的所有者索引。
5.初始化BADFS结构I,其用于表示不一致文件系统,如果F确定是不一致的,则将其添加到不一致列表L中。
6.如果F在具有通信故障的文件系统列表中,在I中将HAD_XMITFAIL置位。
7.通过遍历ready_item数组递增cache_entry_count,并在结构I中设置cache_entry位掩码。该掩码将包括1比特用于具有对于F的本地安装的每个系统。
8.通过遍历ready_item数组确认所有系统对于所有者达成一致。如果存在所有者失配,在I中设置OWNER_MISMATCH标志,然后使用GRS帮助确定真正所有者,或确定没有所有者。必要时更新所有者索引o。
9.如果所有者索引o没有表示无主系统(从而文件系统确实被所有):
a.保证拥有系统具有F的本地安装,如果没有,则:
i.更新I
1.设置BAD_OWNER标志
2.递增restart_system_count
3.设置表示restart_system_mask中的所有者的比特
ii.将I添加至L
iii.循环处理下一个文件系统(步骤2.a.i)。该不一致仅能通过重新启动所有者而修正。不需要确定对于F的所有不一致。
b.保证拥有系统实际认为它们拥有该文件系统,如果不是
i.更新I
1.设置BAD_OWNER标志
2.递增restart_system_count
3.设置表示restart_system_mask中的所有者的比特
ii.将I添加至L
iii.循环处理下一个文件系统(步骤2.a.i)。该不一致仅能通过重新启动所有者而修正。不需要确定该文件系统的所有不一致。
c.如果F安装R/W,所有者系统不支持复合系统读写安装,保证只有一个系统在其本地命名空间中具有针对F的条目,如果不是:
i.更新I
1.设置SYSADMIN_MULTIPLE_FSS标志
2.递增sysadmin_mulitple_FSs_count
3.在sysadmin_mulitple_FSs_mask位掩码中设置表示具有意外安装的系统的比特
ii.注意,具有本地安装的客户端系统在I中的cache_entry_mask标记,并且标记为ready_item数组中的非空条目。
10.如果文件系统仅安装在一个综合体成员上(ready_item数组中仅有一个针对文件系统的条目):
a.如果所有者认为任何其他系统已经安装(从而所有者在其NS_ITEM中具有非零connected_mask位掩码),在I中设置FS_SINGLE_CONNECTS标志,指示连接不一致。发布消息,指示该所有者认为存在具有本地安装的客户端。
11.如果文件系统是无主的
a.确认所有系统具有零connected_mask位掩码和零NS_FS_CONNECTED以及NS_BAK_CONNECTED标志。如果这不为真:
i.基于NS_FS_CONNECTED和
NS_BAK_CONNECTED标志,在I中更新以下标志:
1.相应地设置FS_UNOWNED_CONNECTS和/或BAK_UNONWED_CONNECTS标志。
2.递增fs_unowned_connects_count和/或bak_unowned_connects_count
3.在fs_unowned_connects_mask和/或
bak_unowned_connects_mask位掩码中设置表示具有非零连接的系统的比特
ii.发布消息指示存在认为具有到无主文件系统连接的系统。
iii.继续检查不一致
b.确认NS_FS_GROWING标志在所有系统中为0。如果这不为真:
i.更新I
1.设置UNOWNED_GROWING标志
2.递增unowned_growing_mismatch_count
3.在I中的unowned_growing_mismatch_mask位掩码中设置比特表示具有扩展标志的系统。
ii.发布消息指示存在认为无主文件系统在扩展的系统。
iii.继续检查不一致。
12.对于每个在其本地命名空间中具有文件F的系统(ready_item数组中的F)。(通过修正以快速确定哪个系统需要被告知激活文件系统或对特定系统需要进行什么其他类型的修正,而使用以下掩码。):
a.如果文件系统在本系统中停顿,则递增/设置I中的quiesce_count/mask
b.如果文件系统在本系统中缓存,则递增/设置I中的attach_count/mask
c.如果文件系统在本系统中位任何其他状态,则递增/设置I中的other_count/mask
d.如果本系统中NS_FS_GROWING比特置位,则递增/设置I中的growing_count/mask
e.如果本系统中NS_FS_HAS_BAK比特没有置位,则递增/设置I中的nobak_count/mask
f.确定它们的misc.attributes和文件系统状态相同。对于与所有者不相同的每个系统,更新I:
i.如果NS_FS_RW不匹配,设置RW_MISMATCH、rw_mismatch_count/mask
ii.如果NS_FS_HAS_BAK不匹配,设置HASBAK_MISMA_TCH,
hasbak_mismatch_count/mask
iii.如果NS_FS_GROWING不匹配,设置GROWING_MISMATCH、
growing_mismatch_count/mask
iv.如果NS_DYNMOVE不匹配,设置DYNMOVE_MISMATCH、dynmove_mismatch_count/mask
v.如果NS_NODYNMOVE不匹配,设置NODYNMOVE_MISMATCH、nodynmove_mismatch_count/mask
vi.如果NS_MONITOR不匹配,设置MONITOR_MISMATCH、
monitor_mismatch_count/mask
vii.如果NS_GROW不匹配,设置GROW_MISMATCH、grow_mismatch_count/mask
viii.如果NS_NBS不匹配,设置NBS_MISMATCH、nbs_mismatch_count/mask
ix.如果curstate不匹配,设置CURSTATE_MISMATCH,curstate_mismatch_count/mask
x.如果state不匹配,设置FSSTATE_MISMATCH、fsstate_mismatch_count/mask
xi.如果bak_state不匹配,设置BAKSTATE_MISMATCH、bakstate_mismatch_count/mask
xii.如果threshold不匹配,设置THRESHOLD_MISMATCH、threshold_mismatch_count/mask
xiii.如果increment不匹配,设置INCREMENT_MISMATCH、increment_mismatch_count/mask
xiv.如果movepct不匹配,设置MOVEPCT_MISMATCH、movepct_mismatch_count/mask
xv.如果moveint不匹配,设置MOVEINT_MISMATCH、moveint_mismatch_count/mask
xvi.如果movemin不匹配,设置MOVEMIN_MISMATCH、movemin_mismatch_count/mask
xvii.如果fs_tokid不匹配,设置FSTOKID_MISMATCH、fstokid_mismatch_count/mask
xviii.如果bak_tokid不匹配,设置BAKTOKID_MISMATCH、baktokid_mismatch_count/mask
xix.如果fs_id不匹配,设置FSID_MISMATCH、fsid_mismatch_count/mask
xx.如果bak_id不匹配,设置BAKID_MISMATCH、bakid_mismatch_count/mask
g.如果存在失配,发布消息命名与所有者不匹配的第一个系统。消息可能包括文件系统的名字、拥有系统的名字、客户端系统的名字以及每个系统上的2字节标志域(来自NS_ITEM)或每个系统上的不一致状态域。
13.对于不是文件系统所有者的每个系统:
a.确定所有者是否认为客户端连接到客户端系统认为其自身是连接的文件系统(或其克隆)。如果所有者和客户端信息不匹配,则在I中设置以下不一致标志,并在I的位掩码中记录攻击(offending)客户端。
i.对于每个NS_FS_CONNECTED和/或NS_BAK_CONNECTED标志复位的客户端系统
1.如果所有者的connected_mask位掩码中用于本系统的比特为置位
a.更新I中的FS_OWNERCONN_CLIENTNOCONN、fs_ownerconn_clientnoconn_count/mask或BAK_OWNERCONN_CLIENTNOCONN、bak_ownerconn_clientnoconn
ii.对于每个NS_FS_CONNECTED和/或NS_BAK_CONNECTED标志置位的客户端系统
1.如果在所有者的connected_mask位掩码中用于本系统的比特为复位
a.更新I中的
FS_OWNERNOCONN_CLIENTCONN、fs_ownernoconn_clientconn_count/mask或BAK_OWNERNOCONN_CLIENTCONN、bak_ownernoconn_clientconn
b.发布用于发现的第一个不一致的消息。该消息将指示所有者认为客户端具有安装,但是客户端没有,或特定客户端报告安装,但是所有者不认为其安装在该客户端上。
14.如果I中的标志指示文件系统是不一致的,则通过将I添加到链表中而将文件系统添加到不一致文件系统列表中。否则,从所有的散列表中移除针对文件系统F的NS_ITEM,其现在视为一致的。循环(到步骤2.a.i)以处理下一个文件系统。
3.释放ready_item数组存储。
4.向调用者返回不一致文件系统的列表L。
表12
trim_xmit_failure
1.对L中的每个不一致文件系统F进行循环:
a.如果F中的xmit_fail比特置位:
i.确认唯一的不一致为:
1.由于发送UNOWNED、TAKEOVER或CLONE消息的通信问题导致的涉及所有权
2.由于发送CONNECT和DISCONNECT消息的通信问题导致的涉及连接
3.由于发送QUIESCE和UNQUIESCE消息的通信问题导致的涉及停顿
ii.如果存在其他不一致,复位对于F的xmit_fail状态标志。F将不适合使用通信故障算法进行修正。
表13
check_down_systems
1.向所有就绪的综合体成员广播PING消息
2.如果任何系统应答失败,返回错误。该例程的调用者,(retrieve_namespace),将重新启动确认。
表14
correct_namespace
1.如果存在由通信故障造成的不一致,首先对它们进行修正。在进行这些修正活动之后,返回调用者并重新启动确认。
a.对于L中具有状态不一致(state inconsistency)以及HAD_XMITFAIL标志置位的每个文件系统F(不一致仅由通信故障造成):
i.如果确认者(进行本修正的本地系统)报告文件系统停顿,则本地激活文件系统。
ii.对于报告文件系统停顿的每个远程系统,发送UNQUIESCE消息。
1.远程接收方将激活该文件系统。
iii.如果因为远程系统停机或发送UNQUIESCE消息存在通信故障而不能发送消息,返回调用者并启动新的确认。
iv.复位F中的状态不一致(state inconsistency)标志
b.对于L中具有GROWING不一致和HAD_XMITFAIL标志置位的每个文件系统F:
i.如果确认者报告GROWING属性置位,则对本地系统的命名空间FILESYS结构中的文件系统复位GROWING属性。
ii.对于每个报告GROWING属性置位的远程系统,发送GROW_STOP消息。
1.←远程接收方将从其本地FILESYS结构中清除其GROWING指示
iii.如果发送GROW_STOP存在通信故障,或者如果远程系统停机,返回调用者,并启动新的确认。
iv.复位F中的GROWING_MISMATCH标志。
c.对于L中具有OWNER_MISMATCH不一致和HAD_XMITFAIL标志置位的每个文件系统F(没有系统应当保持对于文件系统的GRS入队)
i.如果确认者相信文件系统具有所有者,本地停顿并将文件系统移动到无主列表
ii.对于报告所有者的每个远程系统,发送TAKEOVERFAIL消息。
1.远程系统将停顿文件系统并将文件系统移动到无主列表。
iii.如果由于通信故障,或因为远程系统停机而不能发送消息,则返回调用者并启动新的确认。
d.对于L中具有克隆(HASBAK_MISMATCH)不一致和HAD_XMITFAIL置位的每个文件系统F:
i.如果确认者不具有克隆,则为本地系统的命名空间中的克隆创建命名空间条目(更新FILESYS)。
ii.对于没有报告克隆的每个远程系统,发送CLONE消息。
1.远程接收方将使用表示克隆的FILESYS结构更新其命名空间。
iii.如果由于通信故障,或因为远程系统停机而不能发送消息,返回调用者并启动新的确认。
iv.复位F中的HASBAK_MISMATCH标志。
e.对于L中具有连接不一致(connection inconsistency)和HAD_XMITFAIL置位的每个文件系统F(所有者报告不连接的系统连接):
i.对于每个客户端系统,其中相应的connected_mask位掩码为置位,但是客户端NS_FS_CONNECTED和/或
NS_BAK_CONNECTED标志复位,或客户端没有安装(没有NS_ITEM条目)
1.如果确认者为所有者,为不应当具有连接的远程客户端,为本地系统上的文件系统处理断开。
2.否则像远程所有者发送DISCONNECT,指示哪个系统需要从文件系统断开。
1.远程接收方将为指定的远程客户端系统处理断开。
3.如果因为通信故障或因为远程系统停机而不能发送消息,则返回调用者并启动新的确认。
4.复位F中的不同连接不一致标志。
2.如果不存在仅由通信故障造成的不一致,则尝试通过重新启动系统来修复文件系统。当系统重新启动时,一般所有不一致都消除了。将重新启动的系统数目限制为:NumRestart=MIN(2,丛成员数目/2)。如果确认系统必须重新启动,则其最后重新启动(并且当其重新启动时,其进行确认,保证程序得到继续)。远程启动通过给它们发送ABORT消息而重新启动,这些系统将终止然后重新启动zFS。在重新启动系统之后(在确认者没有重新启动的情况下),返回调用者(retrieve_namespace)并启动新的确认。
a.制作具有不一致文件系统的系统列表。位掩码描述不一致以及它们发生的系统。例如,对于状态不一致具有位掩码,curstate_mismatch_mask。如果所有者认为文件系统停顿,该状态位掩码将具有1比特用于不认为文件系统停顿的每个客户端。查看L中的所有文件系统的所有位掩码消息如果用于系统的任何比特为置位,则将其添加到需要重新启动的系统列表中。
b.如果具有不一致文件系统的系统数目<=NumRestart,则通过向它们发送ABORT消息而重新启动它们,最后重新启动确认者。
c.否则,仅看具有所有权不一致的系统,具体地为OWNER_MISMATCH置位的系统。如果这些系统的数目<=NumRestart,则重新启动它们。
d.否则,重新启动所有不同意针对任何文件系统的GRS的拥有系统。这些系统记录在restart_system_mask中。它们或者没有安装它们应该安装的文件系统,或者它们认为不拥有。这些系统必须重新启动,所以忽略NumRestart限制。注意,此时,如果没有包括GRS的不一致,则没有系统将重新启动。(注意,如果GRS没有用在确定正确所有者的过程中,则该步骤不是必需的,GRS对于算法和本步骤是可选的)。
3.如果不一致不能通过重新启动系统而修复,则尝试在文件系统的基础上修复不一致。对于列表L中留下的每个不一致文件系统F:
a.为每个具有USS的不一致系统确认安装状态。最后确认所有者的安装状态。注意,所有者可以是与确认者系统相关的远程系统。
i.对于认为其具有安装的每个远程系统,即,具有对于文件系统的NS_ITEM的每个系统
1.向该系统发送CHECK_MOUNT消息,以保证如果USS没有安装记录,将文件系统从远程命名空间中移除。
1.远程接收方将调用USS osi_ctl(getmntstatus)以确定USS是否认为本地文件系统已安装。如果不是,则本地系统将卸载该文件系统(FILESYS),从其命名空间进行所有必要的清理。(注意,osi_ctl只是USS本地缓存;从而其命名空间的查询)。
2.如果因为远程系统停机,或者因为通信故障而不能发送消息,则返回调用者,指示确认需要重新启动。
ii.如果确认者认为其具有安装,即,确认者具有对文件系统的NS_ITEM
1.通过调用osi_ctl(getmntstatus)来查询USS,以保证USS认为文件系统被本地安装。
2.如果USS指示文件系统没有本地安装,则从本地命名空间卸载文件系统(FILESYS),进行所有必要的清理以保证文件系统不再存在于本地命名空间中
iii.如果上述行动导致文件系统F从所有综合体成员上的命名空间中移除,则F不再存在于命名空间中,从而从L中移除了F。
b.对于L中仅具有状态不一致的每个文件系统F:(CURSTATE_MISMATCH,FSSTATE_MISMATCH,BAKSTATE_MISMATCH)
i.如果确认者报告文件系统停顿,本地激活文件系统。
ii.对于报告文件系统(原始或其克隆)停顿的每个远程系统:
1.向系统发送UNQUIESCE消息,指示要激活的文件系统的名字。
1.远程接收方将激活该文件系统。
2.如果由于通信故障或因为远程系统停机而不能发送消息,则返回调用之,指示确认需要重新启动
iii.复位F中的CURSTATE_MISMATCH、FSSTATE_MISMATCHBAKSTATE_MISMATCH标志
c.对于停机系统一次或多次检查本地SYSTEM结构。如果ready_systems列表中的任何系统现在停机,则返回调用者并启动新的确认。
d.对于保留在L中的每个文件系统F,尝试通过重装来修复。基本上,前面的三个步骤保证了zFS综合体成员如果其没有本地安装,则在其命名空间中不具有文件系统。另外,文件系统状态在综合体中是一致的。通过保证USS和zFS命名空间关于F是一致的,卸载然后重装文件系统以修正该问题。本文档中之前描述的卸载顺序将向所有综合体成员发送卸载,以保证文件系统F不在任何zFS命名空间中。因此后续的安装开始“清除”,并应当保证适合的一致性。在该过程中,文件系统及其克隆都必须卸载并重装。
i.如果F停顿,保证综合体中的所有文件系统都激活。
1.如果确认者具有对它的安装,本地激活该文件系统。
2.对于安装文件系统的每个远程系统(由不一致文件系统列表L中的条目F中的connect位掩码指示):
1.向指示需要激活的文件系统的名字的系统发送UNQUIESCE消息。
1.远程接收方将激活该文件系统。
2.如果因为通信故障,或因为远程系统停机而不能发送消息,则返回调用者并启动新的确认。
ii.在综合体范围内广播REMOUNT_START消息,指示正在进行对文件系统的重装。当正在进行重装时,拒绝任何安装文件系统的手动尝试,以及以该文件系统为目标的任何其他命令。从而仅允许正在开始的内部重装。这是为了处理一些用户在修正运行的同时刚好决定卸载或安装文件系统或其克隆的情况,用户的安装或卸载尝试被拒绝。
iii.查找能够从其发布重装的系统。重装仅能够从具有本地安装的系统发布。对确认者给定优选的。
1.放弃综合体串行化。释放sysLock和IOEZNS资源。
2.如果重装必须从远程系统发布,则向远程系统发送具有需要重装的文件系统名字的REMOUNT消息。
1.远程接收方将发布osi_ctl(remountsamemode)以发起对克隆(如果安装)进而原始文件系统的重装过程。
3.否则(确认者将发布重装):
1.通过osi_ctl(remountsamemode)调用USS,如果安装了克隆,则重装克隆,然后重装原始文件系统。(因为重装的目的是为了保证文件系统在将其再次添加到命名空间之前,从命名空间中移除,用于克隆的关联安装将被拒绝直到原始文件系统被卸载。这意味着,如果文件系统及其克隆都在修正之前安装,则仅原始文件系统将在修正之后通过重装而安装。)
4.重新获取综合体串行化:
1.独占地入队IOEZNS资源
2.在写模式锁定sysLock。
4.返回调用者并启动新的确认。本例程的调用者造成释放用于临时散列表和不一致文件系统列表L的存储。
表15
system_down
1.锁定sysLock
2.在SYSTEM结构将as_state标志设置为AS_PARTIALLY_DOWN,以指示系统停机,对本地系统上的该系统进行system-down处理。
3.发布消息,示出停机的系统的名字。
4.唤醒等待来自XCF的system-down通知的任务。
5.对于之前由停机系统所拥有的每个文件系统:
a.停顿(或接管)对于该文件系统的所有用户活动
b.将文件系统移动到无主列表
6.调度任务以继续system-down处理——这将进行接管处理,并激活由本地系统所拥有的、由停机的系统停顿的文件系统(停机系统已经发起文件系统的备份)。
7.释放sysLock。
Claims (20)
1.一种用于综合体命名空间中的确认的方法,包括:
从综合体的确认者成员向所述综合体的第二成员发送指令,以阻止对综合体命名空间进行改变的操作;
确定所述综合体的所述确认者成员是否与所述综合体的所述第二成员通信,以及所述综合体的成员是否保持当前的综合体状态信息;
响应于确定所述综合体的所述确认者成员在与所述综合体的所述第二成员通信,以及所述综合体的成员保持当前的综合体状态信息,从所述确认者成员向所述第二成员发送指令以向所述确认者成员发送与所述第二成员相关联的第一命名空间属性数据;
确定与所述第二成员相关联的所述第一命名空间属性数据是否与第二命名空间属性数据一致;以及
响应于确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据不一致,发送指令以修正所述第一命名空间属性数据。
2.如权利要求1的方法,其中所述方法包括:
响应于确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据一致,从所述综合体的所述确认者成员向所述综合体的所述第二成员发送指令,以允许对所述综合体命名空间进行改变的操作。
3.如权利要求1的方法,其中确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据是否一致包括:
生成所述第一命名空间属性数据的第一散列表;
生成所述第二命名空间属性数据的第二散列表;以及
比较所述第一散列表与所述第二散列表。
4.如权利要求1的方法,其中所述第一命名空间属性数据包括文件系统的就绪状态。
5.如权利要求1的方法,其中所述第一命名空间属性数据包括与文件系统相关联的克隆的指示。
6.如权利要求1的方法,其中所述第一命名空间属性数据包括文件系统的处理属性。
7.如权利要求1的方法,其中所述方法包括:
确定综合体成员是否与所述综合体失去通信;
响应于确定综合体成员与所述综合体失去通信,确定所述综合体的所述确认者成员是否与所述综合体的所述第二成员通信,以及所述综合体的成员是否保持当前的综合体状态信息;以及
响应于确定所述综合体的所述确认者成员未与所述综合体的所述第二成员通信以及所述综合体的成员未保持当前的综合体状态信息,重新从所述确认者成员向所述第二成员发送所述指令,以向所述确认者成员发送与所述第二成员相关联的所述第一命名空间属性数据。
8.一种用于综合体命名空间中的确认的方法,包括:
接收指令,以修正与综合体的第二成员相关联的、不一致的第一命名空间属性数据;
从确认者成员向所述综合体的所述第二成员发送指令,以向所述确认者成员发送与综合体通信错误相关联的文件系统列表;
确定所述不一致的第一命名空间属性数据是否对应于所述综合体通信错误;以及
响应于确定所述第一命名空间属性数据对应于所述综合体通信错误,向所述综合体的所述第二成员发送包括经修正的第一命名空间属性数据的指令。
9.如权利要求8的方法,其中所述方法还包括:
将所述不一致的第一命名空间属性数据替换为所述经修正的第一命名空间属性数据。
10.如权利要求9的方法,其中所述方法包括:
响应于将所述不一致的第一命名空间属性数据替换为所述经修正的第一命名空间属性数据,从所述确认者成员向所述综合体的所述第二成员发送指令,以允许对所述综合体命名空间进行改变的操作。
11.如权利要求8的方法,其中所述方法还包括:
响应于确定所述不一致的第一命名空间属性数据不对应于综合体通信错误,确定具有不一致命名空间的综合体成员的数目是否大于阈值;
响应于确定所述具有不一致命名空间的综合体成员的数目小于所述阈值,关闭所述综合体的所述第二成员;以及
重新启动所述综合体的所述第二成员。
12.如权利要求8的方法,其中所述方法还包括:
响应于确定所述不一致的第一命名空间属性数据不对应于综合体通信错误,确定具有不一致命名空间的综合体成员的数目是否大于阈值;以及
响应于确定所述具有不一致命名空间的综合体成员的数目大于所述阈值,修正所述不一致的第一命名空间属性数据。
13.如权利要求12的方法,其中修正所述不一致的第一命名空间属性数据包括:
发送指令以卸载与所述不一致的第一命名空间属性数据相关联的第一文件系统;
发送指令以清除与所述第一文件系统相关联的所有数据结构;以及
向所述综合体的所述第二成员发送指令以安装所述第一文件系统。
14.如权利要求8的方法,其中所述第一命名空间属性数据包括文件系统的就绪状态。
15.如权利要求8的方法,其中所述第一命名空间属性数据包括与文件系统相关联的克隆指示。
16.如权利要求8的方法,其中所述第一命名空间属性数据包括文件系统的处理属性。
17.如权利要求8的方法,其中所述方法包括:
确定综合体成员是否失去与所述综合体的通信;
响应于确定综合体成员失去与所述综合体的通信,确定所述综合体的确认者成员是否与所述综合体的第二成员通信,以及所述综合体的成员是否保持当前的综合体状态信息;以及
响应于确定所述综合体的确认者成员未与所述综合体的第二成员通信并且所述综合体的成员不保持当前的综合体状态信息,发送指令以修正与综合体的第二成员相关联的、不一致的第一命名空间属性数据。
18.一种用于综合体命名空间中的确认的系统,包括:
被配置为从综合体的确认者成员向所述综合体的第二成员发送指令以阻止对综合体命名空间进行改变的操作的装置;
被配置为确定所述综合体的所述确认者成员是否与所述综合体的所述第二成员通信,以及所述综合体的成员是否保持当前的综合体状态信息的装置;
被配置为响应于确定所述综合体的所述确认者成员在与所述综合体的所述第二成员通信以及所述综合体的成员保持当前的综合体状态信息,从所述确认者成员向所述第二成员发送指令以向所述确认者成员发送与所述第二成员相关联的第一命名空间属性数据的装置;
被配置为确定与所述第二成员相关联的所述第一命名空间属性数据是否与第二命名空间属性数据一致的装置;以及
被配置为响应于确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据不一致,发送指令以修正所述第一命名空间属性数据的装置。
19.如权利要求18的系统,还包括:
被配置为响应于确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据一致,从所述综合体的所述确认者成员向所述综合体的所述第二成员发送指令,以允许对所述综合体命名空间进行改变的操作的装置。
20.如权利要求18的系统,其中被配置为确定与所述第二成员相关联的所述第一命名空间属性数据与所述第二命名空间属性数据是否一致的装置包括:
被配置为生成所述第一命名空间属性数据的第一散列表的装置;
被配置为生成所述第二命名空间属性数据的第二散列表的装置;以及
被配置为比较所述第一散列表与所述第二散列表的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/349,261 | 2009-01-06 | ||
US12/349,261 US8195704B2 (en) | 2009-01-06 | 2009-01-06 | Validation and correction in a distributed namespace |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101770513A CN101770513A (zh) | 2010-07-07 |
CN101770513B true CN101770513B (zh) | 2012-10-03 |
Family
ID=42312380
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010100023043A Expired - Fee Related CN101770513B (zh) | 2009-01-06 | 2010-01-05 | 用于分布式命名空间中的确认和修正的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8195704B2 (zh) |
CN (1) | CN101770513B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8782635B2 (en) * | 2011-01-19 | 2014-07-15 | International Business Machines Corporation | Reconfiguration of computer system to allow application installation |
US9037901B2 (en) * | 2011-08-19 | 2015-05-19 | International Business Machines Corporation | Data set autorecovery |
US8924644B2 (en) * | 2011-12-28 | 2014-12-30 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd. | Extending cache in a multi-processor computer |
US9852026B2 (en) | 2014-08-06 | 2017-12-26 | Commvault Systems, Inc. | Efficient application recovery in an information management system based on a pseudo-storage-device driver |
US11249858B2 (en) | 2014-08-06 | 2022-02-15 | Commvault Systems, Inc. | Point-in-time backups of a production application made accessible over fibre channel and/or ISCSI as data sources to a remote application by representing the backups as pseudo-disks operating apart from the production application and its host |
US20160124990A1 (en) * | 2014-11-05 | 2016-05-05 | Netapp, Inc. | System and method for determining occurrences of data corruption in a file system under active use |
US10747747B2 (en) * | 2014-12-11 | 2020-08-18 | International Business Machines Corporation | Interpreting invalid data as valid data |
US9471409B2 (en) * | 2015-01-24 | 2016-10-18 | International Business Machines Corporation | Processing of PDSE extended sharing violations among sysplexes with a shared DASD |
US9766825B2 (en) | 2015-07-22 | 2017-09-19 | Commvault Systems, Inc. | Browse and restore for block-level backups |
US10296368B2 (en) | 2016-03-09 | 2019-05-21 | Commvault Systems, Inc. | Hypervisor-independent block-level live browse for access to backed up virtual machine (VM) data and hypervisor-free file-level recovery (block-level pseudo-mount) |
US10740193B2 (en) | 2017-02-27 | 2020-08-11 | Commvault Systems, Inc. | Hypervisor-independent reference copies of virtual machine payload data based on block-level pseudo-mount |
US10664352B2 (en) * | 2017-06-14 | 2020-05-26 | Commvault Systems, Inc. | Live browsing of backed up data residing on cloned disks |
US10423505B2 (en) | 2017-10-18 | 2019-09-24 | Hewlett Packard Enterprise Development Lp | Agents to autonomously detect corruption or failure of network namespaces |
US10671370B2 (en) * | 2018-05-30 | 2020-06-02 | Red Hat, Inc. | Distributing file system states |
US10831571B2 (en) | 2018-09-27 | 2020-11-10 | International Business Machines Corporation | Communicating between systems using a coupling facility list structure |
US11921698B2 (en) | 2021-04-12 | 2024-03-05 | Torana Inc. | System and method for data quality assessment |
US11880350B2 (en) | 2021-06-08 | 2024-01-23 | International Business Machines Corporation | Identifying resource lock ownership across a clustered computing environment |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1168195A2 (en) * | 2000-06-23 | 2002-01-02 | NTT DoCoMo, Inc. | Information search system |
CN101243372A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 互斥地激活微处理器资源以控制最大功率的系统和方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0472861B1 (en) * | 1990-08-31 | 1995-09-20 | International Business Machines Corporation | Method and apparatus for cross-partition control in a partitioned process environment |
US5537574A (en) * | 1990-12-14 | 1996-07-16 | International Business Machines Corporation | Sysplex shared data coherency method |
US5692180A (en) * | 1995-01-31 | 1997-11-25 | International Business Machines Corporation | Object-oriented cell directory database for a distributed computing environment |
US5758339A (en) * | 1996-05-31 | 1998-05-26 | International Business Machines Corporation | Method of identifying shared and unshared information using system chapters, a sysplex chapter, a table of contents, and a header |
US6032216A (en) * | 1997-07-11 | 2000-02-29 | International Business Machines Corporation | Parallel file system with method using tokens for locking modes |
US5940841A (en) * | 1997-07-11 | 1999-08-17 | International Business Machines Corporation | Parallel file system with extended file attributes |
US6647508B2 (en) * | 1997-11-04 | 2003-11-11 | Hewlett-Packard Development Company, L.P. | Multiprocessor computer architecture with multiple operating system instances and software controlled resource allocation |
US6088697A (en) * | 1997-12-18 | 2000-07-11 | International Business Machines Corporation | Dynamic change management in an extended remote copy operation |
US6675175B2 (en) * | 1999-02-19 | 2004-01-06 | International Business Machines Corporation | Method and system for sharing catalogs in a multiprocessing system utilizing a shared processor |
US6339793B1 (en) * | 1999-04-06 | 2002-01-15 | International Business Machines Corporation | Read/write data sharing of DASD data, including byte file system data, in a cluster of multiple data processing systems |
US6408298B1 (en) * | 1999-12-15 | 2002-06-18 | Microsoft Corporation | Methods and systems for copying and moving across virtual namespaces |
US20030126199A1 (en) * | 2002-01-02 | 2003-07-03 | Kadri Seemab Aslam | Peer-to-peer namespace directory and discovery |
US7120704B2 (en) * | 2002-01-31 | 2006-10-10 | International Business Machines Corporation | Method and system for workload balancing in a network of computer systems |
US6947925B2 (en) * | 2002-04-15 | 2005-09-20 | International Business Machines Corporation | System and method for performing lookups across namespace domains using universal resource locators |
US8311980B2 (en) * | 2002-12-09 | 2012-11-13 | Hewlett-Packard Development Company, L.P. | Namespace consistency for a wide-area file system |
US20050091226A1 (en) * | 2003-10-23 | 2005-04-28 | Yun Lin | Persistent caching directory level support |
US7620630B2 (en) * | 2003-11-12 | 2009-11-17 | Oliver Lloyd Pty Ltd | Directory system |
US7496565B2 (en) * | 2004-11-30 | 2009-02-24 | Microsoft Corporation | Method and system for maintaining namespace consistency with a file system |
US7610307B2 (en) * | 2004-11-30 | 2009-10-27 | Microsoft Corporation | Method and system of detecting file system namespace changes and restoring consistency |
US7860908B2 (en) * | 2005-10-20 | 2010-12-28 | International Business Machines Corporation | Computer method for handling private process state in a stacking file system |
US7912195B2 (en) * | 2006-06-07 | 2011-03-22 | Comcast Cable Holdings, Llc | Method for provisioning subscribers, products, and services in a broadband network |
US8010973B2 (en) * | 2007-05-31 | 2011-08-30 | Calix, Inc. | Class loader for managing a network |
-
2009
- 2009-01-06 US US12/349,261 patent/US8195704B2/en not_active Expired - Fee Related
-
2010
- 2010-01-05 CN CN2010100023043A patent/CN101770513B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1168195A2 (en) * | 2000-06-23 | 2002-01-02 | NTT DoCoMo, Inc. | Information search system |
CN101243372A (zh) * | 2005-08-19 | 2008-08-13 | 国际商业机器公司 | 互斥地激活微处理器资源以控制最大功率的系统和方法 |
Also Published As
Publication number | Publication date |
---|---|
US8195704B2 (en) | 2012-06-05 |
US20100174752A1 (en) | 2010-07-08 |
CN101770513A (zh) | 2010-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101770513B (zh) | 用于分布式命名空间中的确认和修正的方法和系统 | |
US6256634B1 (en) | Method and system for purging tombstones for deleted data items in a replicated database | |
AU752846B2 (en) | Method and apparatus for providing failure detection and recovery with predetermined degree of replication for distributed applications in a network | |
CN106716360B (zh) | 支持多租户应用服务器环境中的补丁修补的系统和方法 | |
AU752844B2 (en) | Method and apparatus for providing failure detection and recovery with predetermined replication style for distributed applications in a network | |
CN103036717B (zh) | 分布式数据的一致性维护系统和方法 | |
US8375363B2 (en) | Mechanism to change firmware in a high availability single processor system | |
CN103297268B (zh) | 基于p2p技术的分布式数据一致性维护系统和方法 | |
US7194652B2 (en) | High availability synchronization architecture | |
AU2015241457B2 (en) | Geographically-distributed file system using coordinated namespace replication | |
JP2022095645A (ja) | 異種ターゲットに対して使用するために分散型データソースからの変更データをキャプチャするためのシステムおよび方法 | |
US7516361B2 (en) | Method for automatic checkpoint of system and application software | |
US5740433A (en) | Remote duplicate database facility with improved throughput and fault tolerance | |
CN105830033B (zh) | 用于在分布式数据网格中支持持久存储装置版本化和完整性的系统和方法 | |
US20040083358A1 (en) | Reboot manager usable to change firmware in a high availability single processor system | |
US20050289169A1 (en) | Lossless recovery for computer systems with map assisted state transfer | |
US20050289414A1 (en) | Lossless recovery for computer systems with remotely dependent data recovery | |
AU2014312103A1 (en) | Distributed file system using consensus nodes | |
US7065673B2 (en) | Staged startup after failover or reboot | |
US8612799B2 (en) | Method and apparatus of backing up subversion repository | |
US7315959B2 (en) | Real-time remote backup system and related method | |
CN101877655A (zh) | 网络管理系统、网管服务器和方法 | |
CN113326251B (zh) | 数据管理方法、系统、设备和存储介质 | |
CN111917588A (zh) | 边缘设备管理方法、装置、边缘网关设备和存储介质 | |
CN101751292A (zh) | Atc系统中一种实现多机关键数据一致性功能的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20121003 Termination date: 20190105 |
|
CF01 | Termination of patent right due to non-payment of annual fee |