IP Library Granted Patent US 9,705,730
Granted Patent B1
US 9,705,730 · App. 13/889,164 · Granted Jul 11, 2017

Cloud storage using Merkle trees

Inventors: Robert Petri (Santa Clara, CA); Nitin Parab (Palo Alto, CA)
Assignee: Axcient, Inc.
H04L29/0854
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,705,730
App. No.
13/889,164
Granted
Jul 11, 2017
Kind
B1
Abstract

Efficient cloud storage systems, methods, and media are provided herein. Exemplary methods may include locating a Merkle tree of a stored object on a deduplicating block store, comparing an object at a source location to the Merkle tree of the stored object, determining changed blocks for the object at a source location, and transmitting a message across a network to the deduplicating block store, the message including the change blocks and Merkle nodes that correspond to the change blocks.

Claims (46)

1. A method, comprising:

locating a Merkle tree of a stored object on a deduplicating block store;

comparing an object at a source location to the Merkle tree of the stored object;

determining change blocks for the object at the source location;

transmitting a message across a network to the deduplicating block store, the message including the change blocks and Merkle nodes that correspond to the change blocks; and

synchronizing the transmitted Merkle nodes for the change blocks with Merkle nodes of the Merkle tree of the stored object, wherein synchronizing comprises copying the Merkle nodes of the Merkle tree in bottom-to-top order to ensure that when a check of any Merkle node is performed that all child Merkle nodes associated with the Merkle node are present, further wherein upon encountering a missing Merkle node during the step of copying, pushing the missing Merkle node onto a stack.

2. The method according to claim 1 , further comprising:

updating the deduplicating block store with the change blocks based upon the synchronized Merkle tree nodes.

3. The method according to claim 1 , further comprising:

generating the Merkle tree, the Merkle tree comprising Merkle nodes that represent blocks stored in the deduplicating block store; and

exposing the Merkle tree to a client device through an application programming interface.

4. The method according to claim 1 , further comprising evaluating the Merkle tree in top-to-bottom order to determine missing Merkle nodes in the Merkle tree.

5. The method according to claim 1 , further comprising:

popping the Merkle node from the stack to the deduplicating block store; and

placing a missing data block associated with the missing Merkle node in the deduplicating block store according to the Merkle tree.

6. The method according to claim 1 , wherein the stack resides on the deduplicating block store.

7. The method according to claim 1 , wherein the stack resides on a client device.

8. The method according to claim 1 , further comprising establishing a progress indicator that represents Merkle nodes currently in the stack.

9. The method according to claim 2 , further comprising generating a new identifier for each of the change blocks.

10. A system, comprising:

a processor; and

logic encoded in one or more tangible, non-transitory media for execution by the processor and when executed operable to perform operations comprising:

locating a Merkle tree of a stored object on a deduplicating block store;

comparing an object at a source location to the Merkle tree of the stored object;

determining change blocks for the object at a source location;

transmitting a message across a network to the deduplicating block store, the message including the change blocks and Merkle nodes that correspond to the change blocks; and

synchronizing the transmitted Merkle nodes for the change blocks with Merkle nodes of the Merkle tree of the stored object, wherein synchronizing comprises copying the Merkle nodes of the Merkle tree in bottom-to-top order to ensure that when a check of any Merkle node is performed that all child Merkle nodes associated with the Merkle node are present, further wherein upon encountering a missing Merkle node during the step of copying, pushing the missing Merkle node onto a stack.

11. The system according to claim 10 , further comprising:

updating the deduplicating block store with the change blocks based upon the synchronized Merkle tree nodes.

12. The system according to claim 10 , wherein the processor further executes the logic to perform operations of:

generating the Merkle tree, the Merkle tree comprising Merkle nodes that represent blocks stored in the deduplicating block store; and

exposing the Merkle tree to a client device.

13. The system according to claim 10 , wherein the processor further executes the logic to perform an operation of evaluating the Merkle tree in top-to-bottom order to determine missing Merkle nodes in the Merkle tree.

