Swift源码分析----swift-account-info
来源:互联网 发布:u盘损坏数据恢复 编辑:程序博客网 时间:2024/05/26 02:19
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
博客地址:http://blog.csdn.net/gaoxingnengjisuan
邮箱地址:dong.liu@siat.ac.cn
PS:最近没有登录博客,很多朋友的留言没有看见,这里道歉!还有就是本人较少上QQ,可以邮件交流。
概述部分:
获取AccountBroker类的初始化对象;
从数据库获取account的全局数据信息,包括account/created_at/put_timestamp/delete_timestamp/container_count/object_count/bytes_used/hash/id等信息;
打印account的元数据信息;
初始化类Ring,实现加载/etc/swift/account.ring.gz中的数据,并以此初始化类RingData;
根据上面获取的ring的数据,获取account在ring上的位置信息;
所以获取的数据为:
获取account的元数据信息;
获取account在ring上的位置信息;
源码解析部分:
下面是这部分代码的主要执行流程,代码中较重要的部分已经进行了相关的注释;
import sysfrom optparse import OptionParserfrom swift.cli.info import print_info, InfoSystemExitif __name__ == '__main__': parser = OptionParser('%prog [options] ACCOUNT_DB_FILE') parser.add_option( '-d', '--swift-dir', default='/etc/swift', help="Pass location of swift directory") options, args = parser.parse_args() if len(args) != 1: sys.exit(parser.print_help()) try: print_info('account', *args, **vars(options)) except InfoSystemExit: sys.exit(1)
def print_info(db_type, db_file, swift_dir='/etc/swift'): """ 打印相关信息: 如果指定数据类型是account,则: 获取AccountBroker类的初始化对象; 从数据库获取account的全局数据信息,包括account/created_at/put_timestamp/delete_timestamp/container_count/object_count/bytes_used/hash/id等信息; 打印account的元数据信息; 初始化类Ring,实现加载/etc/swift/account.ring.gz中的数据,并以此初始化类RingData; 根据上面获取的ring的数据,获取account在ring上的位置信息; 如果指定数据类型是container,则: 获取ContainerBroker类的初始化对象; 从数据库获取container的全局数据信息,包括account/container/created_at/put_timestamp/delete_timestamp/object_count/bytes_used/reported_put_timestamp/reported_delete_timestamp/reported_object_count/reported_bytes_used/hash/id等信息; 打印container的元数据信息; 初始化类Ring,实现加载/etc/swift/container.ring.gz中的数据,并以此初始化类RingData; 根据上面获取的ring的数据,获取container在ring上的位置信息; """ if db_type not in ('account', 'container'): print "Unrecognized DB type: internal error" raise InfoSystemExit() if not os.path.exists(db_file) or not db_file.endswith('.db'): print "DB file doesn't exist" raise InfoSystemExit() if not db_file.startswith(('/', './')): db_file = './' + db_file # don't break if the bare db file is given # 获取AccountBroker类的初始化对象; if db_type == 'account': broker = AccountBroker(db_file) datadir = ABDATADIR else: broker = ContainerBroker(db_file) datadir = CBDATADIR # 获取相关数据类型的全局信息; info = broker.get_info() account = info['account'] container = info['container'] if db_type == 'container' else None # 打印指定数据类型的元数据信息; print_db_info_metadata(db_type, info, broker.metadata) # 初始化类Ring,实现加载/etc/swift/account.ring.gz中的数据,并以此初始化类RingData; try: ring = Ring(swift_dir, ring_name=db_type) except Exception: ring = None # 打印account或container在ring上的位置信息; else: print_ring_locations(ring, datadir, account, container)
def print_ring_locations(ring, datadir, account, container=None): """ 打印account或container在ring上的位置信息; """ if ring is None or datadir is None or account is None: raise ValueError('None type') storage_type = 'account' if container: storage_type = 'container' try: part, nodes = ring.get_nodes(account, container, None) except (ValueError, AttributeError): raise ValueError('Ring error') else: path_hash = hash_path(account, container, None) print '\nRing locations:' for node in nodes: print (' %s:%s - /srv/node/%s/%s/%s.db' % (node['ip'], node['port'], node['device'], storage_directory(datadir, part, path_hash), path_hash)) print '\nnote: /srv/node is used as default value of `devices`, the ' \ 'real value is set in the %s config file on each storage node.' % \ storage_type
1 0
- Swift源码分析----swift-account-info
- Swift源码分析----swift-account-audit(1)
- Swift源码分析----swift-account-audit(2)
- Swift源码分析----swift-account-auditor
- Swift源码分析----swift-account-reaper(1)
- Swift源码分析----swift-account-reaper(2)
- Swift源码分析----swift-account-replicator(1)
- Swift源码分析----swift-account-replicator(2)
- Swift源码分析----swift-container-info
- Swift源码分析----swift-object-info
- Swift源码分析----swift-proxy与swift-account(1)
- Swift源码分析----swift-proxy与swift-account(2)
- OpenStack之Swift:账户服务器(Account Server)源码分析
- Swift StateMachine源码分析
- Swift源码分析----swift-container-auditor
- Swift源码分析----swift-object-auditor(1)
- Swift源码分析----swift-object-auditor(2)
- Swift源码分析----swift-object-expirer
- Step By Step(Lua目录)
- HDU 4876 ZCC loves cards _(:зゝ∠)_ 随机输出保平安
- SQLite数据库中的SQL语句
- Delphi在调试的时候查看变量的值
- SQLite学习手册(目录)
- Swift源码分析----swift-account-info
- 解决VBOX虚拟机迁移中的虚拟硬盘加载出错问题
- 盘点游戏行业的那些干货网站
- hdu2033 人见人爱A+B
- Tkinter Entry only allows digit number
- Android 适配---notification led 呼吸灯
- 源品汇资讯:绿茵阁、圣农发展有产品检出沙门氏菌
- 【哥德巴赫猜想】
- 在eclipse中查看.class文件