# US 11,307,930 B1 · Optimized selection of participants in distributed data rebuild/verification

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 11,307,930 B1
- Document ID: US11307930B1
- Status: Granted
- Kind: B1
- Application number: 17/066,873
- Filed: 2020-10-09
- Granted: 2022-04-19
- Earliest claimed: 2010-11-29
- Assignees: Pure Storage, Inc.
- Applicants: Pure Storage, Inc.
- Inventors: Thomas F. Shirley, Jr.; Greg R. Dhuse; Jason K. Resch
- Web page: https://patentgrep.com/patent/US11307930B1

## CPC

- G06F 11/1076: {Parity data used in redundant arrays of independent storages, e.g. in RAID systems}
- G06F 11/1092: {Rebuilding, e.g. when physically replacing a failing disk}
- G06F 3/0619: {in relation to data integrity, e.g. data losses, bit errors}
- G06F 3/0659: {Command handling arrangements, e.g. command buffers, queues, command scheduling}
- G06F 3/067: {Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]}
- G06F 11/0772: {Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers}
- G06F 11/3006: {where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems (multiprogramming arrangements G06F9/46; allocation of resources G06F9/50)}
- G06F 11/3034: {where the computing system component is a storage system, e.g. DASD based or network based (digital input from or digital output to record carriers G06F3/06; digital recording or reproducing G11B20/18; for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS], H04L67/1097)}
- G06F 11/3409: {for performance assessment}
- G06F 11/3452: {Performance evaluation by statistical analysis}
- G06F 21/6218: {to a system of files or objects, e.g. local or distributed file system or database}
- G06F 2221/2107: File encryption
- H03M 13/1515: {Reed-Solomon codes}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H03M: CODING; DECODING; CODE CONVERSION IN GENERAL (using fluidic means F15C4/00; optical analogue/digital converters G02F7/00; coding, decoding or code conversion, specially adapted for particular applications, see the relevant subclasses, e.g. G01D, G01R, G06F, G06T, G09G, G10L, G11B, G11C, H04B, H04L, H04M, H04N; ciphering or deciphering for cryptography or other purposes involving the need for secrecy G09C)

## Abstract

A distributed storage network method begins by determining an encoded data slice to rebuild, determining a storage set of distributed storage units associated with the encoded data slice to rebuild, determining an historical performance level of each distributed storage unit of the storage set of distributed storage units, determining an estimated performance level of each distributed storage unit of the storage set of distributed storage units, selecting at least a decode threshold number of distributed storage units of the storage set of distributed storage units to produce selected distributed storage units, determining an encoded data slice partial aggregation scheme for the selected distributed storage units, sending encoded data slice partial request messages to the selected distributed storage units, and receiving encoded data slice partial response messages and extracting encoded data slice partials from the encoded data slice partial response messages to rebuild or verify the encoded data slice.

## Claims

### Claim 1

A method of selecting distributed storage units, the method includes:
determining an encoded data slice to rebuild;
determining a storage set of distributed storage units associated with the encoded data slice to rebuild;
determining an historical performance level of each distributed storage unit of the storage set of distributed storage units;
determining an estimated performance level of each distributed storage unit of the storage set of distributed storage units;
selecting at least a decode threshold number of distributed storage units of the storage set of distributed storage units to produce selected distributed storage units;
determining an encoded data slice partial aggregation scheme for the selected distributed storage units;
sending encoded data slice partial request messages to the selected distributed storage units; and
receiving encoded data slice partial response messages and extracting encoded data slice partials from the encoded data slice partial response messages to rebuild the encoded data slice.

### Claim 2 (depends on 1)

The method of claim 1, wherein the determining an encoded data slice to rebuild is based on one or more of: a slice error indicator, an error message, a request, a next slice name in a list of slices to test, a random slice name, a slice name associated with a local DS unit, and a slice rebuild indicator.

### Claim 3 (depends on 1)

The method of claim 1, wherein the determining an encoded data slice to rebuild is based on a rebuild indicator subsequent to the encoded data slice being rebuilt.

### Claim 4 (depends on 3)

The method of claim 3, wherein the rebuild indicator is a verification of the encoded data slice.

### Claim 5 (depends on 1)

The method of claim 1, wherein the determining an historical performance level of each distributed storage unit of the storage set of distributed storage units is based on one or more of: retrieving a historical performance level record, a query, a test, a lookup, or a message.

### Claim 6 (depends on 1)

