Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wendelin.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Joshua
wendelin.core
Commits
65efa305
Commit
65efa305
authored
Apr 02, 2019
by
Kirill Smelkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
.
parent
106344f8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
84 additions
and
0 deletions
+84
-0
wcfs/internal/δbtree/δbtail.go
wcfs/internal/δbtree/δbtail.go
+84
-0
No files found.
wcfs/internal/δbtree/δbtail.go
0 → 100644
View file @
65efa305
// Copyright (C) 2019 Nexedi SA and Contributors.
// Kirill Smelkov <kirr@nexedi.com>
//
// This program is free software: you can Use, Study, Modify and Redistribute
// it under the terms of the GNU General Public License version 3, or (at your
// option) any later version, as published by the Free Software Foundation.
//
// You can also Link and Combine this program with other software covered by
// the terms of any of the Free Software licenses or any of the Open Source
// Initiative approved licenses and Convey the resulting work. Corresponding
// source of such a combination shall include the source code for all other
// software used.
//
// This program is distributed WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//
// See COPYING file for full licensing terms.
// See https://www.nexedi.com/licensing for rationale and options.
package
δbtree
// XXX -> another package?
// ΔBTail reprsents tail of revisional changes to BTrees.
//
// It semantically consists of
//
// [](rev↑, (tree, []key)) ; rev ∈ (tail, head]
//
// and *partially* covers changes to BTrees.
//
// XXX δB can convert δZ to btree changes, but only at least for δZ's objects
// that ∈ BTree subgraphs that were explicitly requested to be tracked by δB.
//
// XXX incremental; not full coverage
type
ΔBTail
struct
{
//at // = head
δZtail
*
zodb
.
ΔTail
// XXX or ask client provide db on every call?
db
*
zodb
.
DB
// to open connections to load new/old tree|buckets
// root index: BTree|Bucket -> top tree element.
// XXX represent root by oid instead of live object?
rootIdx
map
[
zodb
.
Oid
]
SetTree
// oid -> {} roots
}
// XXX path is at @at state.
// XXX objects in path must be with .PJar().At() == .head
// XXX path -> []oid ?
func
(
δb
*
ΔBTail
)
Track
(
path
[]
zodb
.
IPersistent
)
{
// XXX Tree|Bucket; path[0] = root
// XXX
}
// Update updates δB with per-object level ZODB changes.
//
// XXX text ...
// XXX -> Append? -> Invalidate?
// XXX -> DiffTo ?
func
(
δB
*
ΔBTail
)
Update
(
δZ
*
zodb
.
EventCommit
)
{
/*
.δZtail += δZ
δbZ = {}
for δ in δZ:
.rootIdx[δ]:
ø -> nothing
root -> δbZ[root] += δ
if δbZ == ø:
return
zconnNew = db.Open(δZ.rev)
for root, δZ in δbZ:
toposort(δZ)
for δ in δZ:
T | B = zconn.Get(δ) // XXX .zconn must be at .head and active
T' | B' = zconnNew.Get(δ)
diff(T, T')
diff(B, B')
...
-> [] of (root, []key)
*/
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment