<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gluster-block.git/rpc/rpcl, branch master</title>
<subtitle></subtitle>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/'/>
<entry>
<title>delete: support [unlink-storage &lt;yes|no&gt;] option</title>
<updated>2018-02-08T07:41:56+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-11-29T12:14:50+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=7008073e1d00c1af0dc5913cdf5d94372f10088d'/>
<id>7008073e1d00c1af0dc5913cdf5d94372f10088d</id>
<content type='text'>
$ gluster-block help
gluster-block (0.3)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]

  delete  &lt;volname/blockname&gt; [unlink-storage &lt;yes|no&gt;] [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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
$ gluster-block help
gluster-block (0.3)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]

  delete  &lt;volname/blockname&gt; [unlink-storage &lt;yes|no&gt;] [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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>create: support [storage &lt;filename&gt;] option</title>
<updated>2018-02-08T07:41:40+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2018-02-07T16:10:13+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=450f7e89116ed104f092dd1a709c0f057150a4f7'/>
<id>450f7e89116ed104f092dd1a709c0f057150a4f7</id>
<content type='text'>
$ gluster-block help
gluster-block (0.3)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
  create  &lt;volname/blockname&gt; [ha &lt;count&gt;]
                              [auth &lt;enable|disable&gt;]
                              [prealloc &lt;full|no&gt;]
                              [storage &lt;filename&gt;]
                              &lt;host1[,host2,...]&gt; &lt;size&gt;
        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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
$ gluster-block help
gluster-block (0.3)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
  create  &lt;volname/blockname&gt; [ha &lt;count&gt;]
                              [auth &lt;enable|disable&gt;]
                              [prealloc &lt;full|no&gt;]
                              [storage &lt;filename&gt;]
                              &lt;host1[,host2,...]&gt; &lt;size&gt;
        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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>replace: add replace feature</title>
<updated>2018-02-07T11:19:21+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2018-02-05T09:37:26+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=540e81676b1011dcf85fbe5cd6739a4f2143b2ab'/>
<id>540e81676b1011dcf85fbe5cd6739a4f2143b2ab</id>
<content type='text'>
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 &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]
  replace &lt;volname/blockname&gt; &lt;old-node&gt; &lt;new-node&gt; [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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]
  replace &lt;volname/blockname&gt; &lt;old-node&gt; &lt;new-node&gt; [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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>versioning: add capabilities support</title>
<updated>2018-01-18T10:11:39+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2018-01-10T18:18:38+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=46f460fa669ce9f7b9f2de9e54cefc3726dcd029'/>
<id>46f460fa669ce9f7b9f2de9e54cefc3726dcd029</id>
<content type='text'>
Change-Id: Ic63f7c9fa169ee37b796093554c59016fbbfaa46
Signed-off-by: Prasanna Kumar Kalever &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Change-Id: Ic63f7c9fa169ee37b796093554c59016fbbfaa46
Signed-off-by: Prasanna Kumar Kalever &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rpc: switch to MT-safe block RPC routines</title>
<updated>2017-09-19T04:07:48+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-09-18T14:19:10+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=3d0953aa99eed434a1977de3131b264c48fca64b'/>
<id>3d0953aa99eed434a1977de3131b264c48fca64b</id>
<content type='text'>
blockResponse *
block_delete_1(blockDelete *argp, CLIENT *clnt)
{
        static blockResponse clnt_res; &lt;&lt;&lt;&lt;&lt;&lt;-------- Same memory is used by everyone

        memset((char *)&amp;clnt_res, 0, sizeof(clnt_res)); &lt;&lt;&lt;&lt;&lt;---- Here memset is happening
        if (clnt_call (clnt, BLOCK_DELETE,
                (xdrproc_t) xdr_blockDelete, (caddr_t) argp,
                (xdrproc_t) xdr_blockResponse, (caddr_t) &amp;clnt_res,
                TIMEOUT) != RPC_SUCCESS) {
                return (NULL);
        }
        return (&amp;clnt_res); &lt;&lt;&lt;&lt;&lt;---- ptr to this memory is returned.
}

So while Thread-1 is returned "return (&amp;clnt_res);" another thread could be
doing "memset((char *)&amp;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 &lt;prasanna.kalever@redhat.com&gt;
Signed-off-by: Pranith Kumar K &lt;pkarampu@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
blockResponse *
block_delete_1(blockDelete *argp, CLIENT *clnt)
{
        static blockResponse clnt_res; &lt;&lt;&lt;&lt;&lt;&lt;-------- Same memory is used by everyone

        memset((char *)&amp;clnt_res, 0, sizeof(clnt_res)); &lt;&lt;&lt;&lt;&lt;---- Here memset is happening
        if (clnt_call (clnt, BLOCK_DELETE,
                (xdrproc_t) xdr_blockDelete, (caddr_t) argp,
                (xdrproc_t) xdr_blockResponse, (caddr_t) &amp;clnt_res,
                TIMEOUT) != RPC_SUCCESS) {
                return (NULL);
        }
        return (&amp;clnt_res); &lt;&lt;&lt;&lt;&lt;---- ptr to this memory is returned.
}

So while Thread-1 is returned "return (&amp;clnt_res);" another thread could be
doing "memset((char *)&amp;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 &lt;prasanna.kalever@redhat.com&gt;
Signed-off-by: Pranith Kumar K &lt;pkarampu@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>gluster-block: support force delete option</title>
<updated>2017-08-08T10:14:32+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-08-02T18:12:29+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=d723907c8eaa25f107c7fadd79ca5f9bc6596edf'/>
<id>d723907c8eaa25f107c7fadd79ca5f9bc6596edf</id>
<content type='text'>
$ gluster-block help
gluster-block (0.2.1)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]
  delete  &lt;volname/blockname&gt; [force]
        delete block device.
