# US 12,223,194 B2 · Re-encoding data in a storage network based on addition of additional storage units

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

- Number: US 12,223,194 B2
- Document ID: US12223194B2
- Status: Granted
- Kind: B2
- Application number: 18/519,681
- Filed: 2023-11-27
- Published: 2024-03-21
- Granted: 2025-02-11
- Earliest claimed: 2015-02-27
- Assignees: Pure Storage, Inc.
- Applicants: Pure Storage, Inc.
- Inventors: Ethan S. Wozniak; Andrew D. Baptist; Greg R. Dhuse; Ilya Volvovski; Jason K. Resch; Ravi V. Khadiwala; Wesley B. Leggette
- Web page: https://patentgrep.com/patent/US12223194B2

## CPC

- G06F 3/061: {Improving I/O performance}
- G06F 3/0644: {Management of space entities, e.g. partitions, extents, pools}
- G06F 3/0617: {in relation to availability}
- G06F 3/0619: {in relation to data integrity, e.g. data losses, bit errors}
- G06F 3/0631: {by allocating resources to storage systems}
- G06F 3/065: {Replication mechanisms}
- 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 3/0688: {Non-volatile semiconductor memory arrays}
- G06F 3/0689: {Disk arrays, e.g. RAID, JBOD}
- G06F 11/1076: {Parity data used in redundant arrays of independent storages, e.g. in RAID systems}
- H04L 67/1097: 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]
- G06F 2211/1028: Distributed, i.e. distributed RAID systems with parity
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

A processing system is operable to encode data to produce a first set of data slices based on a value of a width parameter. The data is stored based on maintaining storage of the first set of data slices across a set of storage units of a storage pool. Storage of the first set of data slices is maintained in the set of storage units of the storage pool after addition of an additional set of storage units added to the storage pool. The value of the width parameter is increased to an increased value to produce an updated width parameter. The data is re-encoded in accordance with the updated width parameter to produce a second set of data slices. The data is re-stored based on maintaining storage of the second set of data slices across the expanded set of storage units of the storage pool.

## Claims

### Claim 1

A method comprises:
encoding data in accordance with a width parameter to produce a first set of data slices that includes a first number of data slices based on a value of the width parameter;
storing the data based on maintaining storage of the first set of data slices in a first plurality of selected locations across a set of storage units of a storage pool;
maintaining storage of the first set of data slices in the set of storage units of the storage pool after addition of an additional set of storage units added to the storage pool;
increasing the value of the width parameter to an increased value, based on an expanded set of storage units of the storage pool that includes the additional set of storage units added to the storage pool, to produce an updated width parameter;
re-encoding the data in accordance with the updated width parameter to produce a second set of data slices that includes a second number of data slices based on the increased value of the updated width parameter, wherein the second number of data slices is strictly greater than the first number of data slices based on the increased value of the updated width parameter being strictly greater than the value of the width parameter; and
re-storing the data based on maintaining storage of the second set of data slices in a second plurality of selected locations across the expanded set of storage units of the storage pool, wherein the second plurality of selected locations includes a greater number of locations than the first plurality of selected locations based on the second number of data slices being strictly greater than the first number of data slices.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
retrieving the first set of data slices from storage in the set of storage units based on applying identifiers of the first set of data slices; and
generating recovered data based on performing a decoding function upon the first set of data slices retrieved from storage to recover the data;
wherein the data is re-encoded based on performing an encoding function upon the recovered data by utilizing the updated width parameter.

### Claim 3 (depends on 1)

The method of claim 1, wherein maintaining storage of the second set of data slices in the expanded set of storage units includes rebuilding at least one data slice associated with at least one storage error.

### Claim 4 (depends on 1)

The method of claim 1, wherein the set of storage units are implemented as a set of solid state memory devices.

### Claim 5 (depends on 1)

The method of claim 1, further comprising:
deleting at least one data slice of the first set of data slices from storage in the set of storage units.

### Claim 6 (depends on 5)

The method of claim 5, wherein deleting the at least one data slice of the first set of data slices from the set of storage units is based on a maintained number of data slices stored in the set of storage units.

### Claim 7 (depends on 1)

The method of claim 1, further comprising:
receiving identifiers for the additional set of storage units added to the storage pool, wherein activation of the set of storage units is detected based on receiving the identifiers for the additional set of storage units added to the storage pool.

### Claim 8 (depends on 1)

