public GetBlockRes() { this.blockInfo = new BlockInfo(); this.error = 0; }
public short updateRegion(BlockInfo region) { BlockInfo oldRegion = regions.get(region.getLba()); if (oldRegion == null){ return RpcErrors.ERR_ADD_BLOCK_FAILED; } else { oldRegion.setBlockInfo(region); return 0; } }
@Override public StorageFuture write(CrailBuffer buffer, BlockInfo block, long offset) throws IOException, InterruptedException { // LOG.info("TCP write, buffer " + buffer.remaining() + ", block " + block.getLkey() + "/" + block.getAddr() + "/" + block.getLength() + ", offset " + offset); TcpStorageRequest.WriteRequest writeReq = new TcpStorageRequest.WriteRequest(block.getLkey(), block.getAddr() + offset, buffer.remaining(), buffer.getByteBuffer()); TcpStorageResponse.WriteResponse writeResp = new TcpStorageResponse.WriteResponse(); TcpStorageRequest req = new TcpStorageRequest(writeReq); TcpStorageResponse resp = new TcpStorageResponse(writeResp); NaRPCFuture<TcpStorageRequest, TcpStorageResponse> narpcFuture = endpoint.issueRequest(req, resp); return new TcpStorageFuture(narpcFuture, writeReq.length()); }
@Override public long getAddr() { return region.getAddr() + offset; }
BlockInfo region = new BlockInfo(); region.setBlockInfo(request.getBlockInfo()); } else { int realBlocks = (int) (((long) region.getLength()) / CrailConstants.BLOCK_SIZE) ; long offset = 0; for (int i = 0; i < realBlocks; i++){
@Override public StorageFuture write(CrailBuffer buffer, BlockInfo remoteMr, long remoteOffset) throws IOException, InterruptedException { if (buffer.remaining() > CrailConstants.BLOCK_SIZE){ throw new IOException("write size too large " + buffer.remaining()); } if (buffer.remaining() <= 0){ throw new IOException("write size too small, len " + buffer.remaining()); } if (remoteOffset < 0){ throw new IOException("remote offset too small " + remoteOffset); } long alignedLba = getAlignedLba(remoteMr.getLba()); long lbaOffset = getLbaOffset(remoteMr.getLba()); CrailBuffer mappedBuffer = bufferMap.get(alignedLba); if (mappedBuffer == null){ throw new IOException("No mapped buffer for this key " + remoteMr.getLkey() + ", address " + address); } if (lbaOffset + remoteOffset + buffer.remaining() > RdmaConstants.STORAGE_RDMA_ALLOCATION_SIZE){ long tmpAddr = lbaOffset + remoteOffset + buffer.remaining(); throw new IOException("remote fileOffset + remoteOffset + len too large " + tmpAddr); } long srcAddr = buffer.address() + buffer.position(); long dstAddr = mappedBuffer.address() + lbaOffset + remoteOffset; RdmaLocalFuture future = new RdmaLocalFuture(unsafe, srcAddr, dstAddr, buffer.remaining()); return future; }
@Override public long getLba() { return region.getLba() + offset; }
@Override public int getLkey() { return region.getLkey(); }
public void setFileBlock(BlockInfo blockInfo){ if (blockInfo != null){ this.fileBlock.setBlockInfo(blockInfo); } }
@Override public DataNodeInfo getDnInfo() { return region.getDnInfo(); }
@Override public StorageFuture read(CrailBuffer buffer, BlockInfo block, long offset) throws IOException, InterruptedException { // LOG.info("TCP read, buffer " + buffer.remaining() + ", block " + block.getLkey() + "/" + block.getAddr() + "/" + block.getLength() + ", offset " + offset); TcpStorageRequest.ReadRequest readReq = new TcpStorageRequest.ReadRequest(block.getLkey(), block.getAddr() + offset, buffer.remaining()); TcpStorageResponse.ReadResponse readResp = new TcpStorageResponse.ReadResponse(buffer.getByteBuffer()); TcpStorageRequest req = new TcpStorageRequest(readReq); TcpStorageResponse resp = new TcpStorageResponse(readResp); NaRPCFuture<TcpStorageRequest, TcpStorageResponse> narpcFuture = endpoint.issueRequest(req, resp); return new TcpStorageFuture(narpcFuture, readReq.length()); }
public static long linearBlockAddress(BlockInfo remoteMr, long remoteOffset, int sectorSize) { return (remoteMr.getAddr() + remoteOffset) / (long)sectorSize; }
public boolean regionExists(BlockInfo region) { if (regions.containsKey(region.getLba())){ return true; } return false; }
public void setFileBlock(BlockInfo blockInfo){ if (blockInfo != null){ fileBlock.setBlockInfo(blockInfo); } }
public boolean regionExists(BlockInfo region) { long dnAddress = region.getDnInfo().key(); DataNodeBlocks current = membership.get(dnAddress); if (current == null) { return false; } else { return current.regionExists(region); } }
throw new IOException("remote offset too small " + remoteOffset); if (remoteMr.getAddr() == 0){ throw new IOException("remote addr is 0 " + remoteMr.getAddr()); if (remoteMr.getLkey() == 0){ throw new IOException("remote key is 0 " + remoteMr.getLkey()); sgeSend.setLkey(localMr.getLkey()); sendWR.getRdmaMod().setRemote_addr(remoteMr.getAddr() + remoteOffset); sendWR.getRdmaMod().setRkey(remoteMr.getLkey());
public GetLocationRes() { this.blockInfo = new BlockInfo(); this.fd = 0; this.error = 0; }