1
0
mirror of https://github.com/gluster/gluster-block.git synced 2026-02-06 06:45:30 +01:00
Commit Graph

40 Commits

Author SHA1 Message Date
Prasanna Kumar Kalever
149c72ca06 socket: switch to MT-safe get host addr info
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>
2017-09-19 11:20:32 +05:30
Prasanna Kumar Kalever
3d0953aa99 rpc: switch to MT-safe block RPC routines
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>
2017-09-19 04:07:48 +00:00
Prasanna Kumar Kalever
1a0e590851 misc: fix warnings
Change-Id: I11274ad59925ec3d034baefc2cc2e307afa45479
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-08-29 23:00:13 +05:30
Prasanna Kumar Kalever
64ba10f397 gluster-block: parse remote command outputs
Change-Id: Ic2317843a8bd882fc26233373a4b4c35b13f24c6
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-08-28 20:56:04 +05:30
Prasanna Kumar Kalever
1316624066 gluster-block: use targetcli interactive mode
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>
2017-08-28 09:36:00 +00:00
Prasanna Kumar Kalever
91d9da62ce rpc: use port 24010 for all gluster-blockd management
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>
2017-08-24 12:13:39 +05:30
Prasanna Kumar Kalever
b535c44fdd logger: support logdir choosing via Environment variable
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>
2017-08-17 14:22:55 +05:30
Niels de Vos
0a21a55652 utils: fix trivial compile warning
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>
2017-07-04 18:28:59 +00:00
Michael Adam
a2dff3381a Don't let LOG segfault if log dir does not exist - fall back to stderr.
Change-Id: I65ad54381362280d9a5596e48aa3242f1160fd2d
Signed-off-by: Michael Adam <obnox@redhat.com>
2017-06-22 18:51:59 +02:00
Prasanna Kumar Kalever
94c79620db block: add support to prealloc = full | no option
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>
2017-06-22 16:30:46 +05:30
Prasanna Kumar Kalever
f632a4b124 info: show size in human readable format
Also s/BLOCK CONFIG NODE(S)/EXPORTED NODE(S)/ in the info output

$ gluster-block info sample/block
NAME: block
VOLUME: sample
GBID: 6bd70984-be2c-43ac-9e9d-bad04010e42f
SIZE: 1.0 GiB
HA: 1
PASSWORD:
EXPORTED NODE(S): 192.168.0.105

Change-Id: I473b854b939c96b99be8e0b172ac6957b8bc6006
Fixes: #23
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
2017-06-13 06:28:42 +00:00
Prasanna Kumar Kalever
75d6827b8b daemon: narrow down the failure reason due to dependency service
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>
2017-06-06 17:26:02 +00:00
Pranith Kumar K
4b128f2ff6 Fix compiler warnings
Change-Id: I9dd396737a6719fe3828ec3e9c26bfd8aa1da238
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
2017-06-06 10:00:39 +00:00
Prasanna Kumar Kalever
53dfaee959 log: print human readable timestamp
Before:
-------
Epoch number, eg: [1496312036]

Now:
----
Human readable, eg: [2017-06-01 18:37:46.834377]

Change-Id: Ibcb3de512086f6fa36ad7169f0d9189636361331
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-06-05 23:00:19 +05:30
Prasanna Kumar Kalever
b5337c894f logger: filter log messages based on severity level
This patch adds '--log-level' options

supported log levels:
{
   "NONE",
   "ERROR",
   "WARNING",
   "INFO",
   "DEBUG",
   "TRACE"
}

TRACE being max logging

$ gluster-blockd --help
[...]
  --log-level <LOGLEVEL>
        Logging severity. Valid options are,
        TRACE, DEBUG, INFO, WARNING, ERROR and NONE [default: INFO]
[...]

Change-Id: I5a387eea3e7e7be10a0b56102a61eb81b4ebf2fa
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-06-05 22:46:33 +05:30
Prasanna Kumar Kalever
bc283e0e69 logger: improve logging at server side
Change-Id: I7a2f8804b7d33c58101bbfb58dcff15370239311
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-06-05 22:29:03 +05:30
Prasanna Kumar Kalever
15d9ee36c7 daemon: make glfs lru cache capacity configurable
$ gluster-blockd --help
gluster-blockd (0.2)
usage:
  gluster-blockd [--glfs-lru-count <count>]

