# US 12,762,089 B2 · Access redirection in a distributive file system

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

- Number: US 12,762,089 B2
- Document ID: US12762089B2
- Status: Granted
- Kind: B2
- Application number: 18/933,005
- Filed: 2024-10-31
- Published: 2025-02-20
- Granted: 2026-10-13
- Earliest claimed: 2018-07-02
- Assignees: Weka.IO Ltd.
- Applicants: Weka.IO Ltd
- Inventors: Maor Ben Dayan; Omri Palmon; Liran Zvibel
- Web page: https://patentgrep.com/patent/US12762089B2

## CPC

- G06F 16/134: {Distributed indices}
- G06F 16/1727: {Details of free space management performed by the file system (saving storage space on storage systems G06F3/0608; management of blocks in storage devices G06F3/064)}
- G06F 16/1734: {Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs}
- G06F 16/182: Distributed file systems
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A plurality of computing devices are communicatively coupled to each other via a network, and each of the plurality of computing devices is operably coupled to one or more of a plurality of storage devices. A plurality of failure resilient address spaces are distributed across the plurality of storage devices such that each of the plurality of failure resilient address spaces spans a plurality of the storage devices. The plurality of computing devices maintains metadata that maps each failure resilient address space to one of the plurality of computing devices. The metadata is grouped into buckets. Each bucket is stored in the backend of a computing device. Access to a storage device may be managed according to an availability of the storage device. Reads from and writes to a storage device may be redirected when, for example, the storage device is over-utilized or performing garbage collection.

## Claims

### Claim 1

A system comprising:
a processor operable to maintain a plurality of stripes, wherein:
each stripe of the plurality of stripes spans a different set of storage devices of a plurality of storage devices, wherein:
each stripe of the plurality of stripes is a failure-resilient stripe generated by a backend of a computing device comprising one or more buckets,
each bucket is operable to generate a respective failure-resilient stripe as a plurality of blocks distributed across at least two storage devices of the plurality of storage devices,
at least one block of the plurality of blocks in each failure-resilient stripe comprises error correction data, and
in response to determining that a garbage collection process is actively running on a storage device storing a block of a stripe, a read access directed to the block is redirected, prior to issuing the read access to the storage device, and the block is reconstructed from other blocks of the stripe without accessing the storage device.

### Claim 2 (depends on 1)

The system of claim 1, wherein while the garbage collection is running on a storage device, a write access to the storage device is redirected to a stripe comprising exclusively of blocks in storage devices other the storage device.

### Claim 3 (depends on 1)

The system of claim 1, wherein while the garbage collection is running on a storage device, a read access to the block is redirected to other blocks of the stripe.

### Claim 4 (depends on 3)

The system of claim 3, wherein the stripe is a failure resilient stripe.

### Claim 5 (depends on 1)

The system of claim 1, wherein the system comprises:
a computing device, wherein:
each bucket of one or more buckets, on the computing device, is operable to generate a failure resilient stripe comprising a plurality of blocks distributed across at least two storage devices of the plurality of storage devices, and
at least one block of the plurality of blocks in each failure resilient stripe comprises error correction data.

### Claim 6 (depends on 5)

The system of claim 5, wherein the computing device is a host of a storage device of the plurality of storage devices, and wherein the host computing device is operable deallocate unused blocks of the hosted storage device prior to the garbage collection process.

### Claim 7 (depends on 6)

The system of claim 6, wherein the host computing device is operable redirect an attempted access to the hosted storage device when the garbage collection process is run.

### Claim 8 (depends on 5)

The system of claim 5, wherein the computing device is on a network interface card.

### Claim 9

A system comprising:
a processor operable to maintain a plurality of failure-resilient stripes, wherein:
each failure-resilient stripe is generated by a backend of a computing device comprising one or more buckets,
each bucket is operable to generate a respective failure-resilient stripe as a plurality of blocks distributed across at least two storage devices of a plurality of storage devices,
at least one block of the plurality of blocks in each failure-resilient stripe comprises error correction data,
each stripe of the plurality of stripes spans a different set of storage devices of the plurality of storage devices,
access times for each storage device of the plurality of storage devices are tracked during operation, and
in response to determining that an access time for a particular storage device exceeds a threshold indicative of temporary internal activity of the storage device, a read access directed to the particular storage device is redirected, prior to issuing the read access to the particular storage device, and a block, of the particular storage device, is reconstructed from other blocks in a stripe comprising the block.

### Claim 10 (depends on 9)

The system of claim 9, wherein a write access to the particular storage device is redirected to a stripe comprising exclusively of blocks in storage devices of the plurality of storage devices other that the particular storage device.

### Claim 11 (depends on 9)

The system of claim 9, wherein a read access directed to a block in the particular storage device is redirected to one or more other blocks of the stripe that comprises the block in the particular storage device, and wherein the one or more other blocks of the stripe are in storage devices of the plurality of storage devices other that the particular storage device.

### Claim 12 (depends on 11)

The system of claim 11, wherein the block in the particular device is regenerated using the one or more other blocks of the stripe.

### Claim 13 (depends on 9)

The system of claim 9, wherein the system comprises:
a computing device comprising a backend with one or more buckets, wherein:
each bucket of the one or more buckets is operable to generate a failure resilient stripe comprising a plurality of blocks distributed across at least two storage devices of the plurality of storage devices, and
at least one block of the plurality of blocks in each failure resilient stripe comprises error correction data.

### Claim 14 (depends on 13)

The system of claim 13, wherein the computing device is a host of the particular storage device, and wherein the host computing device is operable deallocate unused blocks of the particular storage device.

### Claim 15 (depends on 13)

The system of claim 13, wherein the computing device of the plurality of computing devices is a host of the particular storage device, and wherein the host computing device is operable to run a garbage collection process on the particular storage device.

### Claim 16 (depends on 13)

The system of claim 13, wherein the computing device is on a network interface card.

### Claim 17

A method comprising:
maintaining, via a backend of a computing device comprising one or more buckets, a plurality of failure-resilient stripes via a plurality of storage devices, wherein:
each failure-resilient stripe is generated as a plurality of blocks distributed across at least two storage devices of the plurality of storage devices,
at least one block of the plurality of blocks in each failure-resilient stripe comprises error correction data, and
each stripe of the plurality of failure-resilient stripes spans a different set of storage devices of the plurality of storage devices;
receiving a request, at a computing device, to access a first storage device;
determining that a garbage collection process is actively running on the first storage device;
redirecting the access request, prior to issuing the access request to the first storage device, to a second storage device; and
reconstructing a first block of the first storage device from one or more other blocks of a failure-resilient stripe without accessing the first storage device.

### Claim 18 (depends on 17)

The method of claim 17, wherein the method comprises running a garbage collection process on the first storage device, and wherein at least a portion of the first storage device is not available during the garbage collection process.

### Claim 19 (depends on 17)

The method of claim 17, wherein the access request is a read access directed to a first block in the first storage device, and wherein the method comprises regenerating the first block using one or more blocks of a failure resilient stripe other than the first block.

### Claim 20 (depends on 17)

The method of claim 17, wherein the method comprises deallocating unused blocks of the first storage device.

### Claim 21 (depends on 17)

The method of claim 17, wherein the method comprises generating a failure resilient stripe across at least the first storage device and the second storage device, wherein the failure resilient stripe comprises at least one block of error correction data.

### Claim 22 (depends on 17)

The method of claim 17, wherein the method comprises tracking access times for the first storage device.

### Claim 23 (depends on 17)

The method of claim 17, wherein the method comprises determining that the first storage device is unavailable if the access times for the first storage device increase above a threshold.
