On Wed, Sep 30, 2020 at 9:37 AM Ritesh Chikatwar <rchikatw(a)redhat.com>
wrote:
On Wed, Sep 30, 2020 at 1:54 AM Nir Soffer <nsoffer(a)redhat.com> wrote:
> On Tue, Sep 29, 2020 at 11:32 AM Michal Skrivanek
> <michal.skrivanek(a)redhat.com> wrote:
> >
> > [adding devel list]
> >
> > On 29 Sep 2020, at 09:51, Ritesh Chikatwar <rchikatw(a)redhat.com> wrote:
> >
> > Hello,
> >
> > i am new to VDSM codebase.
> >
> > There is one minor bug in gluster and they don't have any near plan to
> fix this. So i need to fix this in vdsm.
> >
> > The bug is when i run command
> > [root@dhcp35-237 ~]# gluster v geo-replication status
> > No active geo-replication sessions
> > geo-replication command failed
> > [root@dhcp35-237 ~]#
> >
> > So this engine is piling up with error. i need handle this in vdsm the
> code at this place
> >
> >
https://github.com/oVirt/vdsm/blob/master/lib/vdsm/gluster/cli.py#L1231
> >
> > If i run the above command with xml then i will get
> >
> > [root@dhcp35-237 ~]# gluster v geo-replication status --xml
> > geo-replication command failed
> > [root@dhcp35-237 ~]#
> >
> > so i have to run one more command before executing this and check in
> exception that it contains No active geo-replication sessions this string.
> for that i did like this
> >
> >
> > maybe it goes to stderr?
> >
> > other than that, no idea, sorry
> >
> > Thanks,
> > michal
> >
> >
> > try:
> > xmltree = _execGluster(command)
> > except ge.GlusterCmdFailedException as e:
> > if str(e).find("No active geo-replication sessions") != -1:
> > return []
>
> The issue is that _execGluster is not implemented correctly, dropping
> the stdout, stderror, and return the format string:
>
> "Command {self.cmd} failed with rc={self.rc} out={self.out!r}
> err={self.err!r}"
>
> As the error, inside a list.
>
> 109 def _execGluster(cmd):
> 110 try:
> 111 return commands.run(cmd)
> 112 except cmdutils.Error as e:
> 113 raise ge.GlusterCmdFailedException(rc=e.rc, err=[e.msg])
>
If i change err=[e.msg] -> err=e.out then i can get an error in 'e'. Do
you have any idea that it will impact anywhere i am actually kinda new to
vdsm code base.
> After fixing this issue you will be able to search in the error message
> of the original command, like this:
>
> if "needle" in e.err:
>
> But searching for text in an error message is fragile. It will break
> if vdsm is running
> with a different locale and the error message is localized, or if the
> error message
> is modified in a future gluster version.
>
Yes true. Because of this engine messages(1858236
<
https://bugzilla.redhat.com/show_bug.cgi?id=1858236>) are piling up so
thought of doing in this way if there is another of handling this in vdsm
let me know.
>
> The right thing is to fix the gluster tool so it it succeeds and
> passes the error
> code/message in a way that can be consumed by another program.
>
> Looking at _getTree(), this is how it already behaves:
>
> 116 def _getTree(out):
> 117 try:
> 118 tree = etree.fromstring(out)
> 119 rv = int(tree.find('opRet').text)
> 120 msg = tree.find('opErrstr').text
> 121 errNo = int(tree.find('opErrno').text)
> 122 except _etreeExceptions: # pylint:
> disable=catching-non-exception
> 123 raise ge.GlusterXmlErrorException(err=out)
> 124 if rv == 0:
> 125 return tree
> 126 else:
> 127 if errNo != 0:
> 128 rv = errNo
> 129 raise ge.GlusterCmdFailedException(rc=rv, err=[msg])
>
> Did you file a gluster bug for this?
>
There is a bug already created for this #1367
<
https://github.com/gluster/glusterfs/issues/1367>
>
> Nir
>
>