GaussDB的Roach工具中vaildate功能不能再单机下使用原因研究与分析

通过对Roach的py代码分析和使用方法发现,Roach的validate动作只能在集群中使用,不支持单机使用,具体原因如下:
首先以help的命令+提示进行validate操作来对日志进行跟踪,发现异常出现在GaussRoach.py的这三行出现的报错
在这里插入图片描述
所以我们可以到py脚本中看看这三行代码:
501行,这里我们可以看到这个报错代码已经跳转到init_cluster_info()函数中了,可以说明,此时语句默认初始化获取了集群信息,但是我们安装的版本是单机,所以获取不到一些集群的参数,于是错误日志会跳转到这里
image.png
583行,这里我们可以看到报错代码跳转到了do_roach函数中,但是从这里我们可以看到do_roach回去获取模式信息、动作信息,由于没有加mode参数,所以默认获取到的是集群信息,但我们没有集群,所以参数获取机会有问题于是会抛出错误
image.png
815行,这里我们看到实际上执行到了主函数,上面两个地方都会有错,那么根据函数调用顺序,这里执行也会有问题,所以不做过多解释。
image.png
那么,如果我们指定–mode single会怎么样呢?根据测试和之前的回答,其实也可以发现,执行成功了一半,然后又会有问题:
image.png
这次可以从日志中,跟踪到,错误代码有了一些变化,新的错误代码已经跟踪到了GSroachValidate.py:88行,那么我们就看看88行附近出现了什么:
image.png
这里可以看到已经准备开始检查了,但是却还是像章芋文老师说的因为缺少了参数而报错,所以基本可以定位,可能是这个地方的参数有问题:
image.png
但是核对了很久,发现参数数量也对,也没有错误的参数变量,所以应该问题不在这里了。
那么继续往下看:
g_opts.sshTool.executeCommand(cmd, “validate backupset sha245”,DefaultValue.SUCCESS, g_opts.nodeList)
在这段代码中,我们可以看到,调用了sshTool中的executeCommand动作。发现这个后,其实问题就很比较明了了。
即只要做validate就会跳转到GSroachValidate.py中,而GSroachValidate.py执行的真正检查函数中必须调用sshTool。而从GaussRoach.py中可以看到,sshTool函数只有在初始化集群参数的时候才会进行初始化,但是初始化单机环境,根本不会进行初始化。所以,在指定了–mode single的时候,我们可以跳过默认的cluster,告诉程序,通过了模式检查,但是在GSroachValidate.py的时候,由于无法调用sshTool中的executeCommand(或者说,调用后,少了初始化集群时候的参数),所以会造成这种错误。
image.png
最后,再解释一下,为什么在validate一个已经delete状态的备份集的时候就会显示出正常的不可用状态?
image.png
这是因为,我们已经告诉程序,我们是单机,且在GaussRoach.py中执行到do_validate的时候,会先去找backup-key,当发现没有这个backup-key的时候就会直接输出backup-key不可用,而不会跳转到GSroachValidate.py中做start_validate了
image.png

这里问题的解决,要特别感谢章芋文老师给我提出思路和建议以及我公司兰珊童鞋的老公-小史哥。是他们在深夜中,帮我一起查找分析原因,才能快速分析并找到问题原因。

从这里其实也可以看出GaussDB的一些工具中中,或多或少还是存在一些bug的。不过相信华为的GaussDB会一定会越来越完善。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值