[...]

Change-Id: I64ac01ec148e2e1d4d0ba0d4c5560df9334d58f5
Signed-off-by: Prasanna Kumar Kalever &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
$ gluster-block help
gluster-block (0.2.1)
usage:
  gluster-block &lt;command&gt; &lt;volname[/blockname]&gt; [&lt;args&gt;] [--json*]

commands:
[...]
  delete  &lt;volname/blockname&gt; [force]
        delete block device.
[...]

Change-Id: I64ac01ec148e2e1d4d0ba0d4c5560df9334d58f5
Signed-off-by: Prasanna Kumar Kalever &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>dist: do not package the rpcgen generated files</title>
<updated>2017-06-23T19:48:57+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-06-23T18:59:32+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=e9907120fa9797054e94e1b8d26ad7af0a373b0a'/>
<id>e9907120fa9797054e94e1b8d26ad7af0a373b0a</id>
<content type='text'>
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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: add support to prealloc = full | no  option</title>
<updated>2017-06-22T11:00:46+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-06-12T06:29:13+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=94c79620db4451bf804d6ab631c9ca59759dbc21'/>
<id>94c79620db4451bf804d6ab631c9ca59759dbc21</id>
<content type='text'>
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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>cli: increase the clnt_call() total time out.</title>
<updated>2017-05-05T10:39:30+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-05-05T09:41:24+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=1dbbd7d457251afd1f005bf262b5c366642535e2'/>
<id>1dbbd7d457251afd1f005bf262b5c366642535e2</id>
<content type='text'>
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, &amp;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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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, &amp;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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>login: one command for logging-in to all gateways of a target</title>
<updated>2017-05-04T14:16:22+00:00</updated>
<author>
<name>Prasanna Kumar Kalever</name>
<email>prasanna.kalever@redhat.com</email>
</author>
<published>2017-04-17T12:11:02+00:00</published>
<link rel='alternate' type='text/html' href='http://dev.gluster.org/cgit/gluster-block.git/commit/?id=a31ee2d59d59c74e2a1b91dc40cd12b7c918a45c'/>
<id>a31ee2d59d59c74e2a1b91dc40cd12b7c918a45c</id>
<content type='text'>
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 &lt;prasanna.kalever@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;prasanna.kalever@redhat.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
