IP Library Granted Patent US 12,579,032
Granted Patent B2
US 12,579,032 · App. 18/314,430 · Granted Mar 17, 2026

Partitioning data into chunk groupings for use in a dispersed storage network

Inventors: Greg R. Dhuse (Chicago, IL); Jason K. Resch (Warwick, RI)
Assignee: Pure Storage, Inc.
G06F11/1076G06F3/0611G06F3/0619G06F3/0635G06F3/064G06F3/067H04L9/0861H04L9/0894H04L63/0428H04L63/06H04L67/1097H04L9/0822H04L63/0435H04L2209/34H04L2463/061H04W12/04
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,579,032
App. No.
18/314,430
Granted
Mar 17, 2026
Kind
B2
Abstract

A computing device for use in a storage network includes one or more network interfaces, memory with operational instructions and a processing module. The processing module is configured to execute the operational instructions receive a storage request for data and select a plurality of memory devices for storage of the data. The processing module partitions the data into a plurality of chunk sets and encode each chunk set of the plurality of chunk sets according to a dispersed storage error coded function to produce a plurality of chunks. Finally, the processing module facilitates storage of each chunk of the plurality of chunks in a memory device of the plurality of memory devices.

Claims (64)

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

one or more network interfaces;

memory including operational instructions; and

a processing module operably coupled to the memory and the one or more network interfaces, the processing module configured to execute the operational instructions to:

receive a storage request for data;

determine a data type for the data;

based on the data type, determine whether to partition the data into variable-sized data blocks:

in response to a determination to divide the data into variable-sized data blocks, partition the data according to a partition function into a plurality of data blocks;

encode each data block of the plurality of data blocks according to a dispersed storage error coded function to produce a plurality of data fragments;

facilitate storage of the plurality of data fragments in a plurality of storage network node.

2 . The computing device of claim 1 , wherein the processing module is further configured to execute the operational instructions to select the plurality of memory devices for storage of the data based on a capability level associated with each of the memory devices.

3 . The computing device of claim 1 , wherein the processing module is further configured to execute the operational instructions to select the plurality of memory devices for storage of the data based on at least one of:

an estimated distributed computing loading level;

a memory device capability indicator;

a memory device performance indicator;

a memory device availability level indicator;

a task schedule, or a memory device threshold computing capability indicator.

4 . The computing device of claim 1 , wherein the processing module is further configured to execute the operational instructions to:

select specific memory devices of the plurality of memory devices for storage of the data when memory availability level indicators for the specific memory devices compare favorably to an estimated distributed computing loading level.

5 . The computing device of claim 1 , wherein the processing module is further configured to execute the operational instructions to:

generate each data block of the plurality of data blocks in accordance with a data block size and processing parameters.

6 . The computing device of claim 5 , wherein the processing module is further configured to execute the operational instructions to:

generate a data block size for each data block, wherein the data block size is generated based on at least one of: a data block size selection scheme, a predetermination, or receiving the data block size.

7 . The computing device of claim 5 , wherein the data block size is greater than or equal to a largest data group size such that a largest data group associated with the largest data group size fits within any data block set.

8 . The computing device of claim 1 , wherein the storage network node includes a plurality of memory devices, wherein the plurality of memory devices includes one or more solid state memories.

9 . The computing device of claim 1 , wherein an unused capacity within each data block is padded with pad bytes, and wherein each pad byte includes at least one of: a predetermined value, a random value, a value associated with a data block number, a value associated with at least one data group packed into the data block, or at least one partial task associated with the data block.

10 . The computing device of claim 1 , wherein the processing module is further configured to execute the operational instructions to:

in response to a determination not to divide the data into variable-sized data blocks, partition the data according to another partition function into another plurality of data blocks;

encode each data block of the another plurality of data blocks according to a dispersed storage error coded function to produce a plurality of data fragments;

facilitate storage of the plurality of data fragments in a plurality of storage network node.

11 . The computing device of claim 1 , wherein the plurality of data fragments is a decode threshold number of fragments.

12 . A method for storing data in a data storage network comprises

receiving a storage request for data

determining a data type for the data;

based on the data type, determining whether to partition the data into variable-sized data blocks;

