IP Library Granted Patent US 12,619,353
Granted Patent B2
US 12,619,353 · App. 18/822,680 · Granted May 5, 2026

Shifting an encoded data slice subset for smart rebuilding

Inventors: Jason K. Resch (Warwick, RI); Greg R. Dhuse (Chicago, IL)
Assignee: Pure Storage, Inc.
G06F3/0604G06F3/0629G06F3/064G06F3/0644G06F3/067G06F11/1076G06F11/1092G06F3/0619G06F3/0643G06F2211/1028
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 12,619,353
App. No.
18/822,680
Granted
May 5, 2026
Kind
B2
Abstract

A method includes generating a second encoded data slice of a second subset of encoded data slices of a set of encoded data slices, where the second subset of encoded data slices is not currently stored in a set of storage units of the storage network, where the set of encoded data slices include a first subset of encoded data slices that is stored in the set of storage units and includes at least a decode threshold number of encoded data slices of the set of encoded data slices, and where a first encoded data slice of the first subset requires rebuilding. The method further includes sending the second encoded data slice to the set of storage units for storage therein, where when the second encoded data slice is stored, the second encoded data slice no longer included in the second subset of encoded data slices.

Claims (46)

1 . A method for execution by one or more computing devices within a storage network, the method comprises:

generating a second encoded data slice of a second subset of encoded data slices of a set of encoded data slices, wherein the second subset of encoded data slices is not currently stored in a set of storage units of the storage network, wherein the set of encoded data slices include a first subset of encoded data slices that is stored in the set of storage units and includes at least a decode threshold number of encoded data slices of the set of encoded data slices, and wherein a first encoded data slice of the first subset requires rebuilding; and

sending the second encoded data slice to the set of storage units for storage therein, wherein when the second encoded data slice is stored, the second encoded data slice is no longer included in the second subset of encoded data slices.

2 . The method of claim 1 further comprises:

identifying the second encoded data slice based on identifying a storage unit of the set of storage units that is mapped to store a respective encoded data slice of the second subset of encoded data slices.

3 . The method of claim 2 , wherein the identifying the storage unit is based on determining the storage unit has been restored within a time period.

4 . The method of claim 2 , wherein the identifying the storage unit is based on determining the storage unit has been upgraded within a time period.

5 . The method of claim 2 , wherein the identifying the storage unit is based on determining the storage unit has not been used previously to store an encoded data slice of the set of encoded data slices.

6 . The method of claim 2 , wherein the identifying the storage unit is based on determining the storage unit is within a performance range of other storage units in the set of storage units.

7 . The method of claim 2 , wherein the identifying the storage unit is based on determining the storage unit has not been used previously for storing any of the first subset of encoded data slices of the set of encoded data slices.

8 . The method of claim 1 further comprises:

error encoding a data segment of data to produce the first subset of encoded data slices; and

sending the first subset of encoded data slices to the set of storage units for storage therein.

9 . The method of claim 8 , wherein the error encoding the data segment is in accordance with error encoding parameters, and wherein the error encoding parameters include the decode threshold number and a pillar width number.

10 . The method of claim 9 , wherein the set of encoded data slices includes the pillar width number.

11 . The method of claim 10 , wherein a number of the second subset of encoded data slices comprises:

the pillar width number minus a number of the first subset of encoded data slices.

12 . The method of claim 1 , wherein the generating the second encoded data slice comprises:

retrieving the decode threshold number of encoded data slices of the first subset of encoded data slices;

error decoding the decode threshold number of encoded data slices to reconstruct a data segment associated with the set of encoded data slices; and

error encoding at least a portion of the reconstructed data segment to produce the second encoded data slice.

13 . The method of claim 12 , wherein the error encoding comprises:

arranging the reconstructed data segment into a data matrix;

obtaining a row of an encoding matrix that corresponds to the second encoded data slice of the set of encoded data slices; and

matrix multiplying the selected row of the encoding matrix with the data matrix to produce the second encoded data slice.

14 . The method of claim 13 further comprises:

