IP Library Granted Patent US 11,347,933
Granted Patent B1
US 11,347,933 · App. 17/157,885 · Granted May 31, 2022

Distributed collaborative storage with operational transformation

Inventor: Brian Lewis Cairns (Boulder, CO)
Assignee: Google LLC
G06F40/151G06F16/2308G06F16/93G06F40/123G06F40/166G06F40/197
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,347,933
App. No.
17/157,885
Granted
May 31, 2022
Kind
B1
Abstract

Systems and methods are disclosed herein for performing operational transforms on a document. A first operation is received at a first server that includes a first object of an electronic document. In response to receiving the first operation, the first server prohibits a second server from having write access to the first object. The first server applies the first operation to the first object to obtain a transformed first object. In response to obtaining the transformed first object, the first server allows the second server to have write access to the first object. These steps are repeated for a second object associated with a second portion of the electronic document that is different from the first portion of the electronic document.

Claims (45)

1. A computer-implemented method comprising:

receiving, at a user device of a first user, a save request including a first operation and a second operation of the first user for an electronic document comprising a plurality of local objects stored at the user device;

identifying, by the user device, a first local object of the plurality of local objects that has been impacted by the first operation and a second local object of the plurality of local objects that has been impacted by the second operation, wherein the first local object is associated with a first object identifier and the second local object is associated with a second object identifier;

sending, by the user device, the first operation tagged with the first object identifier and a first version identifier of the first local object and the second operation tagged with the second object identifier and a second version identifier of the second local object to a server, wherein the first version identifier and the second version identifier indicate whether the first operation and the second operation are to be added to object histories of corresponding server-based objects stored at a network-based file storage system;

receiving, from the server, a third operation and a fourth operation of a second user for the electronic document, wherein the third operation is tagged with a third object identifier and a third version identifier of a first server-based object and the fourth operation is tagged with a fourth object identifier and a fourth version identifier of a second server-based object;

determining, based on a tag of the third operation and a tag of the fourth operations, that the first server-based object corresponds to the first local object and the second server-based object corresponds to the second local object, wherein the third version identifier is higher than the first version identifier and the fourth version identifier is higher than the second version identifier; and

applying the third operation to the first local object, and the fourth operation to the second local object.

2. The method of claim 1 , wherein the first local object is associated with a first portion of a plurality of portions of the electronic document, and the second local object is associated with a second portion of the plurality of portions of the electronic document.

3. The method of claim 1 , wherein the save request is initiated in response to an attempt of the first user to commit edits to the electronic document stored at the network-based file storage system.

4. The method of claim 1 , wherein each of the first version identifier and the second version identifier is a client-based version identifier, each of the third version identifier and the third object identifier is a server-based version identifier.

5. The method of claim 4 , wherein:

the first version identifier is updated when the first operation is applied to the first object, and is subsequently updated when the third operation is applied to the first object; and

the second version identifier is updated when the second operation is applied to the second object, and is subsequently updated when the fourth operation is applied to the second object.

6. The method of claim 4 , wherein each server-based object has an object operation history including a complete list of operations applied to a corresponding server-based object.

7. The method of claim 6 , wherein client-based version identifiers and server-based version identifier are used to define a sequence of updates to be committed to object operation histories of respective server-based objects.

8. A system for a user device of a first user, the system comprising:

a memory; and

a processor, coupled to the memory, to perform operations comprising:

receiving, at the user device, a save request including a first operation and a second operation of the first user for an electronic document comprising a plurality of local objects stored at the user device;

identifying, by the user device, a first local object of the plurality of local objects that has been impacted by the first operation and a second local object of the plurality of local objects that has been impacted by the second operation, wherein the first local object is associated with a first object identifier and the second local object is associated with a second object identifier;

sending, by the user device, the first operation tagged with the first object identifier and a first version identifier of the first local object and the second operation tagged with the second object identifier and a second version identifier of the second local object to a server, wherein the first version identifier and the second version identifier indicate whether the first operation and the second operation are to be added to object histories of corresponding server-based objects stored at a network-based file storage system;

