IP Library Granted Patent US 11,372,667
Granted Patent B2
US 11,372,667 · App. 16/773,463 · Granted Jun 28, 2022

Restoring the state of paused virtual machine environments with external attached volumes

Inventors: Srinivas Dhruvakumar (Vancouver, CA); Varun Gupta (Berkeley, CA); Kishore Sasidharan (San Ramon, CA)
Assignee: Salesforce, Inc.
G06F9/45558G06F11/1464G06F2009/45575G06F2009/45579G06F2201/84
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 11,372,667
App. No.
16/773,463
Granted
Jun 28, 2022
Kind
B2
Abstract

A system receives a pause request to pause a virtual environment that includes one or more virtual machines, each respective virtual machine having a mounting point connected to at least one corresponding block level storage volume. The system builds a model and a dependency graph of one or more components in the virtual environment. The system stores the model, the dependency graph and tags a snapshot of each corresponding block level storage volume. The system stops the one or more components in accordance with dependency logic of the dependency graph and stops the one or more virtual machines. The system builds the virtual environment and restarts the virtual machines in response to a resume request.

Claims (103)

1. A method comprising:

receiving a pause request from a system user to pause a virtual environment that includes one or more idling virtual machines, each respective virtual machine having a mounting point connected to at least one corresponding block level storage volume;

building a model and a dependency graph of components in the virtual environment in response to receiving the pause request;

storing the model, the dependency graph and a snapshot of each corresponding block level storage volume, which enables resuming the one or more idling virtual machines in the virtual environment;

stopping the components in accordance with dependency logic of the dependency graph; and

stopping the one or more idling virtual machines.

2. The method of claim 1 , wherein building the dependency graph comprises:

determining a first component in the virtual environment relies on at least one of functionality and data of a second component in the virtual environment;

generating at least a first portion of the dependency logic indicating a restart priority of the second component being restarted before the first component; and

generating at least a second portion of the dependency logic indicating a stop priority of the first component being stopped before the second component.

3. The method of claim 1 , wherein storing the snapshot of each corresponding block level storage volume comprises:

for each corresponding block level storage volume:

detaching the corresponding block level storage volume from a virtual machine mounting point;

capturing a snapshot of the detached corresponding block level storage volume to back-up a state and data of the block level storage volume;

tagging the captured snapshot;

deleting the detached corresponding block level storage volume; and

storing the tagged snapshot.

4. The method of claim 3 , wherein tagging the captured snapshot comprises:

for each snapshot of a corresponding block level storage volume:

generating an identification string to represent a snapshot tag, the identification string indicating an identifier of the corresponding block level storage volume, an identifier of the virtual environment, an identifier of a virtual machine to which the corresponding block level storage volume was connected, and a block device mapping; and

creating an association between the identification string and the captured snapshot.

5. The method of claim 1 further comprising:

receiving a resume request to restart the virtual environment;

building the virtual environment according to the model by instantiating each component with stored component data;

creating one or more block level storage volumes based on the stored snapshots;

restarting the stopped virtual machines associated with the virtual environment;

attaching the created block level storage volumes to mounting points of the restarted virtual machines; and

restarting the instantiated components according to the dependency graph.

6. The method of claim 5 , wherein creating one or more block level storage volumes based on the stored snapshots comprises:

identifying one or more stored snapshots based on one or more tag queries related to the virtual environment;

accessing one or more stored snapshots identified in search results of the one or more tag queries; and

creating the one or more block level storage volumes according to backed-up state and data represented in the one or more accessed stored snapshots.

7. The method of claim 5 , further comprising:

wherein the pause request and the resume request are sent by one or more users that have access to the virtual environment and a multi-tenant database system, the virtual environment being hosted by the multi-tenant database system.

8. A computer program product comprising computer-readable program code to be executed by one or more processors when retrieved from a non-transitory computer-readable medium, the program code including instructions to:

receiving a pause request from a system user to pause a virtual environment that includes one or more idling virtual machines, each respective virtual machine having a mounting point connected to at least one corresponding block level storage volume;

building a model and a dependency graph of components in the virtual environment in response to receiving the pause request;

storing the model, the dependency graph and a snapshot of each corresponding block level storage volume, which enables resuming the one or more idling virtual machines in the virtual environment;

stopping the components in accordance with dependency logic of the dependency graph; and

stopping the one or more idling virtual machines.

9. The computer program product of claim 8 , wherein building the dependency graph comprises:

determining a first component in the virtual environment relies on at least one of functionality and data of a second component in the virtual environment;

generating at least a first portion of the dependency logic indicating a restart priority of the second component being restarted before the first component; and

generating at least a second portion of the dependency logic indicating a stop priority of the first component being stopped before the second component.

10. The computer program product of claim 8 , wherein storing the snapshot of each corresponding block level storage volume comprises:

