mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-11-22 19:29:39 +00:00
storage: Use timeout for boltdb database opening
To dump the DB, the service must be stopped. If this is not the case `dump` command just hangs without any output, which _may_ be unexpected from the ops POV. Introduce a 1 second timeous, which is more than enough, given that bbolt retries doing flock() every 50ms. Signed-off-by: Evgenii Stratonikov <fyfyrchik@runbox.com>
This commit is contained in:
parent
91c928e8d3
commit
f1c6b9fe8f
1 changed files with 7 additions and 0 deletions
|
@ -5,6 +5,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/core/storage/dbconfig"
|
"github.com/nspcc-dev/neo-go/pkg/core/storage/dbconfig"
|
||||||
"github.com/nspcc-dev/neo-go/pkg/io"
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
||||||
|
@ -21,6 +22,10 @@ type BoltDBStore struct {
|
||||||
db *bbolt.DB
|
db *bbolt.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// defaultOpenTimeout is the default timeout for performing flock on a bbolt database.
|
||||||
|
// bbolt does retries every 50ms during this interval.
|
||||||
|
const defaultOpenTimeout = 1 * time.Second
|
||||||
|
|
||||||
// NewBoltDBStore returns a new ready to use BoltDB storage with created bucket.
|
// NewBoltDBStore returns a new ready to use BoltDB storage with created bucket.
|
||||||
func NewBoltDBStore(cfg dbconfig.BoltDBOptions) (*BoltDBStore, error) {
|
func NewBoltDBStore(cfg dbconfig.BoltDBOptions) (*BoltDBStore, error) {
|
||||||
cp := *bbolt.DefaultOptions // Do not change bbolt's global variable.
|
cp := *bbolt.DefaultOptions // Do not change bbolt's global variable.
|
||||||
|
@ -34,6 +39,8 @@ func NewBoltDBStore(cfg dbconfig.BoltDBOptions) (*BoltDBStore, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
opts.Timeout = defaultOpenTimeout
|
||||||
|
|
||||||
db, err := bbolt.Open(fileName, fileMode, opts)
|
db, err := bbolt.Open(fileName, fileMode, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to open BoltDB instance: %w", err)
|
return nil, fmt.Errorf("failed to open BoltDB instance: %w", err)
|
||||||
|
|
Loading…
Reference in a new issue