mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-26 21:07:45 +08:00
make repo gc call CollectGarbage on datastore
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
This commit is contained in:
parent
d58da74746
commit
04e43b855b
@ -86,7 +86,7 @@ func GarbageCollect(n *core.IpfsNode, ctx context.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
rmed := gc.GC(ctx, n.Blockstore, n.Pinning, roots)
|
||||
rmed := gc.GC(ctx, n.Blockstore, n.Repo.Datastore(), n.Pinning, roots)
|
||||
|
||||
return CollectResult(ctx, rmed, nil)
|
||||
}
|
||||
@ -154,7 +154,7 @@ func GarbageCollectAsync(n *core.IpfsNode, ctx context.Context) <-chan gc.Result
|
||||
return out
|
||||
}
|
||||
|
||||
return gc.GC(ctx, n.Blockstore, n.Pinning, roots)
|
||||
return gc.GC(ctx, n.Blockstore, n.Repo.Datastore(), n.Pinning, roots)
|
||||
}
|
||||
|
||||
func PeriodicGC(ctx context.Context, node *core.IpfsNode) error {
|
||||
|
||||
@ -104,7 +104,7 @@ func TestAddGCLive(t *testing.T) {
|
||||
gcstarted := make(chan struct{})
|
||||
go func() {
|
||||
defer close(gcstarted)
|
||||
gcout = gc.GC(context.Background(), node.Blockstore, node.Pinning, nil)
|
||||
gcout = gc.GC(context.Background(), node.Blockstore, node.Repo.Datastore(), node.Pinning, nil)
|
||||
}()
|
||||
|
||||
// gc shouldnt start until we let the add finish its current file.
|
||||
|
||||
15
pin/gc/gc.go
15
pin/gc/gc.go
@ -11,6 +11,7 @@ import (
|
||||
dag "github.com/ipfs/go-ipfs/merkledag"
|
||||
pin "github.com/ipfs/go-ipfs/pin"
|
||||
|
||||
dstore "gx/ipfs/QmPpegoMqhAEqjncrzArm7KVWAkCm78rqL2DPuNjhPrshg/go-datastore"
|
||||
logging "gx/ipfs/QmRb5jh8z2E8hMGN2tkvs1yHynUanqnZ3UeKwgN1i9P1F8/go-log"
|
||||
cid "gx/ipfs/QmcZfnkapfECQGcLZaf9B79NRg7cRa9EnZh4LSbkCzwNvY/go-cid"
|
||||
ipld "gx/ipfs/Qme5bWv7wtjUNGsK2BNGVUFPKiuxWrsqrtvYwCLRw8YFES/go-ipld-format"
|
||||
@ -35,7 +36,7 @@ type Result struct {
|
||||
// The routine then iterates over every block in the blockstore and
|
||||
// deletes any block that is not found in the marked set.
|
||||
//
|
||||
func GC(ctx context.Context, bs bstore.GCBlockstore, pn pin.Pinner, bestEffortRoots []*cid.Cid) <-chan Result {
|
||||
func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn pin.Pinner, bestEffortRoots []*cid.Cid) <-chan Result {
|
||||
|
||||
elock := log.EventBegin(ctx, "GC.lockWait")
|
||||
unlocker := bs.GCLock()
|
||||
@ -107,6 +108,18 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, pn pin.Pinner, bestEffortRo
|
||||
if errors {
|
||||
output <- Result{Error: ErrCannotDeleteSomeBlocks}
|
||||
}
|
||||
|
||||
defer log.EventBegin(ctx, "GC.datastore").Done()
|
||||
gds, ok := dstor.(dstore.GCDatastore)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
err = gds.CollectGarbage()
|
||||
if err != nil {
|
||||
output <- Result{Error: err}
|
||||
return
|
||||
}
|
||||
}()
|
||||
|
||||
return output
|
||||
|
||||
Loading…
Reference in New Issue
Block a user