CurveFS rename 接口实现方案© XXX Page 1 of 15 rename 接口实现方案(已实现,选用方案二)© XXX Page 2 of 15 1. 2. 3. 4. 1. 2. 1. 3. 1. 2. 背景 方案调研 Chubaofs Juicefs 方案实现 方案一:chubaofs 方案二:事务方案 方案三:利用 KV 自带的分布式事务 Q&A 1 是否需要实现跨文件系统的 rename 操作? 2. 在多客户端情况下,是否需要加锁来保证其原子性? 3. rename 流程举例说明? 例 1:rename A→B (A 存在,而 B 不存在) 例 2:rename A→C (A 存在,而 C 存在) 4. 当 2 个操作的 dentry 属于同一个 copyset 有什么不一样? 背景 当前 curvefs 并没有实现 rename 接口,本文档是对 接口,本文档是对 rename 接口实现的调研及方案设计。 rename 操作,主要操作的是 dentry,如 rename /dir1/file1 /dir2/file2,主要有 2 个步骤:(1) 删除 file1 的 dentry,(2) 增加 file2 的 dentry(该 dentry 的 inodeid 等同 file1 的 inode id)。 关于 rename 接口的实现,主要调研了 chubaofs0 码力 | 15 页 | 555.93 KB | 6 月前3
Curve文件系统元数据Proto(接口定义)© XXX Page 1 of 15 curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 2 of 15 1、代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。 2、文件系统proto定义 2.1 mds.proto0 码力 | 15 页 | 80.33 KB | 6 月前3
CurveFS Client 概要设计背景 概述 关键接口分析 init destroy lookup write read open create & mknod mkdir forget unlink rmdir opendir readdir getattr & setattr access rename symlink & readlink link flush & fsync 其他 功能分析 模块划分 接口设计 Cache设计 CurveFS client 向上提供两层接口,分别是© XXX Page 3 of 11 对接fuse,提供通用文件系统接口。对于fuse接口,先前进行了一些调研,见FUSE调研 提供lib库,提供对接分布式数据库接口,这一部分,可参考polarfs的接口,如下图所示。 根据讨论,我们首先对接fuse的lowlevel operators,对于数据库的lib库接口,后续可以在此基础上再做一层对接。lowlevel evel operators接口一共45个,如下: +init +destroy +lookup +forget +getattr +setattr +readlink +mknod© XXX Page 4 of 11 +mkdir +unlink +rmdir +symlink +rename +link +open0 码力 | 11 页 | 487.92 KB | 6 月前3
curvefs client删除文件和目录功能设计ode和dentry结构,遗留了nlink和lookup count相关的内容还未实现,是不完备的。本文首先调研moosefs,chubaofs等分布式系统,参考并设计解决上述遗留问题。 当前删除接口代码如下:© XXX Page 3 of 15 CURVEFS_ERROR FuseClient::RemoveNode(fuse_req_t req, fuse_ino_t parent, nlink字段+1, 每删除一个hard link或指向的原文件时,nlink字段-1。© XXX Page 4 of 15 当nlink字段减到0时,才真正删除inode。所以在实现unlink接口或rmdir接口时,需要判断unlink字段的当前值,当nlink字段大于1时,只减nlink字段就可以了,当nlink字段减到0时,才真正的执行删除inode。 目录的nlink字段与文件的nlink字段不同, , ,该文件/目录仍然可以被打开的进程访问,不会造成崩溃或报错,我们的curvefs也需要实现 即使文件/目录已经被另一个进程删除了(nlink==0) 这样的语义。 这部分内容在fuse的相关接口中也有描述如下: /** * Forget about an inode * * This function is called when the kernel removes an0 码力 | 15 页 | 325.42 KB | 6 月前3
Curve核心组件之snapshotclone• 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。 SnapshotService & CloneService: S3Adaptor(一个封装了s3 client的接口层)与S3交互,存取s3 中的对象。 SnapshotDataStore: • SnapshotCloneMetaStore负责管理快照和克隆任务等元数据, 通过调用etcdclient,与etcd存储交互,存取etcd中的快照和克隆 元数据。 SnapshotCloneMetaStore: • CurveClient封装了Client接口,负责与MDS和ChunkServer交互。 向mds查询快照的元数据,转储快照元数据 块metaObject。 • 4.根据快照元数据信息,转储快照数据块 dataObject。 • 5.调用mds接口,移除curve内部的快照。 • 6.mds调用chunkserver接口,删除内部快照 数据 快照流程: chunk chunk chunk chunkserver meta object data object data0 码力 | 23 页 | 1.32 MB | 6 月前3
TiDB中文技术文档统计信息的导出接口为: 1. http://${tidb-server-ip}:${tidb-server-status-port}/stats/dump/${db_name}/${table_name} 2. > 通过该接口可以获取数据库 `${db_name}` 中的表 `${table_name}` 的 json 格式的统计信息。 导入的统计信息一般是通过统计信息导出接口得到的 json 文件。 PROCESS PROCESSLIST QUARTER QUERY QUICK RANGE (R) READ (R) REAL (R) REDUNDANT REFERENCES (R) REGEXP (R) RENAME (R) REPEAT (R) REPEATABLE REPLACE (R) RESTRICT (R) REVERSE REVOKE (R) RIGHT (R) RLIKE (R) ROLLBACK AUTO_INCREMENT 的值不会记录,会被重新计数。 1. RENAME TABLE 2. tbl_name TO new_tbl_name RENAME TABLE 用于对一个表进行重命名。 这个语句等价于如下的 ALTER TABLE 语句: 1. ALTER TABLE old_table RENAME new_table; 1. ALTER TABLE tbl_name0 码力 | 444 页 | 4.89 MB | 6 月前3
TiDB v8.2 中文手册· · · · · · · · 874 9.2.1 使用状态接口· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 874 9.2.2 使用 metrics 接口 · · · · · · · · · · · · · · · N N 2.3.5 数据定义语言 (DDL) 数据定义语言 (DDL) 8.2 8.1 7.5 7.1 6.5 6.1 5.4 5.3 5.2 5.1 CREATE,DROP,ALTER,RENAME,TRUNCATE Y Y Y Y Y Y Y Y Y Y 生成列 Y Y Y Y E E E E E E 视图 Y Y Y Y Y Y Y Y Y Y 序列 Y Y Y Y Y Y Y Y 的字符集 • MySQL 追踪优化器 • XML 函数 • X-Protocol #1109 • 列级权限 #9766 • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开) • CREATE TABLE tblName AS SELECT stmt 语法 #4754 • CHECK TABLE 语法 #4673 • CHECKSUM TABLE 语法 #18950 码力 | 4987 页 | 102.91 MB | 10 月前3
TiDB v8.4 中文手册· · · · · · · · 940 9.2.1 使用状态接口· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 940 9.2.2 使用 metrics 接口 · · · · · · · · · · · · · · · 3.5 数据定义语言 (DDL) 数据定义语言 (DDL) 8.4 8.3 8.2 8.1 7.5 7.1 6.5 6.1 5.4 5.3 5.2 5.1 CREATE,DROP,ALTER,RENAME,TRUNCATE Y Y Y Y Y Y Y Y Y Y Y Y 生成列 Y Y Y Y Y Y E E E E E E 视图 Y Y Y Y Y Y Y Y Y Y Y Y 65 数据定义语言 的字符集 • MySQL 追踪优化器 • XML 函数 • X-Protocol #1109 • 列级权限 #9766 • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开) • CREATE TABLE tblName AS SELECT stmt 语法 #4754 • CHECK TABLE 语法 #4673 • CHECKSUM TABLE 语法 #18950 码力 | 5072 页 | 104.05 MB | 10 月前3
TiDB v8.5 中文手册· · · · · · · 1194 9.2.1 使用状态接口· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1194 9.2.2 使用 metrics 接口 · · · · · · · · · · · · · · · 3.5 数据定义语言 (DDL) 数据定义语言 (DDL) 8.4 8.3 8.2 8.1 7.5 7.1 6.5 6.1 5.4 5.3 5.2 5.1 CREATE,DROP,ALTER,RENAME,TRUNCATE Y Y Y Y Y Y Y Y Y Y Y Y 生成列 Y Y Y Y Y Y E E E E E E 视图 Y Y Y Y Y Y Y Y Y Y Y Y 序列 Y Y 的字符集 • MySQL 追踪优化器 • XML 函数 • X-Protocol #1109 • 列级权限 #9766 • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开) • CREATE TABLE tblName AS SELECT stmt 语法 #4754 • CHECK TABLE 语法 #4673 • CHECKSUM TABLE 语法 #18950 码力 | 5095 页 | 104.54 MB | 10 月前3
Curve文件系统元数据管理删除文件:删除/A/C 删除目录:删除/A rename:rename /A/C到/B/E symbolic link: hardlink:生成一个hardlink /B/E,指向文件/A/C list:遍历/A目录 5.1.2 好处 5.1.2 问题 5.2 分片方式二:Inode按照inodeid进行分片,Dentry按照parentid进行分片 rename:rename /A/C到/B/E hardlink:生成一个hardlink 4、curve文件系统的元数据内存组织 curve文件系统元数据主要有3个类型,inode, dentry, 。 extent 4.1 inode定义: inode定义见:curve文件系统元数据proto(代码接口定义,已实现)© XXX Page 5 of 24 typedef uint64_t InodeId; enum FileType { TYPE_DIRECTORY = 0, TYPE_FILE ::curve::common::RWLock lock_; };© XXX Page 6 of 24 4.2 dentry的定义: dentry定义见:curve文件系统元数据proto(代码接口定义,已实现) typedef uint64_t InodeId; class Dentry{ uint64_t fsId; InodeId parentId; InodeId0 码力 | 24 页 | 204.67 KB | 6 月前3
共 187 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19













