IP Library Granted Patent US 11,449,470
Granted Patent B2
US 11,449,470 · App. 15/994,686 · Granted Sep 20, 2022

Patching JSON documents that contain arrays undergoing concurrent modification

Inventors: Joshy Mannacherry Augustine (Swindon, GB); Simon Alexander Morgan (Swindon, GB); Howard Spencer Phillips (Swindon, GB)
Assignee: TIBCO Software Inc.
G06F16/1767G06F16/1787G06F16/93
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,449,470
App. No.
15/994,686
Granted
Sep 20, 2022
Kind
B2
Abstract

In various aspects, a method, system and computer program product provides for concurrent changes to data of a document or a file by a plurality of users at a plurality of user devices. The documents or file may be rendered in JavaScript™ Object Notation (JSON) format. The documents may be patched or changed by employing new functional operations for applying metadata for elements of the arrays associated with the document or file, and to merge changes from made among the various users. The disclosure provides for maintaining and producing new versions of the document or the file, the changes controlled so that data of the arrays are merged atomically and the updates do not fail permitting simultaneous changes to the document or file by multiple users.

Claims (40)

1. A computer-implemented method for concurrent changes to data of a document or a file by a plurality of users at a plurality of user devices, comprising:

tagging at a computer at least one document or at least one file to create metadata for elements of at least one array containing data associated with the at least one document or the at least one file, the tagging transforming the at least one array into an array of objects containing a plurality of key/value pairs for each tagged element, and the tagging specifying a rank and an ID for each tagged element to identify positions within the array;

changing at a computer values of data of the at least one array or changing order of objects in the at least one array;

diffing at a computer two tagged documents or files to produce at least one Changes List, the at least one Changes List specifying changes made to the at least one document or the at least one file; and

creating at a computer a new version of the at least one document of file by a merge operation that processes the Changes Lists to create a new version of the at least one document or the at least one file so that changes to the data are merged atomically so that synchronous charges by the plurality of users is applied asynchronously in order, thereby permitting the plurality of users to make changes to the document or the file concurrently in time, wherein the Changes List contains an ADD instruction that instructs the merge operation to add a value at a position identified by a given path and a specified rank position.

2. The computer-implemented method of claim 1 , wherein the format of the data or file is JavaScript Object Notation (JSON) format.

3. The computer-implemented method of claim 1 , wherein in the diffing step, the produced at least one Changes List includes specifying one or more of the following operations:

a REMOVE operation that instructs merge operation to delete data associated with the at least one document or the at least one file;

an ADD operation that instructs the merge operation to add a value at a position in the at least one array;

a REPLACE operation that instructs the merge operation to delete data at a specified location of the at least one array and to add a replacement data at the specified location; and

a MOVE operation to move data of the at least one array at a specified location to a new location of the at least one array.

4. The computer-implemented method of claim 3 , wherein the MOVE operation inserts a new rank position.

5. The computer-implemented method of claim 3 , wherein the REPLACE operation maintains a same rank position for the replacement data.

6. The computer-implemented method of claim 3 , wherein in the merge operation, in case of a conflict in data, the last change is used.

7. The computer-implemented method of claim 1 , wherein the at least one Changes List specifies an address for an array element comprising a path and a rank.

8. The computer-implemented method of claim 1 , wherein the plurality of user devices are in communication with a central processing unit across a network.

9. The computer-implemented method of claim 1 , wherein the at least one Changes List comprising only those changes made at a particular user device to a version of the at least one document or the at least one file are sent to a central processing unit for the merge operation and creating of the new version.

10. The computer-implemented method of claim 1 , wherein the at least one document or at least one file is a different version of the at least one document or the at least one file at least two of the plurality of user devices thereby permitting different changes to the document or the file by different users concurrently in time.

11. A computer program product for facilitating concurrent changes to data of a document or a file by a plurality of users at a plurality of user devices, the computer program product comprising computer instructions embodied on a computer readable medium not being a transitory propagating signal encoding the computer-readable instructions, the computer program product when read and executed by at least one computer performing the following steps:

