# US 10,769,177 B1 · Virtual file structure for data storage system

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

- Number: US 10,769,177 B1
- Document ID: US10769177B1
- Status: Granted
- Kind: B1
- Application number: 16/410,716
- Filed: 2019-05-13
- Granted: 2020-09-08
- Earliest claimed: 2011-09-02
- Assignees: Pure Storage, Inc.
- Applicants: Pure Storage, Inc.
- Inventors: Stefan Bernbo; Christian Melander; Gustav Petersson; Roger Persson
- Web page: https://patentgrep.com/patent/US10769177B1

## CPC

- G06F 16/285: {Clustering or classification}
- G06F 9/54: Interprogram communication
- G06F 16/182: Distributed file systems
- G06F 16/1834: {implemented based on peer-to-peer networks, e.g. gnutella (p2p communication protocols H04L67/104)}
- G06F 16/184: {implemented as replicated file system}
- G06F 16/22: Indexing; Data structures therefor; Storage structures
- H04L 41/0213: Standardised network management protocols, e.g. simple network management protocol [SNMP]
- 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

An exemplary method includes identifying, within a first data item stored in a data storage system, a reference to a second data item stored in the data storage system, determining, based on the reference, that a storage location of the second data item is within a cluster of storage nodes included in the data storage system, sending, based on the determining that the storage location of the second data item is within the cluster of storage nodes, a request for the second data item to the storage nodes included in the cluster, and receiving, based on the request, the second data item from a particular storage node included in the cluster.

## Claims

### Claim 1

A method comprising:
identifying, within a collection object stored in a data storage system, a reference to a data item stored in the data storage system, the collection object corresponding to a directory of a distributed file system and the reference including an address of the data item in the storage system;
determining, based on the reference within the collection object, that a storage location of the data item is within a cluster of storage nodes included in the data storage system;
sending, based on the determining that the storage location of the data item is within the cluster of storage nodes, a request for the data item to the storage nodes included in the cluster;
receiving, in response to the request, one or more responses from one or more storage nodes, the one or more responses indicating that the one or more storage nodes each store the data item;
selecting, based on data included in the one or more responses, a particular storage node included in the one or more storage nodes;
sending an additional request for the data item to the particular storage node; and
receiving, in response to the additional request, the data item from the particular storage node;
wherein the identifying, the determining, the sending of the request, and the receiving of the data item are performed using an application programming interface (API).

### Claim 2 (depends on 1)

The method of claim 1, wherein the selecting of the particular storage node comprises determining, based on the data included in the one or more responses, that the particular storage node has a lowest execution load out of all storage nodes included in the one or more storage nodes.

### Claim 3 (depends on 1)

The method of claim 1, wherein the additional request comprises a unicast request.

### Claim 4 (depends on 1)

The method of claim 1, wherein:
the collection object represents a directory in a virtual file structure; and
the data item is
a second collection object that represents a subdirectory of the directory in the virtual file structure, or
a data file that includes payload data.

### Claim 5 (depends on 4)

The method of claim 4, wherein:
the collection object and the data item are stored in an unstructured storage layer of the storage system; and
the virtual file structure implements a structured layer for the unstructured storage layer.

### Claim 6 (depends on 1)

The method of claim 1, wherein the API is executed by a device configured to communicate with the data storage system by way of a network.

### Claim 7 (depends on 1)

The method of claim 1, wherein the API is executed by a storage node included in the data storage system.

### Claim 8 (depends on 1)

The method of claim 1, wherein:
the address comprises a multicast address; and
the sending of the request comprises sending a multicast request to the multicast address.

### Claim 9 (depends on 1)

The method of claim 1, further comprising:
Identifying, within the data item, a reference to an additional data item stored in the data storage system;
determining, based on the reference to the additional data item, that a storage location of the additional data item is within a second cluster of storage nodes included in the data storage system;
sending, based on the determining that the storage location of the additional data item is within the second cluster of storage nodes, a request for the additional data item to the storage nodes included in the second cluster; and
receiving, based on the request for the additional data item, the additional data item from a particular storage node included in the second cluster.

### Claim 10 (depends on 9)

The method of claim 9, wherein the second cluster of storage nodes is the cluster of storage nodes.

### Claim 11 (depends on 9)

The method of claim 9, wherein the second cluster of storage nodes is different than the cluster of storage nodes.

### Claim 12

A device comprising a processor configured to:
identify, within a collection object stored in a data storage system, a reference to a data item stored in the data storage system, the collection object corresponding to a directory of a distributed file system and the reference including an address of the data item in the storage system;
determine, based on the reference within the collection object, that a storage location of the data item is within a cluster of storage nodes included in the data storage system;
send, based on the determining that the storage location of the data item is within the cluster of storage nodes, a request for the data item to the storage nodes included in the cluster;
receive, in response to the request, one or more responses from one or more storage nodes, the one or more responses indicating that the one or more storage nodes each store the data item;
select, based on data included in the one or more responses, a particular storage node included in the one or more storage nodes;
send an additional request for the data item to the particular storage node; and
receive, in response to the additional request, the data item from the particular storage node;
wherein the identifying, the determining, the sending of the request, and the receiving of the data item are performed using an application programming interface (API).

### Claim 13 (depends on 12)

The device of claim 12, wherein the device is implemented by a server configured to communicate with the data storage system by way of a network.

### Claim 14 (depends on 12)

The device of claim 12, wherein the device is implemented by a storage node within the data storage system.

### Claim 15 (depends on 12)

The device of claim 12, wherein:
the second data item is
a second collection object that represents a subdirectory of the directory, or
a data file that includes payload data.

### Claim 16 (depends on 15)

The device of claim 15, wherein:
the collection object and the data item are stored in an unstructured storage layer of the storage system; and
the virtual file structure implements a structured layer for the unstructured storage layer.

### Claim 17 (depends on 12)

The device of claim 12, wherein the selecting of the particular storage node comprises determining, based on the data included in the one or more responses, that the particular storage node has a lowest execution load out of all storage nodes included in the one or more storage nodes.
