def add_comments(cls, tree, comments): CommentTreeStorageBase.add_comments(tree, comments) g.log.debug('building updates dict') updates = {} for c in comments: pids = c.parent_path() pids.append(c._id) for d, (pid, cid) in enumerate(zip(pids, pids[1:])): k = (d, pid, cid) updates[k] = updates.get(k, 0) + 1 g.log.debug('writing %d updates to %s', len(updates), cls._key(tree.link)) # increment counters in slices of 100 cols = updates.keys() for i in xrange(0, len(updates), cls.COLUMN_WRITE_BATCH_SIZE): g.log.debug('adding updates %d..%d', i, i + cls.COLUMN_WRITE_BATCH_SIZE) update_batch = { c: updates[c] for c in cols[i:i + cls.COLUMN_WRITE_BATCH_SIZE] } with batch.Mutator(g.cassandra_pools[cls._connection_pool]) as m: m.insert(cls._cf, cls._key(tree.link), update_batch) g.log.debug('added %d comments with %d updates', len(comments), len(updates))
def delete_comment(cls, tree, comment): CommentTreeStorageBase.delete_comment(tree, comment) pids = comment.parent_path() pids.append(comment._id) updates = {} for d, (pid, cid) in enumerate(zip(pids, pids[1:])): updates[(d, pid, cid)] = -1 with batch.Mutator(g.cassandra_pools[cls._connection_pool]) as m: m.insert(cls._cf, cls._key(tree.link), updates)
def test_multi_column_family(self): batch = batch_mod.Mutator(pool) cf2 = cf batch.insert(cf, '1', ROWS['1']) batch.insert(cf, '2', ROWS['2']) batch.remove(cf2, '1', ROWS['1']) batch.send() assert cf.get('2') == ROWS['2'] assert_raises(NotFoundException, cf.get, '1')
def add_comments(cls, tree, comments): CommentTreeStorageBase.add_comments(tree, comments) updates = {} for comment in comments: parent_id = comment.parent_id or cls.NO_PARENT depth = tree.depth.get(parent_id, -1) + 1 updates[(depth, parent_id, comment._id)] = '' cols = updates.keys() for i in xrange(0, len(updates), cls.COLUMN_WRITE_BATCH_SIZE): update_batch = { c: updates[c] for c in cols[i:i + cls.COLUMN_WRITE_BATCH_SIZE] } with batch.Mutator(g.cassandra_pools[cls._connection_pool]) as m: m.insert(cls._cf, cls._key(tree.link), update_batch)
def rebuild(cls, tree, comments): with batch.Mutator(g.cassandra_pools[cls._connection_pool]) as m: g.log.debug('removing tree from %s', cls._key(tree.link)) m.remove(cls._cf, cls._key(tree.link)) tree.link._incr('comment_tree_id') g.log.debug('link %s comment tree revision bumped up to %s', tree.link._fullname, tree.link.comment_tree_id) # make sure all comments have parents attribute filled in parents = {c._id: c.parent_id for c in comments} for c in comments: if c.parent_id and c.parents is None: path = [] pid = c.parent_id while pid: path.insert(0, pid) pid = parents[pid] c.parents = ':'.join(utils.to36(i) for i in path) c._commit() return cls.add_comments(tree, comments)
def rebuild(cls, tree, comments): with batch.Mutator(g.cassandra_pools[cls._connection_pool]) as m: g.log.debug('removing tree from %s', cls._key(tree.link)) m.remove(cls._cf, cls._key(tree.link)) return cls.add_comments(tree, comments)