IP Library Granted Patent US 9,817,835
Granted Patent B2
US 9,817,835 · App. 14/202,836 · Granted Nov 14, 2017

Efficient data synchronization for storage containers

Inventors: Raj Ashok Sudarsanam (Fremont, CA); Edward K. Lee (Walnut Creek, CA); Mark G. Gritter (Eagan, MN); Pratap V. Singh (Mountain View, CA)
Assignee: Tintri Inc.
G06F17/30088G06F9/45558G06F17/30174G06F2009/4557
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,817,835
App. No.
14/202,836
Granted
Nov 14, 2017
Kind
B2
Abstract

Performing data synchronization is disclosed, including: receiving an indication to synchronize a container to a snapshot, wherein the container has a first data state and an identity, wherein the snapshot corresponds to a second data state; causing the container to have the second data state corresponding to the snapshot; and maintaining the identity of the container.

Claims (93)

1. A system, comprising:

a processor configured to:

receive an indication to synchronize a current data state of a first container to match a data state that is represented by a snapshot of a second container without duplicating at least a subset of physical data associated with the snapshot of the second container;

wherein the snapshot comprises a data structure that stores a plurality of mappings of logical locations to physical locations at which snapshot data is stored at a physical storage device;

wherein the first container has a first container type, wherein the first container type is one or more of the following: a virtual machine, a virtual disk associated with the virtual machine, and a file associated with the virtual machine;

wherein the first container has identity information that is determined based at least in part on the first container type;

wherein the identity information associated with the first container comprises a first value prior to a synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container;

perform the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container, including to:

provide a new current data structure associated with the first container, wherein the new current data structure is initially empty of any mappings of logical locations to physical locations, wherein the new current data structure is configured to store one or more mappings of logical locations to physical locations of data that represents the current data state of the first container;

store a pointer from the new current data structure associated with the first container to the snapshot of the second container;

determine that the identity information of the first container has been at least partially overwritten by identity information associated with the second container associated with the snapshot; and

restore the identity information of the first container to the first value that is associated with the identity information of the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

receive a read request for a requested mapping of a logical location to a physical location from the first container;

in response to the read request, search the new current data structure associated with the first container for the requested mapping; and

in the event that the requested mapping is not found in the new current data structure associated with the first container:

use the pointer from the new current data structure associated with the first container to the snapshot of the second container to access the snapshot of the second container; and

search for the requested mapping at the snapshot of the second container; and

a memory coupled to the processor and configured to store the snapshot of the second container.

2. The system of claim 1 , wherein providing the new current data structure associated with the first container comprises:

emptying an existing current data structure associated with the first container by removing existing one or more mappings of logical locations to corresponding physical locations of data that were previously written to the first container from the existing current data structure.

3. The system of claim 1 , wherein to restore the identity information of the first container to the first value that is associated with the identity information of the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container includes to modify data or metadata or both data and metadata associated with the first container.

4. The system of claim 1 , wherein the second container is different from the first container.

5. The system of claim 1 , wherein the first container and the second container are the same container, wherein the data state corresponding to the snapshot of the second container comprises an earlier-in-time data state than the current data state associated with the first container.

6. The system of claim 1 , wherein to perform the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container does not preclude preservation of a previously generated snapshot associated with the first container.

7. The system of claim 1 , wherein the processor is further configured to:

receive an indication to delete the snapshot of the second container;

remove a data corresponding to the snapshot from a user history data structure associated with the second container; and

maintain the snapshot of the second container until the snapshot is no longer needed.

8. The system of claim 1 , wherein the processor is further configured to:

store, in a user history data structure associated with the first container, data associated with a first snapshot of the first container, wherein the first snapshot of the first container is generated prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

generate a second snapshot of the first container based at least in part on the new current data structure associated with the first container; and

store, in the user history data structure associated with the first container, data associated with the second snapshot of the first container.

9. The system of claim 1 , wherein the first value of the identity information associated with the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container comprises one or more of the following: an inode number, a file handle, a disk signature, a universal unique identifier (UUID), and a security identifier.

10. A method, comprising:

receiving an indication to synchronize a current data state of a first container to match a data state that is represented by a snapshot of a second container without duplicating at least a subset of physical data associated with the snapshot of the second container;

wherein the snapshot comprises a data structure that stores a plurality of mappings of logical locations to physical locations at which snapshot data is stored at a physical storage device;

wherein the first container has a first container type, wherein the first container type is one or more of the following: a virtual machine, a virtual disk associated with the virtual machine, and a file associated with the virtual machine;

wherein the first container has identity information that is determined based at least in part on the first container type;

wherein the identity information associated with the first container comprises a first value prior to a synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container;

performing the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container based at least in part by:

providing a new current data structure associated with the first container, wherein the new current data structure is initially empty of any mappings of logical locations to physical locations, wherein the new current data structure is configured to store one or more mappings of logical locations to physical locations of data that represents the current data state of the first container;

storing a pointer from the new current data structure associated with the first container to the snapshot of the second container;

determining that the identity information of the first container has been at least partially overwritten by identity information associated with the second container associated with the snapshot; and

restoring the identity information of the first container to the first value that is associated with the identity information of the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

receiving a read request for a requested mapping of a logical location to a physical location from the first container;

in response to the read request, searching the new current data structure associated with the first container for the requested mapping; and

in the event that the requested mapping is not found in the new current data structure associated with the first container:

using the pointer from the new current data structure associated with the first container to the snapshot of the second container to access the snapshot of the second container; and

searching for the requested mapping at the snapshot of the second container.

11. The method of claim 10 , wherein restoring the identity information of the first container to the first value that is associated with the identity information of the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container includes modifying data or metadata or both data and metadata associated with the first container.

12. The method of claim 10 , wherein the second container is different from the first container.

13. The method of claim 10 , wherein the first container and the second container are the same container, wherein the data state corresponding to the snapshot of the second container comprises an earlier-in-time data state than the current data state associated with the first container.

14. The method of claim 10 , wherein performing the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container does not preclude preservation of a previously generated snapshot associated with the first container.

15. The method of claim 10 , further comprising:

receiving an indication to delete the snapshot of the second container;

removing a data corresponding to the snapshot from a user history data structure associated with the second container; and

maintaining the snapshot of the second container until the snapshot is no longer needed.

16. The method of claim 10 , wherein providing the new current data structure associated with the first container comprises:

emptying an existing current data structure associated with the first container by removing existing one or more mappings of logical locations to corresponding physical locations of data that were previously written to the first container from the existing current data structure.

17. The method of claim 10 , further comprising:

storing, in a user history data structure associated with the first container, data associated with a first snapshot of the first container, wherein the first snapshot of the first container is generated prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

generating a second snapshot of the first container based at least in part on the new current data structure associated with the first container; and

storing, in the user history data structure associated with the first container, data associated with the second snapshot of the first container.

18. The method of claim 10 , wherein the first value of the identity information associated with the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container comprises one or more of the following: an inode number, a file handle, a disk signature, a universal unique identifier (UUID), and a security identifier.

19. A computer program product, the computer program product being embodied in a non-transitory computer readable storage medium and comprising instructions for:

receiving an indication to synchronize a current data state of a first container to match a data state that is represented by a snapshot of a second container without duplicating at least a subset of physical data associated with the snapshot of the second container;

wherein the snapshot comprises a data structure that stores a plurality of mappings of logical locations to physical locations at which snapshot data is stored at a physical storage device,

wherein the first container has a first container type, wherein the first container type is one or more of the following: a virtual machine, a virtual disk associated with the virtual machine, and a file associated with the virtual machine;

wherein the first container has identity information that is determined based at least in part on the first container type;

wherein the identity information associated with the first container comprises a first value prior to a synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container;

performing the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container based at least in part by:

providing a new current data structure associated with the first container, wherein the new current data structure is initially empty of any mappings of logical locations to physical locations, wherein the new current data structure is configured to store one or more mappings of logical locations to physical locations of data that represents the current data state of the first container;

storing a pointer from the new current data structure associated with the first container to the snapshot of the second container;

determining that the identity information of the first container has been at least partially overwritten by identity information associated with the second container associated with the snapshot; and

restoring the identity information of the first container to the first value that is associated with the identity information of the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

receiving a read request for a requested mapping of a logical location to a physical location from the first container;

in response to the read request, searching the new current data structure associated with the first container for the requested mapping; and

in the event that the requested mapping is not found in the new current data structure associated with the first container:

using the pointer from the new current data structure associated with the first container to the snapshot of the second container to access the snapshot of the second container; and

searching for the requested mapping at the snapshot of the second container.

20. The computer program product of claim 19 , wherein providing the new current data structure associated with the first container comprises:

emptying an existing current data structure associated with the first container by removing existing one or more mappings of logical locations to corresponding physical locations of data that were previously written to the first container from the existing current data structure.

21. The computer program product of claim 19 , further comprising:

storing, in a user history data structure associated with the first container, data associated with a first snapshot of the first container, wherein the first snapshot of the first container is generated prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container; and

subsequent to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container:

generating a second snapshot of the first container based at least in part on the new current data structure associated with the first container; and

storing, in the user history data structure associated with the first container, data associated with the second snapshot of the first container.

22. The computer program product of claim 19 , wherein the first value of the identity information associated with the first container prior to the synchronization of the current data state of the first container to match the data state that is represented by the snapshot of the second container comprises one or more of the following: an inode number, a file handle, a disk signature, a universal unique identifier (UUID), and a security identifier.

Assignments (6)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 31, 2019
From: TINTRI INC.
To: TI ACQUISITION CORP.
Reel/Frame 048201/0666 →
CHANGE OF NAME Recorded Jan 31, 2019
From: TI ACQUISITION CORP.
To: TINTRI BY DDN, INC.
Reel/Frame 048211/0685 →
SECURITY INTEREST Recorded Oct 13, 2018
From: TI ACQUISITION CORP.
To: TRIPLEPOINT CAPITAL LLC
Reel/Frame 047229/0463 →
SECURITY INTEREST Recorded Mar 5, 2015
From: TINTRI, INC.
To: TRIPLEPOINT CAPITAL LLC
Reel/Frame 035097/0801 →
SECURITY INTEREST Recorded Dec 29, 2014
From: TINTRI, INC.
To: SILICON VALLEY BANK
Reel/Frame 034590/0653 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 28, 2014
From: SUDARSANAM, RAJ ASHOK; LEE, EDWARD K.; GRITTER, MARK G.; SINGH, PRATAP V.
To: TINTRI INC.
Reel/Frame 032981/0103 →
Continuity (2)
Provisional Application 61777342 · Mar 12, 2013
Related Publication 20140279909A1 · Sep 18, 2014