add context to server errors, properly close datastore in case of errors
This commit is contained in:
committed by
Umputun
parent
46f3ced83d
commit
42d0c67cb3
@@ -72,12 +72,12 @@ func (ac *AvatarCommand) makeAvatarStore(gr AvatarGroup) (avatar.Store, error) {
|
||||
switch gr.Type {
|
||||
case "fs":
|
||||
if err := makeDirs(gr.FS.Path); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create avatar store")
|
||||
}
|
||||
return avatar.NewLocalFS(gr.FS.Path), nil
|
||||
case "bolt":
|
||||
if err := makeDirs(path.Dir(gr.Bolt.File)); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create avatar store")
|
||||
}
|
||||
return avatar.NewBoltDB(gr.Bolt.File, bolt.Options{})
|
||||
}
|
||||
|
||||
@@ -322,7 +322,7 @@ func (s *ServerCommand) HandleDeprecatedFlags() (result []DeprecatedFlag) {
|
||||
func (s *ServerCommand) newServerApp() (*serverApp, error) {
|
||||
|
||||
if err := makeDirs(s.BackupLocation); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create backup store")
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(s.RemarkURL, "http://") && !strings.HasPrefix(s.RemarkURL, "https://") {
|
||||
@@ -362,16 +362,19 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) {
|
||||
|
||||
loadingCache, err := s.makeCache()
|
||||
if err != nil {
|
||||
_ = dataService.Close()
|
||||
return nil, errors.Wrap(err, "failed to make cache")
|
||||
}
|
||||
|
||||
avatarStore, err := s.makeAvatarStore()
|
||||
if err != nil {
|
||||
_ = dataService.Close()
|
||||
return nil, errors.Wrap(err, "failed to make avatar store")
|
||||
}
|
||||
authRefreshCache := newAuthRefreshCache()
|
||||
authenticator, err := s.makeAuthenticator(dataService, avatarStore, adminStore, authRefreshCache)
|
||||
if err != nil {
|
||||
_ = dataService.Close()
|
||||
return nil, errors.Wrap(err, "failed to make authenticator")
|
||||
}
|
||||
|
||||
@@ -418,6 +421,7 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) {
|
||||
|
||||
sslConfig, err := s.makeSSLConfig()
|
||||
if err != nil {
|
||||
_ = dataService.Close()
|
||||
return nil, errors.Wrap(err, "failed to make config of ssl server params")
|
||||
}
|
||||
|
||||
@@ -459,13 +463,14 @@ func (s *ServerCommand) newServerApp() (*serverApp, error) {
|
||||
if s.Auth.Dev {
|
||||
da, errDevAuth := authenticator.DevAuth()
|
||||
if errDevAuth != nil {
|
||||
_ = dataService.Close()
|
||||
return nil, errors.Wrap(errDevAuth, "can't make dev oauth2 server")
|
||||
}
|
||||
devAuth = da
|
||||
}
|
||||
|
||||
return &serverApp{
|
||||
ServerCommand: s,
|
||||
ServerCommand: s,
|
||||
restSrv: srv,
|
||||
migratorSrv: migr,
|
||||
exporter: exporter,
|
||||
@@ -586,12 +591,12 @@ func (s *ServerCommand) makeAvatarStore() (avatar.Store, error) {
|
||||
switch s.Avatar.Type {
|
||||
case "fs":
|
||||
if err := makeDirs(s.Avatar.FS.Path); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create avatar store")
|
||||
}
|
||||
return avatar.NewLocalFS(s.Avatar.FS.Path), nil
|
||||
case "bolt":
|
||||
if err := makeDirs(path.Dir(s.Avatar.Bolt.File)); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create avatar store")
|
||||
}
|
||||
return avatar.NewBoltDB(s.Avatar.Bolt.File, bolt.Options{})
|
||||
case "uri":
|
||||
@@ -618,7 +623,7 @@ func (s *ServerCommand) makePicturesStore() (*image.Service, error) {
|
||||
return image.NewService(boltImageStore, imageServiceParams), nil
|
||||
case "fs":
|
||||
if err := makeDirs(s.Image.FS.Path); err != nil {
|
||||
return nil, err
|
||||
return nil, errors.Wrap(err, "failed to create pictures store")
|
||||
}
|
||||
return image.NewService(&image.FileSystem{
|
||||
Location: s.Image.FS.Path,
|
||||
|
||||
@@ -306,7 +306,7 @@ func TestServerApp_Failed(t *testing.T) {
|
||||
_, err = p.ParseArgs([]string{"--store.bolt.path=/tmp", "--backup=/dev/null/not-writable"})
|
||||
assert.NoError(t, err)
|
||||
_, err = opts.newServerApp()
|
||||
assert.EqualError(t, err, "can't make directory /dev/null/not-writable: mkdir /dev/null: not a directory")
|
||||
assert.EqualError(t, err, "failed to create backup store: can't make directory /dev/null/not-writable: mkdir /dev/null: not a directory")
|
||||
t.Log(err)
|
||||
|
||||
// invalid url
|
||||
|
||||
Reference in New Issue
Block a user