Add error handling to semaphore
This commit is contained in:
parent
a9a2798910
commit
5010e95c23
3 changed files with 20 additions and 5 deletions
|
@ -50,6 +50,11 @@ func Open(cfg Config) (restic.Backend, error) {
|
||||||
return nil, errors.Wrap(err, "Bucket")
|
return nil, errors.Wrap(err, "Bucket")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sem, err := backend.NewSemaphore(cfg.Connections)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
be := &b2Backend{
|
be := &b2Backend{
|
||||||
client: client,
|
client: client,
|
||||||
bucket: bucket,
|
bucket: bucket,
|
||||||
|
@ -58,7 +63,7 @@ func Open(cfg Config) (restic.Backend, error) {
|
||||||
Join: path.Join,
|
Join: path.Join,
|
||||||
Path: cfg.Prefix,
|
Path: cfg.Prefix,
|
||||||
},
|
},
|
||||||
sem: backend.NewSemaphore(cfg.Connections),
|
sem: sem,
|
||||||
}
|
}
|
||||||
|
|
||||||
return be, nil
|
return be, nil
|
||||||
|
@ -85,6 +90,11 @@ func Create(cfg Config) (restic.Backend, error) {
|
||||||
return nil, errors.Wrap(err, "NewBucket")
|
return nil, errors.Wrap(err, "NewBucket")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sem, err := backend.NewSemaphore(cfg.Connections)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
be := &b2Backend{
|
be := &b2Backend{
|
||||||
client: client,
|
client: client,
|
||||||
bucket: bucket,
|
bucket: bucket,
|
||||||
|
@ -93,7 +103,7 @@ func Create(cfg Config) (restic.Backend, error) {
|
||||||
Join: path.Join,
|
Join: path.Join,
|
||||||
Path: cfg.Prefix,
|
Path: cfg.Prefix,
|
||||||
},
|
},
|
||||||
sem: backend.NewSemaphore(cfg.Connections),
|
sem: sem,
|
||||||
}
|
}
|
||||||
|
|
||||||
present, err := be.Test(restic.Handle{Type: restic.ConfigFile})
|
present, err := be.Test(restic.Handle{Type: restic.ConfigFile})
|
||||||
|
|
|
@ -17,7 +17,7 @@ type Config struct {
|
||||||
Bucket string
|
Bucket string
|
||||||
Prefix string
|
Prefix string
|
||||||
|
|
||||||
Connections int `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
Connections uint `option:"connections" help:"set a limit for the number of concurrent connections (default: 5)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfig returns a new config with default options applied.
|
// NewConfig returns a new config with default options applied.
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
package backend
|
package backend
|
||||||
|
|
||||||
|
import "restic/errors"
|
||||||
|
|
||||||
// Semaphore limits access to a restricted resource.
|
// Semaphore limits access to a restricted resource.
|
||||||
type Semaphore struct {
|
type Semaphore struct {
|
||||||
ch chan struct{}
|
ch chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSemaphore returns a new semaphore with capacity n.
|
// NewSemaphore returns a new semaphore with capacity n.
|
||||||
func NewSemaphore(n int) *Semaphore {
|
func NewSemaphore(n uint) (*Semaphore, error) {
|
||||||
|
if n <= 0 {
|
||||||
|
return nil, errors.New("must be a positive number")
|
||||||
|
}
|
||||||
return &Semaphore{
|
return &Semaphore{
|
||||||
ch: make(chan struct{}, n),
|
ch: make(chan struct{}, n),
|
||||||
}
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetToken blocks until a Token is available.
|
// GetToken blocks until a Token is available.
|
||||||
|
|
Loading…
Add table
Reference in a new issue