// NewPinner creates a new pinner using the given datastore as a backend func NewPinner(dstore ds.ThreadSafeDatastore, serv mdag.DAGService) Pinner { // Load set from given datastore... rcds := nsds.Wrap(dstore, recursePinDatastoreKey) rcset := set.NewDBWrapperSet(rcds, set.NewSimpleBlockSet()) dirds := nsds.Wrap(dstore, directPinDatastoreKey) dirset := set.NewDBWrapperSet(dirds, set.NewSimpleBlockSet()) nsdstore := nsds.Wrap(dstore, indirectPinDatastoreKey) return &pinner{ recursePin: rcset, directPin: dirset, indirPin: NewIndirectPin(nsdstore), dserv: serv, dstore: dstore, } }
func NewIndirectPin(dstore ds.Datastore) *indirectPin { return &indirectPin{ blockset: set.NewDBWrapperSet(dstore, set.NewSimpleBlockSet()), refCounts: make(map[key.Key]int), } }