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