mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-06 19:35:18 -05:00
pr feedback, added visited set to traversal
This commit is contained in:
@@ -128,5 +128,7 @@ SQL
|
||||
AFTER=$(du .dolt/noms/ | sed 's/[^0-9]*//g')
|
||||
|
||||
# assert space was reclaimed
|
||||
echo "$BEFORE"
|
||||
echo "$AFTER"
|
||||
[ "$BEFORE" -gt "$AFTER" ]
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -25,7 +26,6 @@ import (
|
||||
"github.com/dolthub/dolt/go/libraries/doltcore/ref"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/filesys"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/pantoerr"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/set"
|
||||
"github.com/dolthub/dolt/go/store/chunks"
|
||||
"github.com/dolthub/dolt/go/store/datas"
|
||||
"github.com/dolthub/dolt/go/store/hash"
|
||||
@@ -921,6 +921,7 @@ func (ddb *DoltDB) GC(ctx context.Context, uncommitedVals ...hash.Hash) error {
|
||||
return err
|
||||
}
|
||||
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
tmpDatasets := make([]datas.Dataset, len(uncommitedVals))
|
||||
for i, h := range uncommitedVals {
|
||||
v, err := ddb.db.ReadValue(ctx, h)
|
||||
@@ -931,7 +932,7 @@ func (ddb *DoltDB) GC(ctx context.Context, uncommitedVals ...hash.Hash) error {
|
||||
return fmt.Errorf("empty value for value hash %s", h.String())
|
||||
}
|
||||
|
||||
ds, err := ddb.db.GetDataset(ctx, fmt.Sprintf("tmp/%d", time.Now().UnixNano()))
|
||||
ds, err := ddb.db.GetDataset(ctx, fmt.Sprintf("tmp/%d", rand.Int63()))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -972,16 +973,6 @@ func (ddb *DoltDB) GC(ctx context.Context, uncommitedVals ...hash.Hash) error {
|
||||
}
|
||||
|
||||
func (ddb *DoltDB) pruneUnreferencedDatasets(ctx context.Context) error {
|
||||
rr, err := ddb.GetRefs(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
refs := set.NewStrSet(nil)
|
||||
for _, r := range rr {
|
||||
refs.Add(r.String())
|
||||
}
|
||||
|
||||
dd, err := ddb.db.Datasets(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -990,7 +981,7 @@ func (ddb *DoltDB) pruneUnreferencedDatasets(ctx context.Context) error {
|
||||
var deletes []string
|
||||
_ = dd.Iter(ctx, func(ds, _ types.Value) (stop bool, err error) {
|
||||
dsID := string(ds.(types.String))
|
||||
if !refs.Contains(dsID) {
|
||||
if !ref.IsRef(dsID) {
|
||||
deletes = append(deletes, dsID)
|
||||
}
|
||||
return false, nil
|
||||
|
||||
@@ -599,6 +599,7 @@ func (lvs *ValueStore) GC(ctx context.Context) error {
|
||||
return err
|
||||
}
|
||||
hashQueue := list.New()
|
||||
visited := hash.NewHashSet(root)
|
||||
hashQueue.PushBack(root)
|
||||
for hashQueue.Len() > 0 {
|
||||
e := hashQueue.Front()
|
||||
@@ -615,11 +616,15 @@ func (lvs *ValueStore) GC(ctx context.Context) error {
|
||||
|
||||
err = val.WalkRefs(lvs.nbf, func(reachable Ref) error {
|
||||
h := reachable.TargetHash()
|
||||
if visited.Has(h) {
|
||||
return nil
|
||||
}
|
||||
err := sendHash(h)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
hashQueue.PushBack(h)
|
||||
visited.Insert(h)
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user