diff --git a/daemon/gluster-blockd.c b/daemon/gluster-blockd.c index 99529bc..e986b89 100644 --- a/daemon/gluster-blockd.c +++ b/daemon/gluster-blockd.c @@ -479,7 +479,9 @@ static int blockNodeSanityCheck(void) { int ret; + bool use_targetclid = true; char *global_opts; + char *tmp; /* @@ -516,6 +518,35 @@ blockNodeSanityCheck(void) if (GB_ASPRINTF(&global_opts, GB_TGCLI_GLOBALS, gbConf->configShellLogFile) == -1) { return ENOMEM; } + + tmp = gbRunnerGetOutput(TARGETCLI_VERSION); + if (!gbDependencyVersionCompare(TARGETCLI_DAEMON, tmp)) { + use_targetclid = false; + LOG("mgmt", GB_LOG_WARNING, + "targetclid required: %s, current version: %s, using cli mode", + GB_MIN_TARGETCLI_DAEMON_VERSION, tmp); + } + GB_FREE(tmp); + + if (use_targetclid) { + tmp = global_opts; + /* Check if targetclid is running */ + ret = gbRunner("ps aux ww | grep -w '[t]argetclid' > /dev/null"); + if (ret) { + LOG("mgmt", GB_LOG_WARNING, "targetclid not running, using targetcli"); + if (GB_ASPRINTF(&global_opts, "targetcli --disable-daemon; %s", tmp) == -1) { + GB_FREE(tmp); + return ENOMEM; + } + } else { + if (GB_ASPRINTF(&global_opts, "%s auto_use_daemon=true", tmp) == -1) { + GB_FREE(tmp); + return ENOMEM; + } + } + GB_FREE(tmp); + } + /* Set targetcli globals */ ret = gbRunner(global_opts); GB_FREE(global_opts); diff --git a/rpc/block_create.c b/rpc/block_create.c index 0eeddc8..fb42b81 100644 --- a/rpc/block_create.c +++ b/rpc/block_create.c @@ -683,7 +683,7 @@ block_create_common(blockCreate *blk, char *control, char *volServer, goto out; } - if (GB_ASPRINTF(&exec, "targetcli <ripaddr, path, blk->ipaddr, save) == -1) { goto out; } diff --git a/systemd/gluster-block-target.service.in b/systemd/gluster-block-target.service.in index fd2d8f7..2e16089 100644 --- a/systemd/gluster-block-target.service.in +++ b/systemd/gluster-block-target.service.in @@ -11,7 +11,7 @@ Conflicts=target.service Requisite=glusterd.service BindsTo=tcmu-runner.service -After=glusterd.service tcmu-runner.service +After=glusterd.service tcmu-runner.service targetclid.service [Service] ExecStop= diff --git a/systemd/gluster-blockd.service.in b/systemd/gluster-blockd.service.in index 34a3ac2..6e6a047 100644 --- a/systemd/gluster-blockd.service.in +++ b/systemd/gluster-blockd.service.in @@ -3,6 +3,7 @@ Description=Gluster block storage utility Requisite=glusterd.service Requires=rpcbind.service BindsTo=gluster-block-target.service +Wants=targetclid.service After=gluster-block-target.service rpcbind.service [Service] diff --git a/utils/utils.c b/utils/utils.c index 1fbe654..54657c8 100644 --- a/utils/utils.c +++ b/utils/utils.c @@ -426,6 +426,11 @@ gbDependencyVersionCompare(int dependencyName, char *version) ret = true; } break; + case TARGETCLI_DAEMON: + if (DEPENDENCY_VERSION(vNum[0], vNum[1], vNum[2]) >= GB_MIN_TARGETCLI_DAEMON_VERSION_CODE) { + ret = true; + } + break; } GB_FREE(verStr); diff --git a/utils/utils.h b/utils/utils.h index dad1301..bbe157d 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -674,6 +674,7 @@ typedef enum gbDependencies { RTSLIB_RELOAD = 5, CONFIGSHELL_SEMICOLON = 6, TCMURUNNER_IO_TIMEOUT = 7, + TARGETCLI_DAEMON = 8, } gbDependencies; int initGbConfig(void); diff --git a/version.h b/version.h index 6d5a269..c1c2d07 100644 --- a/version.h +++ b/version.h @@ -34,6 +34,7 @@ # define GB_MIN_RTSLIB_RELOAD_VERSION "2.1.71" # define GB_MIN_CONFIGSHELL_SEM_VERSION "1.1.25" # define GB_MIN_TCMURUNNER_IO_TIMEOUT_VERSION "1.5.0" +# define GB_MIN_TARGETCLI_DAEMON_VERSION "2.1.fb51" # define GB_MIN_TCMURUNNER_VERSION_CODE DEPENDENCY_VERSION(1, 1, 3) # define GB_MIN_TARGETCLI_VERSION_CODE DEPENDENCY_VERSION(2, 1, 49) @@ -42,5 +43,6 @@ # define GB_MIN_RTSLIB_RELOAD_VERSION_CODE DEPENDENCY_VERSION(2, 1, 71) # define GB_MIN_CONFIGSHELL_SEM_VERSION_CODE DEPENDENCY_VERSION(1, 1, 25) # define GB_MIN_TCMURUNNER_IO_TIMEOUT_VERSION_CODE DEPENDENCY_VERSION(1, 5, 0) +# define GB_MIN_TARGETCLI_DAEMON_VERSION_CODE DEPENDENCY_VERSION(2, 1, 51) # endif /* _VERSION_H */