identifying a third encoded data slice of the second subset of encoded data slices; and

generating the third encoded data slice from the first subset of encoded data slices.

15 . The method of claim 14 , wherein the generating the third encoded data slice comprises:

error encoding the reconstructed data segment to produce the third encoded data slice.

16 . The method of claim 15 , wherein the error encoding the reconstructed data segment to produce the third encoded data slice comprises:

obtaining a second row of the encoding matrix that corresponds to the third encoded data slice of the set of encoded data slices; and

matrix multiplying the second row of the encoding matrix with the data matrix to produce the third encoded data slice.

17 . The method of claim 1 , wherein determining the first subset of encoded data slices comprises:

receiving, from storage units of the set of storage units, favorable listing responses to a listing request for the first subset of encoded data slices, wherein a first favorable listing response of the favorable listing responses indicates a corresponding storage unit is storing a corresponding encoded data slice of the first subset of encoded data slices.

18 . The method of claim 17 further comprises:

determining an additional encoded data slice of the set of encoded data slices is stored in the set of storage units, wherein the additional encoded data slice was not included in the favorable listing responses; and

updating the first subset of encoded data slices based on the additional encoded data slice.

19 . The method of claim 1 , wherein determining a number of encoded data slices within the first subset of encoded data slices comprises:

obtaining the number by performing a lookup in a lookup table.

20 . A computing device of a storage network, the computing device comprises:

memory;

an interface; and

at least one processing module operably coupled to the memory and the interface, wherein the at least one processing module is operable to:

generate a second encoded data slice of a second subset of encoded data slices of a set of encoded data slices, wherein the second subset of encoded data slices is not currently stored in a set of storage units of the storage network, wherein the set of encoded data slices include a first subset of encoded data slices that is stored in the set of storage units and includes at least a decode threshold number of encoded data slices of the set of encoded data slices, and wherein a first encoded data slice of the first subset requires rebuilding; and

