def get_current(self): trans = self.find_new_transactions() for i in trans: t = Transaction.load(self.data_path, i) try: self.commit_transaction(t, is_replay=True) except: import traceback traceback.print_exc() print 'Failed Commit: %s' % t self.revision += len(trans) return len(trans)
def collect_statements_for(self, key, previous_rev, future_rev): statements = [] cur = [self.get_revision(key, future_rev)] running = 1 while running: for doc in cur: if doc.hashed_data() == previous_rev: running = 0 break; else: t = Transaction.load(self.data_path, doc.result_of) for s in t.statements: if key == s.target_key: statements.append(s) new_cur = [] for doc in cur: for par in self.get_parents(doc): new_cur.append(par) cur = new_cur statements.reverse() return statements
def compact(self): data = [] count = 0 f = open(self.data_path + "/compact/%i" % (self.revision), 'w') for i in self.transactions: if Transaction.exists(self.data_path, i): i = Transaction.load(self.data_path, i) f.write("begin %s\n" % i.path()) for j in i.statements: f.write(j.as_json() + '\n') os.remove(self.data_path + "/transaction/%s" % i.path()) f.close() f = open(self.data_path + "/checkpoints/%i" % self.revision, 'w') for i in self: for j in i: f.write( json.dumps([j.key, j.get_data()]) + "\n") subdir = j.hashed_key()[:2] all_revs = self.get_all_parent_revs(j) for rev in all_revs: if os.path.exists(self.data_path + "/data/%s/%s_%s" % (subdir, j.hashed_key(), rev)): os.remove(self.data_path + "/data/%s/%s_%s" % (subdir, j.hashed_key(), rev)) f.close()