in response to a determination to divide the data into variable-sized data blocks, partitioning the data according to a partition function into a plurality of data blocks;

encoding each data block of the plurality of data blocks according to a dispersed storage error coded function to produce a plurality of data fragments; and

facilitating storage of the plurality of data fragments in a plurality of storage network node.

13 . The method of claim 12 , further comprising:

selecting the plurality of memory devices for storage of the data based on a capability level associated with each of the memory devices.

14 . The method of claim 12 , further comprising:

selecting the plurality of memory devices for storage of the data based on at least one of:

an estimated distributed computing loading level;

a memory device capability indicator;

a memory device performance indicator;

a memory device availability level indicator;

a task schedule; and

a memory device threshold computing capability indicator.

15 . The method of claim 14 , wherein the plurality of memory devices includes at a solid state memory.

16 . The method of claim 12 , further comprising:

selecting specific memory devices for storage of the data when memory availability level indicators for the specific memory devices compare favorably to an estimated distributed computing loading level.

17 . The method of claim 12 , further comprising:

generating a data block size for each data block, wherein the data block size is generated based on at least one of: a data block size selection scheme, a predetermination, or receiving the data block size.

18 . A computing device comprises:

one or more network interfaces;

memory including operational instructions; and

a processing module operably coupled to the memory and the one or more network interfaces, the processing module configured to execute the operational instructions to:

receive a storage request for data;

determine a data type for the data;

based on the data type, determining whether to partition the data into variable-sized data blocks;

in response to a determination to divide the data into variable-sized data blocks, partition the data according to a partition function into a plurality of data blocks;

encode each data block of the plurality of data blocks according to a dispersed storage error coded function to produce a plurality of data fragments;

select a plurality of solid-state memory devices for storage of the plurality of data fragments;