send, via the interface, the second encoded data slice to the set of storage units for storage therein, wherein when the second encoded data slice is stored, the second encoded data slice is no longer included in the second subset of encoded data slices.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 5, 2024
From: INTERNATIONAL BUSINESS MACHINES CORPORATION
To: PURE STORAGE, INC.
Reel/Frame 068842/0237 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 4, 2024
From: RESCH, JASON K.; DHUSE, GREG R.
To: INTERNATIONAL BUSINESS MACHINES CORPORATION
Reel/Frame 068482/0746 →
Continuity (13)
Continuation 17881667 · Aug 5, 2022
Continuation 17248885 · Feb 11, 2021
Continuation 16396399 · Apr 26, 2019
Continuation In Part 15405004 · Jan 12, 2017
Continuation 14088897 · Nov 25, 2013
Continuation 17809796 · Jun 29, 2022
Continuation 16878013 · May 19, 2020
Continuation 13943456 · Jul 16, 2013
Continuation In Part 13718961 · Dec 18, 2012
Provisional Application 61748916 · Jan 4, 2013
Provisional Application 61593116 · Jan 31, 2012
Provisional Application 61695997 · Aug 31, 2012
Related Publication 20240427490A1 · Dec 26, 2024
References Cited (106)
US 4092732A · Ouchi · 1978 [cited by applicant]
US 5454101A · Mackay · 1995 [cited by applicant]
US 5485474A · Rabin · 1996 [cited by applicant]
US 5774643A · Lubbers · 1998 [cited by applicant]
US 5802364A · Senator · 1998 [cited by applicant]
US 5809285A · Hilland · 1998 [cited by applicant]
US 5890156A · Rekieta · 1999 [cited by applicant]
US 5987622A · Lo Verso · 1999 [cited by applicant]
US 5991414A · Garay · 1999 [cited by applicant]
US 6012159A · Fischer · 2000 [cited by applicant]
US 6058454A · Gerlach · 2000 [cited by applicant]
US 6128277A · Bruck · 2000 [cited by applicant]
US 6175571B1 · Haddock · 2001 [cited by applicant]
US 6192472B1 · Garay · 2001 [cited by applicant]
US 6256688B1 · Suetaka · 2001 [cited by applicant]
US 6272658B1 · Steele · 2001 [cited by applicant]
US 6301604B1 · Nojima · 2001 [cited by applicant]
US 6356949B1 · Katsandres · 2002 [cited by applicant]
US 6366995B1 · Nikolaevich · 2002 [cited by applicant]
US 6374336B1 · Peters · 2002 [cited by applicant]
US 6415373B1 · Peters · 2002 [cited by applicant]
US 6418539B1 · Walker · 2002 [cited by applicant]
US 6449688B1 · Peters · 2002 [cited by applicant]
US 6567948B2 · Steele · 2003 [cited by applicant]
US 6571282B1 · Bowman-Amuah · 2003 [cited by applicant]
US 6609223B1 · Wolfgang · 2003 [cited by applicant]
US 6718361B1 · Basani · 2004 [cited by applicant]
US 6760808B2 · Peters · 2004 [cited by applicant]
US 6785768B2 · Peters · 2004 [cited by applicant]
US 6785783B2 · Buckland · 2004 [cited by applicant]
US 6826711B2 · Moulton · 2004 [cited by applicant]
US 6879596B1 · Dooply · 2005 [cited by applicant]
US 7003688B1 · Pittelkow · 2006 [cited by applicant]
US 7024451B2 · Jorgenson · 2006 [cited by applicant]
US 7024609B2 · Wolfgang · 2006 [cited by applicant]
US 7080101B1 · Watson · 2006 [cited by applicant]
US 7103824B2 · Halford · 2006 [cited by applicant]
US 7103915B2 · Redlich · 2006 [cited by applicant]
US 7111115B2 · Peters · 2006 [cited by applicant]
US 7140044B2 · Redlich · 2006 [cited by applicant]
US 7146644B2 · Redlich · 2006 [cited by applicant]
US 7171493B2 · Shu · 2007 [cited by applicant]
US 7222133B1 · Raipurkar · 2007 [cited by applicant]
US 7240236B2 · Cutts · 2007 [cited by applicant]
US 7272613B2 · Sim · 2007 [cited by applicant]
US 7386757B2 · Lindenstruth · 2008 [cited by applicant]
US 7636724B2 · de la Torre · 2009 [cited by applicant]
US 8806296B1 · Lazier · 2014 [cited by applicant]
US 9558067B2 · Resch et al. · 2017 [cited by applicant]
US 10324623B2 · Resch · 2019 [cited by applicant]
US 12093527B2 · Resch · 2024 [cited by examiner]
US 20020062422A1 · Butterworth · 2002 [cited by applicant]
US 20020166079A1 · Ulrich · 2002 [cited by applicant]
US 20030018927A1 · Gadir · 2003 [cited by applicant]
US 20030037261A1 · Meffert · 2003 [cited by applicant]
US 20030065617A1 · Watkins · 2003 [cited by applicant]
US 20030084020A1 · Shu · 2003 [cited by applicant]
US 20040024963A1 · Talagala · 2004 [cited by applicant]
US 20040122917A1 · Menon · 2004 [cited by applicant]
US 20040215998A1 · Buxton · 2004 [cited by applicant]
US 20040228493A1 · Ma · 2004 [cited by applicant]
US 20050100022A1 · Ramprashad · 2005 [cited by applicant]
US 20050114594A1 · Corbett · 2005 [cited by applicant]
US 20050125593A1 · Karpoff · 2005 [cited by applicant]
US 20050131993A1 · Fatula, Jr. · 2005 [cited by applicant]
US 20050132070A1 · Redlich · 2005 [cited by applicant]
US 20050144382A1 · Schmisseur · 2005 [cited by applicant]
US 20050229069A1 · Hassner · 2005 [cited by applicant]
US 20060047907A1 · Shiga · 2006 [cited by applicant]
US 20060136448A1 · Cialini · 2006 [cited by applicant]
US 20060156059A1 · Kitamura · 2006 [cited by applicant]
US 20060224603A1 · Correll, Jr. · 2006 [cited by applicant]
US 20070079081A1 · Gladwin · 2007 [cited by applicant]
US 20070079082A1 · Gladwin · 2007 [cited by applicant]
US 20070079083A1 · Gladwin · 2007 [cited by applicant]
US 20070088970A1 · Buxton · 2007 [cited by applicant]
US 20070174192A1 · Gladwin · 2007 [cited by applicant]
US 20070214285A1 · Au · 2007 [cited by applicant]
US 20070234110A1 · Soran · 2007 [cited by applicant]
US 20070283167A1 · Venters, III · 2007 [cited by applicant]
US 20090094251A1 · Gladwin · 2009 [cited by applicant]
US 20090094318A1 · Gladwin · 2009 [cited by applicant]
US 20100023524A1 · Gladwin · 2010 [cited by applicant]
US 20100269008A1 · Leggette · 2010 [cited by applicant]
US 20130132800A1 · Healey, Jr. · 2013 [cited by applicant]
US 20150154074A1 · Resch · 2015 [cited by examiner]
US 20150254150A1 · Gordon · 2015 [cited by applicant]
US 20190250823A1 · Resch · 2019 [cited by applicant]
Chung; An Automatic Data Segmentation Method for 3D Measured Data Points; National Taiwan University; pp. 1-8; 1998. [cited by applicant]
Harrison; Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms; IETF Network Working Group; RFC 4513; Jun. 2006; pp. 1-32. [cited by applicant]
Kubiatowicz, et al.; OceanStore: An Architecture for Global-Scale Persistent Storage; Proceedings of the Ninth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS 20… [cited by applicant]
Legg; Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules; IETF Network Working Group; RFC 4517; Jun. 2006; pp. 1-50. [cited by applicant]
Plank, T1: Erasure Codes for Storage Applications; FAST2005, 4th Usenix Conference on File Storage Technologies; Dec. 13-16, 2005; pp. 1-74. [cited by applicant]
Rabin; Efficient Dispersal of Information for Security, Load Balancing, and Fault Tolerance; Journal of the Association for Computer Machinery; vol. 36, No. 2; Apr. 1989; pp. 335-348. [cited by applicant]
Satran, et al.; Internet Small Computer Systems Interface (ISCSI); IETF Network Working Group; RFC 3720; Apr. 2004; pp. 1-257. [cited by applicant]
Sciberras; Lightweight Directory Access Protocol (LDAP): Schema for User Applications; IETF Network Working Group; RFC 4519; Jun. 2006; pp. 1-33. [cited by applicant]
Sermersheim; Lightweight Directory Access Protocol (LDAP): The Protocol; IETF Network Working Group; RFC 4511; Jun. 2006; pp. 1-68. [cited by applicant]
Shamir; How to Share a Secret; Communications of the ACM; vol. 22, No. 11; Nov. 1979; pp. 612-613. [cited by applicant]
Smith; Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator; IETF Network Working Group; RFC 4516; Jun. 2006; pp. 1-15. [cited by applicant]
Smith; Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters; IETF Network Working Group; RFC 4515; Jun. 2006; pp. 1-12. [cited by applicant]
Wildi; Java iSCSi Initiator; Master Thesis; Department of Computer and Information Science, University of Konstanz; Feb. 2007; 60 pgs. [cited by applicant]
Xin, et al.; Evaluation of Distributed Recovery in Large-Scale Storage Systems; 13th IEEE International Symposium on High Performance Distributed Computing; Jun. 2004; pp. 172-181. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Directory Information Models; IETF Network Working Group; RFC 4512; Jun. 2006; pp. 1-49. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation; IETF Network Working Group; RFC 4518; Jun. 2006; pp. 1-14. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names; IETF Network Working Group; RFC 4514; Jun. 2006; pp. 1-15. [cited by applicant]
Zeilenga; Lightweight Directory Access Protocol (LDAP): Technical Specification Road Map; IETF Network Working Group; RFC 4510; Jun. 2006; pp. 1-8. [cited by applicant]