# US 10,503,598 B2 · Rebuilding data while reading data in a dispersed storage network

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

- Number: US 10,503,598 B2
- Document ID: US10503598B2
- Status: Granted
- Kind: B2
- Application number: 16/151,108
- Filed: 2018-10-03
- Published: 2019-01-31
- Granted: 2019-12-10
- Earliest claimed: 2013-07-01
- Assignees: Pure Storage, Inc.
- Applicants: International Business Machines Corporation
- Inventors: Brennan James Trichardt; Jason K. Resch
- Web page: https://patentgrep.com/patent/US10503598B2

## CPC

- G06F 11/1092: {Rebuilding, e.g. when physically replacing a failing disk}
- G06F 2211/1028: Distributed, i.e. distributed RAID systems with parity
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A method includes executing a read request regarding a set of encoded data slices stored in storage units of the DSN, where a data segment of data is encoded in accordance with a dispersed storage error coding function to produce the set of encoded data slices, and where a decode threshold number of encoded data slices of the set of encoded data slices is required to rebuild the data segment. The method further includes reconstructing the data segment from at least the decode threshold number of encoded data slices of the set of encoded data slices, where the at least the decode threshold number of encoded data slices are included in read responses from the storage units. The method further includes determining an encoded data slice not used in the reconstructing needs to be rebuilt and rebuilding the encoded data slice using the reconstructed data segment.

## Claims

### Claim 1

A method for execution by one or more computing devices of a dispersed storage network (DSN), the method comprises:
executing a read request regarding a set of encoded data slices stored in storage units of the DSN, wherein a data segment of data is encoded in accordance with a dispersed storage error coding function to produce the set of encoded data slices, and wherein a decode threshold number of encoded data slices of the set of encoded data slices is required to rebuild the data segment;
reconstructing the data segment from at least the decode threshold number of encoded data slices of the set of encoded data slices, wherein the at least the decode threshold number of encoded data slices are included in read responses from the storage units;
determining an encoded data slice of the set of encoded data slices not used in the reconstructing needs to be rebuilt; and
rebuilding the encoded data slice using the reconstructed data segment.

### Claim 2 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
interpreting a read response of the read responses to determine a revision error of the encoded data slice.

### Claim 3 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
determining that an expected read response to the read request was not received.

### Claim 4 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
interpreting a read response of the read responses to determine that the encoded data slice is corrupted.

### Claim 5 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
interpreting a read response of the read responses to determine an integrity check value does not substantially match a known integrity check value for the encoded data slice.

### Claim 6 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
determining the encoded data slice is flagged in a rebuilding list.

### Claim 7 (depends on 1)

The method of claim 1, wherein the determining the encoded data slice requires rebuilding comprises:
determining the encoded data slice as being previously identified during a rebuilding process.

### Claim 8 (depends on 1)

The method of claim 1 further comprises:
subsequent to the reconstructing the data segment, determining to temporarily keep the reconstructed data segment until the expiration of a time period.

### Claim 9 (depends on 8)

The method of claim 8 further comprises:
receiving a second read request for the set of encoded data slices; and
determining to use the reconstructed data segment in executing the second read request.

### Claim 10

A computing device of a dispersed storage network (DSN) comprises:
an interface;
memory; and
a processing module operably coupled to the memory and the interface, wherein the processing module is operable to:
execute a read request regarding a set of encoded data slices stored in storage units of the DSN, wherein a data segment of data is encoded in accordance with a dispersed storage error coding function to produce the set of encoded data slices, and wherein a decode threshold number of encoded data slices of the set of encoded data slices is required to rebuild the data segment;
reconstruct the data segment from at least the decode threshold number of encoded data slices of the set of encoded data slices, wherein the at least the decode threshold number of encoded data slices are included in read responses from the storage units;
determine an encoded data slice of the set of encoded data slices not used in the reconstructing needs to be rebuilt; and
rebuild the encoded data slice using the reconstructed data segment.

### Claim 11 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
interpreting a read response of the read responses to determine a revision error of the encoded data slice.

### Claim 12 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
determining that an expected read response to the read request was not received.

### Claim 13 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
interpreting a read response of the read responses to determine that the encoded data slice is corrupted.

### Claim 14 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
interpreting a read response of the read responses to determine an integrity check value does not substantially match a known integrity check value for the encoded data slice.

### Claim 15 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
determining the encoded data slice is flagged in a rebuilding list.

### Claim 16 (depends on 10)

The computing device of claim 10, wherein the processing module is operable to determine the encoded data slice requires rebuilding by:
determining the encoded data slice as being previously identified during a rebuilding process.

### Claim 17 (depends on 10)

The computing device of claim 10, wherein the processing module, subsequent to the reconstructing the data segment, is operable to:
determine to temporarily keep the reconstructed data segment until the expiration of a time period.

### Claim 18 (depends on 17)

The computing device of claim 17, wherein the processing module is further operable to:
receive, via the interface, a second read request for the set of encoded data slices; and
determine to use the reconstructed data segment in processing the second read request.
