def update_file(self, fid, status): fileobj = self.file_table[fid] fileobj.block_list = status["block_list"] fileobj.block_list = list( map( lambda b: Block( self.config["block_size"], b["length"], bid=b["bid"]), status["block_list"])) fileobj.adjust()
def load_blockpack(blockpack_name: str) -> set: blocks_ = set() block_list = load(open('rules/' + blockpack_name + '/blocks.json', 'r')) for block_name, data in block_list.items(): if block_name == 'import': for new_blockpack in data: blocks_ = blocks_.union(load_blockpack(new_blockpack)) continue blocks_.add(Block(block_name, **data)) log(0, block_name, 'block registered') return blocks_
def request_new_block(self, fid) -> dict: fileobj = self.file_table[fid] new_bid = self.block_id_manager.request_id() newblock = Block(self.config["block_size"], bid=new_bid) bid = newblock.bid fileobj.block_list.append(newblock) fileobj.adjust() max_replicas = min(self.config["num_replicas"], len(self.datanode_table)) datanodes = sample(self.datanode_table, max_replicas) self.block_to_datanode[bid] = datanodes return { "success": True, "message": { "block": newblock.blockinfo(), "datanodes": datanodes } }