IP Library Granted Patent US 9,015,431
Granted Patent B2
US 9,015,431 · App. 12/838,407 · Granted Apr 21, 2015

Distributed storage revision rollbacks

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 9,015,431
App. No.
12/838,407
Granted
Apr 21, 2015
Kind
B2
Abstract

Multiple revisions of an encoded data slice can be stored in a distributed storage unit. Before writing a new revision of an encoded data slice to storage, the distributed storage unit can invoke a write lock for all encoded data slices having the same slice name as the slice being currently written. The slice being currently written can be stored in temporary storage, and a rollback timer started. If a commit command is received before expiration of the rollback timer, the currently written slice can be permanently stored and made accessible for read requests. If the rollback timer expires prior to the storage unit receiving a commit command, however, a previously stored revision will be used.

Claims (70)

1. A method for use in a distributed storage unit of a plurality of distributed storage units in which the plurality of distributed storage units are configured to store different encoded data slices of a data segment, the method comprising:

receiving a particular encoded data slice of the data segment from a processing device and a write request for storing the particular encoded data slice at the distributed storage unit, wherein the particular encoded data slice is one of X number of encoded data slices that are created when error encoding the data segment into a plurality of the different encoded data slices and wherein at least a read threshold T of the X encoded data slices are needed to reconstruct the data segment, where T is less than X, and in which the particular encoded data slice has a slice name and a revision number;

storing the particular encoded data slice in a memory associated with the distributed storage unit, but not making the particular encoded data slice available for access;

transmitting from the distributed storage unit, a write confirmation message to the processing device after storing the particular encoded data slice;

starting a rollback timer at the distributed storage unit to indicate a period of time to wait for a commit command from the processing device;

waiting at the distributed storage unit for the commit command from the processing device, in which the commit command is generated and transmitted by the processing device when the processing device receives at least a write threshold number W of write confirmation messages from the plurality of distributed storage units receiving the X number of encoded data slices of the data segment transmitted, where W is greater than or equal to T;

wherein, in response to receiving the commit command prior to an expiration of the period of time of the rollback timer, changing the access availability of the particular encoded data slice as a current version for access; and

wherein, in response to not receiving the commit command prior to the expiration of the period of time of the rollback timer, deleting the particular encoded data slice and retaining a previous version of the particular encoded data slice as the current version.

2. The method of claim 1 , wherein the period of time of the rollback timer is varied based on system performance.

3. The method of claim 1 , further comprising:

invoking a write lock based on the slice name in response to receiving the particular encoded data slice; and

releasing the write lock in response to receiving the commit command prior to the expiration of the period of time of the rollback timer.

4. The method of claim 1 , further comprising:

checking a write lock status to determine when a write lock associated with the slice name is set prior to the storing of the particular encoded data slice; and

sending a fail message in response to the write request when the write lock associated with the slice name is already set.

5. The method of claim 1 , further comprising:

in response to failing to receive the commit command prior to the expiration of the period of time of the rollback timer, deleting the particular encoded data slice and removing a write lock associated with the slice name of the particular encoded data slice.

6. A distributed storage unit that is one of a plurality of distributed storage units, in which the plurality of distributed storage units are configured to store different encoded data slices of a data segment, the distributed storage unit comprising:

an interface to receive a particular encoded data slice of the data segment from a processing device and a write request for storing the particular encoded data slice, wherein the particular encoded data slice is one of X number of encoded data slices that are created when error encoding the data segment into a plurality of the different encoded data slices and wherein at least a read threshold T of the X encoded data slices are needed to reconstruct the data segment, where T is less than X and in which the particular encoded data slice has a slice name and a revision number;

a memory coupled to the interface configured to store the particular encoded data slice; and

a processor to:

facilitate storing the particular encoded data slice in the memory, but not making the particular encoded data slice available for access;

transmit, via the interface, a write confirmation message to the processing device after storing the particular encoded data slice;

implement a rollback timer to indicate a period of time to wait for a commit command from the processing device;

wait for the commit command from the processing device, in which the commit command is generated and transmitted by the processing device when the processing device receives at least a write threshold number W of write confirmation messages from the plurality of distributed storage units receiving the X number of encoded data slices of the data segment transmitted, where W is greater than or equal to T;

change the access availability of the particular encoded data slice as a current version for access, when the commit command is received prior to an expiration of the period of time of the rollback timer; and

in response to not receiving the commit command prior to the expiration of the period of time of the rollback timer, delete the particular encoded data slice and retain a previous version of the particular encoded data slice as the current version.

7. The distributed storage unit of claim 6 , wherein the processor varies the period of time of the rollback timer based on system performance.

8. The distributed storage unit of claim 6 , wherein the processor is further operable to:

set a write lock indicator based on the slice name in response to receiving the particular encoded data slice; and

release the write lock in response to receiving the commit command prior to the expiration of the period of time of the rollback timer.

9. The distributed storage unit of claim 6 , wherein the processor is further operable to:

check a status of a write lock indicator in response to the interface receiving the particular encoded data slice and the write request prior to facilitating storage of the particular encoded data slice; and

send, via the interface, a fail message in response to the write request when the status of the write lock indicator indicates that a write lock is active for the slice name.

10. The distributed storage unit of claim 6 , further comprising:

when the commit command is not received prior to the expiration of the period of time of the rollback timer, the processor is further operable to:

delete the particular encoded data slice from the memory; and

reset a write lock indicator associated with the slice name of the particular encoded data slice.

11. A method for use in a distributed storage unit of a plurality of distributed storage units in which the plurality of distributed storage units are configured to store different encoded data slices of a data segment, the method comprising:

receiving from a processing device and storing a first version of a particular encoded data slice of the data segment in a memory of the distributed storage unit, wherein the particular encoded data slice is one of X number of encoded data slices that are created when error encoding the data segment into a plurality of the different encoded data slices and wherein at least a read threshold T of the X encoded data slices are needed to reconstruct the data segment, where T is less than X, and in which the first version of the particular encoded data slice has a slice name;

receiving a second version of the particular encoded data slice from the processing device, in which the second version is a revision to the first version of the particular encoded data slice, to be stored in the memory of the distributed storage unit, the second version of the particular encoded data slice having the same slice name as the first version of the encoded data slice, but having a different revision number;

temporarily storing the second version of the particular encoded data slice at the distributed storage unit;

transmitting from the distributed storage unit, a write confirmation message to the processing device after storing the second version of the particular encoded data slice;

starting a rollback timer at the distributed storage unit to indicate a period of time to wait for a commit command from the processing device;

waiting at the distributed storage unit for the commit command from the processing device, in which the commit command is generated and transmitted by the processing device when the processing device receives at least a write threshold number W of write confirmation messages from the plurality of distributed storage units receiving the X number of encoded data slices of the data segment of the second version transmitted, where W is greater than or equal to T;

when the commit command is received prior to the expiration of the period of time of the rollback timer, replacing the first version of the particular encoded data slice with the second version of the particular encoded data slice; and

in response to not receiving the commit command prior to the expiration of the period of time of the rollback timer, deleting the second version of the particular encoded data slice and retaining the first version as the current version.

12. The method of claim 11 , wherein after replacing the first version with the second version, making the second version of the particular encoded data slice accessible for reading in response to read requests for encoded data slices having the slice name.

13. The method of claim 11 , wherein the period of time of the rollback timer is varied by the distributed storage unit based on system performance.

14. The method of claim 11 , further comprising:

preventing write access to encoded data slices having the same slice name during a time when the period of time of the rollback timer is unexpired and a commit command has not been processed by the distributed storage unit.

15. The method of claim 11 , further comprising:

prior to the temporarily storing of the second version of the particular encoded data slice, determining whether a write lock associated with the slice name is set; and

sending a fail message in response to a positive determination that the write lock is set.

16. The method of claim 11 , further comprising:

in response to not receiving the commit command and deleting the second version of the particular encoded data slice, removing a write lock associated with the slice name.

17. A distributed storage unit that is one of a plurality of distributed storage units, in which the plurality of distributed storage units are configured to store different encoded data slices of a data segment, the distributed storage unit comprising:

an interface to receive a first version of a particular encoded data slice of the data segment from a processing device, wherein the particular encoded data slice is one of X number of encoded data slices that are created when error encoding the data segment into a plurality of the different encoded data slices and wherein at least a read threshold T of the X encoded data slices are needed to reconstruct the data segment, where T is less than X, and in which the first version of the particular encoded data slice has a slice name and a revision number, the interface also to receive a second version of the particular encoded data slice having the same slice name as the first version, but a different revision number to indicate that the second version of the particular encoded data slice is a revision of the first version of the particular encoded data slice;

a memory to store the first version and temporarily store the second version of the particular encoded data slice; and

a processor operable to:

transmit, via the interface, a write confirmation message to the processing device after storing the second version of the particular encoded data slice;

start a rollback timer indicating a period of time in which a commit command transmitted from the processing device is expected to be received by the distributed storage unit;

wait for the commit command from the processing device, in which the commit command is generated and transmitted by the processing device when the processing device receives at least a write threshold number W of write confirmation messages from the plurality of distributed storage units receiving the X number of encoded data slices of the data segment transmitted for the second version of the particular encoded data slice, where W is greater than or equal to T;

replace the first version of the particular encoded data slice with the second version of the particular encoded data slice in response to receiving the commit command prior to an expiration of the period of time of the rollback timer; and

retain the first version of the particular encoded data slice in response to not receiving the commit command prior to the expiration of the period of time of the rollback timer.

18. The distributed storage unit of claim 17 , wherein:

the processor is further operable to make the second version of the particular encoded data slice accessible for reading in response to a read request for the particular encoded data slice by removing a write lock to the second version when the commit command is received prior to the expiration of the period of time of the rollback timer.

19. The distributed storage unit of claim 17 , wherein the interface and the processor are operable to receive revision numbers along with the slice name to designate subsequent versions of the particular encoded data slice sent to the distributed storage unit.

20. The distributed storage unit of claim 17 ,

wherein the processor is operable to prevent a write access to the particular encoded data slices having the slice name during a time when the rollback timer is unexpired and the commit command has not been processed by the distributed storage unit.

Assignments (4)
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 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jul 23, 2010
From: RESCH, JASON K.; DHUSE, GREG; VOLVOVSKI, ILYA; BAPTIST, ANDREW; LEGGETTE, WESLEY
To: CLEVERSAFE, INC.
Reel/Frame 024734/0233 →