juicefs源码format命令阅读

之前博文中介绍过在windows下安装GO和vscode windows下安装go环境 和vscode中go扩展+调试

1、获取源码

git clone https://github.com/juicedata/juicefs.git

首先观察代码架构

上图是我已经编译过得代码,可能和刚git下来的有些出入。

2、编译

我是在windows上进行调试,首先需要对juicefs进行编译。编译过程看文档即可。

文档地址:安装 | JuiceFS Document Center

为了方便,将官方文档的windows下编译内容截图过来。

注:WinFsp需要下载安装,如果不安装,编译时会出现找不到头文件的错误。

出现GCC找不到命令的问题时,可以使用推荐的MinGW-w64和Cygwin,我用的MinGW-w64 ,下载安装即可。

3、 调试

format 命令

juicefs format 

--storage minio

--bucket "https://127.0.0.1:9000/mystor"

--access-key minioadmin

--secret-key minioadmin

tikv://127.0.0.1:2379/mystor

mystor

launch.json参数如图

程序入口:juicefs-->main.go

在juicefs-->main.go页面按F5,进入调试页面。

juicefs-->main.go //开始

cmd-->main.go  -->  err := app.Run(reorderOptions(app, args))

其中 reorderOptions()函数是对输入的参数(flag和cmd)进行判断(是否是正确的flag和cmd)并进行排序。返回之后直接进入app.Run()函数中。

 -->app.go c.Run(cCtx) --> command.go c.Action(cCtx)

 -->format.go format m:= meta.NewClient()

meta.NewClient()新建元数据服务的client,主要检查输入元数据相关参数的信息,根据传入的参数去调用具体的元数据服务。

         -->interface.go NewClient()

         -->interface.go f(driver, uri[p+3], conf) //这里跳转到了meta.newKVMeta

         -->tkv.go newKVMeta()   client,err:=newTKVClient(dricer,addr)

         -->tkv_tikv.go newTikvClient()  client, err := txnkv.NewClient(strings.Split(tUrl.Host, ","))

         -->client.go NewClinet()  cfg := config.GetGlobalConfig()

         -->client.go pdClient, err := tikv.NewPDClient(pdAddrs)

                 -->kv.go NewPDClient()  pd.NewClient()

clinet.go是在github.com\tikv\client-go\v2@v2.0.4\txnkv\client.go中

        -->client.go     三个函数,主要过程是初始化元数据

uuid := fmt.Sprintf("tikv-%v", pdClient.GetClusterID(context.TODO()))

spkv, err := tikv.NewEtcdSafePointKV(pdAddrs, tlsConfig)

s, err := tikv.NewKVStore(uuid, pdClient, spkv, tikv.NewRPCClient(tikv.WithSecurity(cfg.Security)))

   //creates a txn client with pdAddrs.

         -->tkv.go newKVMeta() m:=&kvMeta

         -->base.go newBaseMeta()

-->format.go  format, err := m.Load(false)

         -->Base.go  --> Load -->m.en.load()

         -->Tkv.go --> doLoad() ([]byte, error)

         -->Tkv.go -->  get(key []byte) ([]byte, error) kvtxn

-->format.go  blob, err := createStorage(*format) 

按提供的对象存储url,创建一个预支交互的client

-->format.go createStorage() //

-->format.go m.Init(format, c.Bool("force")) //创建根目录

-->tkv.go doInit(format *Format, force bool)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/60150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux禅道上修改Apache 和 MySQL 默认端口号

1. 修改Apache默认端口号 80 cd /opt/zbox/etc/apachevim httpd.conf :wq 保存 2. 修改MySQL默认端口号 3306 cd /opt/zbox/etc/mysql vim my.cnf :wq 保存 3. 重启服务 ./zbox restart

GPT能否辅助数学学习

GPT4.0的数学能力怎么样?我们使用镜像站进行实验,通过不同水平的数学看看GPT4.0的数学能力得到进步没有。镜像站的地址我们放在了最后,各位读者也可以自行去测试。 笔者在ChatGPT镜像站进行测试,我们的实验是让GPT4.0自行出数学题…

2024王道408数据结构P144 T16

2024王道408数据结构P144 T16 思考过程 首先看题目,要求我们把二叉树的叶子结点求出来并且用链表的方式存储,链接时用叶结点的右指针来存放单链表指针。我们很清楚可以看出来能用中序遍历递归的方式实现,因为第一个叶子结点在整棵树的最左下…

入职字节外包一个月,我离职了

有一种打工人的羡慕,叫做“大厂”。 真是年少不知大厂香,错把青春插稻秧。 但是,在深圳有一群比大厂员工更庞大的群体,他们顶着大厂的“名”,做着大厂的工作,还可以享受大厂的伙食,却没有大厂…

