Esempio n. 1
0
 def parent(self, tr, key):
     # find parent
     for k, v in tr.get_range(fdb.last_less_than(fdb.tuple_to_key(self._path, key)),
                              fdb.first_greater_than(fdb.tuple_to_key(self._path, key)) + 1, 2):
         parentValue = fdb.key_to_tuple(v)
         if parentValue[0] == key or parentValue[1] == key:
             return tuple(fdb.key_to_tuple(k)[1], parentValue)
     return None
Esempio n. 2
0
    def setKey(self, tr, key, value, metric):
        isNew = True
        isRoot = True
        child = tuple(key, tuple("", "", random.random(), metric, value))
        parent = tuple()

        # find self or parent
        for k, v in tr.get_range(fdb.last_less_than(fdb.tuple_to_key(self._path, key)),
                                 fdb.first_greater_than(fdb.tuple_to_key(self._path, key)) + 1, 2):
            isRoot = False
            node = tuple(fdb.key_to_tuple(k)[1], fdb.key_to_tuple(v))
            if node[0] == key:
                isNew = False
                child = node
                node[1][4] = value
                break
            elif node[0] < key and node[1][1] == "":
                isRoot = False
                parent = node
                parent[1][1] = key
                break
            elif node[0] > key and node[1][0] == "":
                isRoot = False
                parent = node
                parent[1][0] = key
                break

        # insert root
        if isRoot:
            self.updateRoot(tr, child)

        # update parent
        if isNew:
            self.updateNode(tr, parent)

        # insert self
        self.updateNode(tr, child)

        # balance
        self.balance(tr, parent, child)
Esempio n. 3
0
def key_for_feed_message(feed, message):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'message', struct.pack('>Q', message))
Esempio n. 4
0
def key_for_feed_watcher(feed, inbox):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'watchers', struct.pack('>Q', inbox))
Esempio n. 5
0
def prefix_for_feed_subscribers(feed):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'subs')
Esempio n. 6
0
def key_for_feed_subscriber(feed, inbox):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'subs', struct.pack('>Q', inbox))
Esempio n. 7
0
def key_for_feed_message_count(feed):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'messCount')
Esempio n. 8
0
def key_for_feed_subscriber_count(feed):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'subCount')
Esempio n. 9
0
 def updateRoot(self, tr, node):
     tr[self._rootKey] = fdb.tuple_to_key(self._path, node[0])
Esempio n. 10
0
def key_for_message(message):
    return fdb.tuple_to_key('m', struct.pack('>Q', message))
Esempio n. 11
0
def key_for_inbox_stale_feed(inbox, feed):
    return fdb.tuple_to_key('i', struct.pack('>Q', inbox), 'stale', struct.pack('>Q', feed))
Esempio n. 12
0
def prefix_for_inbox_subscriptions(inbox):
    return fdb.tuple_to_key('i', struct.pack('>Q', inbox), 'subs')
Esempio n. 13
0
def key_for_inbox_subscription(inbox, feed):
    return fdb.tuple_to_key('i', struct.pack('>Q', inbox), 'subs', struct.pack('>Q', feed))
Esempio n. 14
0
def key_for_inbox_subscription_count(inbox):
    return fdb.tuple_to_key('i', struct.pack('>Q', inbox), 'subCount')
Esempio n. 15
0
def prefix_for_feed_messages(feed):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed), 'message')
Esempio n. 16
0
def key_for_feed(feed):
    return fdb.tuple_to_key('f', struct.pack('>Q', feed))
Esempio n. 17
0
def key_for_inbox(inbox):
    return fdb.tuple_to_key('i', struct.pack('>Q', inbox))
Esempio n. 18
0
 def updateNode(self, tr, node):
     tr[fdb.tuple_to_key(self._path, node[0])] = fdb.tuple_to_key(node[1])