Record the responses of all the requests for the operations
Create/Delete/Modify/Replace on gluster-block.
The logging format is:
In case of success:
[time] INFO: <command string> <function details>
[time] INFO: Response string <function details>
In case of failure:
[time] INFO: <command string> <function details>
[time] ERROR: Response string <function details>
Reviewed-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: Bhumika Goyal <bgoyal@redhat.com>
With the introduction of new option 'storage' for the create command,
the field 'size' is rendered optional when that 'storage' option is given.
Update the man page and help commands to reflect this change.
Signed-off-by: Bhumika Goyal <bgoyal@redhat.com>
Reviewed-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
From man:
clnt_destroy(CLIENT *clnt);
A macro that destroys the client's RPC handle. Destruction usually involves
deallocation of private data structures, including clnt itself. Use of
clnt is undefined after calling clnt_destroy(). If the RPC library opened the
associated socket, it will close it also. Otherwise, the socket remains open.
we are closing the socket twice in this case,
i.e. by calling clnt_destroy and then close(sockfd)
Thanks to Pranith for the RC.
Tested-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Pranith Kumar K <pkarampu@redhat.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
also other minor compiler errors
Change-Id: I17625008d91740f3ba9efc6e574ec3dcd0b6c85f
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
From,
$ targetcli /backstores/user:glfs/block get attribute
ATTRIBUTE CONFIG GROUP
======================
hw_block_size=512 [ro]
----------------------
Hence making the min acceptable size to be 1 sector/block i.e. 512 bytes
This patch also, explicitly mention in docs about bytes as default size units.
Change-Id: Iec8797082d02cc9ad51fc17e11f2ba3073aaeda0
Fixes: #35
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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>
Currently the default logdir is DATADIR /log/gluster-block/
This patch will provide a way to change this default logdir via Env variable
$ export GB_LOGDIR=/var/log/gluster-block-new-path/
Note: make sure to restart the processes (cli & daemon) after you set GB_LOGDIR
Change-Id: Id142e4a4dfe7b6ebc9cf8296b8ceb8bff37691b8
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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>
Also refactored the code around to reduce number of allocations.
Change-Id: If5431f1504b6716ac4baec3a859189f6f21c80a4
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
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>
Currently, if gluster-block daemon is not running, we just exit cli
commands with non-zero return value, not leaving any clue to user.
This patch will print some clue if daemon is not operational.
Change-Id: Id54db267894a92b3818b72f7fe654ecd87a3cf1b
Fixes: #14
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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>
Though we do not use '--' style for arguments, this patch add supports
for traditional options "--version, --help and --usage".
Change-Id: Ie8bcf05dd46cb045c46ff9aa4f3079f87f848730
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
from now we will have fixed formats for commands.
The new outfit will look like:
$ gluster-block help
gluster-block (3ba7ec5)
usage:
gluster-block <command> <volname[/blockname]> [<args>]
commands:
create <volname/blockname> [ha <count>] <host1[,host2,...]> <size>
create block device.
list <volname>
list available block devices.
info <volname/blockname>
details about block device.
delete <volname/blockname>
delete block device.
help
show this message and exit.
version
show version info and exit.
Example usage:
$ gluster-block create volume/blockname 192.168.0.1 1GiB
$ gluster-block create volume/blockname ha 2 192.168.0.1,192.168.0.2 1GiB
$ gluster-block list volume
$ gluster-block info volume/blockname
$ gluster-block delete volume/blockname
Change-Id: Idc6b55c26432ed1ac3f002c2a2b3dbb81b180ec2
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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>
Improvements:
Version info displaying.
Improve help menu.
This patch also makes 'mpath' option as optional (default: 1)
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
The portal that target listens on by default will be 0.0.0.0;
With this patch we will be changing that to hostname of local machine.
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>