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.


---

Reply via email to