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

antd禁止自动填充

浏览器应该是再<input /> 有text和password类型时会自动填充密码 0. chrome <Input autoComplete"new-user" placeholder"用户名"/> <Input type"password" autoComplete"new-password" placeholder"密码"…

GPT能否辅助数学学习

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

图像识别技术在智能交通领域的革命

导言&#xff1a; 智能交通领域一直以来都面临着交通安全和效率的挑战&#xff0c;而图像识别技术的快速发展正为这一领域带来了革命性的变革。本文将深入探讨图像识别技术在智能交通领域的应用&#xff0c;以及它所带来的潜在影响。 一、图像识别技术在智能交通中的应用 车辆…

2024王道408数据结构P144 T16

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

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

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

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环境 传统网站部署的流程 在运维过程中&#xff0c;网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分 析-->原型设计-->开发代码-->提交代码-->内网部署-->内网测试-->确认上线-->备份数据-->外网更新…

「Docker」《入门Docker:解放部署烦恼,提高开发效率》

《入门Docker&#xff1a;解放部署烦恼&#xff0c;提高开发效率》 一、引言1.1 Docker的定义和概念1.2 Docker的优势和应用场景 二、Docker基础知识2.1 Docker架构和组件2.2 Docker镜像和容器的关系2.3 Docker仓库和镜像的管理 三、安装和配置Docker环境3.1 安装Docker引擎3.2…

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

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

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

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

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

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

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 里面&#xff0c;动态代理的底层&#xff0c;默认使用的是 JDK Proxy 代理&#xff0c;这一点在官方文档有具体的说明&#xff1a; 既然 Spring 中的动态代理默认使用 JDK Proxy&#xff0c;那…

Nginx详解之Nginx高级配置

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

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

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

VueX 与Pinia 一篇搞懂

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

GPT+RPA用于自动流转分配,助力优化信访工作流程

信访工作是基层治理的重要组成部分。面对具体的信访事项&#xff0c;内容繁琐、情况复杂&#xff0c;对基层干部及相关受理部门构成巨大压力&#xff0c;存在以下痛点&#xff1a; 1、匿名举报信访量较大&#xff0c;线索不清、内容模糊、调查难度大&#xff0c;加大基层信访工…

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

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