In one embodiment, a first computing device receives a write request and data from a second computing device; iteratively attempts to write the data until a copy of the data is successfully written to each and every storage node belonging to a storage volume; and transmits a volume identifier of the storage volume and a data identifier assigned to the data to the second computing device. In one embodiment, a first computing device receives a read request and a volume identifier and a data identifier from a second computing device; accesses a cache to select the storage volume identified by the volume identifier; iteratively attempts to read data identified by the data identifier until a copy of the data is successfully read from a storage node belonging to the selected storage volume; and transmits the copy of the data to the second computing device.
Legal claims defining the scope of protection, as filed with the USPTO.
1. A method comprising: receiving, at one or more first computing devices, a write request and data associated with the write request from a second computing device; selecting from a cache, by the one or more first computing devices, a first storage volume of a plurality of storage volumes, wherein the cache comprises a plurality of unique volume identifiers, wherein the first storage volume is identified by a first unique volume identifier and comprises a plurality of storage nodes, each volume identifier being associated with a storage volume of the plurality of storage volumes, each volume identifier in the cache being associated with a plurality of storage node identifiers, and wherein the cache is maintained locally at the one or more first computing devices; sending, by the one or more first computing devices, instructions to write a copy of the data to each storage node of the first storage volume; determining, by the one or more first computing devices, that the copy of the data was not successfully written to one or more storage nodes of the first storage volume; selecting from the cache, by the one or more first computing devices, a second storage volume of the plurality of storage volumes, wherein the second storage volume is identified by a second unique volume identifier and comprises a plurality of storage nodes; sending, by the one or more first computing devices, instructions to write the copy of the data to each storage node of the second storage volume; determining, by the one or more first computing devices, that the copy of the data was successfully written to each of the storage nodes of the second storage volume; and transmitting, by the one or more first computing devices, the volume identifier of the second storage volume to which the data have been successfully written and a data identifier assigned to the data to the second computing device.
2. The method of claim 1 , comprising: indicating that the first storage volume is not to be selected for writing; and reporting a write failure in connection with the first storage volume to one or more third computing devices.
3. The method of claim 1 , wherein when selecting the first storage volume, the first storage volume is not indicated as not to be selected for writing.
4. The method of claim 1 , wherein when selecting the first storage volume, the first storage volume has not been selected previously for writing the copy of the data.
5. The method of claim 1 , wherein each of the volume identifiers in the cache is associated with an expiration time.
6. The method of claim 5 , further comprising: by the one or more first computing devices, updating the cache, comprising: by the one or more first computing devices, determining that the expiration time of a volume identifier in the cache has passed; by the one or more first computing devices, requesting, from one or more fourth computing devices, the plurality of storage nodes that currently belong to the storage volume associated with the volume identifier whose expiration time has passed; and by the one or more first computing devices, storing the storage node identifiers associated with the storage nodes that currently belong to the storage volume in the cache.
7. The method of claim 1 , comprising: before selecting the second storage volume, indicating that the first storage volume is not to be selected for writing.
8. A method comprising: receiving, at one or more first computing devices, a read request and a volume identifier and a data identifier associated with the read request from a second computing device, wherein the volume identifier is associated with a storage volume, and the storage volume comprises a plurality of storage nodes; selecting from a cache, by the one or more first computing devices, a first storage node of the storage volume associated with the volume identifier, wherein the cache comprises a plurality of unique volume identifiers, each volume identifier being associated with a storage volume of a plurality of storage volumes, each volume identifier in the cache being associated with a plurality of storage node identifiers, and wherein the cache is maintained locally at the one or more first computing devices; sending, by the one or more first computing devices, instructions to read a copy of data identified by the data identifier from the first storage node; determining, by the one or more first computing devices, that the copy of the data was not successfully read from the first storage node; selecting from the cache, by the one or more first computing devices, a second storage node of the storage volume associated with the volume identifier; sending, by the one or more first computing devices, instructions to read the copy of the data from the second storage node; determining, by the one or more first computing devices, that the copy of the data was successfully read from the second storage node; and transmitting, by the one or more first computing devices, the copy of the data to the second computing device.
9. The method of claim 8 , further comprising: determining that the copy of the data was not successfully read from the first storage node of the storage volume associated with the volume identifier due to the first storage node malfunctioning; indicating that the storage volume associated with the volume identifier is not to be selected for any operations; and reporting a read failure in connection with the first storage node of the storage volume associated with the volume identifier to one or more third computing devices.
10. The method of claim 8 , wherein when selecting the first storage node, the first storage node is not indicated as not to be selected for reading.
11. The method of claim 8 , wherein when selecting the first storage node, the first storage node has not been selected previously for reading the copy of the data.
12. The method of claim 8 , wherein each of the volume identifiers in the cache is associated with an expiration time.
13. The method of claim 12 , further comprising: by the one or more first computing devices, updating the cache, comprising: by the one or more first computing devices, determining that the expiration time of a volume identifier in the cache has passed; by the one or more first computing devices, requesting, from one or more fourth computing devices, the plurality of storage nodes that currently belong to the storage volume associated with the volume identifier whose expiration time has passed; and by the one or more first computing devices, storing the storage node identifiers associated with the storage nodes that currently belong to the storage volume in the cache.
14. A first system comprising: a memory comprising instructions executable by one or more processors; and the one or more processors coupled to the memory and operable to execute the instructions, the one or more processors being operable when executing the instructions to: receive a write request and data associated with the write request from a second system; select from a cache a first storage volume of a plurality of storage volumes, wherein the cache comprises a plurality of unique volume identifiers, wherein each storage volume of the plurality of storage volumes is identified by a unique volume identifier and comprises a plurality of storage nodes, each volume identifier being associated with a storage volume of the plurality of storage volumes, each volume identifier in the cache being associated with a plurality of storage node identifiers, and wherein the cache is maintained locally at the first system; send instructions to write a copy of the data to each of the storage nodes of the first storage volume; determine that the copy of the data was not successfully written to one or more storage nodes of the first storage volume; select from the cache a second storage volume of the plurality of storage volumes; send instructions to write the copy of the data to each of the storage nodes of the second storage volume; determine that the copy of the data was successfully written to each of the storage nodes of the second storage volume; and transmit the volume identifier of the second storage volume to which the data have been successfully written and a data identifier assigned to the data to the second system.
15. The first system of claim 14 , wherein the one or more processors are further operable when executing the instructions to: indicate that the first storage volume is not to be selected for writing; and report a write failure in connection with the first storage volume to one or more third systems.
16. The first system of claim 14 , wherein when selecting the first storage volume, the first storage volume is not indicated as not to be selected for writing.
17. The first system of claim 14 , wherein when selecting the first storage volume, the first storage volume has not been selected previously for writing the copy of the data.
18. The first system of claim 14 , wherein the one or more processors are further operable when executing the instructions to: receive a read request from the second system, wherein the read request comprises the volume identifier of the second storage volume and the data identifier; select a first storage node of the second storage volume; send instructions to read a copy of the data from the first storage node; determine that the copy of the data was not successfully read from the first storage node; select a second storage node of the second storage volume; send instructions to read the copy of the data from the second storage node; determine that the copy of the data was successfully read from the second storage node; and transmit the copy of the data to the second system.
19. The first system of claim 18 , wherein the one or more processors are further operable when executing the instructions to: determine that the copy of the data was not successfully read from the first storage node of the second storage volume due to the first storage node malfunctioning; indicate that the second storage volume is not to be selected for any operations; and report a read failure in connection with the first storage node of the second storage volume to one or more third systems.
20. The first system of claim 18 , wherein when selecting the first storage node, the first storage node has not been selected previously for reading the copy of the data.
21. The first system of claim 14 , wherein each of the volume identifiers in the cache is associated with an expiration time.
22. The first system of claim 21 , wherein the one or more processors are further operable when executing the instructions to: update the cache, comprising: determine that the expiration time of a volume identifier in the cache has passed; request the plurality of storage nodes that currently belong to the storage volume associated with the volume identifier whose expiration time has passed from one or more fourth systems; and store the storage node identifiers associated with the storage nodes that currently belong to the storage volume in the cache.
Cooperative Patent Classification codes for this invention. Click any code to explore related patents in that topic.
December 17, 2010
July 29, 2014
Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.