mirror of
https://github.com/ipfs/kubo.git
synced 2025-10-25 10:27:01 +08:00
Let FSRepo Close know explicitly about LevelDB
This allows replacing the datastore without needing to write Close through to every wrapped datastore.
This commit is contained in:
committed by
Juan Batiz-Benet
parent
26cebac6d8
commit
59aa209164
@ -60,7 +60,9 @@ type FSRepo struct {
|
||||
// the same fsrepo path concurrently
|
||||
lockfile io.Closer
|
||||
config *config.Config
|
||||
ds ds2.ThreadSafeDatastoreCloser
|
||||
ds ds.ThreadSafeDatastore
|
||||
// tracked separately for use in Close; do not use directly.
|
||||
leveldbDS levelds.Datastore
|
||||
}
|
||||
|
||||
var _ repo.Repo = (*FSRepo)(nil)
|
||||
@ -236,13 +238,15 @@ func (r *FSRepo) openConfig() error {
|
||||
// openDatastore returns an error if the config file is not present.
|
||||
func (r *FSRepo) openDatastore() error {
|
||||
leveldbPath := path.Join(r.path, leveldbDirectory)
|
||||
ds, err := levelds.NewDatastore(leveldbPath, &levelds.Options{
|
||||
var err error
|
||||
// save leveldb reference so it can be neatly closed afterward
|
||||
r.leveldbDS, err = levelds.NewDatastore(leveldbPath, &levelds.Options{
|
||||
Compression: ldbopts.NoCompression,
|
||||
})
|
||||
if err != nil {
|
||||
return errors.New("unable to open leveldb datastore")
|
||||
}
|
||||
r.ds = ds
|
||||
r.ds = r.leveldbDS
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -267,7 +271,7 @@ func (r *FSRepo) Close() error {
|
||||
return errors.New("repo is closed")
|
||||
}
|
||||
|
||||
if err := r.ds.Close(); err != nil {
|
||||
if err := r.leveldbDS.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user