Skip to content

Commit c07535c

Browse files
authored
Fix error caused by double-locking repo (#117)
* ipfs-10-to-11: Fix error caused by double-locking repo * ipfs-10-to-11: Move fsrepo.Open to higher in call stack
1 parent c3f148e commit c07535c

File tree

1 file changed

+27
-35
lines changed

1 file changed

+27
-35
lines changed

ipfs-10-to-11/migration/migration.go

Lines changed: 27 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"github.com/ipfs/fs-repo-migrations/ipfs-10-to-11/_vendor/github.com/ipfs/go-merkledag"
1919

2020
migrate "github.com/ipfs/fs-repo-migrations/go-migrate"
21-
lock "github.com/ipfs/fs-repo-migrations/ipfs-1-to-2/repolock"
2221
mfsr "github.com/ipfs/fs-repo-migrations/mfsr"
2322
log "github.com/ipfs/fs-repo-migrations/stump"
2423
)
@@ -37,14 +36,8 @@ func (m Migration) Apply(opts migrate.Options) error {
3736
log.Verbose = opts.Verbose
3837
log.Log("applying %s repo migration", m.Versions())
3938

40-
log.VLog("locking repo at %q", opts.Path)
41-
lk, err := lock.Lock2(opts.Path)
39+
err := setupPlugins(opts.Path)
4240
if err != nil {
43-
return err
44-
}
45-
defer lk.Close()
46-
47-
if err = setupPlugins(opts.Path); err != nil {
4841
log.Error("failed to setup plugins", err.Error())
4942
return err
5043
}
@@ -56,7 +49,18 @@ func (m Migration) Apply(opts migrate.Options) error {
5649
ctx, cancel := context.WithCancel(context.Background())
5750
defer cancel()
5851

59-
if err = transferPins(ctx, opts.Path); err != nil {
52+
if !fsrepo.IsInitialized(opts.Path) {
53+
return fmt.Errorf("ipfs repo %q not initialized", opts.Path)
54+
}
55+
56+
log.VLog(" - opening datastore at %q", opts.Path)
57+
r, err := fsrepo.Open(opts.Path)
58+
if err != nil {
59+
return fmt.Errorf("cannot open datastore: %v", err)
60+
}
61+
defer r.Close()
62+
63+
if err = transferPins(ctx, r); err != nil {
6064
log.Error("failed to transfer pins:", err.Error())
6165
return err
6266
}
@@ -75,21 +79,27 @@ func (m Migration) Revert(opts migrate.Options) error {
7579
log.Verbose = opts.Verbose
7680
log.Log("reverting migration")
7781

78-
lk, err := lock.Lock2(opts.Path)
82+
err := setupPlugins(opts.Path)
7983
if err != nil {
84+
log.Error("failed to setup plugins", err.Error())
8085
return err
8186
}
82-
defer lk.Close()
8387

84-
if err = setupPlugins(opts.Path); err != nil {
85-
log.Error("failed to setup plugins", err.Error())
86-
return err
88+
if !fsrepo.IsInitialized(opts.Path) {
89+
return fmt.Errorf("ipfs repo %q not initialized", opts.Path)
90+
}
91+
92+
log.VLog(" - opening datastore at %q", opts.Path)
93+
r, err := fsrepo.Open(opts.Path)
94+
if err != nil {
95+
return fmt.Errorf("cannot open datastore: %v", err)
8796
}
97+
defer r.Close()
8898

8999
ctx, cancel := context.WithCancel(context.Background())
90100
defer cancel()
91101

92-
if err = revertPins(ctx, opts.Path); err != nil {
102+
if err = revertPins(ctx, r); err != nil {
93103
return err
94104
}
95105

@@ -165,20 +175,9 @@ func makeStore(r repo.Repo) (datastore.Datastore, format.DAGService, format.DAGS
165175
return dstore, syncDs, syncInternalDag, nil
166176
}
167177

168-
func transferPins(ctx context.Context, repopath string) error {
178+
func transferPins(ctx context.Context, r repo.Repo) error {
169179
log.Log("> Upgrading pinning to use datastore")
170180

171-
if !fsrepo.IsInitialized(repopath) {
172-
return fmt.Errorf("ipfs repo %q not initialized", repopath)
173-
}
174-
175-
log.VLog(" - opening datastore at %q", repopath)
176-
r, err := fsrepo.Open(repopath)
177-
if err != nil {
178-
return fmt.Errorf("cannot open datastore: %v", err)
179-
}
180-
defer r.Close()
181-
182181
dstore, dserv, internalDag, err := makeStore(r)
183182
if err != nil {
184183
return err
@@ -195,16 +194,9 @@ func transferPins(ctx context.Context, repopath string) error {
195194
return nil
196195
}
197196

198-
func revertPins(ctx context.Context, repopath string) error {
197+
func revertPins(ctx context.Context, r repo.Repo) error {
199198
log.Log("> Reverting pinning to use ipld storage")
200199

201-
log.VLog(" - opening datastore at %q", repopath)
202-
r, err := fsrepo.Open(repopath)
203-
if err != nil {
204-
return fmt.Errorf("cannot open datastore: %v", err)
205-
}
206-
defer r.Close()
207-
208200
dstore, dserv, internalDag, err := makeStore(r)
209201
if err != nil {
210202
return err

0 commit comments

Comments
 (0)