IP Library Granted Patent US 8,171,102
Granted Patent B2
US 8,171,102 · App. 12/684,085 · Granted May 1, 2012

Smart access to a dispersed data storage network

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,171,102
App. No.
12/684,085
Granted
May 1, 2012
Kind
B2
Abstract

A method for reading data from a dispersed data storage network that includes a plurality of slice servers. The method begins by accessing a list of slice servers of the plurality of slice servers, wherein each slice server on the list stores at least one data slice associated with a data segment of the data. The method continues by transmitting read requests to at least some of the slice servers on the list. The method continues by receiving a data slice from a slice server on the list. The method continues by determining whether a threshold number of data slices has been received. The method continues, when the threshold number of data slices has been received, assembling the data segment from at least the threshold number of data slices.

Claims (124)

1. A method for reading data from a dispersed data storage network that includes a plurality of slice servers, the method operating on at least one computer and comprising the steps of:

accessing a list of slice servers of the plurality of slice servers, wherein each slice server on the list stores at least one data slice associated with a data segment of the data;

transmitting read requests to a threshold number of the slice servers on the list;

receiving data slices from slice servers of the threshold number of slice servers;

determining whether a threshold number of data slices has been received from the threshold number of slice servers;

when the threshold number of data slices has not been received:

transmitting a read request to another slice server on the list;

receiving a data slice from the other slice server; and

repeating the transmitting a read request and receiving a data slice until the threshold number of data slices is received; and

when the threshold number of data slices has been received, assembling the data segment from at least the threshold number of data slices by performing an information dispersal algorithm on the at least the threshold number of data slices to produce the data segment.

2. The method of claim 1 , wherein the determining whether the threshold number of data slices further comprises:

for each receipt of a data slice, updating a received data slice count to produce an updated data slide count;

comparing the updated data slice count with the threshold number of data slices; and

when the comparing the updated data slice count with the threshold number of data slices is favorable, indicating that the threshold number of data slices has been received.

3. The method of claim 1 , wherein the assembling the data segment from at least the threshold number of data slices further comprises:

data transforming each data slice of the at least the threshold number of data slices to produce data transformed data slices, wherein the data transforming includes one or more of decryption, decompression, and integrity checking.

4. The method of claim 3 further comprises:

determining whether the data transforming of each the at least the threshold number of data slices is successful;

when the data transforming of a data slice of the at least the threshold number of data slices was unsuccessful, receiving at least one more data slice from at least one more slice server on the list;

data transforming the at least one more data slice to produce at least one more data transformed data slice;

determining whether the data transforming of the at least one more data slice is successful;

when the data transforming of the at least one more data slice is successful, determining whether the at least the threshold number of data slices have been successfully data transformed; and

when the at least the threshold number of data slices have been successfully data transformed, assembling the data segment from the data transformed data slices.

5. The method of claim 1 , wherein the assembling the data segment from at least the threshold number of data slices further comprises:

for each data slice of the at least the threshold number of data slices, reading a version field to produce version data;

comparing the version data of the at least the threshold number of data slices;

when the version data of the at least the threshold number of data slices substantially match, indicating a current version of the at least the threshold number of data slices for assembling the data segment; and

when the version data for the at least the threshold number of data slices does not substantially match, receiving at least one more data slice from at least one more slice server on the list, wherein the at least one more data slice has the version data corresponding to the current version.

6. A method for reading data from a dispersed data storage network that includes a plurality of slice servers, the method operating on at least one computer and comprising the steps of:

accessing a list of slice servers of the plurality of slice servers, wherein each slice server on the list stores at least one data slice associated with a data segment of the data;

determining whether one or more of the slice servers on the list are unavailable due to a network outage;

when one or more of the slice servers on the list unavailable due to the network outage, determining whether at least a threshold number of slice servers on the list is not affected by the network outage;

when the at least the threshold number of slice servers on the list is not affected by the network outage, transmitting read requests to the at least the threshold number of the slice servers on the list;

receiving data slices from slice servers of the at least the threshold number of slice servers;

determining whether a threshold number of data slices has been received;

when the threshold number of data slices has not been received:

transmitting a read request to another slice server on the list;

receiving a data slice from the other slice server; and

repeating the transmitting a read request and receiving a data slice until the threshold number of data slices is received; and

when the threshold number of data slices has been received, assembling the data segment from at least the threshold number of data slices by performing an information dispersal algorithm on the at least the threshold number of data slices to produce the data segment.

7. The method of claim 6 further comprises:

when a number of slice servers on the list is unavailable due to the network outage is greater than a total number of slice servers on the list minus the threshold number of slice servers, generating a read error message.

