..

ipfs-cluster进入共识阶段

Add 操作为例。

curl -X POST -F file=@hello.md "http://127.0.0.1:9094/add"

ifscluster 默认是crdt共识算法,暂时不调整,就是用默认。 这里主要是追踪一下,给某个节点添加文件后,进入到共识阶段的这段流程。 后期的共识实现暂时无关。


上一篇主要说到,ipfs-cluster-service 会启动一个httpserver来接收对应 route下的请求。 其实同时也会启动一个 RPCServer 来进行节点间的数据传输,供相关的共识算法 crdt、raft等进行处理。

收到 file 后, 在 FromFiles 方法中,生成 cid,之后调用 Finalize 方法

adderRoot, err = dagFmtr.Add(it.Name(), it.Node())

//Finalize pins the last Cid added to this DAGService.
a.dgs.Finalize(a.ctx, adderRoot)

带着 pin 数据,请求 rpc server

rpc.CallContext(
		ctx,
		"", // use ourself to pin
		"Cluster",
		"Pin",
		pin,
		&pinResp,
	)

在 rpc api 中,调用 cluster 的 pin 方法

func (rpcapi *ClusterRPCAPI) Pin(ctx context.Context, in *api.Pin, out *api.Pin) error {
	rpcapi.c.pin(ctx, in, []peer.ID{})
}

在 cluster 的 pin 方法中,把 pin 的内容,投给 consensus 的logpin接口

func (c *Cluster) pin(
	ctx context.Context,
	pin *api.Pin,
	blacklist []peer.ID,
) {
	c.consensus.LogPin(ctx, pin)
}

正式进入到共识阶段。


Nothing