for each corresponding block level storage volume:

detaching the corresponding block level storage volume from a virtual machine mounting point;

capturing a snapshot of the detached corresponding block level storage volume to back-up a state and data of the block level storage volume;

tagging the captured snapshot;

deleting the detached corresponding block level storage volume; and

storing the tagged snapshot.

11. The computer program product of claim 10 , wherein tagging the captured snapshot comprises:

for each snapshot of a corresponding block level storage volume:

generating an identification string to represent a snapshot tag, the identification string indicating an identifier of the corresponding block level storage volume, an identifier of the virtual environment, an identifier of a virtual machine to which the corresponding block level storage volume was connected, and a block device mapping; and

creating an association between the identification string and the captured snapshot.

12. The computer program product of claim 8 further comprising:

receiving a resume request to restart the virtual environment;

building the virtual environment according to the model by instantiating each component with stored component data;

creating one or more block level storage volumes based on the stored snapshots;

restarting the stopped virtual machines associated with the virtual environment;

attaching the created block level storage volumes to mounting points of the restarted virtual machines; and

restarting the instantiated components according to the dependency graph.

13. The computer program product of claim 12 , wherein creating one or more block level storage volumes based on the stored snapshots comprises:

identifying one or more stored snapshots based on one or more tag queries related to the virtual environment;

accessing one or more stored snapshots identified in search results of the one or more tag queries; and

creating the one or more block level storage volumes according to backed-up state and data represented in the one or more accessed stored snapshots.

14. The computer program product of claim 12 , further comprising:

wherein the pause request and the resume request are sent by one or more users that have access to the virtual environment and a multi-tenant database system, the virtual environment being hosted by the multi-tenant database system.

15. A system comprising:

one or more processors; and

a non-transitory computer readable medium storing a plurality of instructions, which when executed, cause the one or more processors to:

receiving a pause request from a system user to pause a virtual environment that includes one or more idling virtual machines, each respective virtual machine having a mounting point connected to at least one corresponding block level storage volume;

building a model and a dependency graph of components in the virtual environment in response to receiving the pause request;

storing the model, the dependency graph and a snapshot of each corresponding block level storage volume, which enables resuming the one or more idling virtual machines in the virtual environment;

stopping the components in accordance with dependency logic of the dependency graph; and

stopping the one or more idling virtual machines.

16. The system of claim 15 , wherein building the dependency graph comprises:

determining a first component in the virtual environment relies on at least one of functionality and data of a second component in the virtual environment;

generating at least a first portion of the dependency logic indicating a restart priority of the second component being restarted before the first component; and

generating at least a second portion of the dependency logic indicating a stop priority of the first component being stopped before the second component.

17. The system of claim 15 , wherein storing the snapshot of each corresponding block level storage volume comprises:

for each corresponding block level storage volume:

detaching the corresponding block level storage volume from a virtual machine mounting point;

capturing a snapshot of the detached block level storage volume to back-up a state and data of the block level storage volume;

tagging the captured snapshot;

deleting the detached block level storage volume; and

storing the tagged snapshot.

18. The system of claim 17 , wherein tagging the captured snapshot comprises:

for each snapshot of a corresponding block level storage volume:

generating an identification string to represent a snapshot tag, the identification string indicating an identifier of the corresponding block level storage volume, an identifier of the virtual environment, an identifier of a virtual machine to which the corresponding block level storage volume was connected, and a block device mapping; and

creating an association between the identification string and the captured snapshot.

19. The system of claim 15 , further comprising:

receiving a resume request to restart the virtual environment;

building the virtual environment according to the model by instantiating each component with stored component data;

creating one or more block level storage volumes based on the stored snapshots;

restarting the stopped virtual machines associated with the virtual environment;

attaching the created block level storage volumes to mounting points of the restarted virtual machines; and

restarting the instantiated components according to the dependency graph.

20. The system of claim 19 , wherein creating one or more block level storage volumes

based on the stored snapshots comprises:

identifying one or more stored snapshots based on one or more tag queries related to the virtual environment;

accessing one or more stored snapshots identified in search results of the one or more tag queries; and

creating the one or more block level storage volumes according to backed-up state and data represented in the one or more accessed stored snapshots.

Assignments (2)
CHANGE OF NAME Recorded Dec 18, 2024
From: SALESFORCE.COM, INC.
To: SALESFORCE, INC.
Reel/Frame 069717/0475 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 27, 2020
From: DHRUVAKUMAR, SRINIVAS; GUPTA, VARUN; SASIDHARAN, KISHORE
To: SALESFORCE.COM, INC.
Reel/Frame 051633/0834 →
Continuity (1)
Related Publication 20210232420A1 · Jul 29, 2021
Cited By (1)
US 12,235,982