summaryrefslogtreecommitdiffstats
path: root/rpc/rpcl
Commit message (Collapse)AuthorAgeFilesLines
* delete: support [unlink-storage <yes|no>] optionPrasanna Kumar Kalever2018-02-081-0/+1
| | | | | | | | | | | | | | | | | | | | $ gluster-block help gluster-block (0.3) usage: gluster-block <command> <volname[/blockname]> [<args>] [--json*] commands: [...] delete <volname/blockname> [unlink-storage <yes|no>] [force] delete block device. [...] supported JSON formats: --json|--json-plain|--json-spaced|--json-pretty Change-Id: I64bc99a8519be6f90a7e8bc5558b0d7518661995 Fixes: #19 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* create: support [storage <filename>] optionPrasanna Kumar Kalever2018-02-081-0/+1
| | | | | | | | | | | | | | | | | | | | | | $ gluster-block help gluster-block (0.3) usage: gluster-block <command> <volname[/blockname]> [<args>] [--json*] commands: create <volname/blockname> [ha <count>] [auth <enable|disable>] [prealloc <full|no>] [storage <filename>] <host1[,host2,...]> <size> create block device [defaults: ha 1, auth disable, prealloc no, size in bytes] [...] supported JSON formats: --json|--json-plain|--json-spaced|--json-pretty Fixes: #18 Change-Id: I5d9b4abb58596bd2297cffb294c6d31f752d53e9 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* replace: add replace featurePrasanna Kumar Kalever2018-02-071-0/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. create conf in new node 2. delete conf from old node 3. replace portals from nodes hosting other paths (HA) $ gluster-block create sample/block ha 3 192.168.124.57,192.168.124.26,192.168.124.30 1GiB --json-pretty { "IQN":"iqn.2016-12.org.gluster-block:d516bb5c-5f56-4d9c-96a7-385df19c2e2c", "PORTAL(S)":[ "192.168.124.57:3260", "192.168.124.26:3260", "192.168.124.30:3260" ], "RESULT":"SUCCESS" } $ gluster-block help gluster-block (0.3) usage: gluster-block <command> <volname[/blockname]> [<args>] [--json*] commands: [...] replace <volname/blockname> <old-node> <new-node> [force] replace operations. [...] supported JSON formats: --json|--json-plain|--json-spaced|--json-pretty $ gluster-block replace sample/block 192.168.124.26 192.168.124.56 --json-pretty { "NAME":"block", "CREATE SUCCESS":"192.168.124.56", "DELETE SUCCESS":"192.168.124.26", "REPLACE PORTAL SUCCESS ON":[ "192.168.124.57", "192.168.124.30" ], "RESULT":"SUCCESS" } Fixes: #4 Change-Id: I0411d15c407111db0d423052d9a6bc075174bf90 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* versioning: add capabilities supportPrasanna Kumar Kalever2018-01-181-0/+1
| | | | | Change-Id: Ic63f7c9fa169ee37b796093554c59016fbbfaa46 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* rpc: switch to MT-safe block RPC routinesPrasanna Kumar Kalever2017-09-191-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | blockResponse * block_delete_1(blockDelete *argp, CLIENT *clnt) { static blockResponse clnt_res; <<<<<<-------- Same memory is used by everyone memset((char *)&clnt_res, 0, sizeof(clnt_res)); <<<<<---- Here memset is happening if (clnt_call (clnt, BLOCK_DELETE, (xdrproc_t) xdr_blockDelete, (caddr_t) argp, (xdrproc_t) xdr_blockResponse, (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { return (NULL); } return (&clnt_res); <<<<<---- ptr to this memory is returned. } So while Thread-1 is returned "return (&clnt_res);" another thread could be doing "memset((char *)&clnt_res, 0, sizeof(clnt_res));" This seem to be a day-1 gluster-blockd bug from the looks of it. Change-Id: I3fc76d7814c4fe5b286577586ec44d752dcc73f0 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com> Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
* gluster-block: support force delete optionPrasanna Kumar Kalever2017-08-081-0/+1
| | | | | | | | | | | | | | | | $ gluster-block help gluster-block (0.2.1) usage: gluster-block <command> <volname[/blockname]> [<args>] [--json*] commands: [...] delete <volname/blockname> [force] delete block device. [...] Change-Id: I64ac01ec148e2e1d4d0ba0d4c5560df9334d58f5 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* dist: do not package the rpcgen generated filesPrasanna Kumar Kalever2017-06-241-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | This patch fixes rpcgen file stat issue. rpcgen, before generating a file, it first stats the file, in case if file already exists, it do not try to override, instead bails out. [...] Making all in rpcl make[3]: Entering directory `/builddir/build/BUILD/gluster-block-0.2.1/rpc/rpcl' rpcgen -h -o ../../rpc/rpcl/block.h block.x file `../../rpc/rpcl/block.h' already exists and may be overwritten make[3]: Leaving directory `/builddir/build/BUILD/gluster-block-0.2.1/rpc/rpcl' make[3]: *** [block.h] Error 1 [...] So the fix will be not to package the rpcgen generated file in the source tarball. Change-Id: I1d136a25c49aeea2d84e96bf065fe46bf0214a13 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* block: add support to prealloc = full | no optionPrasanna Kumar Kalever2017-06-221-0/+1
| | | | | | | | | currently we allocate sparse files for block backends in the gluster volume, with 'prealloc = full' option introduced by this patch we should be able to fully preallocate the backend block file. Change-Id: Ibf32df5f978f732a3fd248693170463da6d08268 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* cli: increase the clnt_call() total time out.Prasanna Kumar Kalever2017-05-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The connect() in daemon takes too long to return for invalid IP addresses, the delay is much higher that the CLI RPC Timeout, hence the CLI returns before the daemon returns. Hence SIGPIPE is issued. The issue can be fixed by increasing the CLI RPC clnt_call() TIMEOUT. This should actually be handled like: struct timeval tv; CLIENT *cl; cl=clnt_create("somehost", SOMEPROG, SOMEVERS, "tcp"); if (cl=NULL) { exit(1); } tv.tv_sec=60; /* change timeout to 1 minute */ tv.tv_usec=0; clnt_control(cl, CLSET_TIMEOUT, &tv); But currently there is a bug in sun RPC which ignores TIMEOUT set using cln_control. See [1] Hence using regex to override default TIMEOUT generated in rpc code. [1] https://lists.gnu.org/archive/html/bug-glibc/2000-10/msg00095.html Change-Id: I75eceea6b9f362f8bf8c2fcb687155635efc65d7 Fixes: #15 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* login: one command for logging-in to all gateways of a targetPrasanna Kumar Kalever2017-05-041-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently from the initiator side we need to login to mpath no. of nodes individually for establishing connect with all multipathed block devices from the client side, thus we need to execute mpath no. of login commands (i.e. login to each server) This can be minimized to single login command per target by configuring all gateways for a particular target in all gateways. Currently, $ gluster-block create VOL/BLOCK ha 3 HOSTx,HOSTy,HOSTz 10GiB Creates only one TPG i.e tpg1 (Read as Target Portal Group with Tag 1) on each node/server, with one portal listening on respective IP. All the gateways/nodes emulate same backend as target LUN with same WWN (for multipath representation) So at client side. we need to execute 3 commands to login all gateways $ iscsiadm -m discovery -t st -p HOSTy -l $ iscsiadm -m discovery -t st -p HOSTz -l $ iscsiadm -m discovery -t st -p HOSTx -l In the above case, user may login in any fashion, which is out of our control. Since we have failover multipath configuration, at a given time only one gateway can TX RX the data. so predicting active path/connection is not possible. With this patch, $ gluster-block create VOL/BLOCK ha 3 HOSTx,HOSTy,HOSTz 10GiB Creates 3 TPG's, tpg1(portal HOSTx), tpg2(portal HOSTy) and tpg3(portal HOSTz) on all the three gateways/nodes (IN same order). Basically, each gateway is define to every other gateway - but the other (other than local) gateway entries are in a disabled state. When the client starts the login sequence it issues the RPTG to the one nodes, but now that node can respond with portal IP's for all of the gateways. e.g. GW1 GW2 GW3 - tpg1/enabled - tpg1/disabled - tpg1/disabled - tpg2/disabled - tpg2/enabled - tpg2/disabled - tpg3/disabled - tpg3/disabled - tpg3/enabled Advantage, * Only one login command is needed, unlike 3 login's before, $ iscsiadm -m discovery -t st -p ANYONEHOST -l * Always tpg1 will be tried for making an active path/connection, hence we can predict that the first host in the list {HOSTx,HOSTy,HOSTz} will be tried for active connection. Hence we can be able to better manage load on each nodes, by selectively supplying Hosts in the list. Change-Id: I70f73b1d46812cb1bd8dc80f771ec20b0f0415bf Fixes: #9 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* create: support 'auth enable' optionPrasanna Kumar Kalever2017-05-021-0/+3
| | | | | | | | | | | | | | | | | | | | | | This patch add support to enable auth while create. The schematics of authentication setting for/while create, looks like $ gluster-block create block-test/sample-block ha 1 auth enable \ 192.168.0.105 1GiB --json-pretty { "IQN":"iqn.2016-12.org.gluster-block:dc6cca79-f9b7-44f5-acaf-ac81c9cc7c2e", "USERNAME":"dc6cca79-f9b7-44f5-acaf-ac81c9cc7c2e", "PASSWORD":"ae48635a-6902-454c-949a-f2ad0e056086", "PORTAL(S)":[ "192.168.0.105:3260" ], "RESULT":"SUCCESS" } Change-Id: Ib8f5ddd904cb879e0ee05f6a7c3c381c6615a0e4 Fixes: #5 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* modify: add support for one way authenticationPrasanna Kumar Kalever2017-05-021-0/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch introduce or rather implement modify command for enabling authentication for block devices. The schematics of authentication setting, looks like $ gluster-block modify block-test/sample-block auth enable --json-pretty { "SUCCESSFUL ON":[ "192.168.0.105" ], "IQN":"iqn.2016-12.org.gluster-block:8917def2-e90d-4406-8c9c-6d06b6851bbe", "USERNAME":"8917def2-e90d-4406-8c9c-6d06b6851bbe", "PASSWORD":"a3e75362-a446-45af-98d0-a1ed7e10d7f0", "RESULT":"SUCCESS" } As an effect it brings changes in 'info' command response, note PASSWORD $ gluster-block info block-test/sample-block --json-pretty { "NAME":"sample-block", "VOLUME":"block-test", "GBID":"8917def2-e90d-4406-8c9c-6d06b6851bbe", "SIZE":1073741824, "HA":1, "PASSWORD":"a3e75362-a446-45af-98d0-a1ed7e10d7f0", "BLOCK CONFIG NODE(S)":[ "192.168.0.105" ] } The schematics of auth disabling, looks like $ gluster-block modify block-test/sample-block auth disable --json-pretty { "SUCCESSFUL ON":[ "192.168.0.105" ], "IQN":"iqn.2016-12.org.gluster-block:add99c38-3c14-42d7-bf23-7d02f388e1e7", "RESULT":"SUCCESS" } Change-Id: I06d095b50401c131ac89cc142497f21d2205164a Fixes: #5 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* gluster-block: support json responsePrasanna Kumar Kalever2017-04-281-12/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | This is how cli response looks like, on supplying '--json*' flag to cmd-args: $ gluster-block create block-test/sample-block1 ha 1 localhost.localdomain 1GiB --json (or) $ gluster-block create block-test/sample-block2 ha 1 localhost.localdomain 1GiB --json-spaced { "IQN": "iqn.2016-12.org.gluster-block:681af106-85f1-4a02-a122-57c80903458c", \ "PORTAL(S)": [ "localhost.localdomain:3260" ], "RESULT": "SUCCESS" } $ gluster-block create block-test/sample-block3 ha 1 localhost.localdomain 1GiB --json-plain {"IQN":"iqn.2016-12.org.gluster-block:0fdf6647-57f2-477f-8dd4-54a3de06e410",\ "PORTAL(S)":["localhost.localdomain:3260"],"RESULT":"SUCCESS"} $ gluster-block create block-test/sample-block4 ha 1 localhost.localdomain 1GiB --json-pretty { "IQN":"iqn.2016-12.org.gluster-block:e92ca4a0-5325-4c4b-a407-9e75790e4c7f", "PORTAL(S)":[ "localhost.localdomain:3260" ], "RESULT":"SUCCESS" } Change-Id: Ie51039e3dee0b3357d2347b4087e0fbe299aa29e Fixes: #3 Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* build: use rpcgen to generate all XDR codeNiels de Vos2017-03-174-0/+75
| | | | | | | | | | | | | | | | | | | | | Remove all generated files and have them generated when needed. This build a libgbrpcxdr.la archive with the .o files that gets linked into the libgbrpc.la archive. 'rpcgen' generates .c code that triggers warnings for various compilers. This is not something that can easily be fixed, so add rpc-pragmas.h (like GlusterFS does) to prevent these warnings. There are some functions used by gluster-blockd.c that are not part of the header and were manually added to block.h. Because block.h get regenerated now, these functions have been added to a new file block_svc.h. Note that generated and compiled files land in $(top_builddir). This directory does not need to be the same as $(top_srcdir). Change-Id: I0e764d159d6d785699537eed4e24b16883218038 Fixes: #2 Signed-off-by: Niels de Vos <ndevos@redhat.com>
* gluster-block: create portal only with ip addressPrasanna Kumar Kalever2017-03-131-0/+1
| | | | | | | | | portal create with FQDN or hostname seems to be not working i.e. iscsiadm fails to discover the nodes or the otherway targetcli is unable to export the LUN right. Change-Id: Ibe0e2aa1b365d6c74a7974b2faf502d2c2ac38ad Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* cli: deprecate volserver optionPrasanna Kumar Kalever2017-02-171-2/+0
| | | | | | | volserver can be considered as "localhost", as we anyway tieing-up glusterd, gluster-blockd and cli processes. Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
* gluster-block: migrate build to libtoolz and create rpmPrasanna Kumar Kalever2017-02-071-0/+59
Till now we had simple makefile for checking dependencies and building. Using libtoolz will give more control on dependency checks and flexibility. This patch also introduce rpm build feature. Compiling: $ ./autogen.sh $ ./configure $ make -j $ make install Building RPMS: $ make rpms Running: $ systemctl start gluster-blockd.service Using CLI: $ gluster-block help Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>