tagging at the at least one computer at least one document or at least one file to create metadata for elements of at least one array containing data associated with the at least one document or the at least one file, the tagging transforming the at least one array into an array of objects containing a plurality of key/value pairs for each tagged element, and the tagging specifying a rank and an ID for each tagged element to identify positions within the array;

changing at the at least one computer, values of data of the at least one array or changing order of objects in the at least one array;

diffing at the at least one computer two tagged documents or files to produce at least one Changes List, the at least one Changes List specifying changes made to the at least one document or the at least one file; and

creating at the at least one computer a new version of the at least one document of file by a merge operation that processes the Changes Lists to create a new version of the at least one document or the at least one file so that changes to the data are merged atomically so that synchronous charges by the plurality of users is applied asynchronously in order, thereby permitting the plurality of users to make changes to the document or the file concurrently in time, wherein the Changes List contains an ADD instruction that instructs the merge operation to add a value at a position identified by a given path and rank position.

12. The computer program product of claim 11 , wherein a format of the data or file is JavaScript Object Notation (JSON) format.

13. The computer program product of claim 11 , wherein in the diffing step, the produced at least one Changes List includes specifying one or more of the following operations:

a REMOVE operation that instructs merge operation to delete data associated with the at least one document or the at least one file;

an ADD operation that instructs the merge operation to add a value at a position in the at least one array;

a REPLACE operation that instructs the merge operation to delete data at a specified location of the at least one array and to add a replacement data at the specified location; and

a MOVE operation to move data of the at least one array at a specified location to a new location of the at least one array.

14. The computer program product claim 13 , wherein the MOVE operation inserts a new rank position.

15. The computer program product of claim 13 , wherein the REPLACE operation maintains a same rank position for the replacement data.

16. The computer program product of claim 13 , wherein in the merge operation, in case of a conflict in data, the last change is used.

17. The computer program product of claim 11 , wherein the at least one Changes List specifies an address for an array element comprising a path and a rank.

18. The computer program product of claim 11 , wherein the plurality of user devices are in communication with a central processing unit across a network.

19. The computer program product of claim 11 , wherein the at least one Changes List comprising only those changes made at a particular user device to a version of the at least one document or the at least one file are sent to a central processing unit for the merge operation and creating of the new version.

20. The computer-implemented method of claim 11 , wherein the at least one document or at least one file is a different version of the at least one document or the at least one file at least two of the plurality of user devices thereby permitting different changes to the document or the file by different users concurrently in time.

21. The computer-implemented method of claim 1 , wherein the plurality of key/value pairs include a randomly generated identifier, a rank to identify a position in the at least one array, and an original value for an element of the at least one array.

22. The computer-implemented method of claim 11 , wherein the plurality of key/value pairs include a randomly generated identifier, a rank to identify a position in the at least one array, and an original value for an element of the at least one array.

23. The computer-implemented method of claim 1 , wherein the value is added to the end of a list whenever the specified rank position exceeds the number of elements of the list.

24. The computer-implemented method of claim 11 , wherein the value is added to the end of a list whenever the specified rank position exceeds the number of elements of the list.

Assignments (15)
PATENT SECURITY AGREEMENT Recorded Aug 15, 2025
From: CLOUD SOFTWARE GROUP, INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 072488/0172 →
SECURITY INTEREST Recorded May 24, 2024
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 067662/0568 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 50055 / FRAME 0641) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061575/0801 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →
SECURITY AGREEMENT Recorded Aug 14, 2019
From: TIBCO SOFTWARE INC
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 050055/0641 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jun 4, 2018
From: AUGUSTINE, JOSHY MANNACHERRY; MORGAN, SIMON ALEXANDER; PHILLIPS, HOWARD SPENCER
To: TIBCO SOFTWARE INC.
Reel/Frame 045979/0870 →
Continuity (2)
Provisional Application 62514662 · Jun 2, 2017
Related Publication 20180349405A1 · Dec 6, 2018