Example #1
0
class Node_Db_Context(object):
    def __init__(self, node_info):
        self.sync = RWLock()
        self.db = "db/" + str(node_info.key) + ".db"
        self.node_info = node_info
        self.own_start = None
        self.own_end = None

        #self.back_thread = threading.Thread(target=lambda:  self.backup_loop(self))
        #self.back_thread.daemon = True
        #self.back_thread.start()

    def write(self, hash_name, content):
        self.sync.writer_acquire()
        try:
            records = shelve.open(self.db)
            records[hash_name] = content
            records.close()
            print str(self.node_info) + " write block: " + hash_name
        finally:
            self.sync.writer_release()


    def read(self, hash_name):
        content = None
        self.sync.reader_acquire()
        try:
            records = shelve.open(self.db)
            if not records.has_key(hash_name):
                print str(self.node_info) + " read block: " + hash_name + " FAILED!!"
                content = "404 Error"
            else:
                print str(self.node_info) + " read block: " + hash_name
                content = records[hash_name]    #this retrieved COPY OF CONTENT
            records.close()
        finally:
            self.sync.reader_release()
        return content