示例#1
0
 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()
示例#2
0
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_
示例#3
0
    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
            }
        }