[ot][spam][crazy] log 2: append-only random writes
Undiscussed Horrific Abuse, One Victim of Many
gmkarl at gmail.com
Sun Jul 10 07:26:26 PDT 2022
last stable version was at
https://lists.cpunks.org/pipermail/cypherpunks/2022-July/102291.html
# member variables draft. i think this is all the information that
# was being replaced by leaf and index iteration.
# - leaf count can be updated by summing children when graph is
# changed.
# - height is simply maximum child height + 1, can also update
# when graph is changed
# - parents is for adding dropped nodes to when branches are made
# more shallow. it can be prefix-compared against to find a
# shared ancestor when unifying neighboring entries. the only
# other update I'm thinking of is when a new flush adds a shared
# parent to every node.
# it may be simpler or clearer to retain parent references,
# and walk up them to the root to form parents lists when
# they are needed; unsure
class Data:
def __init__(self, offset, data, end = None, height = 0, _parents
= [], leaves = 1, parent = None):
self.start = offset
self.data = data
if end is None:
self.end = self.start + len(self.data)
self.height = 0
self.parent = parent
self._parents = _parents
self.leaves = 1
class Flush:
def __init__(self, parent = None):
self.parent = parent
if self.parent is not None:
self.index = [self.parent]
# this should expand self.parent if it's too deep, and
shallow it if there is only one child
# we don't want to expand the index past the max depth
else:
self.index = []
def write(self, offset, data):
# 1. trim index to left and right of data
# when trimming, can make the trimmed nodes shallower
if parts are removed. removed parents can be added to .parents
# if trimming makes a branch shallower at its leaves,
it may become mergeable with its other neighbor
# 2. remove items in between and replace with data
# 3. merge data
More information about the cypherpunks
mailing list