# US 12,119,950 B2 · Early acknowledgment for write operations

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

- Number: US 12,119,950 B2
- Document ID: US12119950B2
- Status: Granted
- Kind: B2
- Application number: 17/333,401
- Filed: 2021-05-28
- Published: 2021-09-16
- Granted: 2024-10-15
- Earliest claimed: 2018-06-08
- Assignees: Microsoft Technology Licensing, LLC
- Applicants: Microsoft Technology Licensing, LLC
- Inventors: Pradeep Sindhu; Jaspal Kohli; Philip A. Thomas
- Web page: https://patentgrep.com/patent/US12119950B2

## CPC

- H04L 12/1868: {Measures taken after transmission, e.g. acknowledgments}
- H04L 67/06: specially adapted for file transfer, e.g. file transfer protocol [FTP]
- G06F 11/1625: {in communications, e.g. transmission, interfaces}
- G06F 11/2056: {by mirroring}
- H04L 12/66: Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
- 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]
- H04L 67/56: Provisioning of proxy services (store-and-forward switching systems in data switching networks H04L12/54)
- H04L 67/568: Storing data temporarily at an intermediate stage, e.g. caching
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

This disclosure describes techniques for providing early acknowledgments to a source device performing a data write operation within a data center or across a geographically-distributed data center. In one example, this disclosure describes a method that includes receiving, by a gateway device and from a source device within a local data center, data to be stored at a remote destination device that is located within a remote data center; storing, by the gateway device, the data to high-speed memory included within the gateway device; transmitting, by the gateway device, the data over a connection to the remote data center; after transmitting the data and before the data is stored at the remote destination device, outputting, by the gateway device to the source device, a local acknowledgment, wherein the local acknowledgment indicates to the source device that the data can be assumed to have been stored at the remote destination device.

## Claims

### Claim 1

A gateway device comprising a storage system and processing circuitry having access to the storage system, wherein the processing circuitry is configured to:
receive, from a source device within a data center, data to be stored at a remote destination device not located within the data center;
generate a plurality of data segments that enable the data to be reconstructed from a subset of the plurality of the data segments;
transmit each of the plurality of data segments by outputting the plurality of data segments over one or more links of a network to a different one of a plurality of remote data centers;
and
based at least on outputting each of the plurality of data segments over the one or more links of the network to complete transmission of the data to the remote destination device and before the data is stored at the remote destination device, output, to the source device, a local acknowledgment, wherein the local acknowledgment indicates to the source device that the data can be assumed to have been stored at the remote destination device, and wherein outputting the local acknowledgement after transmitting each of the data segments enables the data to be stored at the remote destination device even if the data center fails.

### Claim 2 (depends on 1)

The gateway device of claim 1, wherein the processing circuitry is further configured to:
receive, responsive to transmitting each of the data segments, a plurality of remote acknowledgements, each of the plurality of remote acknowledgements indicating that a different one of the plurality of data segments has been stored at a respective remote data center.

### Claim 3 (depends on 2)

The gateway device of claim 2, wherein the processing circuitry is further configured to:
store the data to memory included within the gateway device; and
responsive to receiving the plurality of remote acknowledgements, deallocate the data from the memory included within the gateway device.

### Claim 4 (depends on 3)

The gateway device of claim 3, wherein to store the data, the processing circuitry is further configured to:
store the data to a ring buffer data structure within high-speed memory included within the gateway device.

### Claim 5 (depends on 1)

The gateway device of claim 1, wherein the processing circuitry is further configured to:
detect a failure within the data center;
responsive to detecting the failure, store the data in stable storage accessible to the gateway device;
after storing the data in the stable storage, determine that the data center is operational; and
access the data stored in the stable storage.

### Claim 6 (depends on 1)

The gateway device of claim 1, wherein to generate the plurality of data segments, the processing circuitry is further configured to:
split the data into data segments, including a first data segment and a second data segment; and
generate an erasure coding parity segment.

### Claim 7 (depends on 6)

The gateway device of claim 6, wherein the plurality of remote data centers include a first remote data center, a second remote data center, and a third remote data center, and wherein to transmit each of the plurality of data segments, the processing circuitry is further configured to:
transmit the first data segment to the first remote data center;
transmit the second data segment to the second remote data center; and
transmit the erasure coding parity segment to the third remote data center.

### Claim 8 (depends on 7)

The gateway device of claim 7, wherein the processing circuitry is further configured to:
detect, prior to the data being stored at the remote destination device, failure of the first remote data center;
responsive to detecting the failure of the first remote data center, access the second data segment from the second remote data center, and access the parity segment from the third remote data center;
reconstruct the data using the second data segment and the parity segment; and
enable storage of the data at the remote destination device.