facilitate storage of each data fragment of the plurality of data blocks the plurality of data fragments in a memory device of the plurality of solid-state memory devices.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 10, 2023
From: DHUSE, GREG R.; RESCH, JASON K.
To: PURE STORAGE, INC.
Reel/Frame 063590/0339 →
Continuity (7)
Continuation 18046182 · Oct 13, 2022
Continuation 17039433 · Sep 30, 2020
Continuation 16045850 · Jul 26, 2018
Continuation In Part 15193335 · Jun 27, 2016
Continuation 13868311 · Apr 23, 2013
Provisional Application 61637940 · Apr 25, 2012
Related Publication 20230273858A1 · Aug 31, 2023
References Cited (164)
US 3906480A · Schwartz et al. · 1975 [cited by applicant]
US 4092732A · Ouchi · 1978 [cited by applicant]
US 5454101A · Mackay · 1995 [cited by applicant]
US 5485474A · Rabin · 1996 [cited by applicant]
US 5551020A · Flax · 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 · Vilkov · 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 7636724B2 · De La Torre · 2009 [cited by applicant]
US 7801308B1 · Hang · 2010 [cited by applicant]
US 8266430B1 · Lumb · 2012 [cited by applicant]
US 8352847B2 · Gunnam · 2013 [cited by applicant]
US 8379843B2 · Shirai et al. · 2013 [cited by applicant]
US 8483423B2 · Malik et al. · 2013 [cited by applicant]
US 8627073B2 · Kherani et al. · 2014 [cited by applicant]
US 8662396B2 · Berkun et al. · 2014 [cited by applicant]
US 8949691B2 · Shinohara · 2015 [cited by applicant]
US 8984384B1 · Juels · 2015 [cited by applicant]
US 9137492B2 · Lima · 2015 [cited by applicant]
US 9529834B2 · Resch · 2016 [cited by applicant]
US 10412165B2 · Resch · 2019 [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 20030046635A1 · Murillo · 2003 [cited by applicant]
US 20030065617A1 · Watkins · 2003 [cited by applicant]
US 20030084020A1 · Shu · 2003 [cited by applicant]
US 20030196023A1 · Dickson · 2003 [cited by applicant]
US 20040024963A1 · Talagala · 2004 [cited by applicant]
US 20040049687A1 · Orsini et al. · 2004 [cited by applicant]
US 20040122917A1 · Menon · 2004 [cited by applicant]
US 20040151107A1 · Plotnikov · 2004 [cited by applicant]
US 20040152428A1 · Plotnikov · 2004 [cited by applicant]
US 20040165724A1 · Choi et al. · 2004 [cited by applicant]
US 20040215998A1 · Buxton · 2004 [cited by applicant]
US 20040228493A1 · Ma · 2004 [cited by applicant]
US 20040243814A1 · Nakano et al. · 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 · 2005 [cited by applicant]
US 20050132070A1 · Redlich · 2005 [cited by applicant]
US 20050144382A1 · Schmisseur · 2005 [cited by applicant]
US 20050168358A1 · Kuznetsov et al. · 2005 [cited by applicant]
US 20050229069A1 · Hassner · 2005 [cited by applicant]
US 20060004808A1 · Hsu · 2006 [cited by examiner]
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 20060248434A1 · Radke et al. · 2006 [cited by applicant]
US 20060250941A1 · Onggosanusi et al. · 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 20080170591A1 · Kameyama · 2008 [cited by applicant]
US 20080201717A1 · Kapadi · 2008 [cited by examiner]
US 20090089642A1 · Miles · 2009 [cited by applicant]
US 20090094251A1 · Gladwin · 2009 [cited by applicant]
US 20090094318A1 · Gladwin · 2009 [cited by applicant]
US 20090147958A1 · Calcaterra et al. · 2009 [cited by applicant]
US 20100023524A1 · Gladwin · 2010 [cited by applicant]
US 20100061465A1 · Limberg · 2010 [cited by applicant]
US 20100138719A1 · Lee · 2010 [cited by applicant]
US 20100241923A1 · Wang · 2010 [cited by applicant]
US 20100266120A1 · Leggette · 2010 [cited by applicant]
US 20110029756A1 · Biscondi · 2011 [cited by applicant]
US 20110077086A1 · Grube · 2011 [cited by applicant]
US 20110107112A1 · Resch · 2011 [cited by applicant]
US 20110115654A1 · Kameyama et al. · 2011 [cited by applicant]
US 20110125771A1 · Gladwin · 2011 [cited by examiner]
US 20110131462A1 · Gunnam · 2011 [cited by applicant]
US 20110138192A1 · Kocher · 2011 [cited by applicant]
US 20110185149A1 · Gruhl et al. · 2011 [cited by applicant]
US 20110238987A1 · Kherani et al. · 2011 [cited by applicant]
US 20110243324A1 · Lima et al. · 2011 [cited by applicant]
US 20110264984A1 · Murakami · 2011 [cited by applicant]
US 20110289351A1 · Rashimi · 2011 [cited by applicant]
US 20110317839A1 · Yoneda · 2011 [cited by applicant]
US 20120057696A1 · Chew · 2012 [cited by applicant]
US 20120110409A1 · Gherman · 2012 [cited by applicant]
US 20120151224A1 · Koifman · 2012 [cited by examiner]
US 20120173949A1 · Liu · 2012 [cited by applicant]
US 20120272036A1 · Muralimanohar · 2012 [cited by applicant]
US 20130024687A1 · Lumb · 2013 [cited by applicant]
US 20130044818A1 · Jiang · 2013 [cited by applicant]
US 20130166992A1 · Shinohara · 2013 [cited by applicant]
US 20130170433A1 · Summerson · 2013 [cited by applicant]
US 20130173956A1 · Anderson · 2013 [cited by applicant]
US 20130173996A1 · Anderson · 2013 [cited by applicant]
US 20130262854A1 · Gladwin · 2013 [cited by applicant]
US 20130297993A1 · Murakami · 2013 [cited by applicant]
US 20140185803A1 · Lima · 2014 [cited by applicant]
US 20140331085A1 · Dhuse · 2014 [cited by applicant]
US 20150142923A1 · Josa · 2015 [cited by applicant]
US 20150163060A1 · Tomlinson · 2015 [cited by applicant]
US 20150242272A1 · Resch · 2015 [cited by applicant]
US 20160203382A1 · Gardiner · 2016 [cited by applicant]
US 20160254889A1 · Shattil · 2016 [cited by applicant]
US 20170005845A1 · Moon · 2017 [cited by applicant]
US 20170126301A1 · Taherzadehboroujeni · 2017 [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]