Commit cf434282 authored by Karol Latecki's avatar Karol Latecki Committed by Jim Harris
Browse files

spdkcli: Check for uninitialized spdk instance



At start of spdkcli and on each configuration call
check if spdk subsystems are initialized.
Disallow using get/create/delete commands if system is
not initialized.

Change-Id: I8b9e0362c31a5007e6460d4f79cf3f9e91f71054
Signed-off-by: default avatarKarol Latecki <karol.latecki@intel.com>
Reviewed-on: https://review.gerrithub.io/419510


Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarPawel Kaminski <pawelx.kaminski@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent ff3cd431
Loading
Loading
Loading
Loading
+50 −21
Original line number Diff line number Diff line
@@ -15,8 +15,21 @@ class UIRoot(UINode):
        self.current_vhost_ctrls = []
        self.set_rpc_target(s)
        self.verbose = False
        self.is_init = self.check_init()

    def refresh(self):
        if self.is_init is False:
            methods = self.get_rpc_methods(current=True)
            methods = "\n".join(methods)
            self.shell.log.warning("SPDK Application is not yet initialized.\n"
                                   "Please initialize subsystems with start_subsystem_init command.\n"
                                   "List of available commands in current state:\n"
                                   "%s" % methods)
        else:
            # Pass because we'd like to build main tree structure for "ls"
            # even if state is uninitialized
            pass

        self._children = set([])
        UIBdevs(self)
        UILvolStores(self)
@@ -40,7 +53,19 @@ class UIRoot(UINode):
            return r
        return w

    def ui_command_start_subsystem_init(self):
        if rpc.start_subsystem_init(self.client):
            self.is_init = True
            self.refresh()

    def get_rpc_methods(self, current=False):
        return rpc.get_rpc_methods(self.client, current=current)

    def check_init(self):
        return "start_subsystem_init" not in self.get_rpc_methods(current=True)

    def get_bdevs(self, bdev_type):
        if self.is_init:
            self.current_bdevs = rpc.bdev.get_bdevs(self.client)
            # Following replace needs to be done in order for some of the bdev
            # listings to work: logical volumes, split disk.
@@ -132,6 +157,7 @@ class UIRoot(UINode):
        rpc.bdev.delete_error_bdev(self.client, **kwargs)

    def get_lvol_stores(self):
        if self.is_init:
            self.current_lvol_stores = rpc.lvol.get_lvol_stores(self.client)
            for lvs in self.current_lvol_stores:
                yield LvolStore(lvs)
@@ -185,14 +211,17 @@ class UIRoot(UINode):
        return response

    def get_virtio_scsi_devs(self):
        if self.is_init:
            for bdev in rpc.vhost.get_virtio_scsi_devs(self.client):
                test = Bdev(bdev)
                yield test

    def list_vhost_ctrls(self):
        if self.is_init:
            self.current_vhost_ctrls = rpc.vhost.get_vhost_controllers(self.client)

    def get_vhost_ctrlrs(self, ctrlr_type):
        if self.is_init:
            self.list_vhost_ctrls()
            for ctrlr in filter(lambda x: ctrlr_type in x["backend_specific"].keys(),
                                self.current_vhost_ctrls):