8. The method of claim 6 , wherein the determining whether the threshold number of data slices further comprises:

for each receipt of a data slice, updating a received data slice count to produce an updated data slide count;

comparing the updated data slice count with the threshold number of data slices; and

when the comparing the updated data slice count with the threshold number of data slices is favorable, indicating that the threshold number of data slices has been received.

9. The method of claim 6 , wherein the assembling the data segment from at least the threshold number of data slices further comprises:

data transforming each data slice of the at least the threshold number of data slices to produce data transformed data slices, wherein the data transforming includes one or more of decryption, decompression, and integrity checking.

10. The method of claim 9 further comprises:

determining whether the data transforming of each the at least the threshold number of data slices is successful;

when the data transforming of a data slice of the at least the threshold number of data slices was unsuccessful, receiving at least one more data slice from at least one more slice server on the list;

data transforming the at least one more data slice to produce at least one more data transformed data slice;

determining whether the data transforming of the at least one more data slice is successful;

when the data transforming of the at least one more data slice is successful, determining whether the at least the threshold number of data slices have been successfully data transformed; and

when the at least the threshold number of data slices have been successfully data transformed, assembling the data segment from the data transformed data slices.

11. The method of claim 6 , wherein the assembling the data segment from at least the threshold number of data slices further comprises:

for each data slice of the at least the threshold number of data slices, reading a version field to produce version data;

comparing the version data of the at least the threshold number of data slices;

when the version data of the at least the threshold number of data slices substantially match, indicating a current version of the at least the threshold number of data slices for assembling the data segment; and

when the version data for the at least the threshold number of data slices does not substantially match, receiving at least one more data slice from at least one more slice server on the list, wherein the at least one more data slice has the version data corresponding to the current version.

12. A computer for use with a dispersed data storage network, the computer comprising:

a network port coupled to a data network, wherein the data network is coupled to a plurality of slice servers for storing and retrieving a plurality of data slices; and

a central processing unit operable to:

access a list of slice servers of the plurality of slice servers, wherein each slice server on the list stores at least one data slice associated with a data segment of the data;

transmit read requests to a threshold number of the slice servers on the list;

receive data slices from slice servers of the threshold number of slice servers;

determine whether a threshold number of data slices has been received from the threshold number of slice servers;

when the threshold number of data slices has not been received:

transmit a read request to another slice server on the list;

receive a data slice from the other slice server; and

repeat the transmitting a read request and receiving a data slice until the threshold number of data slices is received; and

when the threshold number of data slices has been received, assemble the data segment from at least the threshold number of data slices by performing an information dispersal algorithm on the at least the threshold number of data slices to produce the data segment.

13. The computer of claim 12 , wherein the central processing unit further functions to determine whether the threshold number of data slices by:

for each receipt of a data slice, updating a received data slice count to produce an updated data slide count;

comparing the updated data slice count with the threshold number of data slices; and

when the comparing the updated data slice count with the threshold number of data slices is favorable, indicating that the threshold number of data slices has been received.

14. The computer of claim 12 , wherein the central processing unit further functions to assemble the data segment from at least the threshold number of data slices by:

data transforming each data slice of the at least the threshold number of data slices to produce data transformed data slices, wherein the data transforming includes one or more of decryption, decompression, and integrity checking.

15. The computer of claim 14 , wherein the central processing unit further functions to:

determining whether the data transforming of each the at least the threshold number of data slices is successful;

when the data transforming of a data slice of the at least the threshold number of data slices was unsuccessful, receiving at least one more data slice from at least one more slice server on the list;

data transforming the at least one more data slice to produce at least one more data transformed data slice;

determining whether the data transforming of the at least one more data slice is successful;

when the data transforming of the at least one more data slice is successful, determining whether the at least the threshold number of data slices have been successfully data transformed; and

when the at least the threshold number of data slices have been successfully data transformed, assembling the data segment from the data transformed data slices.

16. The computer of claim 12 , wherein the central processing unit further functions to assemble the data segment from at least the threshold number of data slices by:

for each data slice of the at least the threshold number of data slices, reading a version field to produce version data;

comparing the version data of the at least the threshold number of data slices;

when the version data of the at least the threshold number of data slices substantially match, indicating a current version of the at least the threshold number of data slices for assembling the data segment; and

when the version data for the at least the threshold number of data slices does not substantially match, receiving at least one more data slice from at least one more slice server on the list, wherein the at least one more data slice has the version data corresponding to the current version.

17. A computer for use with a dispersed data storage network, the computer comprising:

