..
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