US 11,989,170 B2
Version control and conflict resolution in a datastore using a hierarchical log
Steven Ganz, Emerald Hills, CA (US)
Assigned to Teamifier, Inc., Emerald Hills, CA (US)
Filed by Steven Ganz, Emerald Hills, CA (US)
Filed on Sep. 24, 2021, as Appl. No. 17/448,748.
Application 17/448,748 is a continuation of application No. 15/361,343, filed on Nov. 25, 2016, granted, now 11,222,074, issued on Jan. 11, 2022.
Claims priority of provisional application 62/260,072, filed on Nov. 25, 2015.
Prior Publication US 2022/0058221 A1, Feb. 24, 2022
Int. Cl. G06F 16/23 (2019.01); H04L 65/403 (2022.01); H04L 67/10 (2022.01); G06F 3/04845 (2022.01)
CPC G06F 16/2358 (2019.01) [H04L 65/403 (2013.01); H04L 67/10 (2013.01); G06F 3/04845 (2013.01)] 66 Claims
OG exemplary drawing
 
1. An apparatus comprising:
a processor-implemented engine; and
memory coupled to the processor-implemented engine,
either:
A. being distinct from at least one client, networking hardware supporting the processor-implemented engine in acting as a server communicating with one or more computing devices comprising the at least one client; or
B. sharing at least a respective sub-memory with each of the at least one client, the memory comprising the respective sub-memory,
wherein the processor-implemented engine is directed according to instructions stored in the memory to maintain a plurality of datastore records in a datastore, each datastore record of the plurality of datastore records comprising at least one sector, each datastore record of one or more datastore records of the plurality of datastore records either being a respective text file within a respective file system or being of a respective form of record within a respective database,
the datastore comprising:
A) a plurality of current records comprising a respective current record storing content for each datastore record of the plurality of datastore records;
B) a log directed acyclic graph (DAG), the log DAG comprising a plurality of change records and a plurality of log associations, each change record of the plurality of change records indicating a respective change to the datastore affecting a respective at least one affected sector of a respective at least one affected datastore record of the plurality of datastore records, each log association of the plurality of log associations relating a child change record and a parent change record of the plurality of change records, at least one overlapping sector of the respective at least one affected sector for the child change record for that log association also being of the respective at least one affected sector for the parent change record for that log association, wherein for each change record of the plurality of change records and for each sector of the respective at least one affected sector for that change record:
a. a respective at most one child change record of the plurality of change records and indicating a respective at most one child change affecting that sector is related in the log DAG as a child to that change record; and
b. a respective at most one parent change record of the plurality of change records and indicating a respective at most one parent change affecting that sector is related in the log DAG as a parent to that change record; and
C) a current change record mapping relating each sector of each datastore record of the plurality of datastore records to a respective current change record of the plurality of change records,
the respective current record for a given database record storing content reflecting the respective change to the datastore for each ancestor in the log DAG of the respective current change record for each sector of the given database record,
maintaining the plurality of datastore records by, for each change of one or more changes, each change proposed under a respective view of the one or more views, upon direction from a respective client of the at least one client under that view, incorporating that change into the datastore by:
a) applying influence of that change upon the respective current record for each affected datastore record of the respective at least one affected datastore record for that change;
b) creating a respective change record within the plurality of change records, that change being the respective change for the respective change record for that change, the respective change record for that change made, without any explicit branching or merging directive from the respective client, to descend in the log DAG, for each affected sector of the respective at least one affected sector of the respective at least one affected datastore record for that change, from the respective current change record indicated by the current change record mapping, the respective change record for that change affecting the respective at least one affected sector of the respective at least one affected datastore record for that change, that change record comprising sufficient content to reverse that change; and
c) setting, for the respective at least one affected sector of the respective at least one affected datastore record for that change, the current change record mapping to the respective change record for that change,
whereby enabling one or more of:
i. implicitly forming a branch point in the log DAG where both a second change and a third change follow a first change, the second change affecting a first sector also affected by the first change, the third change affecting a second sector also affected by the first change, the first sector and the second sector being distinct; or
ii. implicitly forming a merge point in the log DAG where a sixth change follows both a fourth change and a fifth change, the sixth change affecting both a third sector also affected by the fourth change and a fourth sector also affected by the fifth change, the third sector and the fourth sector being distinct.