diff --git a/blockstore/badger/blockstore.go b/blockstore/badger/blockstore.go index ed0368efc..b0da429f0 100644 --- a/blockstore/badger/blockstore.go +++ b/blockstore/badger/blockstore.go @@ -222,13 +222,15 @@ func (b *Blockstore) unlockMove(state int) { b.moveMx.Unlock() } -// MoveTo implements the BlockstoreMover trait -func (b *Blockstore) MoveTo(path string, filter func(cid.Cid) bool) error { - if err := b.access(); err != nil { - return err - } - defer b.viewers.Done() - +// moveTo moves the blockstore to path, and creates a symlink from the current path +// to the new path; the old blockstore is deleted. +// If path is empty, then a new path adjacent to the current path is created +// automatically. +// The blockstore must accept new writes during the move and ensure that these +// are persisted to the new blockstore; if a failure occurs aboring the move, +// then they must be peristed to the old blockstore. +// In short, the blockstore must not lose data from new writes during the move. +func (b *Blockstore) moveTo(path string) error { // this inlines moveLock/moveUnlock for the initial state check to prevent a second move // while one is in progress without clobbering state b.moveMx.Lock() @@ -293,7 +295,7 @@ func (b *Blockstore) MoveTo(path string, filter func(cid.Cid) bool) error { b.unlockMove(moveStateMoving) log.Info("copying blockstore") - err = b.doCopy(b.db, b.db2, filter) + err = b.doCopy(b.db, b.db2, nil) if err != nil { return fmt.Errorf("error moving badger blockstore to %s: %w", path, err) } @@ -334,6 +336,8 @@ func (b *Blockstore) MoveTo(path string, filter func(cid.Cid) bool) error { return nil } +// doCopy copies a badger blockstore to another, with an optional filter; if the filter +// is not nil, then only cids that satisfy the filter will be copied. func (b *Blockstore) doCopy(from, to *badger.DB, filter func(cid.Cid) bool) error { count := 0 batch := to.NewWriteBatch() diff --git a/blockstore/badger/blockstore_test.go b/blockstore/badger/blockstore_test.go index dab1fdc3a..a4cfae652 100644 --- a/blockstore/badger/blockstore_test.go +++ b/blockstore/badger/blockstore_test.go @@ -154,7 +154,7 @@ func testMove(t *testing.T, optsF func(string) Options) { return nil }) g.Go(func() error { - return db.MoveTo("", nil) + return db.moveTo("") }) err = g.Wait()