The method of claim 1, wherein the historical performance level is based on one or more of: access latency, excess bandwidth, reliability, availability, or cost.

### Claim 7 (depends on 1)

The method of claim 1, wherein the determining an estimated performance level of each distributed storage unit of the storage set of distributed storage units is based on one or more of: the historical performance level of each of the distributed storage units of the storage set of distributed storage units, an estimation guideline, a query, a test, a lookup, or a message.

### Claim 8 (depends on 1)

The method of claim 1, wherein the determining an estimated performance level is based on based on the historical performance level of the selected distributed storage units over a previous time period.

### Claim 9 (depends on 8)

The method of claim 8, wherein the determining an estimated performance level is determined by averaging the historical performance level over the previous time period.

### Claim 10 (depends on 1)

The method of claim 1, wherein the selecting at least a decode threshold number of distributed storage units of the storage set of distributed storage units is based on one or more of: system topology information, the historical performance level, the estimated performance level, a performance goal, or a selection approach indicator.

### Claim 11 (depends on 10)

The method of claim 10, wherein the system topology information includes one or more of: sites, number of distributed storage units per site, or site locations.

### Claim 12 (depends on 10)

The method of claim 10, wherein the selection approach indicator includes one or more of: selecting as many distributed storage units co-located with a present distributed storage unit as possible or selecting an issuance of a remote site with a maximum number of distributed storage units.

### Claim 13 (depends on 1)

The method of claim 1, wherein the encoded data slice partial aggregation scheme for the selected distributed storage units includes: determining which distributed storage units compute their encoded data slice partial, which distributed storage units aggregate their encoded data slice partial with encoded data slice partials from which other distributed storage units to produce aggregated encoded data slice partials, and which of the distributed storage units are to be recipients of the aggregated encoded data slice partials.

### Claim 14 (depends on 1)

The method of claim 1 wherein the encoded data slice partial request messages include one or more of: the encoded data slice partial aggregation scheme, a slice name corresponding to the encoded data slice associated with the distributed storage unit associated with the encoded data slice partial request messages, a recipient identifier (ID), or compression information.

### Claim 15 (depends on 1)

The method of claim 1 further comprises facilitating rebuilding or verifying the encoded data slice utilizing the encoded data slice partials.

### Claim 16

A method of selecting distributed storage units to verify an encoded data slice, the method includes:
determining an encoded data slice to verify;
determining a storage set of distributed storage units associated with the encoded data slice to verify;
determining an historical performance level of each distributed storage unit of the storage set of distributed storage units;
determining an estimated performance level of each distributed storage unit of the storage set of distributed storage units;
selecting at least a decode threshold number of distributed storage units of the storage set of distributed storage units to produce selected distributed storage units;
determining an encoded data slice partial aggregation scheme for the selected distributed storage units;
sending encoded data slice partial request messages to the selected distributed storage units; and
receiving encoded data slice partial response messages and extracting encoded data slice partials from the encoded data slice partial response messages to verify the encoded data slice.

### Claim 17 (depends on 16)

The method of claim 16, wherein the encoded data slice partial aggregation scheme for the selected distributed storage units includes determining which distributed storage units compute their encoded data slice partial, which distributed storage units aggregate their encoded data slice partial with encoded data slice partials from which other distributed storage units to produce aggregated encoded data slice partials, and which distributed storage units are to be recipients of the aggregated encoded data slice partials.

### Claim 18

A distributed storage network (DSN) comprises:
a first computing device with processing circuitry configured to execute operational instructions to:
determine an encoded data slice to rebuild;
determine a storage set of distributed storage units associated with the encoded data slice to rebuild;
determine an historical performance level of each distributed storage unit of the storage set of distributed storage units;
determine an estimated performance level of each distributed storage unit of the storage set of distributed storage units;
select at least a decode threshold number of distributed storage units of the storage set of distributed storage units to produce selected distributed storage units;
determine an encoded data slice partial aggregation scheme for the selected distributed storage units;
send encoded data slice partial request messages to the selected distributed storage units; and
receive encoded data slice partial response messages and extracting encoded data slice partials from the encoded data slice partial response messages to rebuild the encoded data slice.

### Claim 19 (depends on 18)

The distributed storage network (DSN) of claim 18 further comprises facilitating rebuilding the encoded data slice utilizing the encoded data slice partials.

### Claim 20 (depends on 18)

The distributed storage network (DSN) of claim 18 further comprises verifying the encoded data slice utilizing the encoded data slice partials.
