Managing file objects in a data storage system
Claim Score by NHIP
Abstract
Managing file objects in a data storage system includes providing a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system and includes providing at least one metadata location server, where an entity accessing a specific file object of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server. Information for the subset of file objects may include a table having file identifiers and metadata location information. The metadata location information may point to data storage for a metadata object for a file.

Term
7.6 yearsto projected expiry
Projected expiry 2 May 2034, counted from filing; an application has no term until it is granted.
- Priority and filed
- Published
- Today
- Projected expiry
25 claims: 5 independent, 20 dependent
- 1A method of managing file objects in a data storage system, comprising:providing a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system;and providing at least one metadata location server, wherein an entity accessing a specific file object of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server.
- 9Computer software, provided in a computer-readable medium, that manages file objects in a data storage system, the software comprising:executable code, provided on a plurality of metadata servers, that maintains information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system;and executable code, provided on at least one metadata location server, that provides an indication of which of the metadata servers contains data for a specific file object in response to a request therefor provided to the at least one metadata server.
- 17A data storage system, comprising:a plurality of clients that access file objects of the storage system;and a plurality of interconnected servers coupled to the clients, the servers including a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system, the servers also including at least one metadata location server, wherein a client accessing a specific file object of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server.
- 24Broadest claimClaim Score 77, broad(NHIP)A method of managing file objects in a data storage system, comprising:providing a plurality of a first type of server, each having information for only a subset of file objects in the storage system;and providing at least one of a second type of server that provides information indicating which of the servers of the first type contains data for a specific file object by first accessing the at least one server of the second type.
- 25A data storage system, comprising:a plurality of clients that access file objects of the storage system;and a plurality of interconnected servers coupled to the clients, the servers including a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system, the servers also including at least one metadata location server, wherein a client accessing a specific file of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server.
Independent claims5
221 paragraphs in 4 sections, as filed
BACKGROUND OF THE INVENTION
p-00021. Technical Field
p-0003This application relates to the field of storing data, and more particularly to the field of data storage services in a scalable high capacity system.
p-00042. Description of Related Art
p-0005It has been estimated that the amount of digital information created, captured, and replicated in 2006 was 161 exabytes or 161 billion gigabytes, which is about three million times the information in all the books ever written. It is predicted that between 2006 and 2010, the information added annually to the digital universe will increase more than six fold from 161 exabytes to 988 exabytes. The type of information responsible for this massive growth is rich digital media and unstructured business content. There is also an ongoing conversion from analog to digital formats—film to digital image capture, analog to digital voice, and analog to digital TV.
p-0006The rich digital media and unstructured business content have unique characteristics and storage requirements that are different than structured data types (e.g. database records), for which many of today's storage systems were specially designed. Many conventional storage systems are highly optimized to deliver high performance I/O for small chunks of data. Furthermore, these systems were designed to support gigabyte and terabyte sized information stores.
p-0007In contrast, rich digital media and unstructured business content have greater capacity requirements (petabyte versus gigabyte/terabyte sized systems), less predictable growth and access patterns, large file sizes, billions and billions of objects, high throughput requirements, single writer, multiple reader access patterns, and a need for multi-platform accessibility. Conventional storage systems have met these needs in part by using specialized hardware platforms to achieve required levels of performance and reliability. Unfortunately, the use of specialized hardware results in higher customer prices and may not support volume economics as the capacity demands grow large—a differentiating characteristic of rich digital media and unstructured business content.
p-0008Some of the cost issues have been addressed with tiered storage, which attempts to reduce the capital and operational costs associated with keeping all information on a single high-cost storage tier. However, tiered storage comes with a complex set of decisions surrounding technology, data durability, functionality and even storage vendor. Tiered storage solutions may introduce unrelated platforms, technologies, and software titles having non-zero operational costs and management requirements that become strained as the quantity of data increases.
p-0009In addition, tiered storage may cause a data replica incoherence which results in multiple, disjoint copies of information existing across the tiers of storage. For example, storage management software handling data backup and recovery may make multiple copies of information sets on each storage tier (e.g. snapshots, backup sets, etc). Information Life-cycle Management (ILM) software dealing with information migration from one tier to another may create additional and often overlapping copies of the data. Replication software may make an extra copy of the information set within a particular tier in order to increase performance to accessing applications. Each of these functions typically runs autonomously from one another. The software may be unable to realize and/or take advantage of the multiple replicas of the same information set.
p-0010In addition, for large scale unstructured information stores, it may be difficult to maintain a system and manage the environment as components fail. For example, a two petabyte information store may be comprised of eight thousand 250-gigabyte disk drives. Disk failures should be handled in a different manner in a system of this scale so that the system continues to operate relatively smoothly whenever one or only a few of the disk drives fail.
p-0011Thus, it would be desirable to provide a storage system that addresses difficulties associated with high-cost specialized hardware, storage tiering, and failure management.
SUMMARY OF THE INVENTION
p-0012According to the system described herein, managing file objects in a data storage system includes providing a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system and includes providing at least one metadata location server, where an entity accessing a specific file object of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server. Information for the subset of file objects may include a table having file identifiers and metadata location information. The metadata location information may point to data storage for a metadata object for a file. The table may also include lease information that indicates entities that have read permission for the file object and entities that have write permission for the file object. File objects may be provided with unique object identifiers. The at least one metadata location server may determine an appropriate metadata server to use for a file object according to an object identification value for the file object. At least some of the metadata servers may maintain a table that correlates a subset of the object identification values with file objects. At least some of the metadata servers may be provided with a unique subset of object identification values for assigning to new file objects.
p-0013According further to the system described herein, computer software, provided in a computer-readable medium, manages file objects in a data storage system. The software includes executable code, provided on a plurality of metadata servers, that maintains information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system and includes executable code, provided on at least one metadata location server, that provides an indication of which of the metadata servers contains data for a specific file object in response to a request therefor provided to the at least one metadata server. Information for the subset of file objects may include a table having file identifiers and metadata location information. The metadata location information may point to data storage for a metadata object for a file. The table may also includes lease information that indicates entities that have read permission for the file object and entities that have write permission for the file object. File objects may be provided with unique object identifiers. The at least one metadata location server may include executable code that determines an appropriate metadata server to use for a file object according to an object identification value for the file object. At least some of the metadata servers may maintain a table that correlates a subset of the object identification values with file objects. At least some of the metadata servers may be provided with a unique subset of object identification values for assigning to new file objects.
p-0014According further to the system described herein, a data storage system includes a plurality of clients that access file objects of the storage system and a plurality of interconnected servers coupled to the clients, the servers including a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system, the servers also including at least one metadata location server, where a client accessing a specific file object of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server. Information for the subset of file objects may include a table having file identifiers and metadata location information. The metadata location information may point to data storage for a metadata object for a file. File objects may be provided with unique object identifiers. The at least one metadata location server may determine an appropriate metadata server to use for a file object according to an object identification value for the file objects for the file. At least some of the metadata servers may maintain a table that correlates a subset of the object identification values with file objects. At least some of the metadata servers may be provided with a unique subset of object identification values for assigning to new file objects.
p-0015According further to the system described herein, managing file objects in a data storage system includes providing a plurality of a first type of server, each having information for only a subset of file objects in the storage system and includes providing at least one of a second type of server that provides information indicating which of the servers of the first type contains data for a specific file object by first accessing the at least one server of the second type.
p-0016According further to the system described herein, a data storage system includes a plurality of clients that access file objects of the storage system and includes a plurality of interconnected servers coupled to the clients, the servers including a plurality of metadata servers, each metadata server having information for only a subset of file objects in the storage system, each subset for each of the metadata servers being less than a total number of file objects for the system, the servers also including at least one metadata location server, where a client accessing a specific file of the system determines which of the metadata servers contains data for the specific file object by first accessing the at least one metadata location server.
p-0017According further to the system described herein, managing a plurality of files includes providing at least one server having a table with plurality of file identifiers, each of the file identifiers including a pointer to a metadata file object containing a layout storage object that indicates storage parameters for corresponding files and includes accessing a particular one of the files by obtaining information from the at least one server to access the layout storage object corresponding to the particular file to determine synchronous and asynchronous mirrors for the file. Each layout storage object may be provided as a tree and leaves of the tree may map logical addresses of a corresponding file to data storage locations. At least one internal node of the tree may indicate that at least one leaf node thereof is a mirror of an other leaf node thereof. In response to a data write and an internal node indicating that a first leaf node thereof is an asynchronous mirror of a second leaf node thereof, data may be written to the first leaf node and an update message may be provided to the at least one server. Managing a plurality of files may also include the at least one server placing information on a queue corresponding to the message and servicing the queue to write the data to the second leaf node. In response to a data write and an internal node indicating that a first leaf node thereof is a synchronous mirror of a second leaf node thereof, data may be written to the first leaf node and to the second leaf node. In response to accessing data being unsuccessful, a mirror thereof may be accessed. The layout storage object may include pointers to data file objects that map a logical address space for a corresponding file to data storage space corresponding to physical data storage. Each data file object may have a state indicating that the data file object is one of: current, an out-of-date mirror of another data object, immutable, and invalid. In response to an attempt to write to a data file object that is immutable, new storage space may be allocated and data may be written to the new storage space. In response to an attempt to read a data file object that is invalid, zeros may be returned.
p-0018According further to the system described herein, computer software, provided in a computer-readable medium, manages a plurality of files. The software includes executable code provided in at least one server that manages a table with plurality of file identifiers, each of the file identifiers including a pointer to a metadata file object containing a layout storage object that indicates storage parameters for corresponding files and includes executable code that accesses a particular one of the files by obtaining information from the at least one server to access the layout storage object corresponding to the particular file to determine synchronous and asynchronous mirrors for the file. Each layout storage object may be provided as a tree and leaves of the tree may map logical addresses of a corresponding file to data storage locations. At least one internal node of the tree may indicate that at least one leaf node thereof is a mirror of an other leaf node thereof. In response to a data write and an internal node indicating that a first leaf node thereof is an asynchronous mirror of a second leaf node thereof, executable code may cause the data to be written to the first leaf node and an update message to be provided to the at least one server. Executable code at the at least one server may place information on a queue corresponding to the message and may service the queue to write the data to the second leaf node. In response to a data write and an internal node indicating that a first leaf node thereof is a synchronous mirror of a second leaf node thereof, executable code may cause the data to be written to the first leaf node and to the second leaf node. The computer software may also include executable code that, in response to accessing data being unsuccessful, accesses a mirror thereof. The layout storage object may include pointers to data file objects that map a logical address space for a corresponding file to data storage space corresponding to physical data storage. Each data file object may have a state indicating that the data file object is one of: current, an out-of-date mirror of another data object, immutable, and invalid. The computer software may also include executable code that allocates new storage space and writes data to the new storage space in response to an attempt to write to a data file object that is immutable. The computer software may also include executable code that causes zeros to be returned in response to an attempt to read a data file object that is invalid.
p-0019According further to the system described herein, managing a plurality of files includes providing at least one server having a plurality of file identifiers, each of the file identifiers including a pointer to a metadata file object containing a layout storage object that indicates storage parameters for corresponding files and includes accessing a particular one of the files by obtaining information from the at least one server to access the layout storage object corresponding to the particular file to determine how data for the file is stored and retrieved.
p-0020According further to the system described herein, a data storage system includes a plurality of servers, where at least one server has a table with plurality of file identifiers, each of the file identifiers including a pointer to a metadata file object containing a layout storage object that indicates storage parameters for corresponding files and includes a plurality of clients that access a particular one of the files by obtaining information from the at least one server to access the layout storage object corresponding to the particular file to determine synchronous and asynchronous mirrors for the file.
p-0021According further to the system described herein, a data storage system includes a plurality of servers, where at least one server has a plurality of file identifiers, each of the file identifiers including a pointer to a metadata file object containing a layout storage object that indicates storage parameters for corresponding files and includes a plurality of clients that access a particular one of the files by obtaining information from the at least one server to access the layout storage object corresponding to the particular file to determine how data for the file is stored and retrieved.
p-0022According further to the system described herein, managing files includes receiving a plurality of policies for a new file, where different policies may be applied according to predetermined conditions, receiving a request to create a new file, selecting an appropriate policy for the new file according to the predetermined conditions, determining if sufficient resources are available according to the appropriate policy, and obtaining file objects to create the file in response to their being sufficient resources according to the appropriate policy. Policies may be received via a user management interface. The predetermined conditions may include an identity of a client creating a file. The appropriate policy may include information regarding mirrors for the file. The appropriate policy may indicate a minimum geographic distance between the mirrors. Determining if sufficient resources are available may include consulting a resource manager. The resource manager may receive information about system resources and maintains a table indicative thereof. The system resources may include data storage areas.
p-0023According further to the system described herein, computer software, provided in a computer-readable medium, manages files. The software includes executable code that receives a plurality of policies for a new file, wherein different policies may be applied according to predetermined conditions, executable code that receives a request to create a new file, executable code that selects an appropriate policy for the new file according to the predetermined conditions, executable code that determines if sufficient resources are available according to the appropriate policy and executable code that obtains file objects to create the file in response to their being sufficient resources according to the appropriate policy. Policies may be received via a user management interface. The predetermined conditions may include an identity of a client creating a file. The appropriate policy may include information regarding mirrors for the file. The appropriate policy may indicate a minimum geographic distance between the mirrors. Executable code that determines if sufficient resources are available may include executable code that consults a resource manager. The resource manager may include executable code that receives information about system resources and maintains a table indicative thereof. The system resources may include data storage areas.
p-0024According further to the system described herein, a data storage system includes a plurality of clients that access files and includes a plurality of interconnected servers, coupled to the clients, a subset of the servers receiving a plurality of policies for a new file, where different policies may be applied according to predetermined conditions, a subset of the servers receiving a request to create a new file, a subset of the servers selecting an appropriate policy for the new file according to the predetermined conditions, a subset of the servers determining if sufficient resources are available according to the appropriate policy, and a subset of the servers obtaining file objects to create the file in response to their being sufficient resources according to the appropriate policy. Policies may be received via a user management interface. The predetermined conditions may include an identity of a client creating a file. The appropriate policy may include information regarding mirrors for the file. The servers include a subset of servers that are consulted to determine if sufficient resources are available. The subset of servers that are consulted to determine if sufficient resources are available may receive information about system resources and maintains a table indicative thereof. The system resources may include data storage areas.
p-0025According further to the system described herein, managing file objects includes receiving a plurality of policies for file objects, where different policies may be applied according to predetermined conditions, receiving a request to obtain new file objects, selecting an appropriate policy for the new file objects according to the predetermined conditions, determining if sufficient resources are available according to the appropriate policy, and obtaining file objects in response to their being sufficient resources according to the appropriate policy.
p-0026According further to the system described herein, a data storage system includes a plurality of clients that access file objects and includes a plurality of interconnected servers, coupled to the clients, a subset of the servers receiving a plurality of policies for new file objects, where different policies may be applied according to predetermined conditions, a subset of the servers receiving a request to obtain new file objects, a subset of the servers selecting an appropriate policy for the new file objects according to the predetermined conditions, a subset of the servers determining if sufficient resources are available according to the appropriate policy, and a subset of the servers obtaining the file objects in response to their being sufficient resources according to the appropriate policy.
p-0027According further to the system described herein, tracking storage resources includes providing a table containing storage resources along with capabilities and statuses thereof, updating the table in response to a change of status of a storage resource, updating the table in response to a change in capabilities of a storage resource and, in response to an inquiry for a storage resource having a particular capability, searching the table for a storage resource having the particular capability. Tracking storage resources may also include adding an element to the table in response to a new resource being added to the system. The capabilities may include RAID striping, data deduplication, and green operation. The status may be one of: on-line, off-line, and full. The storage resources may be disk drives. The disk drives may be managed by data storage servers that present an OSD interface for the disk drives. The table may be maintained by a resource manager server that receives information about storage resources from other servers.
p-0028According further to the system described herein, computer software, provided in a computer-readable storage medium, tracks storage resources. The software includes a table that contains storage resources along with capabilities and statuses thereof, executable code that updates the table in response to a change of status of a storage resource, executable code that updates the table in response to a change in capabilities of a storage resource, and executable code that searches the table for a storage resource having a particular capability in response to an inquiry for a storage resource having the particular capability. The software may also include executable code that adds an element to the table in response to a new resource being added to the system. The capabilities may include RAID striping, data deduplication, and green operation. The status may be one of: on-line, off-line, and full. The storage resources may be disk drives. The disk drives may be managed by data storage servers that present an OSD interface for the disk drives. The table may be maintained by a resource manager server that receives information about storage resources from other servers.
p-0029According further to the system described herein, a resource manager that manages storage resources for a storage system includes a processing device and a computer-readable memory coupled to the processing device, the computer-readable memory having a table provided in a data structure and containing storage resources along with capabilities and statuses thereof, the computer-readable memory also having executable code that updates the table in response to a change of status of a storage resource, executable code that updates the table in response to a change in capabilities of a storage resource, and executable code that searches the table for a storage resource having a particular capability in response to an inquiry for a storage resource having the particular capability. The computer-readable memory may also contain executable code that adds an element to the table in response to a new resource being added to the system. The capabilities may include RAID striping, data deduplication, and green operation. The status may be one of: on-line, off-line, and full. The storage resources may be disk drives. The disk drives may be managed by data storage servers that present an OSD interface for the disk drives.
p-0030According further to the system described herein, a data storage system includes a plurality of clients and a plurality of servers coupled to the clients, where a subset of the servers manage storage resources using a table containing storage resources along with capabilities and statuses thereof, where the subset updates the table in response to a change of status of a storage resource, updates the table in response to a change in capabilities of a storage resource, and searches the table for a storage resource having the particular capability in response to an inquiry for a storage resource having a particular capability. The subset of servers may add an element to the table in response to a new resource being added to the system. The storage resources may be disk drives.
p-0031According further to the system described herein, providing information to a resource manager of a data storage system includes providing information to the resource manager in response to a change in capabilities of a storage resource, providing information to the resource manager in response to a change in status of a storage resource, and providing information to the resource manager in response to adding a new storage resource. The storage resources may be disk drives.
p-0032According further to the system described herein, accessing data file objects includes providing a file system interface on at least one client, where the file system interface allows an application running on the at least one client to make file system calls to access the data file objects and providing a Web Services interface on the at least one client, where the Web interface allows an application to access file objects using the Web at the same time that file objects are being accessed through the file system interface. The Web Services interface may be a SOAP interface and/or a REST interface. Accessing data file objects may also include providing a direct file object interface on the at least one client, where the direct file object interface allows an application to directly access file objects at the same time that file objects are being accessed using the Web Services interface and using the file system interface. Accessing data file objects may also include providing file name services that translate file names into file object identifiers, where the file name services are accessed by the file system interface and/or the Web Services interface. Providing the file system interface may include providing a virtual file system in a kernel address space of the at least one client. Accessing data file objects may also include providing a layout manager that manages file objects. The layout manager may be provided in the kernel address space of the at least one client. The layout manager is provided in user address space of the at least one client. The virtual file system may access the layout manager using a bridge between kernel memory address space and user memory address space.
p-0033According further to the system described herein, a client that accesses a plurality of file objects includes a file system interface that allows an application running on the at least one client to make file system calls to access the data file objects, a Web Services interface that allows an application to access file objects using the Web at the same time that file objects are being accessed through the file system interface, and a communication interface, coupled to the file system interface and to the Web Services interface, that exchanges file object data between the client and a plurality of servers containing the file objects. The client may also include a direct file object interface that allows an application to directly access file objects at the same time that file objects are being accessed using the Web Services interface and using the file system interface. The client may also include a file name service that translates file names into file object identifiers, where the file name service is accessed by the file system interface and/or the Web Services interface. The file system interface may include a virtual file system in a kernel address space of the at least one client. The client may also include a layout manager that manages file objects. The layout manager may be provided in the kernel address space of the at least one client. The layout manager may be provided in user address space of the at least one client. The virtual file system may access the layout manager using a bridge between kernel memory address space and user memory address space.
p-0034According further to the system described herein, computer software, provided in a computer-readable storage medium, includes executable code that allows an application running on at least one client to make file system calls to access the data file objects and includes executable code that allows an application to access file objects using the Web at the same time that file objects are being accessed through the file system interface. The computer software may also include executable code that allows an application to directly access file objects at the same time that file objects are being accessed using the Web and using file system calls. The computer software may also include executable code that translates file names into file object identifiers.
p-0035According further to the system described herein, a system simultaneously allows accessing a plurality of file objects using a file system interface and a Web Services interface. The system includes a plurality of servers that contain the file objects and at least one client, coupled to the servers. The client includes a file system interface that allows an application running on the at least one client to make file system calls to access the data file objects, a Web Services interface that allows an application to access file objects using the Web at the same time that file objects are being accessed through the file system interface, and a communication interface, coupled to the file system interface and the Web Services interface, that exchanges file object data between the client and a plurality of servers containing the file objects. The file system interface may include a virtual file system in a kernel address space of the client.
p-0036According further to the system described herein, managing objects for a data file includes obtaining a metadata object for the file, determining if the metadata object indicates that a portion of the data file includes synchronous mirrors, and, in response to a write of new data to the data file, writing the new data to each synchronous mirror. Data objects of a data file may be in one of four states: current, stale, empty, and immutable. In response to a read operation and the corresponding data object being in a stale state, data may be read for a corresponding synchronous mirror that is in a current state.
BRIEF DESCRIPTION OF DRAWINGS
<figref idrefs="DRAWINGS">FIG. 1</figref> is a diagram illustrating servers and clients according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIGS. 2A and 2B</figref> are diagrams illustrating a client coupled to servers and to other network(s) according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 3</figref> is a diagram illustrating a client having server operations software, client software, and a plurality of interfaces therebetween according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 4</figref> is a diagram illustrating a file having a metadata file object and a plurality of data file objects according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 5</figref> is a diagram illustrating a metadata file object for a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 6</figref> is a diagram illustrating an example of a layout storage object tree for a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 7</figref> is a diagram illustrating an example of a layout storage object tree with multiple maps for a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 8</figref> is a diagram illustrating another example of a layout storage object tree with multiple maps and replication nodes for a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 9</figref> is a flowchart illustrating a client obtaining a lease for and operating on a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 10</figref> is a flowchart illustrating a client reading data from a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 11</figref> is a flowchart illustrating a client writing data to a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 12</figref> is a flowchart illustrating steps performed by a client in connection with finding an alternative copy of data according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 13</figref> is a flowchart illustrating a client writing to synchronous mirrors for data according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 14</figref> is a flow chart illustrating a client converting file names to object identifiers according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 15</figref> is a diagram illustrating a client having an application in user memory address space and a having a VFS, file name services, kernel I/O drivers, layout manager, and a communication interface in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 16</figref> is a flow chart illustrating operation of a VFS at a client according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 17</figref> is a diagram illustrating a client having an application, file name services, user level I/O drivers, and a layout manager in user memory address space and having a communication interface in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 18</figref> is a diagram illustrating a client having an application, a file presentation layer, user level I/O drivers, and a layout manager in user memory address space and having a VFS and communication interface and a kernel memory address space to user memory address space bridge in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 19</figref> is a diagram illustrating a client having an application in user memory address space and having file name services, kernel I/O drivers, a layout manager, and a communication interface in kernel address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 20</figref> is a diagram illustrating a client having an application, file name services, user level I/O drivers, and a layout manager in user memory address space and having a communication interface in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 21</figref> is a diagram illustrating a client having an application, file name services, user level I/O drivers, and a layout manager in user memory address space and having a communication interface and a kernel memory address space to user memory address space bridge in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 22</figref> is a diagram illustrating a client having an application in user memory address space and having a Web Services module, kernel I/O drivers, a layout manager, and a communication interface in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 23</figref> is a diagram illustrating a client having an application, a Web Services layer, user level I/O drivers, and a layout manager in user memory address space and having a communication interface in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 24</figref> is a diagram illustrating a client having an application, a Web Services layer, user level I/O drivers, and a layout manager in user memory address space and having a communication interface and a kernel memory address space to user memory address space bridge in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 25</figref> is a diagram illustrating a client having a plurality of applications, a Web Services layer, file name services, user level I/O drivers, and a layout manager in user memory address space and having a VFS, a communication interface and a kernel memory address space to user memory address space bridge in kernel memory address space according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 26</figref> is a diagram illustrating different types of servers and a user management interface according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 27</figref> is a flow chart illustrating steps performed in connection with using security managers servers to obtain credentials for using policy manager servers according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 28</figref> is a diagram illustrating a resource manager table according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 29</figref> is a flow chart illustrating steps performed in connection with processing resource information to update a resource table according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 30</figref> is a flow chart illustrating steps performed in connection with finding a resource with a desired capability according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 31</figref> is a flow chart illustrating steps performed in connection with a metadata server servicing a lease request according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 32</figref> is a flow chart illustrating steps performed in connection with monitoring and recalling expired leases according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 33</figref> is a flow chart illustrating steps performed in connection with lease recall processing according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 34</figref> is a table illustrating data maintained for files handled by a metadata server according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 35</figref> illustrates a linked list for file leases handled that are by a metadata server according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 36</figref> is a table illustrating data maintained by a metadata server to correlate object identifiers and data storage locations according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 37</figref> illustrates a table at a metadata location server that correlates object identifier ranges and metadata servers according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 38</figref> is a flow chart illustrating processing performed by a metadata location server in connection with returning a particular metadata server according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 39</figref> is a flow chart illustrating processing performed by a metadata server in connection with deleting a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 40</figref> is a flow chart illustrating processing performed by a metadata server in connection with creating a file according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 41</figref> is a flow chart illustrating processing performed by a metadata server in connection with responding to a failed data write operation according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 42</figref> is a flow chart illustrating processing performed by a metadata server in connection with responding to a stale mirror update message according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 43</figref> is a flow chart illustrating processing performed by a metadata server in connection with adding an asynchronous copy job to a queue according to an embodiment of the system described herein.
<figref idrefs="DRAWINGS">FIG. 44</figref> is a flow chart illustrating processing performed by a metadata server in connection with servicing an asynchronous copy job according to an embodiment of the system described herein.
DETAILED DESCRIPTION OF VARIOUS EMBODIMENTS
p-0081Referring to <figref idrefs="DRAWINGS">FIG. 1</figref>, a diagram illustrates servers <b>102</b> coupled to a plurality of clients <b>104</b>-<b>106</b>. Each of the clients <b>104</b>-<b>106</b> represents one or more processing devices that receives file services from the servers <b>102</b>. Each of the clients <b>104</b>-<b>106</b> may or may not be independent of other ones of the clients <b>104</b>-<b>106</b>. One or more of the clients <b>104</b>-<b>106</b> may be a multiprocessing/multiuser system and possibly have multiple independent users. The clients <b>104</b>-<b>106</b> are meant to represent any number of clients.
p-0082The file services provided by the servers <b>102</b> may include data storage and retrieval as well as related operations, such as data mirroring, cloning, etc. The servers <b>102</b> may be implemented using a plurality of services (and/or interconnected file servers including SAN components) that are provided by interconnected processing and/or storage devices. In an embodiment herein, each of the clients <b>104</b>-<b>106</b> may be coupled to the servers <b>102</b> using the Web, possibly in conjunction with local TCP/IP connections. However, it is possible for one or more of the clients <b>104</b>-<b>106</b> to be coupled to the servers <b>102</b> using any other appropriate communication mechanism and/or combinations thereof to provide the functionality described herein.
p-0083Referring to <figref idrefs="DRAWINGS">FIG. 2A</figref>, the client <b>104</b> is shown as being coupled to the servers <b>102</b> and to one or more other network(s). The other network(s) may include a local area network (LAN). Thus, the client <b>104</b> may be a gateway between the servers <b>102</b> and a LAN to which one or more other devices (not shown) may also be coupled. The client <b>104</b> may act as a local file server to the one or more other devices coupled to the LAN by providing data from the servers <b>102</b> to the one or more other devices. Of course, it is possible for one or more other clients to simultaneous act as gateways to the same or different other network(s). Generally, for the discussion herein, reference to a particular one of the clients <b>104</b>-<b>106</b> may be understood to include reference to any or all of the clients <b>104</b>-<b>106</b> coupled to the servers <b>102</b> unless otherwise indicated.
p-0084Referring to <figref idrefs="DRAWINGS">FIG. 2B</figref>, a diagram shows the client <b>104</b> being coupled to the servers <b>102</b> and one or more other network(s) (e.g., a LAN) in a configuration that is different from that shown in <figref idrefs="DRAWINGS">FIG. 2A</figref>. In the configuration of <figref idrefs="DRAWINGS">FIG. 2B</figref>, a router <b>108</b> is coupled between the servers <b>102</b> and the client <b>104</b>. The router <b>108</b> may be any conventional router that may be accessed by the client <b>104</b>. In the configuration of <figref idrefs="DRAWINGS">FIG. 2B</figref>, the client <b>104</b> uses only a single connection point to both the servers <b>102</b> and to the other network(s). In the configuration of <figref idrefs="DRAWINGS">FIG. 2B</figref>, the client <b>104</b> may act as local file server and gateway between the servers <b>102</b> and one or more other devices (not shown) coupled to the other network(s). Of course, any other appropriate connection configurations may be used by any of the client <b>104</b>-<b>106</b> coupled to the servers <b>102</b> and/or to other network(s).
p-0085Referring to <figref idrefs="DRAWINGS">FIG. 3</figref>, the client <b>104</b> is shown in more detail having server operations software <b>122</b>, client software <b>124</b>, and an interface layer <b>125</b> that includes a plurality of interfaces <b>126</b>-<b>128</b> between the server operations software <b>122</b> and the client software <b>124</b>. The server operations software <b>122</b> facilitates the exchange of information/data between the client <b>104</b> and the servers <b>102</b> to provide the functionality described herein. The server operations software <b>122</b> is described in more detail elsewhere herein. The client software <b>124</b> represents any software that may be run on the client <b>104</b>, including application software, operating system software, Web server software, etc., that is not part of the server operations software <b>122</b> or the interface layer <b>125</b>. As described in more detail elsewhere herein, it is possible to have the client software <b>124</b> interact with the servers <b>102</b> through different ones of the interfaces <b>126</b>-<b>128</b> at the same time.
p-0086The file services described herein may be implemented by the servers <b>102</b> using a set of file objects where a file that is accessed by the client software includes a metadata file object which points to one or more data file objects that contain the data for the file.
p-0087Accessing the file would involve first accessing the metadata file object to locate the corresponding data file objects for the file. Doing this is described in more detail elsewhere herein. Note, however, that any appropriate file object mechanism may be used for the system described herein.
p-0088Referring to <figref idrefs="DRAWINGS">FIG. 4</figref>, a file <b>130</b> is shown as including a metadata file object <b>132</b> and a plurality of data file objects. The metadata file object <b>132</b> contains information that points to each of the data file objects <b>134</b>-<b>136</b>. Accessing the file includes first accessing the metadata file object <b>132</b> and then using information therein to locate the appropriate one or more of the corresponding data file object <b>134</b>-<b>136</b>.
p-0089Referring to <figref idrefs="DRAWINGS">FIG. 5</figref>, the metadata file object <b>132</b> is shown in more detail as including an object attributes section <b>142</b> and a Layout Storage Object (LSO) tree section <b>144</b>. The object attributes section contains conventional file-type attributes such as owner id, group id, access control list, last modification time, last access time, last change time, creation time, file size, and link count. Many of the attributes are self-explanatory. The last modification time corresponds to the last time that the data for the data objects <b>134</b>-<b>136</b> had been modified while the last change time corresponds to when the object metadata had last been changed. The link count indicates the number of other objects that reference a particular file (e.g., aliases that point to the same file). In an embodiment herein, a file and its related objects are deleted when the link count is decremented to zero.
p-0090The LSO tree section <b>144</b> includes a data structure that includes one or more maps for mapping the logical space of the file to particular data file objects. The LSO tree section <b>144</b> may also indicate any mirrors for the data and whether the mirrors are synchronous or asynchronous. LSO trees and mirrors are described in more detail elsewhere herein.
p-0091Referring to <figref idrefs="DRAWINGS">FIG. 6</figref>, a simple LSO tree <b>160</b> is shown as including an LSO root node <b>162</b> and a single map <b>164</b>. The LSO root node <b>162</b> is used to identify the LSO tree <b>160</b> and includes links to one or more map(s) used in connection with the file corresponding to the LSO tree <b>160</b>. The map <b>164</b> maps logical locations within the file to actual data storage location. A process that accesses logical storage space of a file represented by the LSO tree <b>160</b> first uses the LSO root node <b>162</b> to find the map <b>164</b> and then uses the map <b>164</b> to translate logical addresses within the file to an actual data storage locations.
p-0092Referring to <figref idrefs="DRAWINGS">FIG. 7</figref>, an LSO tree <b>170</b> is shown as including an LSO root node <b>172</b> and a plurality of maps <b>174</b>-<b>176</b>. Each of the maps <b>174</b>-<b>176</b> may represent a different range of logical offsets within the file corresponding to the LSO tree <b>170</b>. For example, the map <b>174</b> may correspond to a first range of logical offsets in the file. The map <b>174</b> may map logical locations in the first range to a first actual storage device. The map <b>175</b> may correspond to a second range of logical offsets in the file, different than the first range, which may be mapped to a different actual storage device or may be mapped to the same actual storage device as the map <b>174</b>. Similarly, the map <b>176</b> may correspond to a third range of logical offsets in the file, different than the first range and the second range, which may be mapped to a different actual storage device or may be mapped to the same actual storage device as the map <b>174</b> and/or the map <b>175</b>.
p-0093Referring to <figref idrefs="DRAWINGS">FIG. 8</figref>, an LSO tree <b>180</b> is shown as including an LSO root node <b>181</b> and a pair of replication nodes <b>182</b><i>a</i>, <b>182</b><i>b</i>, which indicate that the underlying data is to be mirrored (replicated) and which indicate whether the mirror is synchronous or asynchronous. Synchronous and asynchronous mirrors are discussed in more detail elsewhere herein. The node <b>182</b><i>a </i>has a plurality of children maps <b>183</b>-<b>185</b> associated therewith while the node <b>182</b><i>b </i>has a plurality of children maps <b>186</b>-<b>188</b> associated therewith. The replication nodes <b>182</b><i>a</i>, <b>182</b><i>b </i>indicate that the data corresponding to the maps <b>183</b>-<b>185</b> is a mirror of data corresponding to the maps <b>186</b>-<b>188</b>. In some embodiments, the nodes <b>182</b><i>a</i>, <b>182</b><i>b </i>may be implemented using a single node <b>189</b> to indicate replication.
p-0094A process accessing a file having the LSO tree <b>180</b> would traverse the tree <b>180</b> and determine that data is mirrored. As discussed in more detail elsewhere herein, depending upon the type of mirroring, the process accessing the LSO tree <b>180</b> would either write the data to the children of both of the nodes <b>182</b><i>a</i>, <b>182</b><i>b </i>or would provide a message to another process/server (e.g., the servers <b>102</b>) that would perform the asynchronous mirroring. Mirroring is discussed in more detail elsewhere herein.
p-0095For the system described herein, file objects are accessed by one of the clients <b>104</b>-<b>106</b> by first requesting, and obtaining, a lease from the servers <b>102</b>. The lease corresponds to the file objects for the particular file being accessed and to the type of access. A lease may be for reading, writing, and/or more some other operation (e.g., changing file attributes). In an embodiment herein, for objects corresponding to any particular file, the servers <b>102</b> may issue only one write lease at a time to any of the clients <b>104</b>-<b>106</b> but may issue multiple read leases simultaneously and may issue read lease(s) at the same time as issuing a write lease. However, in some embodiments it may be possible to obtain a lease for a specified logical range of a file for operations only on that range. Thus, for example, it may be possible for a first client to obtain lease for writing to a first logical range of a file while a second client may, independently, obtain a lease for writing to a second and separate logical range of the same file. The two write leases for different logical ranges may overlap in time without violating the general rule that the system never issues overlapping write leases for the same data.
p-0096The lease provided to the clients <b>104</b>-<b>106</b> from the servers <b>102</b> includes security information (security token) that allows the client appropriate access to the data. The security token may expire after a certain amount of time. In an embodiment herein, a client accesses data by providing an appropriate security token for the data as well as client users/ownership information. Thus, for example, a user wishing to access data would first obtain a lease and then would provide the access request to the servers <b>102</b> along with the security token and information identifying the owner (client) accessing the data. The servers <b>102</b> would then determine whether the access requested by the client was permissible. After the lease expires (the security token expires), the user requests the lease again. Data security may be implemented using conventional data security mechanisms.
p-0097After obtaining a lease for accessing a file, a client may then cache the corresponding metadata, including the LSO tree, into local storage of the client. The client may then use and manipulate the local cached version of the metadata and may use the metadata to obtain access to the data. As described in more detail elsewhere herein, a client does not directly modify metadata stored by the servers <b>102</b> but, instead, sends update messages to the servers <b>102</b> to signal that metadata for a file may need to be modified by the servers <b>102</b>.
p-0098Referring to <figref idrefs="DRAWINGS">FIG. 9</figref>, a flowchart <b>200</b> illustrates steps performed by a client in connection with requesting a lease for a file (objects associated with a file) for performing operations thereon. Processing begins at a first step <b>202</b> where the client requests the lease for the file. As discussed in more detail elsewhere herein, a client requesting a lease includes specifying the type of access (e.g., read, write, etc.). Following the step <b>202</b> is a test step <b>204</b> where it is determined if the request has been granted. If not, then control transfers from the test step <b>204</b> to a step <b>206</b> where processing is performed in connection with the lease not being granted to the client. The particular processing performed at the step <b>206</b> may include, for example, providing an error message to the client process requesting access to the file corresponding to the lease and/or waiting for an amount of time and then retrying the request. Note that it is possible that a lease for a particular file is not available at one time is subsequently available at another time because, for example, the lease is released by another client in between the first request and the second request. In any event, any appropriate processing may be performed at the step <b>206</b>. Following the step <b>206</b>, processing is complete.
p-0099If it is determined at the test step <b>204</b> that the least requested at the step <b>202</b> has been granted, then control transfers from the test step <b>204</b> to a step <b>208</b> where the client performs an operation using the file for which the lease was granted. Operations performed at the step <b>208</b> include reading data and/or writing data. Different types of processing that may be performed at the step <b>208</b> are described in more detail elsewhere herein.
p-0100Following the step <b>208</b> is a test step <b>212</b> where it is determined if the operations performed at the step <b>208</b> require an update. In some instances, a client may obtain a lease and perform operations that do not affect the file or the underlying file objects. For example, a client may acquire a lease for reading a file and the operation performed at the step <b>208</b> may include the client reading the file. In such a case, no update may be necessary since the file and corresponding file objects (metadata, data objects, etc.) have not changed. On the other hand, if the client obtains a lease for writing data the file and the operation performed at the step <b>208</b> includes writing data to the file, then the underlying file objects will have been changed and an update message needs to be sent the servers <b>102</b>. If it is determined at the test step <b>212</b> that an update is necessary, then control passes from the test step <b>212</b> to a step <b>214</b> where an update message is sent by the client to the servers <b>102</b>.
p-0101Following the step <b>214</b>, or following the step <b>212</b> if no update is necessary, control passes to a test step <b>216</b> where it is determined if the client is finished with the file. In some instances, the client may perform a small number of operations on the file, after which the client would be finished with the file at the step <b>216</b>. In other cases, the client may be performing a series of operations and may not yet have completed all of the operations.
p-0102If it is determined at the test step <b>216</b> that the client is not finished with the file, then control passes from the test step <b>216</b> to a test step <b>218</b> where it is determined if the lease for the file has expired. Note that a lease may be provided by the servers <b>102</b> to the client with a particular expiration time and/or the associated security token may expire. In addition, it may be possible for the servers <b>102</b> to recall leases provided to clients under certain circumstances. In either case, the lease may no longer be valid. Accordingly, if it is determined at the step <b>218</b> that the lease has expired (and/or has been recalled by the servers <b>102</b>), then control passes from the test step <b>218</b> back to the step <b>202</b> request the lease again. Otherwise, if the lease has not expired, then control passes from the test step <b>218</b> back to the step <b>208</b> to perform another iteration.
p-0103If it is determined at the test step <b>216</b> that the client is finished with the file, then control passes from the test step <b>216</b> to a step <b>222</b> where the client releases the lease by sending a message to the servers <b>102</b> indicating that the client no longer needs the lease. Once the client releases the lease, it may be available for other clients. Following the step <b>222</b>, processing is complete.
p-0104In an embodiment herein, data file objects may be indicated as having one of four possible states: current, stale, immutable, or empty. The current state indicates that the data object is up to date and current. The stale state indicates that the data is not valid but, instead, requires updating, perhaps by some other process. In some instances, the stale state may be used only in connection with mirror copies of data (explained in more detail elsewhere herein). Data may be stale because it is a mirror of other data that was recently written but not yet copied. The immutable state indicates that the corresponding data is write protected, perhaps in connection with a previous clone (snapshot) operation. The empty state indicates that no actual storage space has yet been allocated for the data.
p-0105Referring to <figref idrefs="DRAWINGS">FIG. 10</figref>, a flow chart <b>240</b> illustrates steps performed by a client in connection with performing read operations after obtaining a read lease for a file. Processing begins at a first test step <b>242</b> where it is determined if the data object being read is in the current state. If not, then control transfers from the test step <b>242</b> to a step <b>244</b> where it is determined if the data object being read is in the immutable state. If it is determined at the step <b>244</b> that the data object being read is in the immutable state or if it is determined at the test step <b>242</b> that the data object being read is in the current state, then control transfers to a step <b>246</b> where the read operation is performed. A client reads file data by providing the appropriate data file object identifier to the servers <b>102</b> as well as providing appropriate security credentials. Accordingly, the read operation performed at the step <b>246</b> includes the client sending an appropriate request to the servers <b>102</b> and waiting for a result therefrom.
p-0106Following the step <b>246</b> is a test step <b>248</b> where it is determined if the servers <b>102</b> have returned a result indicating that the data file object is unavailable. In some cases, a data file object that is otherwise current or immutable may nevertheless become unavailable. For example, the physical storage space that holds the data file object may become temporarily disconnected and/or temporarily busy doing some other operation. If it is determined at the test step <b>248</b> that the data file object is available, then control transfers from the test step <b>248</b> to a test step <b>252</b> where it is determined if the read operation was successful. If so, then control transfers from the test step <b>252</b> to a step <b>254</b> where the result of the read operation is returned to the process at the client that caused the read operation to be performed. The result may include the data that was read and a status indicator. Following the step <b>254</b>, processing is complete.
p-0107If it is determined at the test step <b>252</b> that the read operation performed at the step <b>246</b> was not successful, then control transfers from the test step <b>252</b> to a step <b>256</b> where error processing is performed. The particular error processing performed at the step <b>256</b> is implementation dependent and may include, for example, reporting the error to a calling process and/or possibly retrying the read operation a specified number of times. Following the step <b>256</b>, processing is complete.
p-0108If it is determined at the test step <b>244</b> that the data object being read is not in the immutable state, then control transfers from the test step <b>244</b> to a test step <b>258</b> where it is determined if the data object is in the stale state. If not, then, by virtue of the test steps <b>242</b>, <b>244</b>, <b>258</b> and process of elimination, the data object is in the empty state. In an embodiment herein, reading a data object in the empty state causes zeros to be returned to the calling process. Accordingly, if it is determined at the test step <b>258</b> that the data object is not in the stale state, then control transfers from the test step <b>258</b> to a step <b>262</b> where zeros are returned in response to the read operation. Following the step <b>262</b>, processing is complete.
p-0109If it is determined at the test step <b>258</b> that the data file object is in the stale state, or if it is determined at the test step <b>248</b> that the data file object is not available, then control transfers to a test step <b>264</b> to determine if an alternative version of the data file object is available for reading. As discussed in more detail elsewhere herein, there may be multiple versions of the same data file objects that exist at the same time due to mirroring. Accordingly, if the data file object being read is in the stale state or otherwise unavailable, it may be possible to read a mirror copy of the data file object that may be in the current state. The test performed at the step <b>264</b> is described in more detail elsewhere herein.
p-0110If it is determined at the test step <b>264</b> that an alternative version of the data file object is available, then control transfers from the test step <b>264</b> to a step <b>266</b> where the alternative version of the data file object is selected for use. Following the step <b>266</b>, control transfers back to the test step <b>242</b> for another iteration with the alternative data file object.
p-0111If it is determined at the test step <b>264</b> that an alternative version of the data file object is not available, then control transfers from the test step <b>264</b> to a step <b>268</b> where the client process waits. In an embodiment herein, it may be desirable to wait for a data file object to become current and/or available. Following the step <b>268</b>, control transfers back to the step <b>242</b> for another iteration. Note that, instead of waiting at the step <b>268</b>, processing may proceed from the step <b>264</b> to the step <b>256</b> to perform error processing if there is no alternative data file object available. In other embodiments, it may be possible to perform the step <b>268</b> a certain number of times and then, if the data file object is still unavailable or in the stale state and there is no alternative data file object, then perform the error processing at the step <b>256</b>.
p-0112Referring to <figref idrefs="DRAWINGS">FIG. 11</figref>, a flow chart <b>280</b> illustrates steps performed by a client in connection with performing write operations after obtaining a write lease for a file. Processing begins at a first test step <b>282</b> where it is determined if the data file object to which the write is being performed is in the immutable state. If so, then control transfers from the step <b>282</b> to a step <b>284</b> where new actual storage space is allocated for the data file object to avoid overwriting the immutable data. Allocating new storage space for a data object may include providing an appropriate request to the servers <b>102</b>. Following the step <b>284</b>, control transfers back to the step <b>282</b> to begin the processing for the write operation again.
p-0113If it is determined at the step <b>282</b> that the data file object to which the write is being performed is not in the immutable state, then control transfers from the step <b>282</b> to a step <b>286</b> where it is determined if the data file object to which the write is being performed is in the stale state. If not, then control transfers from the test step <b>286</b> to a test step <b>288</b> where it is determined if the data file object to which the write is being performed is in the empty state. If so, then control transfers from the step <b>288</b> to the step <b>284</b>, discussed above, where new physical storage space is allocated. Following the step <b>284</b>, control transfers back to the step <b>282</b> to begin the processing for the write operation again.
p-0114If it is determined at the step <b>288</b> that the data file object to which the write is being performed is not in the empty state, then control transfers from the test step <b>288</b> to a step <b>292</b> where the write operation is performed. Note that the step <b>292</b> is reached if the data file object to which the write operation is being performed is not in the immutable state, not in the stale state, and not in the empty state (and thus is in the current state). A client writes file data by providing the appropriate data file object location identifier to the servers <b>102</b> as well as providing appropriate security credentials. Accordingly, the write operation performed at the step <b>292</b> includes the client sending an appropriate request to the servers <b>102</b> and waiting for a result therefrom.
p-0115Following the step <b>292</b> is a test step <b>294</b> where it is determined if the write operation performed at the step <b>292</b> was successful. If so, then control transfers from the test step <b>294</b> to a test step <b>296</b> where it is determined if there are synchronous mirrors of the data file object to which the write is being performed. The test performed at the step <b>296</b> may include, for example, determining if a parent node of the data file object in the file LSO tree indicates replication. If not, then control transfers from the test step <b>296</b> to a step <b>298</b> where an update (message) is sent to the servers <b>102</b> indicating that the write had been performed. Following the step <b>298</b>, processing is complete.
p-0116If it is determined at the test step <b>296</b> that there are synchronous mirrors of the data file object to which the write is being performed, then control passes from the test step <b>296</b> to a step <b>302</b> where the data that was written at the step <b>292</b> is also written to the synchronous mirror(s). The processing performed at the step <b>302</b> is discussed in more detail elsewhere herein. Following the step <b>302</b>, control transfers to the step <b>298</b>, discussed above, where an update (message) is sent to the servers <b>102</b>. Following the step <b>298</b>, processing is complete.
p-0117If it is determined at the test step <b>294</b> that the write operation performed at the step <b>292</b> was not successful, or if it is determined at the test step <b>286</b> that the data file object to which the write operation is being performed is in the stale state, then control transfers to a step <b>304</b> where the data file object to which the write is attempting to be performed is removed from the client's local copy of the LSO tree. At the end of the write operation illustrated by the flow chart <b>280</b>, the client may inform the servers <b>102</b> (at the step <b>298</b>) of the difficulty in writing to the data object so that the servers <b>102</b> can take appropriate action, if necessary.
p-0118Following the step <b>304</b> is a test step <b>306</b> where it is determined if an alternative version of the data is available. As discussed in more detail elsewhere herein, there may be multiple versions of the same data file objects that exist at the same time due to mirroring. Accordingly, if the data file object to which the write operation is being performed is stale or otherwise cannot be written to, it may be possible to write to a mirror copy of the data. The test performed at the step <b>306</b> is like the test performed at the step <b>264</b> and is described in more detail elsewhere herein. If it is determined at the test step <b>306</b> that an alternative version of the data corresponding to the data file object is available, then control transfers from the test step <b>306</b> to a step <b>308</b> where the alternative version is selected for writing. Following the step <b>308</b>, control transfers back to the test step <b>282</b> for another iteration with the alternative data file object.
p-0119If it is determined at the test step <b>306</b> that an alternative version of the data corresponding to the data file object is not available, then control transfers from the test step <b>306</b> to a step <b>312</b> to perform error processing if there is no alternative available. The particular error processing performed at the step <b>312</b> is implementation dependent and may include, for example, reporting the error to a calling process and/or possibly retrying the write operation a specified number of times before reporting the error. Following the step <b>312</b>, control transfers to the step <b>298</b>, discussed above, to send update information to the servers <b>102</b>. Following the step <b>298</b>, processing is complete.
p-0120Referring to <figref idrefs="DRAWINGS">FIG. 12</figref>, a flow chart <b>320</b> illustrates in more detail steps performed in connection with the alternative available test step <b>264</b> of <figref idrefs="DRAWINGS">FIG. 10</figref> and/or the alternative available test step <b>306</b> of <figref idrefs="DRAWINGS">FIG. 11</figref>. Processing begins at a first test step <b>322</b> where it is determined if the file has any mirror data file objects at all. In some instances, a file may not use mirrors, in which case there would be no alternative copy available. Accordingly, if it is determined at the test step <b>322</b> that the file does not have any mirror data file objects, then control transfers from the test step <b>322</b> to a step <b>324</b> where a value is returned indicating that no alternative copies are available. Following the step <b>324</b>, processing is complete.
p-0121If it is determined at the test step <b>322</b> that mirror copies are available, then control transfers from the test step <b>322</b> to a step <b>326</b> where a pointer is made to point to a first mirror data file object. For the processing discussed herein, a pointer may be used to iterate through mirror data file objects to find a useable data file object. Following the step <b>326</b> is a test step <b>328</b> where it is determined if the pointer is past the end of the list of mirror data file objects (has iterated through all of the mirror data file objects). If so, then control passes from the test step <b>328</b> to the step <b>324</b>, discussed above, to return a value that indicates that no alternatives are available.
p-0122If it is determined at the test step <b>328</b> that the pointer is not past the end of a list of mirror data file objects, then control transfers from the test step <b>328</b> to a test step <b>332</b> where it is determined if the pointer points to a data file object in a stale state. If so, then control transfers from the test step <b>332</b> to a step <b>334</b> where the pointer is made to point to the next data file object to be examined. Following the step <b>334</b>, control transfers back to the step <b>328</b>, discussed above, for another iteration. If it is determined at the test step <b>332</b> that the pointer does not point to a data file object in the stale state, then control transfers from the test step <b>332</b> to a step <b>336</b> where the data file object that is pointed to by the pointer is returned as an alternative data file object that may be used by the calling process. Following the step <b>336</b>, processing is complete.
p-0123Referring to <figref idrefs="DRAWINGS">FIG. 13</figref>, a flow chart <b>350</b> illustrates in more detail operations performed in connection with the step <b>302</b> of the flow chart <b>280</b> of <figref idrefs="DRAWINGS">FIG. 11</figref> where data that has been written is copied to a number of synchronous mirrors (mirror data file objects). Processing begins at a first step <b>352</b> where a pointer that is used to iterate through the mirror data file objects is set to point the first one of the mirror data file objects. Following the step <b>352</b> is a test step <b>354</b> where it is determined if the pointer used for iterating through the mirror data file objects points past the end (i.e., if all of the mirror data file objects have been processed). If so, then processing is complete. Otherwise, control transfers from the test step <b>354</b> to a test step <b>356</b> where it is determined if the status of the mirror data file object pointed to by the pointer indicates that the mirror data file object is current. If not, then control passes from the test step <b>356</b> to a test step <b>358</b> where it is determined if the status of the mirror data file object pointed to by the pointer indicates that the mirror data file object is in the stale state. If so, then control passes from the test step <b>358</b> to a step <b>362</b> where the mirror data file object is removed from the client's local copy of the LSO tree. In an embodiment herein, a synchronous mirror data file object should not be in a stale state and, if that occurs, it may indicate an error condition. Accordingly, following the step <b>362</b> is a step <b>364</b> where information about the stale mirror is sent to the servers <b>102</b>, which may perform recovery processing in response thereto.
p-0124Note that if a mirror data file object is neither in the stale state nor in the current state, then the mirror data file object is either in the empty state or in the immutable state. In either case, it may be necessary to allocate new space for a data file object to which the data is to be written. Accordingly, if it is determined at the test step <b>358</b> that the data file object is not in the stale state, then control passes from the test step <b>358</b> to a step <b>366</b> where new space is allocated for the mirror data file object. Following the step <b>366</b> is a step <b>368</b> where the data that is being copied across synchronous mirror data file objects is written to the mirror data file object pointed to by the pointer used to iterate through the mirror data file objects. Note that the step <b>368</b> may also be reached from the test step <b>356</b> if it is determined that the mirror data file object is current. Following the step <b>368</b> is a step <b>372</b> where the pointer used to iterate through the mirror data file objects is made to point to the next one. Note that the step <b>372</b> is also reached following the step <b>364</b>. Following the step <b>372</b>, control transfers back to the test step <b>354</b> for another iteration.
p-0125The system described herein may access file objects using object identifiers. In an embodiment herein, each file object that is stored among the servers <b>102</b> may be assigned a unique object identifier that identifies each file object and distinguishes each file object from other file objects in the system. However, many applications use a file naming structure and/or a hierarchical directory to access files and data therein. For example, a file name “C:\ABC\DEF\GHI.doc” indicates a file called “GHI.doc” stored in a sub-directory “DEF” that is stored in another directory “ABC” located on a root volume “C”. A nested directory structure may be provided by implementing directories as special files that are stored in other directories. In the example given above, the sub-directory “DEF” may be implemented as a file stored in the directory “ABC”.
p-0126The system described herein may present to applications a conventional naming structure and directory hierarchy by translating conventional file names into file object identifiers. Such a translation service may be used by other services in connection with file operations. In an embodiment herein, each directory may include a table that correlates file names and sub-directory names with file object identifiers. The system may examine one directory at a time and traverse sub-directories until a target file is reached.
p-0127Referring to <figref idrefs="DRAWINGS">FIG. 14</figref>, a flow chart <b>380</b> illustrates steps performed in connection with providing a file name translation service (file name service) that translates a conventional hierarchical file name into a file object identifier. The file name service may receive a conventional hierarchical file name as an input and may return an object identifier (or, in some cases, an error). Processing begins at a first step <b>382</b> where the file name service receives a file name, such as a conventional hierarchical file name. Following the step <b>382</b> is a test step <b>384</b> where it is determined if the syntax of the file name is OK. Checking the syntax of a hierarchical file name is know and includes, for example, checking that only appropriate characters have been used. If it is determined at the test step <b>384</b> that the syntax is not OK, then control transfers from the test step <b>384</b> to a step <b>386</b> where an error indicator (error message) is returned to the calling process. Following the step <b>386</b>, processing is complete.
p-0128If it is determined at the test step <b>384</b> that the syntax of the provided name is OK, then control transfers from the test step <b>384</b> to a step <b>388</b> where the root directory is read. In an embodiment herein, all file name paths begin at a single common root directory used for all file objects stored in the servers <b>102</b>. In other embodiments, there may be multiple root directories where specification of a particular root directory may be provided by any appropriate means, such as using a volume identifier, specifically selecting a particular root directory, etc.
p-0129Following the step <b>388</b> is a test step <b>392</b> where it is determined if the target file (or sub-directory that is part of the file name path) is in the directory that has been read. If not, then control passes from the test step <b>392</b> to the step <b>386</b>, discussed above, where an error is returned. In some embodiments, the file-not-found error that results from the test at the step <b>392</b> may be different from the syntax error that results from the test at the step <b>384</b>.
p-0130If it is determined that the target file or a sub-directory that is part of the file name path is in the directory that has just been read, then control passes from the test step <b>392</b> to a test step <b>394</b> where it is determined if the directory that has just been read contains the target file (as opposed to containing a sub-directory that is part of the file name path). If so, then control passes from the test step <b>394</b> to a step <b>396</b> where the object identifier of the target file object is returned to the calling process. Following the step <b>396</b>, processing is complete.
p-0131If it is determined at the test step <b>394</b> that the directory that has just been read contains a sub-directory that is part of the file name path, then control transfers from the test step <b>394</b> to a step <b>398</b> where the sub-directory is read so that the sub-directory becomes the directory being examined. In effect, processing at the step <b>398</b> traverses the chain of subdirectories to eventually get to the target file. Following the step <b>398</b>, control transfers back to the step <b>392</b>, discussed above, for a next iteration.
p-0132Referring to <figref idrefs="DRAWINGS">FIG. 15</figref>, a diagram shows the client <b>104</b> as including user address memory space and kernel address memory space. In an embodiment herein, user address memory space is memory space that is generally used by user applications and related processes while kernel address memory space is memory space that is generally accessible only by system processes, such as an operating system kernel and related processes. As discussed in more detail herein, it is possible to have different portions of the system described herein reside and operate in the user memory space and/or the kernel memory space. In addition, it is possible for the client <b>104</b> to have multiple different interfaces to access file objects at the servers.
p-0133In <figref idrefs="DRAWINGS">FIG. 15</figref>, the client <b>104</b> is shown as including an application in the user memory address space and a virtual file system (VFS), file name services, kernel I/O drivers, a layout manager, and a communication interface in the kernel memory address space. The VFS is an abstraction layer on top of a more concrete file system. The purpose of a VFS is to allow client applications to access different types of concrete file systems in a uniform way. The VFS allows the application running on the client <b>104</b> to access file objects on the servers <b>102</b> without the application needing to understand the details of the underlying file system. The VFS may be implemented in a conventional fashion by translating file system calls by the application into file object manipulations and vice versa. For example, the VFS may translate file system calls such as open, read, write, close, etc. into file object calls such as create object, delete object, etc.
p-0134The VFS may use the file name services, described elsewhere herein, to translate file names into object identifiers. The kernel I/O drivers provide an interface to low-level object level I/O operations. The kernel I/O drivers may be modeled after, and be similar to, Linux I/O drivers. The layout manager may perform some of the processing on LSO trees corresponding to files, as discussed in more detail elsewhere herein. The communication interface provides communication between the client <b>104</b> and the servers <b>102</b>. The communication interface may be implemented using any appropriate communication mechanism. For example, if the client <b>104</b> communicates with the servers <b>102</b> via an Internet connection, then the communication interface may use TCP/IP to facilitate communication between the servers <b>102</b> and the client <b>104</b>.
p-0135The application of <figref idrefs="DRAWINGS">FIG. 15</figref> may correspond to the client software <b>124</b> of <figref idrefs="DRAWINGS">FIG. 3</figref>. The VFS of <figref idrefs="DRAWINGS">FIG. 15</figref> may correspond to one of the interfaces <b>126</b>-<b>128</b> of <figref idrefs="DRAWINGS">FIG. 3</figref>. The file name services, kernel I/O drivers, layout manager, and communication interface of <figref idrefs="DRAWINGS">FIG. 15</figref> may correspond to the server operations software <b>122</b> of <figref idrefs="DRAWINGS">FIG. 3</figref>. Similar correlation between components of <figref idrefs="DRAWINGS">FIG. 3</figref> and other figures may also be found.
p-0136Referring to <figref idrefs="DRAWINGS">FIG. 16</figref>, a flow chart <b>410</b> illustrates steps performed by a VFS to provide file services in connection with an application running on the client <b>104</b>. Processing begins at a first step <b>412</b> where a file system operation requested by an application may be translated into one or more object operations. For example, a file operation to open a file for reading may be converted to object operations that include obtaining an object lease for reading as discussed elsewhere herein. Following the step <b>412</b> is a step <b>414</b> where the VFS translates the file name into an object identifiers using the file name services discussed above in connection with <figref idrefs="DRAWINGS">FIG. 14</figref>. Operations that follow may be performed using the object identifiers obtained at the step <b>414</b>.
p-0137Following the step <b>414</b> is a test step <b>416</b> where it is determined if the requested operation requires the LSO tree. As discussed elsewhere herein, operations such as read, write, etc. use LSO trees corresponding to file objects. However, some possible file operations may not require accessing a corresponding LSO tree. If it is determined at the test step <b>416</b> that the LSO tree is needed, then control transfers from the test step <b>416</b> to a step <b>418</b> where the VFS accesses the LSO manager to perform the necessary operations. For example, for a read operation, the LSO manager may perform processing like that illustrated in the flow chart <b>240</b> of <figref idrefs="DRAWINGS">FIG. 10</figref>. Following the step <b>418</b>, or following the step <b>416</b> if the LSO is not needed, is a step <b>422</b> where the operations are passed to low level kernel I/O drivers (e.g., via one or more appropriate API's). The kernel I/O drivers use the communication module to communicate between the client <b>104</b> and the servers <b>102</b> in connection with performing the requested operation(s). In instances where the application running on the client <b>104</b> has requested data and/or other information from the servers <b>102</b>, the data and/or information may be passed back up through the communication interface, kernel I/O drivers, etc. to the VFS and ultimately to the application.
p-0138Referring to <figref idrefs="DRAWINGS">FIG. 17</figref>, the client <b>104</b> is shown as having an application, file name services, user level I/O drivers, and a layout manager all provided in user memory address space. The functionality of the VFS that was shown in <figref idrefs="DRAWINGS">FIG. 15</figref> and described above may be performed instead by library routines linked to the application, and thus are part of the application. These routines would provide functionality like that discussed above in connection with <figref idrefs="DRAWINGS">FIG. 16</figref>. Accordingly, it is the application that uses the file name services and makes calls to the user level I/O drivers (like the kernel I/O drivers) and to the layout manager. The communication interface is still maintained in the kernel memory address space.
p-0139Note that, for the configuration of <figref idrefs="DRAWINGS">FIG. 15</figref>, modifications are provided by modifying system processes (the operating system), which is disadvantageous for a number of reasons. For example, if the client <b>104</b> is a multiuser computing system, then modifying the operating system may involve restarting the entire system and thus disrupting all of the users. In contrast, the configuration of <figref idrefs="DRAWINGS">FIG. 17</figref> is advantageous since it allows modification of the system in the application/user memory address space so that the operating system of the client <b>104</b> does not need to be modified. However, the configuration of <figref idrefs="DRAWINGS">FIG. 17</figref> does not use a VFS, and thus does not obtain the advantageous separation of the application from the file system that is provided by the VFS in <figref idrefs="DRAWINGS">FIG. 15</figref>.
p-0140Referring to <figref idrefs="DRAWINGS">FIG. 18</figref>, the client <b>104</b> is shown as having an application in user memory address space that accesses file objects through a VFS in kernel memory address space like that illustrated in <figref idrefs="DRAWINGS">FIG. 15</figref>. However, the file name services, I/O drivers, and the layout manager all reside in the user memory address space like the system illustrated in <figref idrefs="DRAWINGS">FIG. 17</figref>. The VFS communicates with components in the user memory address space through a bridge between kernel memory address space and user memory address space, such as a FUSE (or similar) interface. The bridge allows file system components to be provided in user memory space instead of kernel address memory space while still preserving the VFS in the kernel address memory space. Thus, the configuration illustrated by <figref idrefs="DRAWINGS">FIG. 18</figref> provides the advantages of using a VFS, as illustrated in the configuration of <figref idrefs="DRAWINGS">FIG. 15</figref>, along with the advantages of having file system components in the user address memory space, as illustrated in the configuration of <figref idrefs="DRAWINGS">FIG. 17</figref>.
p-0141It is possible in some instances to have applications and/or other processing in the user memory address space of the client <b>104</b> access file objects directly, rather than through a file services layer like the VFS and/or equivalent functionality provided by user linkable libraries (e.g., the configuration illustrated in <figref idrefs="DRAWINGS">FIG. 17</figref>). Accessing file objects directly may include invoking routines that create objects, read objects, modify objects, delete objects, etc. In such a case, the application would need to know how to interpret and/or manipulate the object data, which may not always be desirable. For example, an application that accesses file objects through the VFS may not need to take into account (or even know about) the structure of an LSO tree while an application that accesses objects directly may need to use the LSO tree. On the other hand, removing the file services layer may provide an opportunity for optimizations not otherwise available. Note that, since the servers <b>102</b> exchange object information/operations with the clients <b>104</b>-<b>106</b>, the servers <b>102</b> may not need to distinguish or be able to distinguish between application on the clients <b>104</b>-<b>106</b> using a file system interface (file services like the VFS) and those that are not.
p-0142Referring to <figref idrefs="DRAWINGS">FIG. 19</figref>, the client <b>104</b> is shown as including an application in the user memory address space and kernel I/O drivers, a layout manager, and file name services in the kernel memory address space. The configuration illustrated in <figref idrefs="DRAWINGS">FIG. 19</figref> is like that illustrated in <figref idrefs="DRAWINGS">FIG. 15</figref>, except that the VFS is not used. In the configuration illustrated in <figref idrefs="DRAWINGS">FIG. 19</figref>, the application could directly access the file name services, the kernel I/O drivers, and the layout manager. The communication interface in the kernel memory address space communicates with the servers <b>102</b> just as in other configurations. The direct access illustrated in <figref idrefs="DRAWINGS">FIG. 19</figref> allows applications to manipulate file objects (via, for example, appropriate API's) while access via the VFS (or similar) allows applications to accesses file objects indirectly through file system calls to the VFS.
p-0143Referring to <figref idrefs="DRAWINGS">FIG. 20</figref>, the client <b>104</b> is shown as having an application, user level I/O drivers, a layout manager, and file name services all provided in user memory address space. The configuration shown in <figref idrefs="DRAWINGS">FIG. 20</figref> is like that shown in <figref idrefs="DRAWINGS">FIG. 17</figref>. However, as set forth above, the configuration of <figref idrefs="DRAWINGS">FIG. 17</figref> includes file service libraries that are linked into, and thus part of, the application. In contrast, in the configuration of <figref idrefs="DRAWINGS">FIG. 20</figref>, the application is not linked into libraries with extensive file services. Instead, like the application of the configuration illustrated in <figref idrefs="DRAWINGS">FIG. 19</figref>, the application in the configuration of <figref idrefs="DRAWINGS">FIG. 20</figref> uses minimal file services and, instead, uses and operates upon file objects directly using the user level I/O drivers, the layout manager and, if a file name translation is needed, the file name services.
p-0144Referring to <figref idrefs="DRAWINGS">FIG. 21</figref>, the client <b>104</b> is shown as having an application in user memory address space and a bridge in the kernel memory address space. File name services, user level I/O drivers, and a layout manager are provided in user memory address space. However, unlike the configuration of <figref idrefs="DRAWINGS">FIG. 20</figref>, the application does not make direct calls to the file system components in the user memory address space. Instead, the application calls the file system components indirectly through the bridge. Just as with the configuration illustrated in <figref idrefs="DRAWINGS">FIG. 18</figref>, the configuration of <figref idrefs="DRAWINGS">FIG. 21</figref> advantageously locates file system components in the user memory address space and, at the same time, provides a kernel memory address space layer between the application and the file system components.
p-0145Referring to <figref idrefs="DRAWINGS">FIG. 22</figref>, the client <b>104</b> is shown as having an application in user memory address space and a Web Services module in kernel memory address space. The application may be a Web server application or any application that handles communication with the Web. In an embodiment herein, the application allows communication with the client <b>104</b>, which acts as a Web server to other computing devices (not shown) that access the client <b>104</b> through a Web connection.
p-0146The configuration illustrated in <figref idrefs="DRAWINGS">FIG. 22</figref> provides Web Services in a manner similar to the file services and/or file object access provided by other configurations. However, the Web Services receives requests/data via a Web data protocol, such as HTML, and provides responses/data also in a Web data protocol, which may be the same or different from the protocol used for requests/data. Operations handled by the Web Services may include object-level operations such as create object, delete object, read object, modify object, modify object metadata, etc. It is also possible to provide more file system level operations, via the Web Services, that open files, read data from files, etc. by including at least some of the functionality of the file services, described elsewhere herein, with the Web Services. The Web Services may present to the other computing devices a conventional well-known Web Services protocol, such as REST or SOAP, or may provide any other appropriate protocol.
p-0147Referring to <figref idrefs="DRAWINGS">FIG. 23</figref>, the client <b>104</b> is shown as having an application, Web Services, user level I/O drivers, and a layout manager in user memory address space. The application may include a Web connection that allows communication with the client <b>104</b>, which acts as a Web server to other computing devices (not shown) that access the client <b>104</b> through the Web connection. The configuration of <figref idrefs="DRAWINGS">FIG. 23</figref> is like that of <figref idrefs="DRAWINGS">FIG. 17</figref> and <figref idrefs="DRAWINGS">FIG. 20</figref>. The advantages of the configuration shown in <figref idrefs="DRAWINGS">FIG. 23</figref> over the configuration shown in <figref idrefs="DRAWINGS">FIG. 22</figref> is that, generally, changes to the configuration shown in <figref idrefs="DRAWINGS">FIG. 23</figref> do not require reconfiguring kernel memory address space processes.
p-0148Referring to <figref idrefs="DRAWINGS">FIG. 24</figref>, the <b>104</b> is shown as having an application, Web Services, user level I/O drivers, and a layout manager in user memory address space. The application may include a Web connection that allows communication with the client <b>104</b>, which acts as a Web server to other computing devices (not shown) that access the client <b>104</b> through the Web connection. A bridge is provided in the kernel memory address space. The configuration of <figref idrefs="DRAWINGS">FIG. 24</figref> has similar advantages to the configuration shown in <figref idrefs="DRAWINGS">FIG. 23</figref>, but also has the advantages provided by providing the bridge, discussed elsewhere herein.
p-0149Referring to <figref idrefs="DRAWINGS">FIG. 25</figref>, the client <b>104</b> is shown as having a plurality of applications in user memory address space, each of which may use a different interface to access file objects of the servers <b>102</b>. Each of the applications shown in <figref idrefs="DRAWINGS">FIG. 25</figref> is meant to represent one or more applications. Accordingly, APP<b>1</b> may present one or more applications that access file objects at the servers <b>102</b> using a Web Services interface. The APP<b>1</b> application may include a Web connection that allows communication with the client <b>104</b>, which acts as a Web server to other computing devices (not shown) that access the client <b>104</b> through the Web connection. APP<b>2</b> may represent one or more applications that access file objects at the servers <b>102</b> using the VFS, and APP<b>3</b> may represent one or more applications that directly operate on file objects at the servers <b>102</b>. The different interfaces may operate at the client <b>104</b> at the same time.
p-0150Note that may other combinations of configurations, including illustrated configurations, are possible so that the client <b>104</b> may simultaneously present to applications thereon different interfaces. For example, it is possible to combine the configurations illustrated in <figref idrefs="DRAWINGS">FIGS. 15</figref>, <b>19</b>, and <b>22</b> and/or combine the configurations of <figref idrefs="DRAWINGS">FIGS. 17</figref>, <b>20</b>, and <b>23</b>. Other combinations, including combinations of only two illustrated configurations, are also possible. The servers <b>102</b> provide the file objects to the clients <b>104</b> provided: 1) the requesting client has appropriate authorization for whatever operation is requested for the file objects; and 2) there is no conflict with any previous request. For example, in systems where only one client is allowed to write to an object at any one time, the servers <b>102</b> would not allow one of the clients <b>104</b>-<b>106</b> to modify a particular object while another one of the clients <b>104</b>-<b>106</b> is also modifying the object.
p-0151Referring to <figref idrefs="DRAWINGS">FIG. 26</figref>, the servers <b>102</b> are shown in more detail as including one or more policy manager servers <b>402</b>, one or more security manager servers <b>403</b>, one or more audit servers <b>404</b>, one or more metadata servers <b>405</b>, one or more resource manager servers <b>406</b>, one or more data storage servers <b>407</b>, and one or more metadata location servers <b>408</b>. Each of the servers <b>402</b>-<b>408</b> may be implemented as one or more unitary processing devices capable of providing the functionality described herein. For the discussion herein, reference to servers should be understood as a reference to one or more servers. The servers <b>402</b>-<b>408</b> may be interconnected using any appropriate data communication mechanism, such as TCP/IP, and may be coupled to the clients <b>104</b>-<b>106</b> (not shown in <figref idrefs="DRAWINGS">FIG. 26</figref>) using any appropriate data communication mechanism, such as TCP/IP.
p-0152The servers <b>102</b> may include a user management interface <b>412</b> that facilitates system management. The user management interface <b>412</b> exchanges data with the policy management servers <b>402</b>, the security management servers <b>403</b>, and the audit servers <b>404</b> to affect how the servers <b>102</b> interact with the clients <b>104</b>-<b>106</b> and corresponding users.
p-0153The data may be provided through the user management interface <b>412</b> in any one of a number of ways, including conventional interactive computer screen input and data file input (e.g., a text file having user management commands). The data may include information that correlates classes of users and storage parameters such as Quality of Service (QOS), RAID protection level, number and geographic location(s) of mirrors, etc. For example, an administrator may specify through the user management interface <b>412</b> that users of a particular class (users belonging to a particular group) store data file objects on storage devices having a particular RAID level protection.
p-0154The servers <b>102</b> also include physical storage <b>414</b> coupled to the data storage servers <b>407</b>. Although the physical storage <b>414</b> is shown as a single item in <figref idrefs="DRAWINGS">FIG. 26</figref>, there may be any number of separate physical storage units that may be geographically dispersed. In addition, there may be different types of physical storage units having different capabilities. Accordingly, the physical storage <b>414</b> generically represents one or more instances of physical data storage for the system that is managed by the data storage servers <b>407</b>, as explained in more detail below.
p-0155Data modifications, including modifications of metadata file objects and/or policies that affect handling/creation of metadata file objects, require appropriate security credentials. Accordingly, the security manager servers <b>403</b> may restrict/inhibit the ability of certain administrators (users) to modify and/or create policies for classes of users.
p-0156Referring to <figref idrefs="DRAWINGS">FIG. 27</figref>, a flow chart <b>430</b> illustrates steps performed by the user management interface <b>412</b> to obtain and use security credentials for accessing the policy manager servers <b>402</b>. Processing begins at a first step <b>432</b> where the user management interface <b>412</b> sends a request to the security manager servers <b>403</b> to obtain a token (or other appropriate security credentials) for the operation to be performed by the user management interface <b>412</b>. Following the step <b>432</b> is a test step <b>434</b> where it is determined if the token has been granted (provided). In some instances, the security manager servers <b>403</b> may not issue a security token at all. For example, if the administrator (user) does not have sufficient rights to perform the desired function.
p-0157If the security token is not granted, then control passes from the step <b>434</b> to a step <b>436</b> where processing is performed in connection with the security token not being granted. The operations performed at the step <b>436</b> may including providing a message to the administrator (user) through the security management interface <b>412</b> indicating that the administrator does not have sufficient rights to perform the desired operation. Following the step <b>436</b>, processing is complete.
p-0158If it is determined at the test step <b>434</b> that a security token has been granted (provided) by the security manager servers <b>403</b>, then control passes from the test step <b>434</b> to a step <b>438</b> where the user management interface <b>412</b> provides the security token, and user id information, to the policy manager servers <b>402</b>. Of course, information indicating the desired operation/modification may also be provided at the step <b>438</b>. Following the step <b>438</b> is a test step <b>442</b> where it is determined if the policy manager servers <b>402</b> have allowed the requested operation. Note that, in some instances, the policy manager servers <b>402</b> may not allow a particular operation even though the security manager servers <b>403</b> have provided a security token. For example, if the user id and the user indicated by the security token do not match and/or if the requested operation and the operation indicated by the security token do not match.
p-0159If it is determined at the test step <b>442</b> that the requested operation is not allowed, then control passes from the test step <b>442</b> to the step <b>436</b>, described above, where processing is performed to indicate that there are security issues. The processing performed at the step <b>436</b> may include providing a message to an administrator (user) indicating that the operation cannot be performed because of insufficient security rights. The message provided when the step <b>436</b> is reached from the step <b>442</b> may be different than the message provided when the step <b>436</b> is reached from the step <b>434</b>.
p-0160If it is determined at the test step <b>442</b> that the requested operation is allowed, then control passes from the test step <b>442</b> to a step <b>444</b> where the operation is performed. Performing the operation at the step <b>444</b> may include modifying policy data, as described in more detail elsewhere herein. Following the step <b>444</b>, processing is complete.
p-0161Thus, an administrator (user) accessing the policy manager servers <b>402</b> would first provide identification information to the security manager servers <b>403</b> that would return a security token (perhaps having an expiration time). The administrator presents the token and identification information to the policy manager servers <b>402</b>, which would decide to grant or deny access based on the token and the identification information. Note that the security mechanism illustrated by the flow chart <b>430</b> of <figref idrefs="DRAWINGS">FIG. 27</figref> may be extended to be used in connection with accessing any of the servers <b>402</b>-<b>408</b> and/or other data. For example, one of the clients <b>104</b>-<b>106</b> could obtain/modify file objects by first requesting a security token from the security manager servers <b>403</b> prior to performing an operation that includes operations with file objects. Accordingly, for the discussion herein, it can be assumed that access to file objects, servers, etc. includes appropriate security procedures like those illustrated in <figref idrefs="DRAWINGS">FIG. 27</figref>.
p-0162The policy manager servers <b>402</b> handle placement and protection of file objects. An administrator (user) may input, through the user management interface <b>412</b>, different policy templates that may be assigned to different ones of the clients <b>104</b>-<b>106</b>, different users, different classes of users, or any other appropriate group. For example, a policy template may indicate that, for a particular group of users, whenever a new file is created, a mirror will be created that is geographically farther from the initial data set by at least a certain distance. In such a case, when a first user of the group creates an initial data set in New York, a mirror may be automatically created in Los Angeles while, when a second user creates an initial data set in Los Angeles, a mirror may be created in New York.
p-0163The audit servers <b>404</b> may be used to provide system auditing capability. A user may communicate to the audit servers <b>404</b> through the user management interface <b>412</b>. The user may indicate the type of information to be audited (tracked).
p-0164The resource manager servers <b>406</b> keep track of available system resources. In some instances, the resource manager servers <b>406</b> may interact with the policy manager servers <b>402</b> in connection with establishing policy templates and/or assigning policy templates. In some cases, a user may attempt to construct a policy template that is impossible to fulfill if assigned to a group. For example, if all of the physical data storage is in a single geographic location, then it would not be appropriate to have a policy template indicating that new files should include a mirror that is geographically distant from the initial data set.
p-0165The resource manager servers <b>406</b> receive information from other components of the system in order to be able to keep track which resources are available. Whenever a resource is added to the system, the resource or another component reports that information to the resource manager servers <b>406</b>. For example, if new physical storage is added to the system, the new physical storage itself, or a corresponding one of the data storage servers <b>407</b>, sends a message to the resource manager servers <b>406</b>. Similarly, if a resource becomes full (e.g., a physical disk is full) or is removed from the system (planned removal or unplanned resource failure), information is provided to the resource manager servers <b>406</b>. In an embodiment herein, system resources may correspond to portions of the physical storage <b>414</b> and/or data servers <b>407</b> that manage the physical storage <b>414</b>.
p-0166Referring to <figref idrefs="DRAWINGS">FIG. 28</figref>, a resource table <b>460</b> is shown as including a plurality of entries <b>462</b>-<b>464</b>, each of which corresponds to a particular storage resource. Although only three entries are shown, the table <b>460</b> may contain any number of entries. The table <b>460</b> may be implemented using any appropriate technique, including an array, linked list, etc.
p-0167Each of the entries <b>462</b>-<b>464</b> includes a resource field identifying a particular resource corresponding to the entry. In an embodiment herein, each of the entries <b>462</b>-<b>464</b> may correspond to a particular one of the data storage servers <b>407</b> and/or a portion thereof. Each of the entries <b>462</b>-<b>464</b> includes a status field corresponding to the status of the corresponding resource. In an embodiment herein, the status field may indicate that a resource is on-line (available) or off-line (unavailable). The status field may also indicate the percentage of used space of a resource, and perhaps indicate any performance degradation.
p-0168Each of the entries <b>462</b>-<b>464</b> may also include a capabilities field that indicates the capabilities of the corresponding resource. In an embodiment herein, when the resources represent storage areas, the capabilities field may indicate particular capabilities of a corresponding storage area. Particular capabilities may include the resource being green (low energy use through, for example, spinning disks down when not in use), capable of data deduplication (maintaining only a single copy of data that is otherwise duplicated), capable of various RAID configurations, etc. The capabilities field may indicate any appropriate data storage capabilities.
p-0169Referring to <figref idrefs="DRAWINGS">FIG. 29</figref>, a flow chart <b>480</b> indicates operation of the resource manager servers <b>406</b> in connection with maintaining information about system resources. Processing begins at a first step <b>482</b> where the resource manager servers <b>406</b> are initialized with information about resources. The initialization processing performed at the step <b>482</b> may take any form, including loading a fixed table of initially available resources, having the resource manager servers <b>406</b> poll system resources, etc.
p-0170Following the step <b>482</b> is a test step <b>484</b> where the resource manager servers <b>406</b> wait for new information to be provided. In an embodiment herein, after initialization, the resource manager servers <b>406</b> wait to receive information from other system components. In other embodiments, it may be possible to have the resource manager servers <b>406</b> periodically poll system components to see if anything has changed. If it is determined at the test step <b>484</b> that no new information is available, control loops back on the test step <b>484</b> to continue polling.
p-0171Once it is determined at the test step <b>484</b> that new information is available, then control transfers from the test step <b>484</b> to a test step <b>486</b> where it is determined if the new information relates to a new resource added to the system. If so, then control transfers from the test step <b>486</b> to a step <b>488</b> where the new entry is added to the resource table that is managed by the resource manager servers <b>406</b>. Following the step <b>488</b>, control transfers back to the step <b>484</b> to continue waiting for new information.
p-0172If it is determined at the step <b>486</b> that the received resource information does not related to a new resource (and thus relates to a change of an existing resource), then control transfers from the step <b>486</b> to a step <b>492</b> where the existing entry is located in the resource table. Following the step <b>492</b> is a test step <b>494</b> where it is determined if the capability is being changed for the modified resource. The capability of a resource may change under many different circumstances. For example, a resource may degrade and lose capabilities, a resource may be modified/enhanced and gain capabilities, a local manager of a resource may decide to make certain capabilities available/unavailable, etc.
p-0173If it is determined at the step <b>494</b> that the capabilities of a resource have changed, then control transfers from the test step <b>494</b> to a step <b>496</b> to change the capabilities field for the resource being modified. Otherwise, control transfers from the test step <b>494</b> to a step <b>498</b> to change the status field of the resource being modified (e.g., resource is full, resource is off-line, resource is on-line, etc.). Following either the step <b>496</b> or the step <b>498</b>, control transfer back to the step <b>484</b>, discussed above, for another iteration.
p-0174Note that the resource manager servers <b>406</b> may represent a plurality of separate computing devices that may be dispersed throughout the system. Furthermore, each of the separate computing devices may maintain its own copy of the resource table. The separate computing devices that are used to implement the resource manager servers <b>406</b> may or may not share resource information and may or may not receive the same resource status messages. In instances where information sharing and/or receipt of status messages is not perfect, then each of the computing devices may have a somewhat different version of the resource table and it is possible for no one version of the resource table to reflect a completely accurate picture of the exact state of all of the resources of the system.
p-0175The physical storage <b>414</b> may be provided using relatively inexpensive off-the-shelf mass produced storage hardware. In an embodiment herein, at least some of the physical storage <b>414</b> may be implemented using serial ATA disk drives, which are available from a number of manufactures such as Seagate and Western Digital. As discussed elsewhere herein, the physical storage may be geographically dispersed. However, each portion of the physical storage may be managed/controlled by at least one of the data storage servers <b>407</b>, which may be implemented using conventional computing devices local to the corresponding portion of the physical storage <b>414</b>.
p-0176In an embodiment herein, the data storage servers <b>407</b> may present an OSD Standard interface to the system. Thus, the servers <b>102</b> and/or the clients <b>104</b>-<b>106</b> may access physical storage <b>414</b> through the data storage servers <b>407</b> using OSD calls and may receive information/data according to the OSD protocol. In addition, the data storage servers <b>407</b> may handle managing/posting the capabilities and status of different portions of the physical storage <b>414</b>. Thus, for example, when a portion of the physical storage <b>414</b> is managed by a particular server of the data storage servers <b>407</b>, the particular server may send a message to the resource manager servers <b>406</b> indicating the new status.
p-0177Referring to <figref idrefs="DRAWINGS">FIG. 30</figref>, a flow chart <b>510</b> illustrates steps performed by the resource manager servers <b>406</b> in connection with servicing an inquiry for a resource with particular capabilities (i.e., finding a resource with particular capabilities). Processing begins at a first step <b>512</b> where a pointer, used to iterate through each entry of the resource table, is set to point to the first entry. Following the step <b>512</b> is a test step <b>514</b> where it is determined if the pointer points past the end of the table (i.e., all entries have been examined). If so, then control passes from the test step <b>514</b> to a step <b>516</b> where a result indicating no match for the requested capabilities is returned by the resource manager servers <b>406</b>. Following the step <b>516</b>, processing is complete.
p-0178If it is determined at the test step <b>514</b> that the pointer used to iterate through the entries does not point past the end of the table, then control transfers from the test step <b>514</b> to a test step <b>518</b> where it is determined if the entry currently indicated by the pointer is a match for the requested capability. Note that the test at the step <b>518</b> may include checking the status of a resource to ensure that the resource is on-line and not full or otherwise unusable. If it is determined at the step <b>518</b> that the resource indicated by the pointer has the requested capability, then control transfers from the test step <b>518</b> to a step <b>522</b> where the resource manager servers <b>406</b> return an indicator indicating the matching resource. Following the step <b>522</b>, processing is complete.
p-0179If it is determined at the step <b>518</b> that the resource indicated by the pointer does not have the requested capability (or is off-line, full, etc.), then control transfers from the test step <b>518</b> to a step <b>524</b> where the pointer is incremented. Following the step <b>524</b>, control transfers back to the step <b>514</b>, discussed above, for another iteration.
p-0180The LSO trees that are part of the metadata objects for files are created, maintained, and manipulated by the metadata servers <b>405</b>. The metadata servers <b>205</b> handle updates from the clients <b>104</b>-<b>106</b> in connection with manipulation of file objects (e.g., at the step <b>214</b> of the flow chart <b>200</b> of <figref idrefs="DRAWINGS">FIG. 9</figref>, at the step <b>298</b> of the flow chart <b>280</b> of <figref idrefs="DRAWINGS">FIG. 11</figref>, etc.). The metadata servers <b>205</b> may also handle any actions, besides modifying the LSO tree, that may need to be performed in connection with the updates. The metadata servers <b>205</b> also handle leases obtained for file objects.
p-0181Referring to <figref idrefs="DRAWINGS">FIG. 31</figref>, a flow chart <b>550</b> illustrates steps performed by the metadata servers <b>205</b> in connection with servicing a request for a lease for a file. As discussed elsewhere herein, a lease may be requested by one of the clients <b>104</b>-<b>106</b>. However, it is also possible for one of the components of the servers <b>102</b> to request a lease. It is even possible for one of the metadata servers <b>405</b> to request a lease. One of the metadata servers <b>405</b> may request a lease in connection with file maintenance (e.g., repairing mirrors), as described in more detail elsewhere herein. In an embodiment herein, leases are maintained by the metadata servers <b>405</b> in a table that indicates the entity that has acquired the lease, the type of lease (e.g., read or write), and possibly an expiration time.
p-0182In addition, as discussed elsewhere herein, it is possible to perform lease operations on ranges of logical addresses in a file so that, for example, one set of lease operations may be performed on logical addresses A-B for a file while another set of lease operations may be independently performed for logical addresses C-D for the same file, where A-B does not overlap C-D. In a system where only one write lease is issued at a time, it may still be possible for one entity to acquire a write lease for the A-B portion of a file while another independent entity simultaneously acquires a write lease for the C-D portion of the same file. Accordingly, for the discussion herein, in appropriate instances, a reference to a file or files should be understood to include non-overlapping portions of a file or files.
p-0183Processing begins at a first test step <b>552</b> where it is determined if the requested lease is available. The test at the step <b>552</b> determines if the requestor has appropriate security credentials, if the corresponding data file exists, etc. Also, as discussed in more detail elsewhere herein, leases may be purposely made unavailable in certain circumstances. If it is determined at the test step <b>552</b> that the lease is not available, then control transfers from the test step <b>552</b> to a step <b>554</b> where a failure indicator is returned to the requestor. The failure indicator may include a reason for the failure (e.g., improper security credentials, file does not exist, etc.). Following the step <b>554</b>, processing is complete.
p-0184If it is determined at the test step <b>552</b> that the requested lease is available, then control transfers from the step <b>552</b> to a test step <b>556</b> where it is determined if the lease request is for writing data to the file corresponding to the lease. In an embodiment herein, multiple users (e.g., clients, servers) may read from the same file simultaneously while only one user may write to the same file. Accordingly, if it is determined at the test step <b>556</b> that a user is not requesting write access, then control transfers from the test step <b>556</b> to a step <b>558</b> where the metadata servers <b>405</b> return the lease (i.e., returns an appropriate indicator/identifier corresponding to granting the lease). In an embodiment herein, leases may also be provided with a predetermined expiration time after which the leases are no longer valid. Lease expirations and lease recalls are discussed in more detail elsewhere here. In addition, leases may be provided along with security credentials (generated, perhaps, by the security manager servers <b>403</b>) that only allow for the requested operation (e.g., read only, read and write, etc.). The security credentials may also expire at or around the same time that the lease expires in order to enforce lease expirations. Following the step <b>558</b>, processing is complete.
p-0185If it is determined at the test step <b>556</b> that the user is requesting a write lease, then control transfers from the test step <b>558</b> to a test step <b>562</b> where it is determined if another user has already obtained a write lease for the same file. As discussed elsewhere herein, only one write lease at a time is granted for a file. If it is determined at the test step <b>562</b> that another write lease has already been granted, then control transfers from the test step <b>562</b> to a step <b>564</b> where a failure indicator is returned. Just as with the step <b>562</b>, the failure indicator returned at the step <b>564</b> may include information identifying the nature of the failure. Following the step <b>564</b>, processing is complete. If it is determined at the test step <b>562</b> that another write lease has not been granted, then control transfers from the test step <b>562</b> to a step <b>566</b> where the metadata servers <b>405</b> return the lease, possibly along with an expiration. Following the step <b>566</b>, processing is complete.
p-0186As discussed elsewhere herein, it may be desirable in some instances to issue leases with expiration dates. In an embodiment herein, a particular one of the metadata servers <b>405</b> may be responsible for a particular file and corresponding file objects. The responsible one of the metadata servers <b>405</b> issues leases for the file and corresponding file objects and handles lease expiration processing. The lease information may be stored in appropriate data structures (e.g., table(s), linked list(s), etc.) by the responsible one of the metadata servers <b>405</b>. In addition, it is possible to have more than one of the metadata servers <b>405</b> be responsible for a particular file or set of files, where one of the metadata servers <b>405</b> is a primary server and other responsible metadata servers are secondary servers that maintain appropriate information, but do not otherwise provide services unless the primary server fails.
p-0187Referring to <figref idrefs="DRAWINGS">FIG. 32</figref>, a flow chart <b>580</b> illustrates steps performed by a responsible one of the metadata servers <b>405</b> in connection with monitoring lease expiration. Processing begins at a first step <b>582</b> where a pointer that iterates through all of the leases (file and lease combinations) for which the server is responsible is made to point to the first one. Following the step <b>582</b> is a test step <b>584</b> where it is determined if the lease has expired. The processing performed at the step <b>584</b> may use any appropriate technique, including comparing lease expiration times with the current time. If it is determined at the step <b>584</b> that a lease has expired, then control transfers from the step <b>584</b> to a step <b>586</b> where the lease is recalled. Recalling the lease at the step <b>586</b> is discussed in more detail elsewhere herein.
p-0188Following the step <b>586</b>, or following the step <b>584</b> if the lease has not expired, is a step <b>588</b> where the pointer that iterates through the files and leases for which the server is responsible is incremented. Following the step <b>588</b> is a test step <b>592</b> where it is determined if the pointer points past the end (i.e., all files and corresponding leases have been processed). If so, then control transfers from the step <b>592</b> back to the step <b>582</b>, discussed above, to reset the pointer to point to the first one and begin another pass to check for expired leases. If it is determined at the step <b>592</b> that the pointer does not point past the end, then control transfers from the test step <b>592</b> back to the step <b>584</b>, discussed above, for another iteration.
p-0189In an embodiment herein, the system may provide close-to-open consistency where data consistency is provided after an entity has released write access. Said differently, consistency is provided for a file when no entity has an active write lease for the file. Conversely, while any entity has an active write lease, the state of the data may not be guaranteed for any entity reading the data. In the system described herein, leases may be recalled after expiration or may be recalled for other reasons. Recalling the leases may improve the consistency of the data being accessed by other entities.
p-0190Referring to <figref idrefs="DRAWINGS">FIG. 33</figref>, a flow chart <b>610</b> illustrates steps performed in connection with a particular one of the metadata servers <b>405</b> recalling a lease. Processing begins at a first step <b>612</b> where a message is sent to the entity holding the lease (e.g., one of the clients <b>104</b>-<b>106</b>) to alert the entity that the lease is being recalled. As discussed elsewhere herein, any appropriate entity may hold a lease, including clients <b>104</b>-<b>106</b>, other servers, or even one of the metadata servers <b>405</b>. In some embodiments, the step <b>612</b> may include ensuring receipt of the message by the entity (e.g., waiting for an acknowledgement) while in other embodiments the message is simply sent and it is assumed that the message is received by any operational recipient. Of course, in systems that wait for an acknowledgement, there may be a timeout and/or a limit on the number of attempts.
p-0191Following the step <b>612</b> is a step <b>614</b> where the appropriate tables are adjusted to reflect that the lease that has been recalled is no longer outstanding. Tables and other data structures used with leases are discussed in more detail elsewhere herein. Following the step <b>614</b> is a test step <b>616</b> where it is determined if the lease that was recalled was a write lease (lease to allow writing data). As discussed elsewhere herein, the system may provide close-to-open consistency so that, when a write lease is released, data reads are made consistent. This may be facilitated by recalling all read leases when a write lease is recalled. Entities for whom a read lease is recalled may flush their internal buffers prior to reacquiring the read lease after the recall. Note, by the way, that an entity for which a write lease is recalled may also flush buffers by writing unsaved data to the physical storage <b>414</b> (through the data storage servers <b>407</b>) in response to receiving a recall notification. Accordingly, in some embodiments, an entity receiving a recall message for a write lease may be provided with a certain amount of time in which to write any unsaved data to physical storage. For this purpose, the security credentials provided along with a write lease may be set to expire a predetermined amount of time after the write lease expires.
p-0192If it is determined at the step <b>616</b> that the lease that is being recalled is not a write lease, then processing is complete. Otherwise, control transfers from the test step <b>616</b> to a step <b>618</b> where a pointer, used to iterate through all of the outstanding leases for the file for which the write lease is being recalled, is made to point to the first outstanding lease.
p-0193Following the step <b>618</b> is a test step <b>622</b> where it is determined if the pointer points past the end (i.e., all outstanding leases have been recalled). If so, then processing is complete. Otherwise, control transfers from the test step <b>622</b> to a step <b>624</b> where the lease is recalled. The lease may be recalled by calling the processing illustrated by the flow chart <b>610</b>, and thus may be recursive. Following the step <b>624</b> is a step <b>626</b> where the pointer used to iterate through entities having outstanding leases for a file is incremented. Following the step <b>626</b>, control transfers back to the step <b>622</b> for another iteration.
p-0194Referring to <figref idrefs="DRAWINGS">FIG. 34</figref>, a table <b>630</b> is shown as including a plurality of entries used to keep track of files for which a particular one of the metadata servers <b>405</b> is responsible. Of course, other appropriate data structures may be used instead of the table <b>630</b>, such as a linked list, a doubly linked list, etc. Each primary one of the metadata servers <b>405</b>, and any corresponding secondary one(s) of the metadata servers <b>405</b>, may contain data corresponding to specific file sets for which the particular one(s) of the metadata servers <b>405</b> are responsible. Thus, for example, a first primary one of the metadata servers <b>405</b> may contain a version of the table <b>630</b> for a first set of files for which the first primary one of the metadata servers is responsible while a second primary one of the metadata servers <b>405</b> may contain a completely different version of the table <b>630</b> for a second (different) set of files for which the second primary one of the metadata servers <b>405</b> is responsible.
p-0195Each entry of the table <b>630</b> includes a file identifier field (FID) that uniquely identifies the file corresponding to an entry. In an embodiment herein, the FID field may be the object id of the metadata object for the file (for example, the metadata object <b>132</b> in the diagram <b>130</b> of <figref idrefs="DRAWINGS">FIG. 4</figref>). Note that, as discussed elsewhere herein, the metadata object for a file may be used to locate all of the other data objects for the file.
p-0196The MD LOC field may describe the data storage location of the metadata object for the file. In an embodiment herein, the MD LOC field may contain an identifier for the one of the data storage servers <b>407</b> that stores the metadata object for the file. THE MD LOC field may also contain a unique identifier (perhaps initially assigned by the one of the data storage servers <b>407</b>) that may be used to retrieve and store data at the one of the data storage servers <b>407</b>.
p-0197The LEASE LIST field may contain information about all entities that have active leases outstanding for the corresponding file. In an embodiment herein, the LEASE LIST field may contain a pointer to a linked list of elements that corresponding to entities having outstanding leases. Of course, any other appropriate data structure (e.g., array) may be used.
p-0198Referring to <figref idrefs="DRAWINGS">FIG. 35</figref>, a diagram <b>640</b> illustrates a linked list that may be used to keep track of entities having an outstanding active lease for a file. Each element of the list contains a NEXT field that points to the next element in the list. The element at the end of the list contains a null indicator. Thus, the list may be traversed by starting with the element pointed to by the LEASE LIST pointer and subsequently pointing to the elements pointed to by the NEXT field. (e.g., in connection with the processing illustrated in the flow chart <b>580</b> of <figref idrefs="DRAWINGS">FIG. 32</figref>). Similarly, conventional linked list operations may be used to add and remove elements.
p-0199Each element of the list also contains a TYPE field that indicates the type of lease (e.g., read or write) and includes an EXP field that indicates when the lease corresponding to the element expires. Each element also contains an ENT field that indicates the entity (e.g., one of the clients <b>104</b>-<b>106</b>, another server, etc.) that holds the corresponding lease.
p-0200Manipulation of the linked list is fairly straight-forward. When a lease is granted, fields of an element are populated with the type, expiration, and entity corresponding to the lease and the element is then added to the list. Similarly, when a lease is recalled or otherwise returned, the corresponding element is removed from the list. Of course, other data structures may be used instead of a linked list.
p-0201Referring to <figref idrefs="DRAWINGS">FIG. 36</figref>, a table <b>650</b> is shown as containing a plurality of entries that correlate object identifiers (OID) with location information (LOC). In an embodiment herein, object identifiers are a numerical value. Each of the metadata servers <b>405</b> is provided with a unique range of object identifiers to use/manage. In some embodiments, object identifiers may be reused while in other embodiments object identifiers are not reused. Of course, in instances where object identifiers are not reused, each of the metadata servers <b>405</b> needs to be provided with a sufficient range of useable object identifiers.
p-0202The LOC field is like the MD LOC field for the table <b>630</b>. The LOC field describes the data storage location of the corresponding object. In an embodiment herein, the LOC field may contain an identifier for the one of the data storage servers <b>407</b> containing (handling) the object as a unique identifier (perhaps assigned by the one of the data storage servers <b>407</b>) that may be used to retrieve and store data for the object. Thus, if one of the metadata servers <b>405</b> has a table entry for a particular object, an entity can pass the object identifier to the one of the metadata servers <b>405</b> and receive in return the corresponding LOC information to allow the entity to access the appropriate one of data storage servers <b>407</b> directly.
p-0203Having a number of metadata servers <b>405</b> allows for distributed servicing of file operations (and thus significant scalability) as well as providing failover/redundancy capability. In some instances, objects may be reassigned from one of the metadata servers <b>405</b> to another. However, since each of the metadata servers <b>405</b> contains information for only a subset of files (and corresponding file objects), it may be necessary to provide a mechanism for locating an appropriate one of the metadata servers <b>405</b> in connection with performing operations.
p-0204The metadata location servers <b>408</b> provide location services for an entity seeking the appropriate one of the metadata servers <b>405</b> for operations on a particular file. In an embodiment herein, each of the metadata location servers <b>408</b> may receive a call having an object identifier and can return a specific one of the metadata servers <b>405</b> that handles the particular object. In addition, as discussed in more detail elsewhere herein, the metadata location servers <b>408</b> may assist in connection with the creation of new objects by indicating to a calling entity (e.g., one of the clients <b>104</b>-<b>106</b>) a specific one of the metadata servers <b>405</b> to be used for the new object. The metadata servers <b>408</b> may operate like Domain Name Servers on the Web, and each of the clients <b>104</b>-<b>106</b> (and other entities) may be provided with a primary and a secondary one of the metadata location servers <b>408</b> to consult.
p-0205Referring to <figref idrefs="DRAWINGS">FIG. 37</figref>, a table <b>670</b> is shown as containing entries for use by one of the metadata location servers <b>408</b>. Each entry includes an OID RANGE field, which indicates a range of object identifiers, and an MDS ID field, which identifies a particular one of the metadata servers <b>405</b>, or possibly a group of the metadata servers <b>405</b>, with one being primary and the remainder being secondary. An entity may provide a particular object identifier to the metadata location server <b>408</b>, which may then consult the table <b>670</b> and return the corresponding value from the MDS ID field.
p-0206In addition, the metadata location servers <b>408</b> may assign a particular one of the metadata servers <b>405</b> in connection with creation of a new object. The assignment may be based on any appropriate metric, including random assignment, assignment based on geographic proximity, load balancing, and/or a policy input by a user through the user management interface <b>412</b>, discussed above. A policy may indicate, for example, that new objects created by a particular client are provided on a particular metadata server.
p-0207Referring to <figref idrefs="DRAWINGS">FIG. 38</figref>, a flow chart <b>680</b> illustrates processing by one of the metadata location servers <b>408</b> to assign a particular one of the metadata servers in connection with creation of a new file object. Processing begins at a first step <b>682</b> where the policy may be consulted. As discussed elsewhere herein, it may be possible to input policies through the user management interface <b>412</b>. The policies may dictate (directly or indirectly) which of the metadata servers <b>405</b> are to be used for which of the clients <b>104</b>-<b>106</b>. Note that other policies are possible. For example, the policies may indicate which of the metadata servers <b>405</b> are to be used at different times of the day (independent of the clients <b>104</b>-<b>106</b>) or based on the load, the user, etc. The policy information may be stored at the user management interface <b>412</b> and accessed in connection with the step <b>682</b>, or may be stored at the one of the metadata location servers <b>408</b> after having been previously passed thereto. Following the step <b>682</b> is a step <b>684</b> where identification information for a specific one of the metadata location servers <b>405</b> is returned to the calling entity. Following the step <b>684</b>, processing is complete.
p-0208Referring to <figref idrefs="DRAWINGS">FIG. 39</figref>, a flow chart <b>700</b> illustrates steps performed by one of the metadata servers <b>405</b> in connection with deleting a file for which the one of the metadata servers <b>405</b> is responsible. Processing begins at a first step <b>702</b> where all leases for the file are recalled (e.g., by iterating through the lease list <b>640</b> and providing recall processing like that illustrated by the flow chart <b>610</b> of <figref idrefs="DRAWINGS">FIG. 33</figref>). Following the step <b>702</b> is a step <b>704</b> where the leases are made unavailable for other processes (e.g., by setting an appropriate flag that prevents granting further leases for the file). Following the step <b>704</b> is a step <b>706</b> where the metadata for the file is obtained (e.g., by retrieving the metadata object for the file). Note that, as discussed elsewhere herein, the metadata object for a file contains information about the location of all the file objects used in connection with the file.
p-0209Following the step <b>706</b> is a step <b>708</b> where a pointer, used to iterate through the objects used in connection with a file, is made to point to the first object. The pointer and subsequent iterative processing uses information obtained at the step <b>706</b> to determine the objects for the file. Following the step <b>708</b> is a test step <b>712</b> where it is determined if the pointer, used to iterate through the objects, points past the end (i.e., all of the file objects have been processed). If so, then control transfers from the test step <b>712</b> to a step <b>714</b> where the table entry corresponding to the file (i.e., the entry in the table <b>630</b> of <figref idrefs="DRAWINGS">FIG. 34</figref>) is deleted (e.g., set to null). Following the step <b>714</b>, processing is complete.
p-0210If it is determined at the step <b>712</b> that there are more file objects to process, then control transfers from the step <b>712</b> to a step <b>716</b> where the LOC information is obtained for the object. The LOC information is like the information stored in the table <b>650</b> of <figref idrefs="DRAWINGS">FIG. 36</figref>, discussed above. In some instances, the LOC information will be local to the one of the metadata servers <b>405</b> performing the processing. In other instances, it may be necessary to call one of the metadata location servers <b>408</b> to get the location information for the object. Following the step <b>716</b> is a step <b>718</b> where a message is sent to the appropriate one of the data storage servers <b>407</b> (i.e., the one handling the object) to cause the object to be deleted.
p-0211In an embodiment herein, it may be possible for different files to use the same object (e.g., deduplication, file aliasing, etc.), in which case the one of the data storage servers <b>407</b> would simply decrement a counter for the object indicating the number of users thereof. When the counter is decremented to zero, the data storage server may delete the data corresponding to the object. Note that the object(s) associated with a file may be deleted asynchronously. Following the step <b>718</b> is a step <b>722</b> where the pointer used to iterate through the file objects is incremented. Following the step <b>722</b>, control transfers back to the step <b>712</b>, discussed above, for another iteration.
p-0212Referring to <figref idrefs="DRAWINGS">FIG. 40</figref>, a flow chart <b>740</b> illustrates steps performed by one of the metadata servers <b>405</b> in connection with creating a new file. Note that, prior to performing the processing illustrated in <figref idrefs="DRAWINGS">FIG. 40</figref>, the entity creating the file (e.g., one of the clients <b>104</b>-<b>106</b>) may first consult the metadata location servers <b>408</b> to determine the proper one of the metadata servers <b>405</b> to use to create the file.
p-0213Processing begins at a first step <b>742</b> where the policy manager servers <b>402</b> are consulted to obtain policy information for new files (e.g., new files for client X have a mirror geographically located at least a certain distance from the primary data set). Following the step <b>742</b> is a step <b>744</b> where the resource manager servers <b>406</b> are consulted to determine the available resources to meet the dictates of the policy obtained at the step <b>742</b>. Following the step <b>744</b> is a test step <b>746</b> where it is determined if it is possible to meet the dictates of the policy given the available resources. For example, it may not be possible to satisfy the policy of having geographically separated mirrors if all of the remaining physical storage in a system is in one geographic location. If it is determined at the test step <b>746</b> that it is not possible to fulfill a policy, then control transfers from the test step <b>746</b> to a step <b>748</b> where alternative processing is performed. Any appropriate processing may be performed at the step <b>748</b>, including returning an error indicator to the calling entity, creating the file with the next best available resources, etc. Following the step <b>748</b>, processing is complete.
p-0214If it is determined at the step <b>746</b> that it is possible to fulfill the policy with available resources, then control transfers from the test step <b>746</b> to a step <b>752</b> where the metadata object for the file is created. Creating the metadata object may include populating the data fields of the metadata object and obtaining storage from an appropriate one of the data storage servers <b>407</b>. In an embodiment herein, the data storage servers <b>407</b> may be a pool and, absent any other specific requirements, may provide storage space at any appropriate portion of the physical storage <b>414</b> upon request. The metadata objects created at the step <b>752</b> will be like those described herein. See, for example, <figref idrefs="DRAWINGS">FIGS. 4-8</figref> and the corresponding description. Following the step <b>752</b> is a step <b>754</b> where a table entry is created in the table <b>630</b> for the new file. Following the step <b>754</b> is a step <b>756</b> where the object id of the metadata object for the file is returned to the calling entity. Following the step <b>756</b>, processing is complete.
p-0215As discussed elsewhere herein, when a client or other entity unsuccessfully attempts a write operation, a message (update) is sent to the servers <b>102</b> by the client or other entity. Similarly, a message (update) may also be sent to the servers <b>102</b> in connection with finding a stale mirror in connection with a synchronous mirror copy (see the step <b>358</b> of the flow chart <b>350</b> of <figref idrefs="DRAWINGS">FIG. 13</figref>), and/or writing to data having an asynchronous mirror.
p-0216Referring to <figref idrefs="DRAWINGS">FIG. 41</figref>, a flow chart <b>760</b> illustrates steps performed by one of the metadata servers <b>405</b> in connection with handling a message that a write operation was unsuccessful. Processing begins at a first step <b>762</b> where all of the leases for the file are recalled. Following the step <b>762</b> is a step <b>764</b> where leases for the file are made unavailable. Following the step <b>764</b> is a step <b>766</b> where new storage space is allocated to replace the old storage space to which the write operation was unsuccessful. Following the step <b>766</b> is a step <b>768</b> where the appropriate information in the metadata object for the file is adjusted. Following the step <b>768</b> is a step <b>772</b> where a data copy operation is begun to repopulate the new data storage space with, for example, data from one of the mirrors. While the data copy operation is being performed, the data may be indicated as being stale at the step <b>772</b>. Of course, if there are no mirrors or other data that can be used to repopulate the new storage space, then the processing at the step <b>772</b> would not be performed. Following the step <b>772</b> is a step <b>774</b> where the leases for the file are made available. Following the step <b>774</b>, processing is complete.
p-0217Referring to <figref idrefs="DRAWINGS">FIG. 42</figref>, a flow chart <b>780</b> illustrates processing preformed in connection with one of the metadata servers <b>405</b> receiving an indication that a synchronous mirror was stale. Processing begins at a first test step <b>782</b> where it is determined if the mirror is currently in the process of being populated with data (perhaps in connection with a previous bad write operation). If so, then the data population operation is allowed to continue and processing is complete. Otherwise, control transfers from the test step <b>782</b> to a step <b>784</b> where processing like that illustrated in the flow chart <b>760</b> of <figref idrefs="DRAWINGS">FIG. 41</figref>, discussed above, is performed. Following the step <b>784</b>, processing is complete.
p-0218Referring to <figref idrefs="DRAWINGS">FIG. 43</figref>, a flow chart <b>790</b> illustrates steps performed in connection with the servers <b>102</b> receiving a message that data corresponding to asynchronous copies has been written, thus necessitating update of the asynchronous copies. Processing begins at a first step <b>792</b> where information is added to a queue (e.g., a job queue provided at the affected one of the metadata servers <b>405</b>) indicating that asynchronous data needs to be copied. As discussed in more elsewhere herein, a process at each of the metadata servers <b>405</b> services the corresponding queue. Following the step <b>792</b>, processing is complete.
p-0219Referring to <figref idrefs="DRAWINGS">FIG. 44</figref>, a flow chart <b>800</b> illustrates processing performed by a process at each of the metadata servers <b>405</b> that services the corresponding queue that is populated by the processing illustrated by the flow chart <b>790</b> of <figref idrefs="DRAWINGS">FIG. 43</figref>. Processing begins at a first test step <b>802</b> where it is determined if the queue is empty. If so, then control transfers back to the test step <b>802</b> to continue to poll the queue. If the queue is not empty, then control transfers from the test step <b>802</b> to a step <b>804</b> where the next entry in the queue is removed. In an embodiment herein, queue elements may be processed on a first in first out basis. However, it is also possible to selectively remove elements from the queue in any order. For example, elements associated with files that receive higher priority may be removed before other elements (e.g., in connection with a flush operation for the file). As another example, elements may be removed according to size (of needed write operation) or according to any other appropriate criteria.
p-0220Following the step <b>804</b> is a step <b>806</b> where the write lease for the affected file is recalled. Following the step <b>806</b> is a step <b>808</b> where the write lease is obtained. Following the step <b>808</b> is a step <b>812</b> where the write operation is performed to write the asynchronous data to the mirror. Following the step <b>812</b> is a step <b>814</b> where the write lock is released. Following the step <b>814</b>, control transfers back to the step <b>802</b> to continue to poll the queue.
p-0221The system described herein may be used with any server, or any group of servers, capable of providing file objects to clients. The particular form of the file objects may vary without departing from the spirit and scope of the invention. In some instances, the order of steps in the flow charts may be modified, where appropriate. The system described herein may be implemented using a computer program product/software provided in a computer-readable storage medium.
p-0222While the invention has been disclosed in connection with various embodiments, modifications thereon will be readily apparent to those skilled in the art. Accordingly, the spirit and scope of the invention is set forth in the following claims.
Contents4
35 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12 Sheet 13 Sheet 14 Sheet 15 Sheet 16 Sheet 17 Sheet 18 Sheet 19 Sheet 20 Sheet 21 Sheet 22 Sheet 23 Sheet 24 Sheet 25 Sheet 26 Sheet 27 Sheet 28 Sheet 29 Sheet 30 Sheet 31 Sheet 32 Sheet 33 Sheet 34 Sheet 35
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US10061514B2 | Cited by | United States of America | Applicant |
| US9462056B1 | Cited by | United States of America | Search report |
| US10769021B1 | Cited by | United States of America | Applicant |
| CN102687127A | Cited by | China | Search report |
| US10261960B2 | Cited by | United States of America | Applicant |
| US2013226872A1 | Cited by | United States of America | Search report |
| US7650514B2 | Cited by | United States of America | Search report |
| US10885060B2 | Cited by | United States of America | Search report |
| US9601199B2 | Cited by | United States of America | Applicant |
| US2015012490A1 | Cited by | United States of America | Pre-grant |
| US11188236B2 | Cited by | United States of America | Applicant |
| US10579281B2 | Cited by | United States of America | Search report |
| WO2011014254A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| US2013226872A1 | Cited by | United States of America | Search report |
| US10282122B2 | Cited by | United States of America | Applicant |
| US10248682B2 | Cited by | United States of America | Applicant |
| US8135760B1 | Cited by | United States of America | Search report |
| US10474654B2 | Cited by | United States of America | Search report |
| US11061928B2 | Cited by | United States of America | Applicant |
| CN113726842A | Cited by | China | Search report |
| US8307362B1 | Cited by | United States of America | Applicant |
| US10133636B2 | Cited by | United States of America | Search report |
| US10324954B2 | Cited by | United States of America | Search report |
| US8682955B1 | Cited by | United States of America | Applicant |
| US9870824B2 | Cited by | United States of America | Applicant |
| US10599611B1 | Cited by | United States of America | Search report |
| US2016085469A1 | Cited by | United States of America | Search report |
| US2014279911A1 | Cited by | United States of America | Pre-grant |
| US8578204B1 | Cited by | United States of America | Applicant |
| US10572186B2 | Cited by | United States of America | Applicant |
| CN110083552A | Cited by | China | Search report |
| US9824095B1 | Cited by | United States of America | Search report |
| US8972405B1 | Cited by | United States of America | Applicant |
| US10360057B1 | Cited by | United States of America | Search report |
| US2019109852A1 | Cited by | United States of America | Search report |
| US10565168B2 | Cited by | United States of America | Applicant |
| US2013110775A1 | Cited by | United States of America | Pre-grant |
| US9455914B2 | Cited by | United States of America | Search report |
| US10725853B2 | Cited by | United States of America | Applicant |
| US8627446B1 | Cited by | United States of America | Applicant |
| US8700676B2 | Cited by | United States of America | Search report |
| US2016070492A1 | Cited by | United States of America | Pre-grant |
| US10789137B2 | Cited by | United States of America | Applicant |
| US2014379637A1 | Cited by | United States of America | Pre-grant |
| US2006136369A1 | Cited by | United States of America | Pre-grant |
| US8938580B2 | Cited by | United States of America | Search report |
| US9530135B2 | Cited by | United States of America | Search report |
| US9584312B2 | Cited by | United States of America | Applicant |
| US2016085469A1 | Cited by | United States of America | Pre-grant |
| US10120607B2 | Cited by | United States of America | Applicant |
| US2011252070A1 | Cited by | United States of America | Pre-grant |
| US10528262B1 | Cited by | United States of America | Search report |
| US8484625B2 | Cited by | United States of America | Search report |
| US10503608B2 | Cited by | United States of America | Applicant |
| US10116540B1 | Cited by | United States of America | Search report |
| CN103581229A | Cited by | China | Search report |
| US10817327B2 | Cited by | United States of America | Applicant |
| US9952972B2 | Cited by | United States of America | Applicant |
| US9977719B1 | Cited by | United States of America | Applicant |
| US8965847B1 | Cited by | United States of America | Search report |
| US9467294B2 | Cited by | United States of America | Applicant |
| US8504791B2 | Cited by | United States of America | Applicant |
| US11658982B2 | Cited by | United States of America | Search report |
| US2013226872A1 | Cited by | United States of America | Pre-grant |
| US11080231B2 | Cited by | United States of America | Search report |
| US7783664B2 | Cited by | United States of America | Applicant |
| US2016062689A1 | Cited by | United States of America | Pre-grant |
| US8612673B2 | Cited by | United States of America | Applicant |
| US12124417B2 | Cited by | United States of America | Applicant |
| US9520193B2 | Cited by | United States of America | Applicant |
| US10346047B2 | Cited by | United States of America | Applicant |
| RU2656739C1 | Cited by | Russian Federation | Search report |
| US8892513B2 | Cited by | United States of America | Search report |
| US9628108B2 | Cited by | United States of America | Applicant |
| US10204113B2 | Cited by | United States of America | Applicant |
| US10606482B2 | Cited by | United States of America | Applicant |
| US8290906B1 | Cited by | United States of America | Applicant |
| US8667092B1 | Cited by | United States of America | Search report |
| US2017063990A1 | Cited by | United States of America | Search report |
| US2017123676A1 | Cited by | United States of America | Pre-grant |
| US2014149656A1 | Cited by | United States of America | Pre-grant |
| US10282127B2 | Cited by | United States of America | Applicant |
| US10366070B2 | Cited by | United States of America | Applicant |
| US8407428B2 | Cited by | United States of America | Applicant |
| US10809928B2 | Cited by | United States of America | Applicant |
| US10831776B2 | Cited by | United States of America | Applicant |
| US2007156588A1 | Cited by | United States of America | Pre-grant |
| US2016070492A1 | Cited by | United States of America | Search report |
| US2015169623A1 | Cited by | United States of America | Pre-grant |
| US9817728B2 | Cited by | United States of America | Applicant |
| US2019109852A1 | Cited by | United States of America | Search report |
| US2015074683A1 | Cited by | United States of America | Pre-grant |
| US2010257253A1 | Cited by | United States of America | Pre-grant |
| US11451627B2 | Cited by | United States of America | Search report |
| US2002056181A1 | Cites | United States of America | Pre-grant |
| US2002083183A1 | Cites | United States of America | Pre-grant |
| US2002124137A1 | Cites | United States of America | Pre-grant |
| US2003028623A1 | Cites | United States of America | Pre-grant |
| US2003172145A1 | Cites | United States of America | Pre-grant |
| US2003195895A1 | Cites | United States of America | Pre-grant |
25 members in 5 offices
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 98162407 | United States of America | A | |
| US20070981624 | – | – | – |
Members25
| Document | Office | Kind | |
|---|---|---|---|
| US2009112789A1 | United States of America | A1 | |
| US2009112811A1 | United States of America | A1 | |
| US2009112879A1 | United States of America | A1 | |
| US2009112880A1 | United States of America | A1 | |
| US2009112921A1 | United States of America | A1 | |
| WO2009054934A1 | World Intellectual Property Organization (WIPO) | A1 | |
| EP2203810A1 | European Patent Office (EPO) | A1 | |
| CN101836184A | China | A | |
| US7836018B2 | United States of America | B2 | |
| JP2011501314A | Japan | A | |
| US2011029487A1 | United States of America | A1 | |
| US2011219032A1 | United States of America | A1 | |
| US2012059799A1 | United States of America | A1 | |
| US8296340B2 | United States of America | B2 | |
| US8352431B1 | United States of America | B1 | |
| CN101836184B | China | B | |
| JP5504165B2 | Japan | B2 | |
| EP2203810A4 | European Patent Office (EPO) | A4 | |
| US9122397B2 | United States of America | B2 | |
| US9413825B2 | United States of America | B2 | |
| US9462056B1 | United States of America | B1 | |
| US9684659B1 | United States of America | B1 | |
| US9817832B1 | United States of America | B1 | |
| EP3296895A1 | European Patent Office (EPO) | A1 | |
| EP3296895B1 | European Patent Office (EPO) | B1 |
70 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Maintenance fee paymentMAFP | MAFP | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| AssignmentAS | AS | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF | |
| AssignmentAS | AS | |
| AssignmentAS | AS |
Numbers
- Publication, DOCDB
- 2009112880
- Publication, EPODOC
- US2009112880
- Application
- 11981624
- Application, DOCDB
- 98162407
- Application, EPODOC
- US20070981624
Titles
- English
- Managing file objects in a data storage system
Classification
- CPC, 2
- H04L67/1097
- G06F16/13
- IPC, 1
- G06F17 30
- USPC, 3
- 001001000
- 707999010
- 707E17001