..

ipfs-cluster的LogPin过程

前篇内容写到 Add 操作后,进入到共识阶段。

c.consensus.LogPin(ctx, pin)

LogPin 的解释为 LogPin submits a Cid to the shared state of the cluster. It will forward the operation to the leader if this is not it.

func (cc *Consensus) LogPin(ctx context.Context, pin *api.Pin) error 

这个方法主要实现了2个功能:

1、构建 op 操作: 创建LogOp类型
2、commit op


op

这一步构建一个LogOp对象

LogOp{
		Cid:  pin,
		Type: t,
	}

pin,就是生成的文件hash,即 CID。 这里的 t 是 LogOpPin.
完整的定义如下:

// Type of consensus operation
const (
	LogOpPin = iota + 1
	LogOpUnpin
)

// LogOpType expresses the type of a consensus Operation
type LogOpType int

commit

func (cc *Consensus) commit(ctx context.Context, op *LogOp, rpcOp string, redirectArg interface{}) error

主要有三个点:
1、读取配置CommitRetries,失败后,允许重新提交的次数。
2、把 Op 转发给 Leader。
3、提交 Op。


Nothing