Portions of this patent application contain materials that are subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document, or the patent disclosure, as it appears in the Patent and Trademark Office file or records, but otherwise reserves all copyright rights whatsoever.
Information drives business. A hardware or software failure affecting a data center can cause days or even weeks of unplanned downtime and data loss that could threaten an organization's productivity. For businesses that increasingly depend on data and information for their day-to-day operations, this unplanned downtime can also hurt their reputations and bottom lines. Businesses are becoming increasingly aware of these costs and are taking measures to plan for and recover from hardware and software failures.
Most complex business applications are run not on a single computer system, but in a distributed system in which multiple computer systems, referred to as nodes, each contribute processing resources and perform different tasks. In such an environment, disruption due to hardware and software failures can be lessened or prevented using a strategy known as clustering. In a clustered environment, computer systems and storage devices are interconnected, typically at high speeds within a local data center, for the purpose of improving reliability, availability, serviceability, and/or performance via load balancing. Redundant interconnections between the computer systems are typically included as well, and the collection of computer systems, storage devices, and redundant interconnections is referred to herein as a cluster. In some implementations, the cluster appears to users as a single highly available system. Different types of clusters may be established to perform independent tasks, to manage diverse hardware architectures performing similar tasks, or when local and backup computer systems are far apart physically.
In some clustering environments, only one of the computer systems in the cluster provides processing resources with respect to a particular software application. In other clustering environments, processing for a single software application is distributed among nodes in the cluster to balance the processing load.
Within a single computer system, multiple threads executing a given software application may access and/or update the same data. The term ‘thread’ is used to describe the context in which a computer program is being executed. This context includes the program code, the data for execution of the program code, a stack, a program counter indicating a memory location from which the next instruction will come, and state information. Coordination is necessary to ensure that one thread does not read shared data at the same time that another thread is updating that data, thereby possibly resulting in data inconsistency depending upon the timing of the two operations. In clustering environments where processing for a given software application is “load balanced,” threads that share data can be running on different nodes within a cluster.
Coordination between threads accessing shared data is often implemented using locks. Typically, a lock is software that protects a piece of shared data; for example, in a file system, a lock can protect a file or a disk block. In a distributed system, a lock can also protect shared “state” information distributed in memories of each node in the system, such as the online or offline status of a given software application. All shared data is protected by a lock, and locks are typically managed by a lock manager, which often provides an interface to be used by other application programs.
A lock is requested before the calling application program can access data protected by the lock. A calling application program can typically request an “exclusive” lock to write or update data protected by the lock or a “shared” lock to read data protected by the lock. If the calling application program is granted an exclusive lock, then the lock manager guarantees that the calling program is the only thread holding the lock. If the calling program is granted a shared lock, then other threads may also be holding shared locks on the data, but no other thread can hold an exclusive lock on that data.
The lock manager cannot always grant a lock request right away. Consider an example where one thread has an exclusive lock L on a given set of data, and a second thread requests shared access to the given set of data. The second thread's request cannot be granted until the first thread has released the exclusive lock on the given set of data.
A lock can be placed on data that are stored on a shared disk. Locks can also be placed on shared data stored in memory for each node, where the data must be consistent for all nodes in a cluster. For example, nodes in a cluster can share information indicating that a file system is mounted. A lock can be placed on the shared state information when the state of the file system changes from mounted to not mounted, or vice versa.
Each node can have a program that handles access to data protected by each lock. In this example, lock agent 130, a module of lock manager 160, runs on node 110A to provide access to data 152 protected by lock 150. Node 110B may also include another lock agent (not shown) to handle locks for clients on node 110B. If lock agent 130 itself does not have the access level requested by a client, such as client 120, running on node 110A, lock agent 130 calls lock master 140 to request the desired access level for node 110A. Lock master 140 keeps track of the access levels, also referred to as lock levels, held by all of the lock agents, such as lock agent 130, on each node.
Initialization of a lock, such as lock 150, is initiated by a client, or thread, such as client 120 of node 110A. A client calls a lock agent, such as lock agent 130, for the lock protecting the data of interest, such as lock 150. In the embodiment shown in
In action 1.1, client 120 running on node 110A requests lock agent 130 to initialize lock 150 on data 152. In action 1.2, lock agent 130 sets up data structures necessary for client 120 to use data 152 protected by lock 150. No communication with lock master 140 is needed to set up the data structures, which are discussed further below with reference to
Subsequent requests to initialize locks from client 120 or other clients (not shown) on node 110A can be granted by lock agent 130 by performing actions such as actions 1.1, 1.2, and 1.3. In other embodiments, initializing a lock may include communication with a lock master, such as lock master 140.
In action 2.5, lock master 140 grants shared access to data 152 protected by lock 150 to lock agent 130. Now that lock agent 130 has been granted shared access to data 152, lock agent can grant shared access to any client running on node 110A that wishes to read data 152. A grant of access to a lock agent, such as lock agent 130, can be viewed as a grant of access to data protected by the lock, here lock 150, corresponding to the lock agent, for the entire node on which the lock agent is running. Lock agent 130 handles requests for access by client processes running on its respective node, in this case, node 110A. In action 2.6, lock agent 130 grants shared access to data 152 protected by lock 150 to client 120.
As shown in
Messaging between nodes is very expensive when compared to normal instruction execution; for example, on a typical computer system, a program can execute 250,000 instructions in the time it takes to send, receive, and process a message. Communicating with other processes on the same node is much less expensive, and therefore it is desirable, when possible, to minimize messages between nodes in favor of communications between processes on the same node. Using lock agents, such as lock agent 130, helps to minimize messaging because the lock agent can grant the access level that the lock agent itself has been granted. However, when the lock agent has not been granted access, the lock agent/lock master scheme still requires significant messaging whenever the lock agent has not already been granted the access level desired and the lock master is running on a different node.
Lock master 140 determines in action 3.4 that data protected by lock 150 are currently held at a shared access level by lock agent 330 running on node 110C, in contrast to the finding in
In this example, lock master 140 takes the third option, and in action 3.5, lock master 140 requests lock agent 330 to lower the access level with which lock agent 330 holds data 152 protected by lock 150. Lowering the access level with which a lock agent holds data protected by a lock is also referred to herein as “lowering the access level for the lock,” and locks can be referred to as having an access level. Lowering the access level is also referred to herein as “releasing the access level” or releasing the lock. A request to lower the access level can also be referred to as a revocation request.
In response to the revocation request to lower the lock access level for lock 150, in action 3.6, lock agent 330 waits on clients on node 110C to finish using data 152 so that it can lower the access level of lock 150. In action 3.7, lock agent 330 sends a message indicating that the access level of lock 150 is lowered to a “no lock” access level. Lock master 140 records the fact that lock agent 330 no longer holds lock 150 in a data structure, which is described with reference to
In action 3.8, lock master 140 grants exclusive access to data 152 protected by lock 150 to lock agent 130. Now that lock agent 130 has exclusive access to data 152, lock agent can grant exclusive access to data 152 protected by lock 150 to client 120.
In this example, an additional message was sent by lock master 140 in action 3.5 between nodes to handle contention for data 152 between nodes 110A and 110B. The other two options described above, waiting until the client of the lock agent holding the lock has released the lock, and granting shared access rather than exclusive access, do not require lock master 140 to send additional messages to lock agent 330. Waiting until lock 150 is released would eliminate action 3.5, where lock master 140 requests lock agent 330 to revoke access to data 152 protected by lock 150. However, access to data 152 by client 120 would be delayed until lock agent 330 voluntarily releases lock 150 on data 152. Granting shared access instead of exclusive access would change actions 3.8 and 3.9 to grant shared rather than exclusive access, and would eliminate action 3.5. However, a grant of shared rather than exclusive access would not satisfy the need of client 120, possibly resulting in additional messaging for client 120 to obtain the access level needed.
Lock master 140 of
As illustrated in this example, communication to request and grant locks in a multi-node environment has heretofore been very expensive and significantly reduces time available for processing instructions. What is needed is a system that minimizes messaging between nodes, while allowing locks to be used to enable data sharing among multiple threads running on the nodes.
A method, system, application programming interface, computer system, and computer program product to provide locks for controlling access to data by nodes in a multi-node system while minimizing the number of messages sent between nodes. In one embodiment, a multi-node knowledge agent has knowledge of locks distributed among the nodes in the multi-node system. Based upon this knowledge, the multi-node knowledge agent can determine when no other node is accessing data protected by a given lock and when an event has occurred that precedes a request by another node to access data protected by the given lock. When no node is accessing the data and no event preceding a request to access the data has occurred, the multi-node knowledge agent can designate that given lock as “masterless.” When a lock is designated masterless, a lock agent on one node is authorized to subsequently grant access to the data protected by that given lock without communicating with a lock master, which may reside on another node. Designating a lock as masterless thereby minimizes messages sent between nodes.
In one embodiment, when the multi-node knowledge agent obtains information that an event has occurred that precedes a request by another node to access the data protected by the masterless lock, the multi-node knowledge agent requests the lock agent holding the masterless lock to change the type of the lock from masterless to normal. The lock agent subsequently communicates with the lock master to raise an access level for the data protected by the now-normal lock. In some situations, the lock master must be created before the lock agent can communicate with the lock master to raise the access level.
The present invention may be better understood, and its numerous objectives, features, and advantages made apparent to those skilled in the art by referencing the accompanying drawings.
The use of the same reference symbols in different drawings indicates similar or identical items.
For a thorough understanding of the subject invention, refer to the following Detailed Description, including the appended Claims, in connection with the above-described Drawings. Although the present invention is described in connection with several embodiments, the invention is not intended to be limited to the specific forms set forth herein. On the contrary, it is intended to cover such alternatives, modifications, and equivalents as Can be reasonably included within the scope of the invention as defined by the appended Claims.
In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the invention. It will be apparent, however, to one skilled in the art that the invention can be practiced without these specific details.
References in the specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment, nor are separate or alternative embodiments mutually exclusive of other embodiments. Moreover, various features are described which may be exhibited by some embodiments and not by others. Similarly, various requirements are described which may be requirements for some embodiments but not other embodiments.
The present invention provides locks for controlling access to data by nodes in a multi-node system while minimizing the number of messages sent between nodes. In one embodiment, a lock agent on a given node can be granted an access level for a lock protecting data shared with other nodes. A lock agent, such as lock agent 130, keeps track of the access level that has been granted to the node. In one embodiment, access levels for a node to a given lock include the following:
In one embodiment, a multi-node knowledge agent has knowledge of lock usage by the nodes in the multi-node system. Based upon this knowledge, the multi-node knowledge agent can determine when no other node is accessing data protected by a given lock. In addition, the multi-node knowledge agent can determine when an event has occurred that precedes a request by another node to access data protected by the given lock. When no other node is accessing data protected by a given lock and no event preceding a request to access data protected by that given lock has occurred, the multi-node knowledge agent can designate that given lock as “masterless.” When a given lock is designated masterless, a lock agent on the node hosting the multi-node knowledge agent is authorized to subsequently grant access to the data protected by that given lock to clients on that node without communicating with a lock master, which may reside on another node. Designating a lock as masterless thereby minimizes messages sent between nodes.
In one embodiment, when the multi-node knowledge agent obtains information that an event has occurred that precedes a request by another node to access data protected by a masterless lock, the multi-node knowledge agent requests the lock agent holding the masterless lock to change the type of the lock from masterless to normal. In one embodiment, the lock is changed from masterless to normal and a lock master is created before the other node requests access to the data protected by the lock. When the lock master is created, the lock agent informs the lock master of the access level that the lock agent currently holds. Subsequently, the lock agent communicates with the lock master to change a client's access level to the data protected by the now-normal lock.
The present invention is described herein within the context of a clustering environment, although one of ordinary skill in the art will recognize that the invention equally applies to other multi-node environments and is not intended to be limited to use in a clustering environment.
It is preferable that a multi-node knowledge component run on each node such that inter-node communication is not necessary to make a lock masterless. The functionality of multi-node knowledge agent 510 need not be implemented in a single functional module, thread, process, or subroutine; for example, functionality to recognize a need to change the type of a lock may be scattered as a few lines of code implementing pieces of the functionality in each of multiple modules, such as client 120, lock manager 160, and so on.
Because a multi-node knowledge agent, such as multi-node knowledge agent 510, authorizes a lock agent on the node hosting the multi-node knowledge agent to subsequently raise an access level for a lock protecting shared data without communicating with a lock master, a multi-node knowledge agent can be referred to as an authorizing means, module, or instructions.
In action 5.1, multi-node knowledge agent 510 becomes aware of the occurrence of an event that precedes a request to access data protected by a given lock or a change in lock usage of the given lock, in this case, lock 150. For example, multi-node knowledge agent 510 may become aware that data 152 protected by lock 150 have been released and lock 150 is not in use, or multi-node knowledge agent 510 may become aware that an event has occurred preceding a request by another node to access data 152 protected by lock 150. If the event occurs that precedes a request by another node to access data 152, lock 150 is converted to a normal lock that can handle requests for conflicting access levels by multiple nodes.
In action 5.2, depending upon the nature of action 5.1, multi-node knowledge agent 510 requests lock agent 130 of node 110A to change the type of the given lock from masterless to normal or from normal to masterless. Multi-node knowledge agent 510 uses an application programming interface to communicate with lock agent 130. The application programming interface can include a command to change the type of a lock, in this case, lock 150 protecting data 152. In one embodiment, the type of the lock can be changed from masterless to normal or from normal to masterless. Other embodiments may provide additional types of locks. The application programming interface can also include a command to authorize a first node to raise an access level for a lock protecting data shared by nodes in the multi-node environment without communicating with a lock master on another node.
In action 5.3, lock agent 130 changes the type of the given lock from a masterless lock to a normal lock if the event has occurred preceding a request by another node to access the data, or from a normal lock to a masterless lock if the lock is not in use and such an event has not occurred. In one embodiment, the conversion of a masterless lock to a normal lock is completed prior to any request to access data by the node(s) following the occurrence of the event. Because a lock agent is responsible for changing the type of the lock, the lock agent can also be referred to as a changing means, module, or instructions. In addition, because a multi-node knowledge agent determines that an event preceding a request to raise the access level by another node has occurred, the multi-node knowledge agent can be referred to as a determining means, module, or instructions.
In one embodiment, when a lock is changed from a normal lock to a masterless lock, a message is sent to a lock master for the lock requesting the lock master to terminate. The lock master may reside on a different node than the now-masterless lock. Therefore, when the lock is changed back from a masterless lock to a normal lock, a lock master may need to be created for the now-normal lock, and a message may need to be sent to another node to create the lock master.
Multi-node knowledge agent 510 can obtain such awareness of changes in the lock usage or in the occurrence of events that precede a request to use a lock in a variety of ways, depending upon the particular multi-node environment implementation. For example, the given lock may be part of a “block” of locks that are managed together by a block manager, as described in U.S. patent application Ser. No. 10/260,805 filed on Sep. 30, 2002, entitled “Block Locking in a Multi-Node Environment, and naming as inventors Anurag Agarwal and Harold B. Prince, Jr. This application is hereby incorporated by reference in its entirety and for all purposes. The block manager of U.S. patent application Ser. No. 10/260,805 corresponds to multi-node knowledge agent 510 in that environment.
Another example of a way that multi-node knowledge agent 510 can become aware of a change in the lock usage and/or of occurrence of an event that precedes a request for access to a given lock is when the given lock is used in conjunction with a second lock. Consider a situation where a given set of data has two locks, called A and B. Any use of the set of data requires that the code using the data hold lock A at either an exclusive or shared access level, depending upon the intended use of the data. Some actions on the set of data require that the code also hold lock B. The B lock can also be held at an exclusive or shared access level, and the access level for lock B is independent of the access level of lock A.
If code on a particular node obtains exclusive access to the set of data protected by lock A, multi-node knowledge agent 510 can conclude that lock B can be masterless. As a result, the lock agent on the particular node holding exclusive access to the set of data protected by lock A can grant access to data protected by lock B without communicating with a lock master. The reason that this conclusion can be drawn is that any other node would first have to obtain access to the set of data protected by lock A before obtaining access to the data protected by lock B. As long as one node holds exclusive access to the set of data protected by lock A, no other node can obtain access to the data protected by lock A or, as a result, to the data protected by lock B. When a node obtains exclusive access to lock A, this event prevents other nodes from requesting access to data protected by lock B.
Similarly, if the particular node lowers its access level to data protected by lock A from an exclusive access level to a shared access level or to no access, multi-node knowledge agent 510 can conclude that lock B should be changed from a masterless lock to a normal lock. This conclusion can be made because other nodes are no longer prevented from obtaining access to the set of data protected by lock A, and thus, are no longer prevented from requesting access to the set of data protected by lock B. The event of lowering the access level of lock A precedes a request by other nodes to raise the access level of lock B. A lock master is needed to evaluate the conflicting requests by different nodes for access to the set of data, and a lock master is created and the lock converted to a masterless lock before the other nodes actually request access to the set of data protected by lock B. An example of changing a lock from masterless to normal is provided below with reference to
In the example with locks A and B, lock B is made masterless, but lock A is not. In this embodiment, lock A remains a normal lock because other nodes are still free to request access to data protected by lock A. If one node holds lock A with an exclusive access level, other nodes are not prevented from requesting access to data protected by lock A. Furthermore, once a node holds exclusive access to data protected by lock A, that node has no need to communicate with a lock master, so making lock A masterless may not improve performance.
In action 6.2, lock agent 130 determines that lock 150 is masterless on node 110A (for example, as a result of having changed the type of lock 150 to masterless in response to the request by multi-node knowledge agent 510 in
In action 7.1, client 120 of node 110A requests exclusive access to data 152 protected by lock 150. In action 7.2, lock agent 130 determines that lock 150 is a normal lock, and thus that permission to raise the access level held for the lock must be requested from a lock master. In action 7.3, lock agent 130 requests exclusive access to data 152 protected by lock 150 from lock master 140 on node 110B. In action 7.4, lock master 140 determines that data 152 protected by lock 150 is held with shared access by another node, node 110C. Lock master 140 has three options at this point: (1) wait until the client of lock agent 330 on node 110C holding lock 150 releases lock 150; (2) grant shared access rather than exclusive access to lock agent 130; or (3) request lock agent 330 on node 110C to release lock 150. In this example, in action 7.4, lock master 140 requests lock agent 330 to release lock 150.
In action 7.6, lock agent 330 notifies corresponding multi-node knowledge agent 710C on node 110C of a pending change in the access level for lock 150 from “shared access” to “no access.” In action 7.7, multi-node knowledge agent 710C acknowledges the change in the access level for lock 150.
In action 7.8, lock agent 330 lowers the access level of lock 150 from “shared access” to “no lock” (i.e., no access). In action 7.9, lock agent 330 replies to lock master 140 indicating that the lock access level for lock 150 has been changed to “no lock.” In action 7.10, lock master 140 grants exclusive access to data 152 protected by lock 150 to lock agent 130. In action 7.11, lock agent 130 notifies multi-node knowledge agent 710A of the change in the access level for lock 150 (to exclusive access on node 110A). In action 7.12, multi-node knowledge agent acknowledges the change in the access level for lock 150. In action 7.13, lock agent 130 grants the request for exclusive access to data 152 protected by lock 150 to the requesting client, client 120.
The notifications in actions 7.6 and 7.11 are examples of another way in which multi-node knowledge agents, herein multi-node knowledge agent 710A on node 110A and multi-node knowledge agent 710C on node 110C, become aware of a change in a lock access level, in this case, for lock 150. In this example, lock agents on the respective nodes notify corresponding multi-node knowledge agents. In one embodiment, the multi-node knowledge agent has the opportunity upon receiving such notification to allow clients on that node to complete tasks before the lock access level changes. For example, multi-node knowledge agent 710C may allow clients on node 110C to complete read operations on data 152 before acknowledging the notification, thereby delaying the change in the access level for the lock.
It is possible that a masterless lock has no lock master; for example, if the masterless lock never existed as a normal type of lock, a lock master may not have been created. In addition, in one embodiment, if a lock is changed from a normal lock to a masterless lock, the lock master for the lock is terminated to free resources. Assume that no lock master for lock 150 currently exists. In action 8.2, lock agent 130 sends a message to node 110B, which is the agreed-upon node to host a lock master for lock 150. In the message, lock agent 130 notifies a lock master creation module 820 on node 110B of a pending change in the type of lock 150 and indicates the lock access level currently held by lock agent 130 on node 110A for the lock. In action 8.3, multi-node knowledge agent 810B creates lock master 840 for lock 150 on node 110B. In action 8.4, lock master 840 sends a “ready” message to lock agent 130, indicating that lock master 840 is ready to respond to requests for access to data 152 protected by lock 150. In action 8.5, lock agent 130 changes the type of lock 150 from masterless to normal, thereby requiring that requests for raising an access level for data 152 protected by lock 150 are sent to lock master 840. In action 8.6, lock agent 130 notifies multi-node knowledge agent 810A on node 110A that the change in the type of lock 150 from masterless to normal is complete.
The advantages of masterless locks include enabling data sharing while enhancing performance and reducing cost by minimizing the number of messages passed between the nodes in a multi-node environment. Masterless locks can be implemented in a multi-node environment using a variety of computer systems and networks. An example of one such computing and network environment is described below with reference to
An Example Computing and Network Environment
Bus 912 allows data communication between central processor 914 and system memory 917, which may include read-only memory (ROM) or flash memory (neither shown), and random access memory (RAM) (not shown), as previously noted. The RAM is generally the main memory into which the operating system and application programs are loaded and typically affords at least 66 megabytes of memory space. The ROM or flash memory may contain, among other code, the Basic Input-Output system (BIOS) which controls basic hardware operation such as the interaction with peripheral components. Applications resident with computer system 910 are generally stored on and accessed via a computer readable medium, such as a hard disk drive (e.g., fixed disk 944), an optical drive (e.g., optical drive 940), floppy disk unit 937 or other storage medium. Additionally, applications may be in the form of electronic signals modulated in accordance with the application and data communication technology when accessed via network modem 947 or interface 948.
Storage interface 934, as with the other storage interfaces of computer system 910, may connect to a standard computer readable medium for storage and/or retrieval of information, such as a fixed disk drive 944. Fixed disk drive 944 may be a part of computer system 910 or may be separate and accessed through other interface systems. Modem 947 may provide a direct connection to a remote server via a telephone link or to the Internet via an internet service provider (ISP). Network interface 948 may provide a direct connection to a remote server via a direct network link to the Internet via a POP (point of presence). Network interface 948 may provide such connection using wireless techniques, including digital cellular telephone connection, Cellular Digital Packet Data (CDPD) connection, digital satellite data connection or the like.
Many other devices or subsystems (not shown) may be connected in a similar manner (e.g., bar code readers, document scanners, digital cameras and so on). Conversely, it is not necessary for all of the devices shown in
Moreover, regarding the signals described herein, those skilled in the art will recognize that a signal may be directly transmitted from a first block to a second block, or a signal may be modified (e.g., amplified, attenuated, delayed, latched, buffered, inverted, filtered, or otherwise modified) between the blocks. Although the signals of the above described embodiment are characterized as transmitted from one block to the next, other embodiments of the present invention may include modified signals in place of such directly transmitted signals as long as the informational and/or functional aspect of the signal is transmitted between blocks. To some extent, a signal input at a second block may be conceptualized as a second signal derived from a first signal output from a first block due to physical limitations of the circuitry involved (e.g., there will inevitably be some attenuation and delay). Therefore, as used herein, a second signal derived from a first signal includes the first signal or any modifications to the first signal, whether due to circuit limitations or due to passage through other circuit elements which do not change the informational and/or final functional aspect of the first signal.
The foregoing described embodiment wherein the different components are contained within different other components (e.g., the various elements shown as components of computer system 910). It is to be understood that such depicted architectures are merely examples, and that, in fact, many other architectures can be implemented which achieve the same functionality. In an abstract, but still definite sense, any arrangement of components to achieve the same functionality is effectively “associated” such that the desired functionality is achieved. Hence, any two components herein combined to achieve a particular functionality can be seen as “associated with” each other such that the desired functionality is achieved, irrespective of architectures or intermediate components. Likewise, any two components so associated can also be viewed as being “operably connected,” or “operably coupled,” to each other to achieve the desired functionality.
With reference to computer system 910, modem 947, network interface 948 or some other method can be used to provide connectivity from each of client computer systems 1010, 1020 and 1030 to network 1050. Client systems 1010, 1020 and 1030 are able to access information on storage server 1040A or 1040B using, for example, a web browser or other client software (not shown). Such a client allows client systems 1010, 1020 and 1030 to access data hosted by storage server 1040A or 1040B or one of storage devices 1060A(1)-(N), 1060B(1)-(N), 1080(1)-(N) or intelligent storage array 1090.
The present invention is well adapted to attain the advantages mentioned as well as others inherent therein. While the present invention has been depicted, described, and is defined by reference to particular embodiments of the invention, such references do not imply a limitation on the invention, and no such limitation is to be inferred. The invention is capable of considerable modification, alteration, and equivalents in form and function, as will occur to those ordinarily skilled in the pertinent arts. The depicted and described embodiments are examples only, and are not exhaustive of the scope of the invention.
The foregoing described embodiments include components contained within other components. It is to be understood that such architectures are merely examples, and that in fact many other architectures can be implemented which achieve the same functionality. In an abstract but still definite sense, any arrangement of components to achieve the same functionality is effectively “associated” such that the desired functionality is achieved. Hence, any two components herein combined to achieve a particular functionality can be seen as “associated with” each other such that the desired functionality is achieved, irrespective of architectures or intermediate components. Likewise, any two components so associated can also be viewed as being “operably connected,” or “operably coupled,” to each other to achieve the desired functionality.
The foregoing detailed description has set forth various embodiments of the present invention via the use of block diagrams, flowcharts, and examples. It will be understood by those within the art that each block diagram component, flowchart step, operation and/or component illustrated by the use of examples can be implemented, individually and/or collectively, by a wide range of hardware, software, firmware, or any combination thereof.
The present invention has been described in the context of fully functional computer systems; however, those skilled in the art will appreciate that the present invention is capable of being distributed as a program product in a variety of forms, and that the present invention applies equally regardless of the particular type of signal bearing media used to actually carry out the distribution. Examples of signal bearing media include recordable media such as floppy disks and CD-ROM, transmission type media such as digital and analog communications links, as well as media storage and distribution systems developed in the future.
The above-discussed embodiments may be implemented by software modules that perform certain tasks. The software modules discussed herein may include script, batch, or other executable files. The software modules may be stored on a machine-readable or computer-readable storage medium such as a disk drive. Storage devices used for storing software modules in accordance with an embodiment of the invention may be magnetic floppy disks, hard disks, or optical discs such as CD-ROMs or CD-Rs, for example. A storage device used for storing firmware or hardware modules in accordance with an embodiment of the invention may also include a semiconductor-based memory, which may be permanently, removably or remotely coupled to a microprocessor/memory system. Thus, the modules may be stored within a computer system memory to configure the computer system to perform the functions of the module. Other new and various types of computer-readable storage media may be used to store the modules discussed herein.
The above description is intended to be illustrative of the invention and should not be taken to be limiting. Other embodiments within the scope of the present invention are possible. Those skilled in the art will readily implement the steps necessary to provide the structures and the methods disclosed herein, and will understand that the process parameters and sequence of steps are given by way of example only and can be varied to achieve the desired structure as well as modifications that are within the scope of the invention. Variations and modifications of the embodiments disclosed herein can be made based on the description set forth herein, without departing from the scope of the invention.
Consequently, the invention is intended to be limited only by the scope of the appended claims, giving full cognizance to equivalents in all respects.
Number | Name | Date | Kind |
---|---|---|---|
4965719 | Shoens et al. | Oct 1990 | A |
6108654 | Chan et al. | Aug 2000 | A |
6185601 | Wolff | Feb 2001 | B1 |
6272491 | Chan et al. | Aug 2001 | B1 |
6385613 | Grewell et al. | May 2002 | B1 |
6405274 | Chan | Jun 2002 | B1 |
6529906 | Chan | Mar 2003 | B1 |
6574654 | Simmons et al. | Jun 2003 | B1 |
6618744 | Simmons et al. | Sep 2003 | B1 |
6668270 | Simmons et al. | Dec 2003 | B1 |
6668295 | Chan | Dec 2003 | B1 |
6697901 | Chan | Feb 2004 | B1 |
6704767 | Simmons et al. | Mar 2004 | B1 |
6708198 | Simmons et al. | Mar 2004 | B1 |
6715146 | Simmons et al. | Mar 2004 | B1 |
6751616 | Chan | Jun 2004 | B1 |
6782462 | Marion et al. | Aug 2004 | B2 |
6826570 | Eshel et al. | Nov 2004 | B1 |
6850938 | Sadjadi | Feb 2005 | B1 |
6920454 | Chan | Jul 2005 | B1 |
6965893 | Chan et al. | Nov 2005 | B1 |
7073176 | Simmons et al. | Jul 2006 | B1 |
7150019 | Simmons et al. | Dec 2006 | B1 |