eslint和prettier格式化冲突

下载插件 ESLint 和 Prettier ESLint 进入setting.json中 setting.json中配置 {"editor.tabSize": 2,"editor.linkedEditing": true,"security.workspace.trust.untrustedFiles": "open","git.autofetch": true,"…

基于Jenkins构建生产CICD环境(第二篇)

基于Jenkins自动打包并部署Tomcat环境 传统网站部署的流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新…

[ZenTao]源码阅读:自定义任务类型

1、module/custom/control.php 2、module/custom/model.php

QT基础教程之六布局管理器和常用控件

QT基础教程之六布局管理器和常用控件 布局管理器 所谓 GUI 界面,归根结底,就是一堆组件的叠加。我们创建一个窗口,把按钮放上面,把图标放上面,这样就成了一个界面。在放置时,组件的位置尤其重要。我们必须…

取数组中每个元素的最高位

1 题目 /*程序将一维数组a中N个元素的最高位取出,保存在一维数组b的对应位置。 程序运行结果为: a:82 756 71629 5 2034 b: 8 7 7 5 2 */ 2 思考 简单来说就是取一个数据的最高位。 一开始的笨方法没有办法判断数据的长度,后来…

Canvas实现3D效果

3D 球 效果图 代码 var canvas document.getElementById("cas"),ctx canvas.getContext("2d"),vpx canvas.width / 2,vpy canvas.height / 2,Radius 150,balls [],angleX Math.PI / 1000,angleY Math.PI / 1000,factor 0.0001 //旋转因子var An…

Spring Boot 中是使用 JDK Proxy 动态代理还是 CGLib ?

1. Spring Boot 中是使用 JDK Proxy 动态代理还是 CGLib ? 首先我们知道在 Spring 里面,动态代理的底层,默认使用的是 JDK Proxy 代理,这一点在官方文档有具体的说明: 既然 Spring 中的动态代理默认使用 JDK Proxy,那…

Nginx详解之Nginx高级配置

Nginx详解之Nginx高级配置 1、网页的状态页2、Nginx第三方模块2.1echo模块 3、变量3.1内置变量3.2自定义变量 4、自定义访问日志4.1 自定义访问日志的格式4.2自定义json 格式日志 5、Nginx压缩功能(重要)6、https 功能6.1Nginx的HTTPS工作原理的详解6.2启…

电脑每次开机杀毒软件报iusb3mon.exe病毒已清除,电脑中病毒iusbmon杀毒办法,工具杀毒

不知道什么时候开始,我电脑C盘的系统数据存储文件夹programdata 不知不觉就没了,找不到了 programdata文件夹为存储系统数据文件的,这个文件不见了,而且我打开了显示隐藏文件和文件夹还是没有显示 然后我重启电脑,杀毒…

VueX 与Pinia 一篇搞懂

VueX 简介 Vue官方:状态管理工具 状态管理是什么 需要在多个组件中共享的状态、且是响应式的、一个变,全都改变。 例如一些全局要用的的状态信息:用户登录状态、用户名称、地理位置信息、购物车中商品、等等 这时候我们就需要这么一个工…

数据结构:线性表之-顺序表

目录 1.线性表概念 1.1 什么是顺序列表 1.2 线性表 2.顺序表实现 将有以下功能: 详细过程 顺序表的动态存储 顺序表初始化 尾插 扩容 头插 更改后的尾插 尾删 头删 打印 释放内存 优化顺序表 (任意位置插入删除) 优化后的头插尾插 优化后的头删尾…

java八股文面试[数据库]——数据库三范式

什么是范式? 范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列) 理解:一个列不能包含两个数…

新能源技术是实现碳达峰碳中和的必然路径

在绿色经济发展的时代背景之下,光伏屋顶瓦顺势而生。集发电、环保功能于一体的光伏屋顶瓦,让每一栋建筑都能成为一座绿色发电站,实现建筑用电自给,有效降低建筑能耗,极大的推动生态建筑和生态城市的发展。 太阳能光伏瓦…

SLAM从入门到精通(基础数学)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不可否认,slam中的有一部分内容来自于数学。但是,我们在学习使用的过程中,也不用纠结于整个数学的推导过程&…

36、springboot --- 对 tomcat服务器 和 undertow服务器 配置访客日志

springboot 配置访客日志 ★ 配置访客日志: 访客日志: Web服务器可以将所有访问用户的记录都以日志的形式记录下来,主要就是记录来自哪个IP的用户、在哪个时间点、访问了哪个资源。 Web服务器可将所有访问记录以日志形式记录下来&#xff…