Github user animeshtrivedi commented on a diff in the pull request: https://github.com/apache/incubator-crail/pull/16#discussion_r180316603 --- Diff: storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/client/NvmfStorageEndpoint.java --- @@ -19,208 +19,229 @@ package org.apache.crail.storage.nvmf.client; -import com.ibm.disni.nvmef.NvmeCommand; -import com.ibm.disni.nvmef.NvmeEndpoint; -import com.ibm.disni.nvmef.NvmeEndpointGroup; -import com.ibm.disni.nvmef.spdk.IOCompletion; - +import com.ibm.jnvmf.*; import org.apache.crail.CrailBuffer; +import org.apache.crail.CrailBufferCache; +import org.apache.crail.CrailStatistics; import org.apache.crail.conf.CrailConstants; -import org.apache.crail.memory.BufferCache; import org.apache.crail.metadata.BlockInfo; +import org.apache.crail.metadata.DataNodeInfo; import org.apache.crail.storage.StorageEndpoint; import org.apache.crail.storage.StorageFuture; -import org.apache.crail.storage.nvmf.NvmfBufferCache; import org.apache.crail.storage.nvmf.NvmfStorageConstants; import org.apache.crail.utils.CrailUtils; import org.slf4j.Logger; import java.io.IOException; +import java.net.InetAddress; import java.net.InetSocketAddress; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.concurrent.*; +import java.util.List; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; public class NvmfStorageEndpoint implements StorageEndpoint { private static final Logger LOG = CrailUtils.getLogger(); - private final InetSocketAddress inetSocketAddress; - private final NvmeEndpoint endpoint; - private final int sectorSize; - private final BufferCache cache; - private final BlockingQueue<NvmeCommand> freeCommands; - private final NvmeCommand[] commands; - private final NvmfStorageFuture[] futures; - private final ThreadLocal<long[]> completed; - private final int ioQeueueSize; - - public NvmfStorageEndpoint(NvmeEndpointGroup group, InetSocketAddress inetSocketAddress) throws IOException { - this.inetSocketAddress = inetSocketAddress; - endpoint = group.createEndpoint(); + private final Controller controller; + private final IoQueuePair queuePair; + private final int lbaDataSize; + private final long namespaceCapacity; + private final NvmfRegisteredBufferCache registeredBufferCache; + private final NvmfStagingBufferCache stagingBufferCache; + private final CrailStatistics statistics; + + private final Queue<NvmWriteCommand> writeCommands; + private final Queue<NvmReadCommand> readCommands; + + private final AtomicInteger outstandingOperations; + + public NvmfStorageEndpoint(Nvme nvme, DataNodeInfo info, CrailStatistics statistics, + CrailBufferCache bufferCache) throws IOException { + InetSocketAddress inetSocketAddress = new InetSocketAddress( + InetAddress.getByAddress(info.getIpAddress()), info.getPort()); + // XXX FIXME: nsid from datanodeinfo + NvmfTransportId transportId = new NvmfTransportId(inetSocketAddress, + new NvmeQualifiedName(NvmfStorageConstants.NQN.toString() + info.getPort())); + LOG.info("Connecting to NVMf target at " + transportId.toString()); + controller = nvme.connect(transportId); + controller.getControllerConfiguration().setEnable(true); + controller.syncConfiguration(); try { - URI url = new URI("nvmef://" + inetSocketAddress.getHostString() + ":" + inetSocketAddress.getPort() + - "/0/" + NvmfStorageConstants.NAMESPACE + "?subsystem=nqn.2016-06.io.spdk:cnode1"); - LOG.info("Connecting to " + url.toString()); - endpoint.connect(url); - } catch (URISyntaxException e) { - //FIXME - e.printStackTrace(); + controller.waitUntilReady(); + } catch (TimeoutException e) { + throw new IOException(e); } - sectorSize = endpoint.getSectorSize(); - cache = new NvmfBufferCache(); - ioQeueueSize = endpoint.getIOQueueSize(); - freeCommands = new ArrayBlockingQueue<NvmeCommand>(ioQeueueSize); - commands = new NvmeCommand[ioQeueueSize]; - for (int i = 0; i < ioQeueueSize; i++) { - NvmeCommand command = endpoint.newCommand(); - command.setId(i); - commands[i] = command; - freeCommands.add(command); + IdentifyControllerData identifyControllerData = controller.getIdentifyControllerData(); + if (CrailConstants.SLICE_SIZE > identifyControllerData.getMaximumDataTransferSize().toInt()) { + throw new IllegalArgumentException(CrailConstants.SLICE_SIZE_KEY + " > max transfer size (" + --- End diff -- :+1:
---