a network port coupled to a data network, wherein the data network is coupled to a plurality of slice servers for storing and retrieving a plurality of data slices; and

a central processing unit operable to:

access a list of slice servers of the plurality of slice servers, wherein each slice server on the list stores at least one data slice associated with a data segment of the data;

determine whether one or more of the slice servers on the list are unavailable due to a network outage;

when one or more of the slice servers on the list are unavailable due to the network outage, determine whether at least a threshold number of slice servers on the list is not affected by the network outage;

when the at least the threshold number of slice servers on the list is not affected by the network outage, transmit read requests to the at least the threshold number of the slice servers;

receive data slices from slice servers of the at least the threshold number of slice servers;

determine whether a threshold number of data slices has been received; and

when the threshold number of data slices has not been received:

transmitting a read request to another slice server on the list;

receiving a data slice from the other slice server; and

repeating the transmitting a read request and receiving a data slice until the threshold number of data slices is received; and

when the threshold number of data slices has been received, assemble the data segment from the at least the threshold number of data slices by performing an information dispersal algorithm on the at least the threshold number of data slices to produce the data segment.

18. The computer of claim 17 , wherein the central processing unit further functions to:

when a number of slice servers on the list is unavailable due to the network outage is greater than a total number of slice servers on the list minus the threshold number of slice servers, generate a read error message.

19. The computer of claim 17 , wherein the central processing unit further functions to determine whether the threshold number of data slices by:

for each receipt of a data slice, updating a received data slice count to produce an updated data slide count;

comparing the updated data slice count with the threshold number of data slices; and

when the comparing the updated data slice count with the threshold number of data slices is favorable, indicating that the threshold number of data slices has been received.

20. The computer of claim 17 , wherein the central processing unit further functions to assemble the data segment from at least the threshold number of data slices by:

data transforming each data slice of the at least the threshold number of data slices to produce data transformed data slices, wherein the data transforming includes one or more of decryption, decompression, and integrity checking.

21. The computer of claim 17 , wherein the central processing unit further functions to:

determining whether the data transforming of each the at least the threshold number of data slices is successful;

when the data transforming of a data slice of the at least the threshold number of data slices was unsuccessful, receiving at least one more data slice from at least one more slice server on the list;

data transforming the at least one more data slice to produce at least one more data transformed data slice;

determining whether the data transforming of the at least one more data slice is successful;

when the data transforming of the at least one more data slice is successful, determining whether the at least the threshold number of data slices have been successfully data transformed; and

when the at least the threshold number of data slices have been successfully data transformed, assembling the data segment from the data transformed data slices.

22. The computer of claim 17 , wherein the central processing unit further functions to assemble the data segment from at least the threshold number of data slices by:

for each data slice of the at least the threshold number of data slices, reading a version field to produce version data;

comparing the version data of the at least the threshold number of data slices;

when the version data of the at least the threshold number of data slices substantially match, indicating a current version of the at least the threshold number of data slices for assembling the data segment; and

when the version data for the at least the threshold number of data slices does not substantially match, receiving at least one more data slice from at least one more slice server on the list, wherein the at least one more data slice has the version data corresponding to the current version.

Assignments (7)
TERMINATION AND RELEASE OF SECURITY INTEREST IN PATENT RIGHTS Recorded Jun 11, 2025
From: BARCLAYS BANK PLC, AS ADMINISTRATIVE AGENT
To: PURE STORAGE, INC.
Reel/Frame 071558/0523 →
SECURITY INTEREST Recorded Aug 26, 2020
From: PURE STORAGE, INC.
To: BARCLAYS BANK PLC AS ADMINISTRATIVE AGENT
Reel/Frame 053867/0581 →
CORRECTIVE ASSIGNMENT TO CORRECT THE 9992063 AND 10334045 LISTED IN ERROR PREVIOUSLY RECORDED ON REEL 049556 FRAME 0012. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNOR HEREBY CONFIRMS THE ASSIGNMENT. Recorded Jan 14, 2020
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: PURE STORAGE, INC.
Reel/Frame 052205/0705 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 21, 2019
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: PURE STORAGE, INC.
Reel/Frame 049556/0012 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 13, 2016
From: CLEVERSAFE, INC.
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 038687/0596 →
RELEASE OF SECURITY INTEREST IN PATENTS Recorded Aug 20, 2013
From: SILICON VALLEY BANK
To: CLEVERSAFE, INC.
Reel/Frame 031058/0255 →
FIRST AMENDMENT TO IPSA Recorded Dec 31, 2012
From: CLEVERSAFE, INC.
To: SILICON VALLEY BANK
Reel/Frame 029555/0356 →