Contemporary cloud-based storage systems such as Dell EMC® Elastic Cloud Storage (ECS™) use a search tree implementation to store metadata and system data, unlike traditional storage systems that use databases. For example, ECS™ uses a version of a B+ tree data structure comprising a root node, internal nodes, and leaves, in which each internal node contains only keys, while the leaves contain key-value pairs.
Trees reference and correspond to data stored in chunks, with each tree element (node or leaf) stored in a single page within the pages of a chunk. Chunk content is modified in an append-only mode such that when a chunk becomes full enough, the chunk gets sealed. The content of sealed chunks, comprising tree elements, is thus immutable. To provide point-in-time consistent views, trees are maintained under Multi-Version Concurrency Control policy (MVCC).
Despite data protection techniques such as mirroring and erasure coding, there remains a chance that a tree chunk may become unavailable, e.g., corrupt or lost. In general, data corruption and other hardware failures are unavoidable. The unavailability of a tree chunk for a cloud-based storage systems means that a part of a tree or even an entire tree is lost. This may result in a massive data loss.
Briefly, one or more aspects of the technology described herein are directed towards recovering an impacted tree of an impacted zone of a geographically distributed storage environment resulting in a recovered tree. The impacted tree comprises an impacted tree part, the impacted tree part comprising one or more tree elements that are unavailable within the impacted tree. The recovering comprises sending update-related information from the impacted zone to a peer zone for use by the peer zone in updating a peer tree of the peer zone, identifying a recovery range corresponding to the impacted tree part, and sending the recovery range to the peer zone. Aspects include receiving a tree recovery journal from the peer zone corresponding to the recovery range, and processing the tree recovery journal to recover the impacted tree part to generate the recovered tree.
Other advantages may become apparent from the following detailed description when taken in conjunction with the drawings.
The technology described herein is illustrated by way of example and not limited in the accompanying figures in which like reference numerals indicate similar elements and in which:
Various aspects of the technology described herein are generally directed towards using information within a geographically distributed peer tree in a remote zone to recover a search (e.g., B+) tree after a part of the tree (which may be the entire tree) is lost. The recovery includes unavailable data of the tree chunk or chunks that used to contain some elements of the tree (nodes and leaves).
As will be understood, in one or more implementations the technology described herein may apply existing cloud storage (e.g., Dell EMC® Elastic Cloud Storage, or ECS™) mechanisms, such as journaling of updates and replication, at the chunk level. In general, the technology provides for non-disruptive recovery, without adverse effects to the storage system.
As generally used herein, the term “zone” refers to a replicated data storage unit (e.g., a cluster in a data center) or the like, with multiple zone remote relative to each other within a replicated geographically distributed storage environment. For example, ECS™ supports geographically distributed setups comprising two or more zones. An “impacted” tree is one that has at least a part of the tree unavailable, with recovery attempted from a “peer” tree of a remote zone.
It should be understood that any of the examples herein are non-limiting. For instance, some of the examples are based on ECS™ cloud storage technology; however virtually any tree-based storage may benefit from the technology described herein. Further, while a modified version of B+ trees are exemplified herein, other trees and structures may benefit from the technology described herein. Thus, any of the embodiments, aspects, concepts, structures, functionalities or examples described herein are non-limiting, and the technology may be used in various ways that provide benefits and advantages in computing and data storage in general.
Clients 108 make data system-related requests to the cluster 102, which in general is configured as one large object namespace; there may be on the order of billions of objects maintained in a cluster, for example. Note that in one or more implementations, a “cluster” is basically a “zone.” To this end, a node such as the node 104(2) generally comprises ports 112 by which clients connect to the cloud storage system. Example ports are provided for requests via various protocols, including but not limited to SMB (server message block), FTP (file transfer protocol), HTTP/HTTPS (hypertext transfer protocol) and NFS (Network File System); further, SSH (secure shell) allows administration-related requests, for example.
Each node, such as the node 104(2), includes an instance of an object storage system 114 and data services, including remote tree recovery logic 116. A CPU 118 and RAM 120 are shown for completeness; note that the RAM 120 may comprise at least some non-volatile RAM. The node includes storage devices such as disks 122, comprising hard disk drives and/or solid-state drives.
As described herein, tree recovery logic 226(1)-226(n) is present within each zone (that is, in each cluster; note however that in alternative implementations it is feasible to have multiple clusters within a zone). The tree recovery logic may be implemented for an entire zone/cluster, or within each storage node of each cluster, for example. In general, the tree recovery logic 226(1)-226(n) includes request logic 228(1)-228(n), respectively, to request tree recovery from a peer tree in a remote zone, and request handling logic 230(1)-230(n), respectively, to handle the recovery requests and return information to an impacted zone that is requesting recovery.
As described above, chunk content is modified in append-only mode and a chunk is sealed when considered full, whereby the content of sealed chunks and thus tree elements is immutable. Each tree update means a reallocation of at least N pages, where N is the current depth of the tree. In particular, the root changes after each tree update. As a result, a single tree update is an expensive operation, and thus trees are not updated for a single data update. Instead, each tree has a journal 324 of data updates, and when the journal 328 is full enough, a journal processor 338 implements a bulk tree update (processes, or “plays” the journal) in order to minimize the total cost of the update. Note that tree journals are stored in journal chunks, e.g., in a suitable memory or other storage location.
Returning to
The distributed storage system tries to keep peer trees synchronized. To do so, zones share tree journals via replication that works at the journal chunk level. Each zone processes (“replays”) the journals it receives from other zones and updates its local trees accordingly.
Turning to an example, in
As set forth above, one or more parts of a tree (which may be the entire tree) may become unavailable, as generally represented in the simplified tree 440 of
Because there is no practical way to recover the tree right away, the reference to the unavailable part of the tree (or references to multiple unavailable parts) may be cut off, as generally represented by the reduced tree 550 in
In one or more implementations, instead of rebalancing the reduced tree, tree rebalancing is blocked (suspended) until the recovery operation is over. This is based on the assumption that after the recovery is over, the tree will have a layout/structure that is close to the layout of the original tree. Otherwise, the tree may be rebalanced multiple times during the recovery session, which may produce severe additional load and a lot of garbage (as the tree is under Multi-Version Concurrency Control).
With respect to recovery, the reduced tree 550 is used to identify a range of key values the lost objects might have had. This is represented in
Before the recovery range can be applied to a peer tree from a remote zone, the remote zone ensures that its version of the tree is up-to-date. To this end, the impacted zone needs to output its journal or journals (drain its replication queue of journals) before (or as part of) requesting a remote zone for geographically distributed (GEO) recovery.
A remote zone that will handle GEO recovery for the tree may be chosen using any suitable selection criterion or criteria. For example, information about the zones may be available as selection criteria, from which the remote selected zone may be a most stable zone, the zone that is least loaded, and/or a zone that has the highest throughput between it and the impacted zone. Other criteria may be used instead of or in addition to any or all of the above information. Indeed, there may be only one peer zone having a peer tree.
When a GEO recovery request for a tree comes to the remote selected zone, the selected zone replays the journals for its tree, thereby making the tree up to date. This includes the selected zone's own journals as well as those drained from the impacted zones replication queue.
Once updated, the remote zone finds the objects within the recovery range, which is a basic operation for a search tree. As set forth above, each object has a primary zone; in order to minimize the probability of a conflict, the remote zone makes itself the primary zone for any object from the recovery range that has the impacted zone as a primary one.
In one or more implementations, the remote zone produces a “recovery” tree journal for the impacted zone. The recovery tree journal contains an add request per object from the recovery range. The recovery tree journal is replicated to the impacted zone.
When received, the impacted zone replays the recovery tree journal to complete the recovery process. After the replaying process is over the tree may be rebalanced, e.g., rebalancing is unblocked/unsuspended.
The exemplified recovery process of
The arrow labeled three (3) represents the recovery range being communicated to the tree recovery logic 626(B) of the selected remote peer zone B. The tree recovery logic 626(B) searches the peer tree 662B based on the recovery range and determines that keys k3 and k4 are missing from the impacted tree 662A. The tree recovery logic 626(B) (at labeled arrow four (4)) places these keys as “add” requests/instructions into a recovery tree journal 664, which is then replicated at labeled arrow five (5) to zone A. At labeled arrow six (6), the replicated tree is replayed, providing a recovered tree 662A′, which is then allowed to rebalance.
In general, recovery begins when it is determined that some part (or parts) of a tree is unavailable, as generally represented by step 702. Step 704 represents selecting the peer zone as generally described above. Step 706 represents draining the journal(s) from the replication queue, whereby the peer tree will be updated. This may be part of a recovery request, or a separate operation with a subsequent recovery request triggering updating of the peer tree.
Step 708 represents cutting off the unavailable part of the impacted tree to provide a reduced tree, with step 710 blocking/suspending rebalancing of the reduced tree. Step 712 obtains the recovery range, e.g., by traversing the reduced tree and determining which node(s) and leave(s) are unavailable.
The exemplified operations continue at step 802 of
When done, step 806 represents receiving the recovery tree journal from the selected remote peer zone. Step 808 replays the recovery tree journal to add missing nodes and leafs to the reduced tree to provide the recovered tree. Step 810 represents allowing rebalancing of the recovered tree to resume.
Step 906 represents selecting a first recovery range; note there may only be one recovery range. Step 908 searches the tree to locate the objects corresponding to the recovery range. Step 910 selects the first object that was located and step 912 puts an add instruction into the recovery tree journal for this selected object. Steps 914 and 916 repeat the process to put an add instruction into the tree recovery journal for each other object. Note that in an implementation in which multiple objects can be added to the tree recovery journal at once, the loop of step 914 and 916 is not needed.
Steps 918 in 920 repeat the process for each other recovery range, if more than one is provided. As can be readily appreciated, in an implementation in which multiple recovery ranges can be processed at once, e.g., in parallel, such a loop is replaced by parallel operations.
When the set of instructions needed to recover the impacted tree is complete, step 922 sends recovery tree journal to the impacted zone. Note that although not explicitly shown in
As can be seen, described herein is an efficient technology for recovering at least a part of a tree in an impacted zone from a peer tree in a remote zone. The technology uses existing cloud storage mechanisms where feasible, e.g., including tree searching, data update journals, journal replaying, and recovery tree journal replaying.
One or more aspects are directed towards recovering an impacted tree of an impacted zone of a geographically distributed storage environment resulting in a recovered tree. The impacted tree comprises an impacted tree part, the impacted tree part comprising one or more tree elements that are unavailable within the impacted tree. The recovering comprises sending update-related information from the impacted zone to a peer zone for use by the peer zone in updating a peer tree of the peer zone, identifying a recovery range corresponding to the impacted tree part, and sending the recovery range to the peer zone. Aspects include receiving a tree recovery journal from the peer zone corresponding to the recovery range, and processing the tree recovery journal to recover the impacted tree part to generate the recovered tree.
The tree recovery journal may comprise one or more instructions, and the processing of the tree recovery journal may comprise adding a leaf node to the recovered tree for at least some of the one or more instructions in the tree recovery journal.
The peer zone may be selected from available peer zones. Selecting the peer zone from the available peer zones may comprise selecting the peer zone based on stability information associated with the peer zone, load information associated with the peer zone, and/or throughput information associated with the peer zone.
Identifying the recovery range corresponding to the impacted tree part may comprise removing a reference, in a tree node, to an unavailable part of the impacted tree resulting in a reduced tree, and identifying the recovery range may comprise determining each unavailable leaf key in the reduced tree. Aspects may include suspending, by the system, rebalancing of the reduced tree during the recovering, and rebalancing the recovered tree upon completion of the recovering.
Aspects may include, at the peer zone, obtaining, by the system, the update-related information from the impacted zone, and updating, by the system, the peer tree based on the update-related information. Other aspects may include, at the peer zone, finding, by the system, each object based on the recovery range, and producing, by the system, the tree recovery journal based on each object within the recovery range, wherein each object corresponds to an add key instruction in the tree recovery journal. Still other aspects may include, at the peer zone, for each object within the recovery range, finding, by the system, the object, and, where the impacted zone is determined to be a primary zone for the object, making, by the system, the peer zone the primary zone for the object.
Sending the update-related information from the impacted zone to the peer zone may comprise draining a journal replication queue maintained at the impacted zone.
One or more aspects may include a first storage node of a first zone of a geographically distributed storage environment, the first storage node communicatively coupled to a second storage node of a second zone of the geographically distributed storage environment. The first storage node comprises first recovery logic configured to communicate with the second storage node to request a tree recovery operation, to provide update information to the second storage node, to identify a recovery range, and to provide the recovery range to the second storage node. The recovery range comprises one or more key values corresponding to one or more lost objects of an impacted tree in the first zone comprising an unavailable tree part. The second storage node comprises second recovery logic configured to update the second zone based on the update information, to identify each object corresponding to the recovery range in a second tree that is a peer tree to the impacted tree, and to produce a tree recovery journal for the impacted tree part based on the recovery range. The first recovery logic of the first storage node is further configured to receive the tree recovery journal communicated from the second storage node, and to process the tree recovery journal to recover the unavailable tree part to provide a recovered tree relative to the impacted tree.
The first recovery logic may cut off the unavailable tree part of the impacted tree to generate a reduced tree, block rebalancing of the reduced tree, and rebalance the recovered tree. The recovered tree may comprise a B+ tree in which each object is represented by a key-value pair in a leaf node of the B+ tree.
The update information may comprise at least one tree update journal, and the second recovery logic may update the second zone based at least in part on the at least one tree update journal.
Each object in the peer tree may be associated with an identifier of a primary zone, and the second recovery logic may change the identifier of the primary zone for an object corresponding to the recovery range that identifies the first zone as the primary zone identifier of the object to identify the second zone as the primary zone identifier of the object.
One or more aspects may comprise operations comprising recovering an impacted tree part of an impacted tree in an impacted zone of a geographically distributed storage environment, the impacted tree part comprising one or more tree elements that are unavailable within the impacted tree. The recovering comprises, at the impacted zone, identifying a recovery range corresponding to the impacted tree part; and sending the recovery range to a peer zone of the geographically distributed storage environment. After the peer zone has located, via a peer tree to the impacted tree, one or more objects corresponding to the recovery range, and has produced a tree recovery journal including an add request for each object corresponding to the recovery range, described herein is receiving the tree recovery journal from the impacted zone and at the impacted zone, processing the tree recovery journal to recover the impacted tree part.
Receiving the tree recovery journal may comprise receiving the tree recovery journal after the peer zone has updated the peer tree before locating the one or more objects corresponding to the recovery range via the peer tree.
Aspects may include, at the impacted zone, cutting off the unavailable tree part of the impacted tree to generate a reduced tree. Identifying the recovery range corresponding to the impacted tree part may comprise determining one or more missing leaf nodes in the reduced tree.
Aspects may include, at the impacted zone, blocking rebalancing of the reduced tree, processing the tree recovery journal with respect to the reduced tree to recover the impacted tree part to provide a recovered tree, and allowing rebalancing of the recovered tree. Receiving the tree recovery journal may comprise receiving the tree recovery journal after the peer zone has changed a primary zone identifier associated with an object corresponding to the recovery range from an impacted zone identifier to a peer zone identifier.
Example Computing Device
The techniques described herein can be applied to any device or set of devices (machines) capable of running programs and processes. It can be understood, therefore, that servers including physical and/or virtual machines, personal computers, laptops, handheld, portable and other computing devices and computing objects of all kinds including cell phones, tablet/slate computers, gaming/entertainment consoles and the like are contemplated for use in connection with various implementations including those exemplified herein. Accordingly, the general purpose computing mechanism described below with reference to
Implementations can partly be implemented via an operating system, for use by a developer of services for a device or object, and/or included within application software that operates to perform one or more functional aspects of the various implementations described herein. Software may be described in the general context of computer executable instructions, such as program modules, being executed by one or more computers, such as client workstations, servers or other devices. Those skilled in the art will appreciate that computer systems have a variety of configurations and protocols that can be used to communicate data, and thus, no particular configuration or protocol is considered limiting.
With reference to
Computer 1010 typically includes a variety of machine (e.g., computer) readable media and can be any available media that can be accessed by a machine such as the computer 1010. The system memory 1030 may include computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) and/or random access memory (RAM), and hard drive media, optical storage media, flash media, and so forth. By way of example, and not limitation, system memory 1030 may also include an operating system, application programs, other program modules, and program data.
A user can enter commands and information into the computer 1010 through one or more input devices 1040. A monitor or other type of display device is also connected to the system bus 1022 via an interface, such as output interface 1050. In addition to a monitor, computers can also include other peripheral output devices such as speakers and a printer, which may be connected through output interface 1050.
The computer 1010 may operate in a networked or distributed environment using logical connections to one or more other remote computers, such as remote computer 1070. The remote computer 1070 may be a personal computer, a server, a router, a network PC, a peer device or other common network node, or any other remote media consumption or transmission device, and may include any or all of the elements described above relative to the computer 1010. The logical connections depicted in
As mentioned above, while example implementations have been described in connection with various computing devices and network architectures, the underlying concepts may be applied to any network system and any computing device or system in which it is desirable to implement such technology.
Also, there are multiple ways to implement the same or similar functionality, e.g., an appropriate API, tool kit, driver code, operating system, control, standalone or downloadable software object, etc., which enables applications and services to take advantage of the techniques provided herein. Thus, implementations herein are contemplated from the standpoint of an API (or other software object), as well as from a software or hardware object that implements one or more implementations as described herein. Thus, various implementations described herein can have aspects that are wholly in hardware, partly in hardware and partly in software, as well as wholly in software.
The word “example” is used herein to mean serving as an example, instance, or illustration. For the avoidance of doubt, the subject matter disclosed herein is not limited by such examples. In addition, any aspect or design described herein as “example” is not necessarily to be construed as preferred or advantageous over other aspects or designs, nor is it meant to preclude equivalent example structures and techniques known to those of ordinary skill in the art. Furthermore, to the extent that the terms “includes,” “has,” “contains,” and other similar words are used, for the avoidance of doubt, such terms are intended to be inclusive in a manner similar to the term “comprising” as an open transition word without precluding any additional or other elements when employed in a claim.
As mentioned, the various techniques described herein may be implemented in connection with hardware or software or, where appropriate, with a combination of both. As used herein, the terms “component,” “module,” “system” and the like are likewise intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a computer and the computer can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.
The aforementioned systems have been described with respect to interaction between several components. It can be appreciated that such systems and components can include those components or specified sub-components, some of the specified components or sub-components, and/or additional components, and according to various permutations and combinations of the foregoing. Sub-components can also be implemented as components communicatively coupled to other components rather than included within parent components (hierarchical). Additionally, it can be noted that one or more components may be combined into a single component providing aggregate functionality or divided into several separate sub-components, and that any one or more middle layers, such as a management layer, may be provided to communicatively couple to such sub-components in order to provide integrated functionality. Any components described herein may also interact with one or more other components not specifically described herein but generally known by those of skill in the art.
In view of the example systems described herein, methodologies that may be implemented in accordance with the described subject matter can also be appreciated with reference to the flowcharts/flow diagrams of the various figures. While for purposes of simplicity of explanation, the methodologies are shown and described as a series of blocks, it is to be understood and appreciated that the various implementations are not limited by the order of the blocks, as some blocks may occur in different orders and/or concurrently with other blocks from what is depicted and described herein. Where non-sequential, or branched, flow is illustrated via flowcharts/flow diagrams, it can be appreciated that various other branches, flow paths, and orders of the blocks, may be implemented which achieve the same or a similar result. Moreover, some illustrated blocks are optional in implementing the methodologies described herein.
While the invention is susceptible to various modifications and alternative constructions, certain illustrated implementations thereof are shown in the drawings and have been described above in detail. It should be understood, however, that there is no intention to limit the invention to the specific forms disclosed, but on the contrary, the intention is to cover all modifications, alternative constructions, and equivalents falling within the spirit and scope of the invention.
In addition to the various implementations described herein, it is to be understood that other similar implementations can be used or modifications and additions can be made to the described implementation(s) for performing the same or equivalent function of the corresponding implementation(s) without deviating therefrom. Still further, multiple processing chips or multiple devices can share the performance of one or more functions described herein, and similarly, storage can be effected across a plurality of devices. Accordingly, the invention is not to be limited to any single implementation, but rather is to be construed in breadth, spirit and scope in accordance with the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
5675802 | Allen et al. | Oct 1997 | A |
5805788 | Johnson | Sep 1998 | A |
5950225 | Kleiman | Sep 1999 | A |
7389393 | Karr et al. | Jun 2008 | B1 |
8370542 | Lu et al. | Feb 2013 | B2 |
8495465 | Anholt et al. | Jul 2013 | B1 |
8832234 | Brooker et al. | Sep 2014 | B1 |
8856619 | Cypher | Oct 2014 | B1 |
8972478 | Storer et al. | Mar 2015 | B1 |
9063838 | Boyle et al. | Jun 2015 | B1 |
9244761 | Yekhanin et al. | Jan 2016 | B2 |
9274903 | Garlapati et al. | Mar 2016 | B1 |
9280430 | Sarfare et al. | Mar 2016 | B2 |
9477682 | Bent et al. | Oct 2016 | B1 |
9641615 | Robins et al. | May 2017 | B1 |
10055145 | Danilov et al. | Aug 2018 | B1 |
10282262 | Panara et al. | May 2019 | B2 |
10361810 | Myung et al. | Jul 2019 | B2 |
10503611 | Srivastav et al. | Dec 2019 | B1 |
10733053 | Miller et al. | Aug 2020 | B1 |
20020166026 | Ulrich et al. | Nov 2002 | A1 |
20050088318 | Liu et al. | Apr 2005 | A1 |
20050140529 | Choi et al. | Jun 2005 | A1 |
20060047896 | Nguyen et al. | Mar 2006 | A1 |
20060075007 | Anderson et al. | Apr 2006 | A1 |
20060143508 | Mochizuki et al. | Jun 2006 | A1 |
20070239759 | Shen | Oct 2007 | A1 |
20070250674 | Findberg et al. | Oct 2007 | A1 |
20080320061 | Aszmann et al. | Dec 2008 | A1 |
20090172464 | Byrne et al. | Jul 2009 | A1 |
20090259882 | Shellhamer | Oct 2009 | A1 |
20100031060 | Chew et al. | Feb 2010 | A1 |
20100218037 | Swartz et al. | Aug 2010 | A1 |
20100332748 | Van der Goot et al. | Dec 2010 | A1 |
20110138148 | Friedman et al. | Jun 2011 | A1 |
20110196833 | Drobychev et al. | Aug 2011 | A1 |
20110246503 | Bender | Oct 2011 | A1 |
20120023291 | Zeng et al. | Jan 2012 | A1 |
20120191901 | Norair | Jul 2012 | A1 |
20120204077 | D'Abreu et al. | Aug 2012 | A1 |
20120233117 | Holt et al. | Sep 2012 | A1 |
20120317234 | Bohrer et al. | Dec 2012 | A1 |
20120321052 | Morrill et al. | Dec 2012 | A1 |
20130047187 | Frazier et al. | Feb 2013 | A1 |
20130054822 | Mordani | Feb 2013 | A1 |
20130067187 | Moss et al. | Mar 2013 | A1 |
20130088501 | Fell | Apr 2013 | A1 |
20130097470 | Hwang et al. | Apr 2013 | A1 |
20130246876 | Manssour et al. | Sep 2013 | A1 |
20140064048 | Cohen et al. | Mar 2014 | A1 |
20140280375 | Rawson | Sep 2014 | A1 |
20140297955 | Yamazaki et al. | Oct 2014 | A1 |
20140380088 | Bennett et al. | Dec 2014 | A1 |
20140380125 | Calder et al. | Dec 2014 | A1 |
20150134626 | Theimer et al. | May 2015 | A1 |
20150186043 | Kesselman et al. | Jul 2015 | A1 |
20150370656 | Tsafrir et al. | Dec 2015 | A1 |
20160011935 | Luby | Jan 2016 | A1 |
20160011936 | Luby | Jan 2016 | A1 |
20160055054 | Patterson, III | Feb 2016 | A1 |
20160162378 | Garlapati et al. | Jun 2016 | A1 |
20160232055 | Vairavanathan et al. | Aug 2016 | A1 |
20160328295 | Baptist et al. | Nov 2016 | A1 |
20160357649 | Karrotu et al. | Dec 2016 | A1 |
20160371145 | Akutsu et al. | Dec 2016 | A1 |
20160380650 | Calder | Dec 2016 | A1 |
20170003880 | Fisher et al. | Jan 2017 | A1 |
20170004044 | Tormasov et al. | Jan 2017 | A1 |
20170097875 | Jess et al. | Apr 2017 | A1 |
20170102993 | Hu et al. | Apr 2017 | A1 |
20170206025 | Viswanathan | Jul 2017 | A1 |
20170206135 | Zeng | Jul 2017 | A1 |
20170212680 | Waghulde | Jul 2017 | A1 |
20170262187 | Manzanares et al. | Sep 2017 | A1 |
20170286516 | Horowitz et al. | Oct 2017 | A1 |
20180052744 | Chen et al. | Feb 2018 | A1 |
20180063213 | Bevilacqua-Linn et al. | Mar 2018 | A1 |
20180129417 | Sivasubramanian et al. | May 2018 | A1 |
20180181324 | Danilov et al. | Jun 2018 | A1 |
20180181612 | Danilov et al. | Jun 2018 | A1 |
20180267856 | Hayasaka et al. | Sep 2018 | A1 |
20180306600 | Nicolaas et al. | Oct 2018 | A1 |
20180307560 | Vishnumolakala et al. | Oct 2018 | A1 |
20180341662 | He | Nov 2018 | A1 |
20190028179 | Kalhan | Jan 2019 | A1 |
20190043201 | Strong et al. | Feb 2019 | A1 |
20190043351 | Yang et al. | Feb 2019 | A1 |
20190065310 | Rozas | Feb 2019 | A1 |
20190205437 | Larson et al. | Jul 2019 | A1 |
20190384500 | Danilov et al. | Dec 2019 | A1 |
20190386683 | Danilov et al. | Dec 2019 | A1 |
Entry |
---|
“Standard Raid Levels—RAID 6” Wikipedia. [https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_6], retrieved Oct. 18, 2019, 11 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/651,504 dated Mar. 21, 2019, 10 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/662,273 dated Nov. 16, 2018, 19 pages. |
Final Office Action received for U.S. Appl. No. 15/662,273 dated May 15, 2019, 33 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/965,479 dated Apr. 15, 2019, 21 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/794,950 dated Jul. 9, 2019, 29 pages. |
Final Office Action received for U.S. Appl. No. 15/651,504 dated Sep. 18, 2019, 15 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/952,179 dated Sep. 10, 2019, 42 pages. |
Final Office Action received for U.S. Appl. No. 15/952,179 dated Nov. 26, 2019, 53 pages. |
Non Final Office Action received for U.S. Appl. No. 16/024,314 dated Nov. 25, 2019, 42 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/177,278 dated Dec. 2, 2019, 55 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/651,504 dated Dec. 31, 2019, 18 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/010,246 dated Dec. 5, 2019, 67 pages. |
Stonebreaker et al. “Distributed RAID—A New Multiple Copy Algorithm.”, IEEE ICDE, 1990, pp. 430-437. |
Muralidhar et al. “f4: Facebook's Warm BLOB Storage System”, USENIX. OSDI, Oct. 2014, pp. 383-398. |
Non-Final Office Action received for U.S. Appl. No. 15/582,167 dated Sep. 7, 2018, 19 pages. |
Non-Final Office Action received for U.S. Appl. No. 15/952,179 dated Apr. 20, 2020, 68 pages. |
Final Office Action dated Feb. 12, 2020 for U.S. Appl. No. 16/024,314, 29 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/010,255 dated Jan. 9, 2020, 31 pages. |
Office Action dated Feb. 5, 2020 for U.S. Appl. No. 16/261,551, 30 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/228,612 dated Feb. 27, 2020, 49 pages. |
Final Office Action received for U.S. Appl. No. 16/010,246 dated Mar. 16, 2020, 33 pages. |
Notice of Allowance received for U.S. Appl. No. 16/240,193, dated May 4, 2020, 46 pages. |
Final Office Action received for U.S. Appl. No. 16/177,278, dated May 11, 2020, 53 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/231,018 dated May 8, 2020, 78 pages. |
Notice of Allowance dated May 11, 2020 for U.S. Appl. No. 16/240,193, 24 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/228,624 dated Jun. 24, 2020, 65 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/240,272 dated Jun. 29, 2020, 64 pages. |
Non-Final Office Action received for U.S. Appl. No. 16/228,612 dated Jun. 29, 2020, 62 pages. |
Final Office Action received for U.S. Appl. No. 16/010,255 dated Jul. 23, 2020, 36 pages. |
Office Action received for U.S. Appl. No. 16/010,246 dated Jul. 27, 2020 36 pages. |
Office Action received for U.S. Appl. No. 16/177,278, dated Aug. 21, 2020, 53 pages. |
Office Action received for U.S. Appl. No. 16/179,486, dated Aug. 13, 2020, 64 pages. |
Guo et al., “GeoScale: Providing Geo-Elasticity in Distributed Clouds” 2016 IEEE International Conference on Cloud Engineering, 4 pages. |
Guo et al., “Providing Geo-Elasticity in Geographically Distributed Clouds”. ACM Transactions on Internet Technology, vol. 18, No. 3, Article 38. Apr. 2018. 27 pages. |
Office Action received for U.S. Appl. No. 16/254,073, dated Aug. 18, 2020, 62 pages. |