Reducing the impact of network latency during a restore operation
AssigneeCohesity, Inc.
InventorsAbhijit Chakankar, Prashant Gothi, Anubhav Gupta, Manoj Singhal
Life of this patent
Estimating the term…
Abstract
Data chunks sent to a content destination are tracked. It is determined whether content of a portion of an object to be sent to the content destination matches one of the data chunks previously sent to the content destination. In response to the determination that the portion of the object to be sent to the content destination matches one of the data chunks previously sent to the content destination, a source reference to the matching previously sent data chunk where the content destination can locally obtain the content for the portion of the object is provided to the content destination.
Claims17
A method, comprising:
- receiving at a storage system from a content destination a request to restore one or more objects;
- dividing the one or more objects into a plurality of segments;
- assigning at least a first segment to a first node of the storage system and a second segment to a second node of the storage system, wherein the first segment is divided into one or more batches of data chunks that at least includes a first batch of data chunks and the second segment is divided into one or more batches of data chunks that at least includes a second batch of data chunks;
- providing in parallel, from the first node and the second node of the storage system to the content destination the first batch of data chunks associated with the one or more objects and the second batch of data chunks associated with the one or more objects;
- tracking by a sending node of the storage system that at least includes the first node and the second node a plurality of data chunks associated with the one or more objects provided to the content destination, wherein the sending node tracks the plurality of data chunks associated with the one or more objects provided to the content destination by:
- computing a corresponding chunk identifier for each data chunk of the plurality of data chunks included a corresponding batch of data chunks associated with the one or more objects,
- receiving an acknowledgement signal from the content destination after providing the corresponding batch of data chunks associated with the one or more objects, and
- in response to receiving the acknowledgement signal, updating a data structure stored by the storage system to include a corresponding entry that includes the corresponding chunk identifier for each data chunk of the plurality of data chunks included in the corresponding batch of data chunks associated with the one or more objects;
- determining whether a first data chunk included in a current batch of data chunks associated with an object that are to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination by determining whether a chunk identifier associated with the first data chunk included in the current batch of data chunks matches any of the chunk identifiers stored by the data structure;
- and
- in response to the determination that the first data chunk included in the current batch of data chunks to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination, providing to the content destination a source reference to the matching previously sent data chunk where the content destination is capable of locally obtaining content for the first data chunk in a storage volume at the content destination, wherein the source reference includes an object name of a content destination object storing the first data chunk and an object offset within the content destination object storing the first data chunk.
A computer program product embodied in a non-transitory computer readable medium and comprising computer instructions for:
- receiving at a storage system from a content destination a request to restore one or more objects;
- dividing the one or more objects into a plurality of segments;
- assigning at least a first segment to a first node of the storage system and a second segment to a second node of the storage system, wherein the first segment is divided into one or more batches of data chunks that at least includes a first batch of data chunks and the second segment is divided into one or more batches of data chunks that at least includes a second batch of data chunks;
- providing in parallel, from the first node and the second node of the storage system to the content destination the first batch of data chunks associated with the one or more objects and the second batch of data chunks associated with the one or more objects;
- tracking by a sending node of the storage system that at least includes the first node and the second node a plurality of data chunks associated with the one or more objects provided to the content destination, wherein the sending node tracks the plurality of data chunks associated with the one or more objects provided to the content destination by:
- computing a corresponding chunk identifier for each data chunk of the plurality of data chunks included a corresponding batch of data chunks associated with the one or more objects,
- receiving an acknowledgement signal from the content destination after providing the corresponding batch of data chunks associated with the one or more objects, and
- in response to receiving the acknowledgement signal, updating a data structure stored by the storage system to include a corresponding entry that includes the corresponding chunk identifier for each data chunk of the plurality of data chunks included in the corresponding batch of data chunks associated with the one or more objects;
- determining whether a first data chunk included in a current batch of data chunks associated with an object that is to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination by determining whether a chunk identifier associated with the first data chunk included in the current batch of data chunks matches any of the chunk identifiers stored by the data structure;
- and
- in response to the determination that the first data chunk included in the current batch of data chunks associated with the object that is to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination, providing to the content destination a source reference to the matching previously sent data chunk where the content destination is capable of locally obtaining content for the first data chunk in a storage volume at the content destination, wherein the source reference includes an object name of a content destination object storing the first data chunk and an object offset within the content destination object storing the first data chunk.
A storage system, comprising:
- a processor of a first node configured to:
- receive from a content destination a request to restore one or more objects;
- divide the one or more objects into a plurality of segments;
- assign at least a first segment to the first node and a second segment to a second node of the storage system, wherein the first segment is divided into one or more batches of data chunks that at least includes a first batch of data chunks and the second segment is divided into one or more batches of data chunks that at least includes a second batch of data chunks;
- and
- provide in parallel, the first batch of data chunks associated with the one or more objects as a second node of the storage system provides to the content destination the second batch of data chunks associated with the one or more objects,
- wherein the first node and the second node track a plurality of data chunks associated with the one or more objects provided to the content destination, wherein to track the plurality of data chunks associated with the one or more objects provided to the content destination, the first node and the second node are configured to:
- compute a corresponding chunk identifier for each data chunk of the plurality of data chunks included a corresponding batch of data chunks associated with the one or more objects,
- receive an acknowledgement signal from the content destination after providing the corresponding batch of data chunks associated with the one or more objects, and
- in response to receiving the acknowledgement signal, a data structure stored by the storage system to include a corresponding entry that includes the corresponding chunk identifier for each data chunk of the plurality of data chunks included in the corresponding batch of data chunks associated with one or more objects;
- wherein the first node is configured to determine whether a first data chunk included in a current batch of data chunks associated with an object that is to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination by determining whether a chunk identifier associated with the first data chunk included in the current batch of data chunks matches any of the chunk identifiers stored by the data structure, and
- wherein in response to the determination that the first data chunk included in the current batch of data chunks associated with the object that is to be sent to the content destination matches one of the plurality of data chunks previously sent to the content destination, the first node is configured to provide to the content destination a source reference to the matching previously sent data chunk where the content destination is capable of locally obtaining content for the first data chunk in a storage volume at the content destination, wherein the source reference includes an object name of a content destination object storing the first data chunk and an object offset within the content destination object storing the first data chunk;
- and
- a memory coupled to the processor and configured to provide the processor with instructions.
Dependencies are inferred from the claim text.