• xend调用xenstore的出错揭秘


    近期发现几例问题,均是xend里面报了同一个错误

    File "/usr/lib64/python2.4/site-packages/xen/xend/xenstore/xstransact.py", line 29, in __init__
    self.transaction = xshandle().transaction_start()
    Error: (2, 'No such file or directory')


    好吧,可能有人会觉得我们太土了,怎么还在用xend,我也很鄙视自己。不管怎样,既然有问题,就得解决。刚好xenstore的实现之前也不是非常了解,借此好好学习下。

    根据xend报错的路径,可以发现xshandle这个方法,里面的一个实例,只在xend start初始化一次即可。那么可以排除xshandle()这个方法出错。

    transaction_start这个方法是python调用xenstore的c库方法。


    xenstore一般大家都理解成一个小型db,里面存了各种domain有用的信息,我们用的还是c版的,社区已有一个ocalm写的,不过还没试用过。还好是c的,还能看懂,换了ocalm的,又要多花点一点时间了。

    具体代码逻辑也就不多说了,看了应该都能明白。大致流程简单说下,就是打开xenstore的时候,建立一个连接,有对应的connection的数据结构,还有一个全局的context的东西,它里面的保存着最新数据的文件fd,及相关数据信息。所以有时候,读xenstore,可以直接内存返回,有的时候,需要重新读文件,写文件,这个就是transaction做的事情。

    一个transaction_start,就是会用原来的fd读取所有数据,然后把它写到一个新的文件, transaction_end的时候,会rename成原来的文件,这就是事务的实现方法。


    所以看到这里,结合errorcode,就很容易怀疑是文件操作出错之类,然后翻看系统的message日志,果然,在xend出错的时间点都对应有磁盘出错的日志。


    谜底揭晓:系统盘出错导致xend调用xenstore出错


    解决方案:可以临时把/var/lib/xenstored/ 软连接到/dev/shm, 再把tdb考到/dev/shm下。中间最好xend stop,避免信息出现不一致问题。

  • 相关阅读:
    std::copy、std_copy_if、std::copy_n
    std::mem_fn
    gitresolved
    基于多传感器融合的贵重物品定位管理物联网解决方案简析
    ADS1299开发调试总结之寄存器使用说明简析
    可穿戴心电ECG监测的技术路径及特点
    基于ADS1292芯片的解决方案之芯片简析
    动物生理信号遥测系统解决方案综述
    ubuntu16.04 关闭系统的屏幕阅读功能
    九轴加速度传感器的一些科普概念
  • 原文地址:https://www.cnblogs.com/riskyer/p/3266522.html
Copyright © 2020-2023  润新知