Github user PepperJo commented on a diff in the pull request: https://github.com/apache/incubator-crail/pull/16#discussion_r180331658 --- Diff: storage-nvmf/src/main/java/org/apache/crail/storage/nvmf/NvmfStorageServer.java --- @@ -31,51 +28,68 @@ import java.io.IOException; import java.net.InetSocketAddress; -import java.net.URI; +import java.util.List; public class NvmfStorageServer implements StorageServer { private static final Logger LOG = CrailUtils.getLogger(); private boolean isAlive; private long alignedSize; - private long offset; + private long address; private boolean initialized = false; - private NvmeEndpoint endpoint; + private Controller controller; public NvmfStorageServer() {} - + public void init(CrailConfiguration crailConfiguration, String[] args) throws Exception { if (initialized) { throw new IOException("NvmfStorageTier already initialized"); } initialized = true; NvmfStorageConstants.parseCmdLine(crailConfiguration, args); - NvmeEndpointGroup group = new NvmeEndpointGroup(new NvmeTransportType[]{NvmeTransportType.RDMA}, NvmfStorageConstants.SERVER_MEMPOOL); - endpoint = group.createEndpoint(); - - URI uri = new URI("nvmef://" + NvmfStorageConstants.IP_ADDR.getHostAddress() + ":" + NvmfStorageConstants.PORT + - "/0/" + NvmfStorageConstants.NAMESPACE + "?subsystem=" + NvmfStorageConstants.NQN); - endpoint.connect(uri); - - long namespaceSize = endpoint.getNamespaceSize(); + Nvme nvme = new Nvme(); + NvmfTransportId transportId = new NvmfTransportId( + new InetSocketAddress(NvmfStorageConstants.IP_ADDR, NvmfStorageConstants.PORT), + NvmfStorageConstants.NQN); + controller = nvme.connect(transportId); + controller.getControllerConfiguration().setEnable(true); + controller.syncConfiguration(); + controller.waitUntilReady(); + + List<Namespace> namespaces = controller.getActiveNamespaces(); + Namespace namespace = null; + for (Namespace n : namespaces) { + if (n.getIdentifier().equals(NvmfStorageConstants.NAMESPACE)) { + namespace = n; + break; + } + } + if (namespace == null) { + throw new IllegalArgumentException("No namespace with id " + NvmfStorageConstants.NAMESPACE + + " at controller " + transportId.toString()); + } + IdentifyNamespaceData namespaceData = namespace.getIdentifyNamespaceData(); + LbaFormat lbaFormat = namespaceData.getFormattedLbaSize(); + int dataSize = lbaFormat.getLbaDataSize().toInt(); + long namespaceSize = dataSize * namespaceData.getNamespaceCapacity(); alignedSize = namespaceSize - (namespaceSize % NvmfStorageConstants.ALLOCATION_SIZE); - offset = 0; + address = 0; isAlive = true; - } + } @Override public void printConf(Logger log) { - NvmfStorageConstants.printConf(log); + NvmfStorageConstants.printConf(log); } public void run() { LOG.info("NnvmfStorageServer started with NVMf target " + getAddress()); while (isAlive) { try { Thread.sleep(1000 /* ms */); --- End diff -- Let me make the keep alive time a final static to be used in both storage server and client.
---