14. The system according to claim 10 , wherein the processor further executes the logic to perform operations of:

popping the Merkle node from the stack to the deduplicating block store; and

placing a missing data block associated with the missing Merkle node in the deduplicating block store according to the Merkle tree.

15. The system according to claim 10 , wherein the stack resides on any of the deduplicating block store and a client device.

16. The system according to claim 10 , wherein the processor further executes the logic to perform an operation of establishing a progress indicator that represents Merkle nodes currently in the stack.

17. The system according to claim 11 , wherein the processor further executes the logic to perform an operation of generating a new identifier for each of the change blocks of the synchronized Merkle tree nodes.

18. A method, comprising:

generating a first Merkle tree for an object, the first Merkle tree comprising Merkle nodes that represent blocks of the object;

examining an input data stream;

generating a second Merkle tree for the object using the input data stream;

comparing the first Merkle tree and the second Merkle tree to one another to determine changed Merkle nodes that do not correspond between the first Merkle tree and the second Merkle tree;

transmitting data blocks that correspond to the changed Merkle nodes from a source location to a deduplicating block store; and

synchronizing the transmitted Merkle nodes for the change blocks with Merkle nodes of the Merkle tree of the stored object, wherein synchronizing comprises copying the Merkle nodes of the Merkle tree in bottom-to-top order to ensure that when a check of any Merkle node is performed that all child Merkle nodes associated with the Merkle node are present, further wherein upon encountering a missing Merkle node during the step of copying, pushing the missing Merkle node onto a stack.

Assignments (13)
INTELLECTUAL PROPERTY SECURITY AGREEMENT Recorded Feb 19, 2025
From: SKYKICK, LLC; EFOLDER, INC.
To: BANK OF AMERICA, N.A.
Reel/Frame 070268/0489 →
RELEASE OF SECURITY INTEREST Recorded Sep 24, 2024
From: U.S. BANK NATIONAL ASSOCIATION FORMERLY MUFG UNION BANK, N.A.
To: EFOLDER, INC.
Reel/Frame 068680/0802 →
RELEASE OF SECURITY INTEREST Recorded Nov 2, 2022
From: WELLS FARGO BANK, NATIONAL ASSOCIATION
To: EFOLDER, INC.
Reel/Frame 061634/0623 →
SECURITY INTEREST Recorded Oct 27, 2022
From: EFOLDER, INC.
To: MUFG UNION BANK, N.A.
Reel/Frame 061559/0703 →
SECURITY INTEREST Recorded Jan 8, 2018
From: EFOLDER, INC.
To: WELLS FARGO BANK, NATIONAL ASSOCIATION, AS AGENT
Reel/Frame 044563/0633 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 12, 2017
From: AXCIENT HOLDINGS, LLC
To: EFOLDER, INC.
Reel/Frame 044370/0412 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 12, 2017
From: AXCIENT, INC.
To: AXCI (AN ABC) LLC
Reel/Frame 044367/0507 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 12, 2017
From: AXCI (AN ABC) LLC
To: AXCIENT HOLDINGS, LLC
Reel/Frame 044368/0556 →
RELEASE OF SECURITY INTEREST Recorded Oct 11, 2017
From: STRUCTURED ALPHA LP
To: AXCIENT, INC.
Reel/Frame 043840/0227 →
RELEASE OF SECURITY INTEREST Recorded Jul 26, 2017
From: SILVER LAKE WATERMAN FUND, L.P.
To: AXCIENT, INC.
Reel/Frame 043106/0389 →
SECURITY INTEREST Recorded Jun 2, 2017
From: AXCIENT, INC.
To: SILVER LAKE WATERMAN FUND, L.P.
Reel/Frame 042577/0901 →
SECURITY INTEREST Recorded May 31, 2017
From: AXCIENT, INC.
To: STRUCTURED ALPHA LP
Reel/Frame 042542/0364 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 13, 2013
From: PETRI, ROBERT; PARAB, NITIN
To: AXCIENT, INC.
Reel/Frame 030608/0145 →