diff --git a/changelog/unreleased/reva-gateway-endpoint-config.md b/changelog/unreleased/reva-gateway-endpoint-config.md new file mode 100644 index 00000000000..1e0802e3e04 --- /dev/null +++ b/changelog/unreleased/reva-gateway-endpoint-config.md @@ -0,0 +1,5 @@ +Bugfix: Race condition in config parsing + +There was a race condition in the config parsing when configuring the storage services caused by services overwriting a pointer to a config value. We fixed it by setting sane defaults. + +https://github.com/owncloud/ocis/pull/2574 diff --git a/storage/pkg/command/appprovider.go b/storage/pkg/command/appprovider.go index 95b032b541a..5696d63155f 100644 --- a/storage/pkg/command/appprovider.go +++ b/storage/pkg/command/appprovider.go @@ -141,8 +141,9 @@ func NewAppProvider(cfg *ociscfg.Config) suture.Service { func (s AppProviderSutureService) Serve(ctx context.Context) error { s.cfg.Reva.AppProvider.Context = ctx f := &flag.FlagSet{} - for k := range AppProvider(s.cfg).Flags { - if err := AppProvider(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := AppProvider(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/authbasic.go b/storage/pkg/command/authbasic.go index e4706998b0a..044b6b84057 100644 --- a/storage/pkg/command/authbasic.go +++ b/storage/pkg/command/authbasic.go @@ -160,8 +160,9 @@ func NewAuthBasic(cfg *ociscfg.Config) suture.Service { func (s AuthBasicSutureService) Serve(ctx context.Context) error { s.cfg.Reva.AuthBasic.Context = ctx f := &flag.FlagSet{} - for k := range AuthBasic(s.cfg).Flags { - if err := AuthBasic(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := AuthBasic(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/authbearer.go b/storage/pkg/command/authbearer.go index 4c5b49f734a..6372cda3bf7 100644 --- a/storage/pkg/command/authbearer.go +++ b/storage/pkg/command/authbearer.go @@ -139,8 +139,9 @@ func NewAuthBearer(cfg *ociscfg.Config) suture.Service { func (s AuthBearerSutureService) Serve(ctx context.Context) error { s.cfg.Reva.AuthBearer.Context = ctx f := &flag.FlagSet{} - for k := range AuthBearer(s.cfg).Flags { - if err := AuthBearer(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := AuthBearer(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/frontend.go b/storage/pkg/command/frontend.go index ec60c372fce..96566f55f70 100644 --- a/storage/pkg/command/frontend.go +++ b/storage/pkg/command/frontend.go @@ -338,8 +338,9 @@ func NewFrontend(cfg *ociscfg.Config) suture.Service { func (s FrontendSutureService) Serve(ctx context.Context) error { s.cfg.Reva.Frontend.Context = ctx f := &flag.FlagSet{} - for k := range Frontend(s.cfg).Flags { - if err := Frontend(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := Frontend(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/gateway.go b/storage/pkg/command/gateway.go index f7bfa6c55b8..1aa235fb9c1 100644 --- a/storage/pkg/command/gateway.go +++ b/storage/pkg/command/gateway.go @@ -342,8 +342,9 @@ func NewGateway(cfg *ociscfg.Config) suture.Service { func (s GatewaySutureService) Serve(ctx context.Context) error { s.cfg.Reva.Gateway.Context = ctx f := &flag.FlagSet{} - for k := range Gateway(s.cfg).Flags { - if err := Gateway(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := Gateway(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/groups.go b/storage/pkg/command/groups.go index c46e72ff937..152e85e846e 100644 --- a/storage/pkg/command/groups.go +++ b/storage/pkg/command/groups.go @@ -175,8 +175,9 @@ func NewGroupProvider(cfg *ociscfg.Config) suture.Service { func (s GroupProvider) Serve(ctx context.Context) error { s.cfg.Reva.Groups.Context = ctx f := &flag.FlagSet{} - for k := range Groups(s.cfg).Flags { - if err := Groups(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := Groups(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/sharing.go b/storage/pkg/command/sharing.go index 3dad197d587..354bb0d643c 100644 --- a/storage/pkg/command/sharing.go +++ b/storage/pkg/command/sharing.go @@ -201,8 +201,9 @@ func NewSharing(cfg *ociscfg.Config) suture.Service { func (s SharingSutureService) Serve(ctx context.Context) error { s.cfg.Reva.Sharing.Context = ctx f := &flag.FlagSet{} - for k := range Sharing(s.cfg).Flags { - if err := Sharing(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := Sharing(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/storagehome.go b/storage/pkg/command/storagehome.go index 6ae5d362585..547291faa65 100644 --- a/storage/pkg/command/storagehome.go +++ b/storage/pkg/command/storagehome.go @@ -169,8 +169,9 @@ func NewStorageHome(cfg *ociscfg.Config) suture.Service { func (s StorageHomeSutureService) Serve(ctx context.Context) error { s.cfg.Reva.StorageHome.Context = ctx f := &flag.FlagSet{} - for k := range StorageHome(s.cfg).Flags { - if err := StorageHome(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := StorageHome(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/storagemetadata.go b/storage/pkg/command/storagemetadata.go index d11a5f84c54..c847eda808c 100644 --- a/storage/pkg/command/storagemetadata.go +++ b/storage/pkg/command/storagemetadata.go @@ -201,8 +201,9 @@ func NewStorageMetadata(cfg *ociscfg.Config) suture.Service { func (s SutureService) Serve(ctx context.Context) error { s.cfg.Reva.StorageMetadata.Context = ctx f := &flag.FlagSet{} - for k := range StorageMetadata(s.cfg).Flags { - if err := StorageMetadata(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := StorageMetadata(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/storagepubliclink.go b/storage/pkg/command/storagepubliclink.go index 6c47b5eeb63..d2227177769 100644 --- a/storage/pkg/command/storagepubliclink.go +++ b/storage/pkg/command/storagepubliclink.go @@ -134,8 +134,9 @@ func NewStoragePublicLink(cfg *ociscfg.Config) suture.Service { func (s StoragePublicLinkSutureService) Serve(ctx context.Context) error { s.cfg.Reva.StoragePublicLink.Context = ctx f := &flag.FlagSet{} - for k := range StoragePublicLink(s.cfg).Flags { - if err := StoragePublicLink(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := StoragePublicLink(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/storageusers.go b/storage/pkg/command/storageusers.go index 2585c071fbe..581b79c61f7 100644 --- a/storage/pkg/command/storageusers.go +++ b/storage/pkg/command/storageusers.go @@ -169,8 +169,9 @@ func NewStorageUsers(cfg *ociscfg.Config) suture.Service { func (s StorageUsersSutureService) Serve(ctx context.Context) error { s.cfg.Reva.StorageUsers.Context = ctx f := &flag.FlagSet{} - for k := range StorageUsers(s.cfg).Flags { - if err := StorageUsers(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := StorageUsers(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/command/users.go b/storage/pkg/command/users.go index 2f7f9295695..306b7caad49 100644 --- a/storage/pkg/command/users.go +++ b/storage/pkg/command/users.go @@ -195,8 +195,9 @@ func NewUserProvider(cfg *ociscfg.Config) suture.Service { func (s UserProvider) Serve(ctx context.Context) error { s.cfg.Reva.Users.Context = ctx f := &flag.FlagSet{} - for k := range Users(s.cfg).Flags { - if err := Users(s.cfg).Flags[k].Apply(f); err != nil { + cmdFlags := Users(s.cfg).Flags + for k := range cmdFlags { + if err := cmdFlags[k].Apply(f); err != nil { return err } } diff --git a/storage/pkg/flagset/sharing.go b/storage/pkg/flagset/sharing.go index 866910054bc..58abecab813 100644 --- a/storage/pkg/flagset/sharing.go +++ b/storage/pkg/flagset/sharing.go @@ -21,6 +21,16 @@ func SharingWithConfig(cfg *config.Config) []cli.Flag { // Services + // Gateway + + &cli.StringFlag{ + Name: "gateway-url", + Value: flags.OverrideDefaultString(cfg.Reva.Gateway.Endpoint, "localhost:9142"), + Usage: "URL to use for the storage gateway service", + EnvVars: []string{"STORAGE_GATEWAY_ENDPOINT"}, + Destination: &cfg.Reva.Gateway.Endpoint, + }, + // Sharing &cli.StringFlag{ diff --git a/storage/pkg/flagset/users.go b/storage/pkg/flagset/users.go index fb8e10cebb9..5d7f4356c18 100644 --- a/storage/pkg/flagset/users.go +++ b/storage/pkg/flagset/users.go @@ -21,6 +21,16 @@ func UsersWithConfig(cfg *config.Config) []cli.Flag { // Services + // Gateway + + &cli.StringFlag{ + Name: "gateway-endpoint", + Value: flags.OverrideDefaultString(cfg.Reva.Gateway.Endpoint, "localhost:9142"), + Usage: "URL to use for the storage gateway service", + EnvVars: []string{"STORAGE_GATEWAY_ENDPOINT"}, + Destination: &cfg.Reva.Gateway.Endpoint, + }, + // Userprovider &cli.StringFlag{