文档章节

DamageTable相关内容分析

linuxhunter
 linuxhunter
发布于 2016/07/06 09:32
字数 401
阅读 57
收藏 0

DamageTable主要包含DIRFRAG/DENTRY/BACKTRACE的Damage信息

DamageEntry类是DamageTable的基类,在该基类中包含两个成员(damage_entry_id_t/utime_t)分别对应damage_entry的ID值以及记录Damage时的时间

class DamageEntry {

     damage_entry_id_t id;

     utime_t reported_at;

};

 

DirFragDamage类继承DamageEntry,主要包含DirFrag的信息(inodeno_t/frag_t)分别对应inode和frag id,通过这两个id值可以唯一对应一个DirFrag

class DirFragDamage: public DamageEntry {

     inodeno_t ino;

     frag_t frag;

};

 

class DentryDamage: public DamageEntry {

     inodeno_t ino;

     frag_t frag;

     std::string dname;

     snapid_t snap_id;

};

 

class BacktraceDamage: public DamageEntry {

     inodeno_t ino;

};

 

class DirFragIdent {          唯一标识一个DirFrag

     inodeno_t ino;

     frag_t frag;

};

 

class DentryIdent {               唯一标识一个Dentry

     std::string dname;

     snapid_t snap_id;

};

 

class DamageTable {

     std::map<DirFragIdent, DamageEntryRef> dirfrags;          记录damaged dirfrages信息

     std::map<DirFragIdent, std::map<DentryIdent, DamageEntryRef> > dentries;     记录damaged dentries信息

     std::map<inodeno_t, DamageEntryRef> remotes;               记录remote damaged信息

     std::map<damage_entry_id_t, DamageEntryRef> by_id;     记录所有damged信息,通过id进行索引

     const mds_rank_t rank;

};

 

DamgeTable::notify_dentry()

|__创建DamageEntry类对象

|__将DamageEntry类对象插入到dentries数组中

|__将DamageEntry类对象插入到by_id数组中

 

DamageTable::notify_dirfrag()

|__创建DamageEntry类对象

|__将DamageEntry类对象插入到dirfrags数组中

|__将DamageEntry类对象插入到by_id数组中

 

DamageTable::notify_remote_damaged()

|__创建BackTraceDamage类对象

|__将BackTraceDamage类对象插入到remotes数组中

|__将BackTraceDamage类对象插入到by_id数组中

 

DamageTable::is_*_damaged()

|__从对应的dmaged数组(dirfrags/dentries/remotes)中查找对应的项

 

DamageTable::erase()

|__根据待删除的Damage项的类型分别调用dirfrags.erase()/dentries.erase()/remotes.erase()进行删除操作

|__从by_id数组中删除指定项

DamageTable及其子类的对应关系如下图所示:

© 著作权归作者所有

linuxhunter
粉丝 72
博文 144
码字总数 93264
作品 0
沈阳
高级程序员
私信 提问
Python数据分析学习路径图(120天Get新技能)

Python是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明。由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语...

数据007
2016/01/22
0
0
2017/05/02工作日志

上午: 1.与孙琦办理入职相关手续,了解相关规定内容; 2.听博哥讲解公司内部团队结构,质监局项目,工会项目,公司使用相关技术说明等 3.看质监局标准化院项目的需求文档,听宇哥讲解有关项目...

李华东
2017/05/02
1
0
分析师做竞品分析的正确姿势

市面上介绍怎么做竞品分析的文章多是以产品经理的视角进行,那么以数据分析师的视角做竞品分析该如何呢?以市场经理的视角做竞品分析又该如何呢?不同的身份视角,对应的是分析目的的不同。 ...

数据007
2016/05/25
0
0
【源码】otter工程结构

最近在搞数据同步相关的内容,需要对otter的代码进行扩展,所以需要先熟悉一下otter的源码。首先我们整体来看下otter的工程结构。otter的工程结构比较复杂,需要花费一定的时间来理解各个部分...

端木轩
2018/01/22
71
0
颠覆自媒体和出版行业的八大人工智能应用

新闻出版业是现代文明的守护者和传承者,随着科技的不断发展,媒体出版行业正在进入自媒体空前繁荣的新时期。 目前,已经涌现大量的人工智能工具,一方面可以帮助传统媒体平台实现繁冗人工环...

CashCat
09/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
19分钟前
2
0
Andorid SQLite数据库开发基础教程(1)

Andorid SQLite数据库开发基础教程(1) Android数据库访问方式 SQLite是Android系统默认支持的文件数据库。该数据库支持SQL语言,适合开发人员上手。本教程将讲解如何开发使用SQLite的Andro...

大学霸
22分钟前
3
0
Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
45分钟前
4
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
47分钟前
3
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部