commands:
  --glfs-lru-count <count>
        glfs objects cache capacity [max: 512] (default: 5)
  --help
        show this message and exit.
  --version
        show version info and exit.

Change-Id: I00a9277690a1c5ace51e223e9e4ed9ce61ae2428
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-06-05 22:12:20 +05:30
Prasanna Kumar Kalever
3994aa8cf1 cache: implement LRU cache to hold glfs objects
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]
2017-06-05 11:47:16 +00:00
Prasanna Kumar Kalever
2a3d70e536 gluster-block: update journal data synchronously
Also use O_SYNC while creating/truncating block file.

Change-Id: Ic0bcc3f2905c438ca5b5d3e95955bbd5d95d3ef4
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-05-19 15:59:01 +05:30
Prasanna Kumar Kalever
1ed7bd1430 modify: add support for one way authentication
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>
2017-05-02 15:08:51 +05:30
Prasanna Kumar Kalever
7e29a1a249 gluster-block: support json response
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>
2017-04-28 11:43:02 +05:30
Prasanna Kumar Kalever
310f79118b logging: redirect configshell logs to GB_LOGDIR
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>
2017-04-13 18:38:27 +05:30
Prasanna Kumar Kalever
2445dd3403 gluster-blockd: parse create and delete outputs
The new parsed output of create and delete command will look like:

$ gluster-block create sample/sample-block ha 2 ${HOST1} ${HOST2} 1GiB
IQN: iqn.2016-12.org.gluster-block:aafea465-9167-4880-b37c-2c36db8562ea
PORTAL(S): ${HOST1}:3260 ${HOST2}:3260
RESULT: SUCCESS

$ gluster-block delete sample/sample-block
SUCCESSFUL ON:  ${HOST1} ${HOST2}
RESULT: SUCCESS

Change-Id: Id98e643c62a898a1f7298b6cfeb6ddfa10397b7f
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-27 18:22:40 +05:30
Prasanna Kumar Kalever
bb50c512e5 cli: add traditional options
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>
2017-02-27 04:50:22 -05:00
Prasanna Kumar Kalever
9f1c8a5ba4 cli: change in synopsis for gluster-block commands
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>
2017-02-24 14:58:50 +05:30
Prasanna Kumar Kalever
c1c2233381 lockfile: don't allow multiple instances of daemon to run
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>
2017-02-21 15:56:52 +05:30
Prasanna Kumar Kalever
905c66de4e gluster-blockd: defend on connect() issues
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>
2017-02-20 18:17:28 +05:30
Prasanna Kumar Kalever
cc1294a867 gluster-block: improve log messages
improve strings
add missing log messages wherever helpful

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-20 16:30:14 +05:30
Prasanna Kumar Kalever
245ee93f27 gluster-block: refactor return values
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-19 14:40:51 +05:30
Prasanna Kumar Kalever
7607427636 cli: deprecate volserver option
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>
2017-02-17 10:45:27 +05:30
Prasanna Kumar Kalever
be857905a8 meta: thread safe GB_METAUPDATE_OR_GOTO
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>
2017-02-16 19:49:42 +05:30
Prasanna Kumar Kalever
f3132b97df daemon: fix minor bugs
Reported-by: Pranith Kumar K <pkarampu@redhat.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-16 19:49:34 +05:30
Prasanna Kumar Kalever
d7775f350c cli: add command to furnish pkg version info
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>
2017-02-15 18:57:35 +05:30
Prasanna Kumar Kalever
b361cc1ce3 cli: cart off unwanted output from create command
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>
2017-02-15 16:25:02 +05:30
Prasanna Kumar Kalever
86ae67f117 gluster-blockd: create logging directories
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-15 15:20:22 +05:30
Prasanna Kumar Kalever
46d4dda33d daemon: redirect logs to logdir
replace fprintf calls with LOG()

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-14 13:39:33 +05:30
Prasanna Kumar Kalever
a6dc593444 cli: review fixes in gluster-block
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-11 20:52:21 +05:30
Prasanna Kumar Kalever
9f570a3967 gluster-block: create block files in '/block-store' dir
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>
2017-02-08 21:31:43 +05:30
Prasanna Kumar Kalever
6702716292 build: fix minor warnings
mostly uninitialized use of variables.
check return values from function calls.

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
2017-02-08 14:05:28 +05:30
Prasanna Kumar Kalever
23b1245579 gluster-block: migrate build to libtoolz and create rpm
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>
2017-02-07 13:29:05 +05:30