### Claim 9

A method comprising:
receiving, by a gateway device and from a source device within a data center, data to be stored at a remote destination device not located within the data center;
generating a plurality of data segments that enable the data to be reconstructed from a subset of the plurality of the data segments;
transmitting, by the gateway device, each of the plurality of data segments by outputting the plurality of data segments over one or more links of a network to a different one of a plurality of remote data centers;
and
based at least on outputting each of the plurality of data segments over the one or more links of the network to complete transmission of the data to the remote destination device and before the data is stored at the remote destination device, outputting, by the gateway device and to the source device, a local acknowledgment, wherein the local acknowledgment indicates to the source device that the data can be assumed to have been stored at the remote destination device, and wherein outputting the local acknowledgement after transmitting each of the data segments enables the data to be stored at the remote destination device even if the data center fails.

### Claim 10 (depends on 9)

The method of claim 9, further comprising:
receiving, by the gateway device and responsive to transmitting each of the data segments, a plurality of remote acknowledgements, each of the plurality of remote acknowledgements corresponding to a different one of the plurality of data segments being stored at a respective remote data center.

### Claim 11 (depends on 10)

The method of claim 10, further comprising:
storing, by the gateway device, the data to memory included within the gateway device; and
responsive to receiving the plurality of remote acknowledgements, deallocating the data from the memory included within the gateway device.

### Claim 12 (depends on 11)

The method of claim 11, wherein storing the data includes:
storing the data to a ring buffer data structure within high-speed memory included within the gateway device.

### Claim 13 (depends on 9)

The method of claim 9, further comprising:
detecting, by the gateway device, a failure within the data center;
responsive to detecting the failure, storing, by the gateway device, the data in stable storage accessible to the gateway device;
after storing the data in the stable storage, determining, by the gateway device, that the data center is operational; and
accessing, by the gateway device, the data stored in the stable storage.

### Claim 14 (depends on 9)

The method of claim 9, wherein generating the plurality of data segments includes:
splitting the data into data segments, including a first data segment and a second data segment; and
generating an erasure coding parity segment.

### Claim 15 (depends on 14)

The method of claim 14, wherein the plurality of remote data centers include a first remote data center, a second remote data center, and a third remote data center, and wherein transmitting each of the plurality of data segments includes:
transmitting the first data segment to the first remote data center;
transmitting the second data segment to the second remote data center; and
transmitting the erasure coding parity segment to the third remote data center.

### Claim 16 (depends on 15)

The method of claim 15, further comprising:
detecting, prior to the data being stored at the remote destination device, failure of the first remote data center;
responsive to detecting the failure of the first remote data center, accessing the second data segment from the second remote data center, and accessing the parity segment from the third remote data center;
reconstructing the data using the second data segment and the parity segment; and
enabling storage of the data at the remote destination device.

### Claim 17

A storage device for storing computer-readable instructions that, when executed, configure processing circuitry to:
receive, from a source device within a data center, data to be stored at a remote destination device not located within the data center;
generate a plurality of data segments that enable the data to be reconstructed from a subset of the plurality of the data segments;
transmit each of the plurality of data segments by outputting the plurality of data segments over one or more links of a network to a different one of a plurality of remote data centers;
and
based at least on outputting each of the plurality of data segments over the one or more links of the network to complete transmission of the data to the remote destination device and before the data is stored at the remote destination device, output, to the source device, a local acknowledgment, wherein the local acknowledgment indicates to the source device that the data can be assumed to have been stored at the remote destination device, and wherein outputting the local acknowledgement after transmitting each of the data segments enables the data to be stored at the remote destination device even if the data center fails.

### Claim 18 (depends on 17)

The storage device of claim 17, wherein the processing circuitry is further configured to:
receive, responsive to transmitting each of the data segments, a plurality of remote acknowledgements, each of the plurality of remote acknowledgements indicating that a different one of the plurality of data segments has been stored at a respective remote data center.

### Claim 19 (depends on 18)

The storage device of claim 18, wherein the processing circuitry is further configured to:
store the data to memory included within a gateway device; and
responsive to receiving the plurality of remote acknowledgements, deallocate the data from the memory included within the gateway device.

### Claim 20 (depends on 19)

The storage device of claim 19, wherein to store the data, the processing circuitry is further configured to:
store the data to a ring buffer data structure within high-speed memory included within the gateway device.