The method of claim 1, wherein the data is encoded in accordance with an encoding function, and wherein a decoding function corresponding to the encoding function can accommodate a number of failures equal to the width parameter minus an error coding parameter utilized to encode the data.

### Claim 9 (depends on 1)

The method of claim 1, wherein the first number of data slices is equal to the width parameter, and wherein the second number of data slices is equal to the updated width parameter.

### Claim 10 (depends on 1)

The method of claim 1, wherein the updated width parameter is determined based on a number of storage units included in the expanded set of storage units.

### Claim 11

A processing system of a computing device comprises:
at least one processor;
a memory that stores operational instructions that, when executed by the at least one processor, cause the processing system to:
encode data in accordance with a width parameter to produce a first set of data slices that includes a first number of data slices based on a value of the width parameter;
store the data based on maintaining storage of the first set of data slices in a first plurality of selected locations across a set of storage units of a storage pool;
maintain storage of the first set of data slices in the set of storage units of the storage pool after addition of an additional set of storage units added to the storage pool;
increase the value of the width parameter to an increased value, based on an expanded set of storage units of the storage pool that includes the additional set of storage units added to the storage pool, to produce an updated width parameter;
re-encode the data in accordance with the updated width parameter to produce a second set of data slices that includes a second number of data slices based on the increased value of the updated width parameter, wherein the second number of data slices is strictly greater than the first number of data slices based on the increased value of the updated width parameter being strictly greater than the value of the width parameter; and
re-store the data based on maintaining storage of the second set of data slices in a second plurality of selected locations across the expanded set of storage units of the storage pool, wherein the second plurality of selected locations includes a greater number of locations than the first plurality of selected locations based on the second number of data slices being strictly greater than the first number of data slices.

### Claim 12 (depends on 11)

The processing system of claim 11, wherein maintaining storage of the second set of data slices in the expanded set of storage units includes rebuilding at least one data slice associated with at least one storage error.

### Claim 13 (depends on 11)

The processing system of claim 11, wherein the set of storage units are implemented as a set of solid state memory devices.

### Claim 14 (depends on 11)

The processing system of claim 11, wherein the operational instructions, when executed by the at least one processor, further cause the processing system to:
delete at least one data slice of the first set of data slices from the set of storage units.

### Claim 15 (depends on 14)

The processing system of claim 14, wherein deleting the at least one data slice of the first set of data slices from the set of storage units is based on a maintained number of data slices stored in the set of storage units.

### Claim 16 (depends on 11)

The processing system of claim 11, wherein the second set of data slices includes a greater number of data slices than the first set of data slices based on the updated width parameter being increased from the width parameter.

### Claim 17 (depends on 11)

The processing system of claim 11, wherein the data is encoded in accordance with an encoding function, and wherein a decoding function corresponding to the encoding function can accommodate a number of failures equal to the width parameter minus an error coding parameter utilized to encode the data.

### Claim 18 (depends on 11)

The processing system of claim 11, wherein the first set of data slices includes a number of data slices equal to the width parameter.

### Claim 19 (depends on 11)

The processing system of claim 11, wherein the updated width parameter is determined based on a number of storage units included in the expanded set of storage units.

### Claim 20

A non-transitory computer readable storage medium comprises:
at least one memory section that stores operational instructions that, when executed by a processing system of a storage network that includes a processor and a memory, causes the processing system to:
encode data in accordance with a width parameter to produce a first set of data slices that includes a first number of data slices based on a value of the width parameter;
store the data based on maintaining storage of the first set of data slices in a first plurality of different locations across a set of storage units of a storage pool;
maintain storage of the first set of data slices in the set of storage units of the storage pool after addition of an additional set of storage units added to the storage pool;
increase the value of the width parameter to an increased value, based on an expanded set of storage units of the storage pool that includes the additional set of storage units added to the storage pool, to produce an updated width parameter;
re-encode the data in accordance with the updated width parameter to produce a second set of data slices that includes a second number of data slices based on the increased value of the updated width parameter, wherein the second number of data slices is strictly greater than the first number of data slices based on the increased value of the updated width parameter being strictly greater than the value of the width parameter; and
re-store the data based on maintaining storage of the second set of data slices in a second plurality of different locations across the expanded set of storage units of the storage pool, wherein the second plurality of different locations includes a greater number of locations than the first plurality of different locations based on the second number of data slices being strictly greater than the first number of data slices.
