This was fixed in an attempt to clean the sockfd leaks
Change-Id: Icd82635134050c83167a48b451b347f5c2b9bf39
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Signed-off-by: Pranith Kumar K <pkarampu@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, on each targetcli create call, rtslib will rebuild its bs_cache, so
as the /sys/kernel/config/target/core dir gets more entries this takes longer
and longer to scan. Hence using repetitive targetcli in the block create
for creating iqn, backend, setting acls, setting globals will induce too
much delay in block create. As the number of blocks on the node increases,
the delay will be too longer.
This does not happen if we open targetcli in interactive mode and just do
multiple create commands form it, since the bs_cache is build once.
Read More:
https://goo.gl/8aYT38
Change-Id: I2be78a748e013f253ce8f99746989a1cf735a56f
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
It looks like 24006 port is already registered by some other service,
and from [1] it looks like 24007 - 24241 are unassigned.
Currently,
24007 -> glusterd (tcp)
24008 -> glusterd (rdma)
24009 -> glustereventsd
so for gluster-blockd communications lets choose port 24010
[1] https://goo.gl/B2A4RU
Change-Id: I7d9f14b9897e479cececd2271ebf8a975d26ef71
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@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>
The following warning is reported with Fedora Rawhide (F-27) that comes
with an updated gcc version (7.1.1):
utils.c:217:21: warning: '*' in boolean context, suggest '&&' instead [-Wint-in-bool-context]
if (!tmp && (size * count)) {
~~~~~~^~~~~~~~
Change-Id: If1645e0e1cc1eaa1d8261914918c5a5be13d6dd8
Signed-off-by: Niels de Vos <ndevos@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>
With this change, we can further narrow down the reason for command
failure on remote node.
We get to know if:
* targetcli is installed
* tcmu-runner is running
* user:glfs is listed
Change-Id: Ib39ec525f951ca510008327b59ab99d8f7645ced
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Problem:
-------
1. Currently, each cli command take ~5 secs for execution. The Maximum
latency is due to initializing a glfs object (glfs_init() and friends).
2. OOM kills due to glfs_fini() leaks (~10MB per object)
Solution:
--------
Caching bipasses glfs_init() calls from the very next command, as in the first
command it goes via the glfs_init route, since there will be cache miss.
Hence with caching cli command on a local machine should take ~1 sec.
ATM, the cache query looks at the volume name only, as the host name will be
localhost in our case and transport will be tcp 24007 always.
The default cache capacity is 5 i.e there can be a max of five glfs entries in
the cache, anything more will lead to release of least recently used object.
This way, if there are <= 5 volume in use for block, there will be no
glfs_fini() calls, hence no leaks, no OOM's.
The next patch will help in making cache capacity configurable.
Change-Id: Ia891451cb92cf09959c1aff85976d78302ec7014
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
[ndevos: correct compiling+linking against libgfapi.so]
Also use O_SYNC while creating/truncating block file.
Change-Id: Ic0bcc3f2905c438ca5b5d3e95955bbd5d95d3ef4
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
currently,
GLOBAL CONFIG GROUP
===================
[...]
logfile=hello
-------------
Logfile to use.
[...]
i.e. configshell logs are collected at 'hello' file.
This patch will redirect configshell logs to
'GB_LOGDIR/gluster-block-configshell.log'
Change-Id: I487c6197578c24412fbec72cb8c354725614de59
Fixes: #13
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@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>
until now there is no check to defend on multiple runs of daemon within
the same node. This patch takes a non blocking lock on 'gluster-blockd.lock'
file, if it succeeds only then daemon is allowed to run, if there is
already a lock on lock-file (taken by some other instance of gluster-blockd)
we will exit.
This patch also renames GB_UNIX_ADDRESS from gluster-block.socket to
gluster-blockd.socket, as that makes better sense.
Change-Id: I43b285f9da15d078fe3df4d231d0ef8d44272d8f
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
currently remote connect(b/w gluster-blockd's) failed cases such as,
ECONNREFUSED
No-one listening on the remote address.
ENETUNREACH
Network is unreachable.
ETIMEDOUT
Timeout while attempting connection ...
are considered as CONFIGFAIL, this patch defend on these errno's.
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>
GB_METAUPDATE_OR_GOTO used an already opened glfs fd to update the
meta data, since we have mpath number of threads writing to the same
metadata file simultaneously, this will lead to thread concurrency and
data consistency issues.
Hence this patch protects GB_METAUPDATE_OR_GOTO with a lock and removes
fd sharing by moving glfs_creat/open and glfs_close within the MACRO.
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 response of below sub-operations as part of create are undesired
$ targetcli set global auto_add_default_portal=false
$ targetcli / saveconfig
$ targetcli set attributes generate_node_acls=1 demo_mode_write_protect=0
Hence redirecting them to '/dev/null'
This patch also fix a bug in the previous patch
i.e. missed inverting [!] function return in if()
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
till now we have '/block-meta' dir for meta files and actual block files
used to reside in '/' dir. From now, lets place block files in '/block-store'
So, this is how it looks like:
$ tree /mnt/
/mnt/
├── block-meta
│ ├── meta.lock
│ └── TARGET
└── block-store
└── 103e4cf1-bf41-404a-9fe1-b7c70fc33b3e
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
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>