private void writeFile(Operation operation) throws Exception { Logger.logDebug("Start operation to send writeFile request to datanode", getClass()); // on a write request, the parameter is a FileWriteOperationParameter FileWriteOperationParameter fileWriteParm = (FileWriteOperationParameter) operation.getParamProto(); // find all datanodes that will be receiving that file List<DatanodeInfo> datanodes = Datanodes.findDatanodesForFileWrite(fileWriteParm.getDfsFile()); Logger.logDebug( "Operation will send write request to " + datanodes.size() + " datanodes: ", getClass()); // add the chosen datanodes to the operation parameter for (DatanodeInfo datanodeInfo : datanodes) { fileWriteParm.addDatanode(datanodeInfo); Logger.logDebug(">>> " + datanodeInfo, getClass()); } // remove valid datanodes from the dfsFile FileStructure.getInstance() .removeValidDatanodes(fileWriteParm.getFilePath(), fileWriteParm.getDfsFile().getName()); // send the request to the first datanode FileOperationReqProtocol fileOperationRequest = new FileOperationReqProtocolImpl(fileWriteParm.findNextDatanode(), operation); fileOperationRequest.requestFileOperation(); }
private void readFile(Operation operation) throws Exception { Logger.logDebug("Start operation to send readFile request to datanode", getClass()); // on a read request, the parameter is a FileReadOperationParameter FileReadOperationParameter fileReadParm = (FileReadOperationParameter) operation.getParamProto(); // find the datanode that will be sending that file List<DatanodeInfo> datanodes = Datanodes.findDatanodesForFileWrite(fileReadParm.getDfsFile()); Logger.logDebug("Operation will send read request to one of the valid datanodes: ", getClass()); // add the chosen datanodes to the operation parameter for (DatanodeInfo datanodeInfo : datanodes) { fileReadParm.addDatanode(datanodeInfo); Logger.logDebug(">>> " + datanodeInfo, getClass()); } // TODO receive file from multiple datanodes, someday // send the request to the first datanode FileOperationReqProtocol fileOperationRequest = new FileOperationReqProtocolImpl(fileReadParm.findNextDatanode(), operation); fileOperationRequest.requestFileOperation(); }