def Read(self,request,context): """ Reads a file from data node. This should simply call dfss.Read() with the proper parameters. ReadRequest takes the following parameters: 1. string file_name 2. string timestamp ReadReply takes the following parameters: 1. bytes reply_file 2. bool success """ if DEBUG: print("Requesting NameNode.Read") file_path = request.file_path timestamp = request.timestamp nn = Namenode() data_nodes = nn.get(file_path, timestamp) if DEBUG: print("Processing namenode.get() successful.") print("Response should be completed") return namenode_pb2.ReadReply(datanodes=data_nodes, success=True)
def __init__(self, host, port=NAMENODE_PORT, timeout=TIMEOUT): # Make socket self.socket = TSocket.TSocket(host, port) self.socket.setTimeout(timeout) # Buffering is critical. Raw sockets are very slow self.transport = TTransport.TBufferedTransport(self.socket) # Wrap in a protocol self.protocol = TBinaryProtocol.TBinaryProtocol(self.transport) # Create a client to use the protocol encoder self.client = Namenode.Client(self.protocol) # Connect! self.transport.open()
def Store(self,request,context): """ StoreRequest takes the following parameters: 1. string file_path 2. int32 file_size 3. string timestamp StoreReply takes the following parameters: 1. string hash(path) 2. string datanodes 3. int32 block_size 4. bool success """ if DEBUG: print("Requesting NameNode.Store") nn = Namenode() data_nodes = nn.save(request.file_path, request.file_size, request.timestamp) path_hash = hashlib.sha1(request.file_path).hexdigest() if DEBUG: print("Datanode.save() processed successfully") print("StoreReply response should be available") return namenode_pb2.StoreReply(path=path_hash,datanodes=str(data_nodes),block_size=nn.blocksize,success=True)