receiving, from the server, a third operation and a fourth operation of a second user for the electronic document, wherein the third operation is tagged with a third object identifier and a third version identifier of a first server-based object and the fourth operation is tagged with a fourth object identifier and a fourth version identifier of a second server-based object;

determining, based on a tag of the third operation and a tag of the fourth operations, that the first server-based object corresponds to the first local object and the second server-based object corresponds to the second local object, wherein the third version identifier is higher than the first version identifier and the fourth version identifier is higher than the second version identifier; and

applying the third operation to the first local object, and the fourth operation to the second local object.

9. The system of claim 8 , wherein the first local object is associated with a first portion of a plurality of portions of the electronic document, and the second local object is associated with a second portion of the plurality of portions of the electronic document.

10. The system of claim 8 , wherein each of the first version identifier and the second version identifier is a client-based version identifier, each of the third version identifier and the third object identifier is a server-based version identifier.

11. The system of claim 10 , wherein:

the first version identifier is updated when the first operation is applied to the first object, and is subsequently updated when the third operation is applied to the first object; and

the second version identifier is updated when the second operation is applied to the second object, and is subsequently updated when the fourth operation is applied to the second object.

12. The system of claim 10 , wherein each server-based object has an object operation history including a complete list of operations applied to a corresponding server-based object.

13. The system of claim 12 , wherein client-based version identifiers and server-based version identifier are used to define a sequence of updates to be committed to object operation histories of respective server-based objects.

14. A non-transitory computer-readable medium comprising instructions, which when executed by a processor cause the processor to perform operations comprising:

receiving, at a user device of a first user, a save request including a first operation and a second operation of the first user for an electronic document comprising a plurality of local objects stored at the user device;

identifying, by the user device, a first local object of the plurality of local objects that has been impacted by the first operation and a second local object of the plurality of local objects that has been impacted by the second operation, wherein the first local object is associated with a first object identifier and the second local object is associated with a second object identifier;

sending, by the user device, the first operation tagged with the first object identifier and a first version identifier of the first local object and the second operation tagged with the second object identifier and a second version identifier of the second local object to a server, wherein the first version identifier and the second version identifier indicate whether the first operation and the second operation are to be added to object histories of corresponding server-based objects stored at a network-based file storage system;

receiving, from the server, a third operation and a fourth operation of a second user for the electronic document, wherein the third operation is tagged with a third object identifier and a third version identifier of a first server-based object and the fourth operation is tagged with a fourth object identifier and a fourth version identifier of a second server-based object;

determining, based on a tag of the third operation and a tag of the fourth operations, that the first server-based object corresponds to the first local object and the second server-based object corresponds to the second local object, wherein the third version identifier is higher than the first version identifier and the fourth version identifier is higher than the second version identifier; and

applying the third operation to the first local object, and the fourth operation to the second local object.

15. The non-transitory computer-readable medium of claim 14 , wherein the first local object is associated with a first portion of a plurality of portions of the electronic document, and the second local object is associated with a second portion of the plurality of portions of the electronic document.

16. The non-transitory computer-readable medium of claim 14 , wherein each of the first version identifier and the second version identifier is a client-based version identifier, each of the third version identifier and the third object identifier is a server-based version identifier.

17. The non-transitory computer-readable medium of claim 16 , wherein:

the first version identifier is updated when the first operation is applied to the first object, and is subsequently updated when the third operation is applied to the first object; and

the second version identifier is updated when the second operation is applied to the second object, and is subsequently updated when the fourth operation is applied to the second object.

18. The non-transitory computer-readable medium of claim 16 , wherein each server-based object has an object operation history including a complete list of operations applied to a corresponding server-based object.

19. The non-transitory computer-readable medium of claim 18 , wherein client-based version identifiers and server-based version identifier are used to define a sequence of updates to be committed to object operation histories of respective server-based objects.

Assignments (2)
CHANGE OF NAME Recorded May 11, 2021
From: GOOGLE INC.
To: GOOGLE LLC
Reel/Frame 056208/0409 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 5, 2021
From: CAIRNS, BRIAN LEWIS
To: GOOGLE INC.
Reel/Frame 056149/0689 →
Continuity (1)
Continuation 14984432 · Dec 30, 2015