来源:互联网 发布:淘宝类目007是什么牌子 编辑:程序博客网 时间:2024/05/01 17:19

1.      读文件:

1)       打开文件

n  根据传入的文件信息和inode号打开文件-----------BlockStream::Open

Ø  根据inode号获取文件的路径------PathMgr::GetPath(inode)

Ø  CheckMoving()检查该文件是否正在被移动

Ø  申请StoreLogic大小空间,然后StoreLogic::Open()打开文件的路径

Ø  异步写下去放在里面:LRUCache<int64_t,ChunkInfo_t*>* WriteDoneMap

n  根据传入的ino号获取相应的文件信息------DataOpr::OpenData()

2)       读取数据

 

3)       关闭文件




1.      文件系统的挂载:

n  FileSystem::CheckSanity() //检查文件系统数据的完整

Ø  首先获取adfs的路径

Ø  TryLockFS():给adfs加锁,根据返回值判断其加锁的情况

Ø  检查超级块的信息是否正确CheckSuperBlock()

ü  先将超姐块的信息读取到内存中

ü  然后检测超级块中chunksize、blocksize、compress的信息

ü  读取BackUpDedupPath里面的东西到内存中

Ø  给文件系统解锁

n  FileSystem::Mount()//挂载文件系统

Ø  初始化数据处理对象

ü  开启消冗库:

ü  首先设置adfs消冗库的参数:

ü  然后设置在消冗库中同步刷新和延迟关闭的参数

ü  最后初始化adfs消冗库,创建延迟关闭功能-----AdfsOpr::Init(),并开启延迟关闭。

Ø  TryLockFS():给adfs加锁,根据返回值判断其加锁的情况

Ø  如果当前没有定义_LICENSE,则按没有license处理,有的话继续下一步

Ø  在挂载时判断空间,如果没有空间把系统变为NOSPACE状态

ü  CheckDataSpace():检测数据卷的大小,在挂载时使用

ü  CheckReserveSpace():和CheckDataSpace函数一样。

Ø  开启Util进程通信功能

ü  new MsgServer

ü  初始化消息队列

ü  开启监听线程

n  MetaManagerImpl::Init() //初始化

Ø  先将持久化存储和目录存储关联起来

Ø  初始化日志文件

Ø  然后将该日志文件与持久化存储和目录存储关联起来

Ø  初始化元数据,并整理所有日志

Ø  设置元数据的状态,更新数据

Ø  读取total值(在系统启东时,读取上次保存的total值,如果找不到对应的文件,说明上次没有正确卸载,需要从持久话化中恢复)

Ø  然后将所有inode使用情况更新到位图中,加载指定数量loadNum与inode元数据到内存

Ø  然后初始换线程,加锁,并创建一个定期执行的一个线程

Ø  最后,设置文件系统是否启动

2.      文件系统的卸载:(卸载+释放资源)

n  保存系统的状态

n  DDFSOpr::Destroy()

n  FileSystem::Umount():

Ø  先结束监听线程-----MsgServer::Stop()

Ø  保存系统状态

Ø  将超级块的信息写到磁盘上

Ø  然后看有没有定义LICENSE,然后进行不同的操作

Ø  关闭相应的对象-----DestroyRes()

ü  关闭adfs消冗库----- AdfsOpr::Destroy()

  FSClear::Stop()

²  关闭守护进程

²  关闭线程

²  关闭缓冲文件

  关闭所有的文件句柄----- DataOpr::CloseAll()

  释放资源----- DataOpr::Destroy()

Ø  文件系统解锁,remove()函数删除一些文件

Ø  保存total的值------MetaManagerImpl::StoreTotalSize()

Ø  LRUDentryStore::~LRUDentryStore():释放掉缓冲里面的东西

n  FileSystem::DelStore:释放资源


0 0
原创粉丝点击