sequential access to viper config (still broken) + add delayed execution to storage-sharing

This commit is contained in:
A.Unger
2021-03-10 12:26:14 +01:00
parent 0d3350497a
commit 6054e6b4a1
15 changed files with 72 additions and 1 deletions

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/owncloud/ocis/accounts/pkg/flagset"
"github.com/micro/cli/v2"
@@ -80,6 +82,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads accounts configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis/glauth/pkg/config"
"github.com/owncloud/ocis/glauth/pkg/flagset"
@@ -68,6 +70,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads glauth configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -4,6 +4,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis/graph/pkg/config"
"github.com/owncloud/ocis/graph/pkg/flagset"
@@ -66,6 +68,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig reads graph configuration from fs.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis/idp/pkg/config"
"github.com/owncloud/ocis/idp/pkg/flagset"
@@ -69,6 +71,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig load configuration for every extension
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

8
ocis-pkg/sync/sync.go Normal file
View File

@@ -0,0 +1,8 @@
package sync
import "sync"
var (
// ParsingViperConfig addresses the fact that config parsing using Viper is not thread safe.
ParsingViperConfig sync.Mutex
)

View File

@@ -4,6 +4,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -77,6 +79,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig load configuration for every extension
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -10,6 +10,7 @@ import (
"os/signal"
"strings"
"syscall"
"time"
mzlog "github.com/asim/go-micro/plugins/logger/zerolog/v3"
accounts "github.com/owncloud/ocis/accounts/pkg/command"
@@ -37,6 +38,7 @@ import (
type Service struct {
Supervisor *suture.Supervisor
ServicesRegistry map[string]func(context.Context, *ociscfg.Config) suture.Service
Delayed map[string]func(context.Context, *ociscfg.Config) suture.Service
Log zerolog.Logger
serviceToken map[string][]suture.ServiceToken
@@ -65,6 +67,7 @@ func NewService(options ...Option) (*Service, error) {
s := &Service{
ServicesRegistry: make(map[string]func(context.Context, *ociscfg.Config) suture.Service),
Delayed: make(map[string]func(context.Context, *ociscfg.Config) suture.Service),
Log: l,
serviceToken: make(map[string][]suture.ServiceToken),
@@ -94,7 +97,9 @@ func NewService(options ...Option) (*Service, error) {
s.ServicesRegistry["storage-home"] = storage.NewStorageHome
s.ServicesRegistry["storage-users"] = storage.NewStorageUsers
s.ServicesRegistry["storage-public-link"] = storage.NewStoragePublicLink
s.ServicesRegistry["storage-sharing"] = storage.NewSharing
// populate delayed services
s.Delayed["storage-sharing"] = storage.NewSharing
return s, nil
}
@@ -159,6 +164,12 @@ func Start(o ...Option) error {
// trap will block on halt channel for interruptions.
go trap(s, halt)
time.Sleep(1 * time.Second)
// add delayed
for name := range s.Delayed {
s.serviceToken[name] = append(s.serviceToken[name], s.Supervisor.Add(s.Delayed[name](s.context, s.cfg)))
}
return http.Serve(l, nil)
}

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -66,6 +68,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig reads ocs configuration from fs.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -67,6 +69,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads onlyoffice configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -70,6 +72,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads proxy configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -69,6 +71,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads settings configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -69,6 +71,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads store configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -66,6 +68,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -62,6 +64,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads proxy configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))

View File

@@ -5,6 +5,8 @@ import (
"os"
"strings"
"github.com/owncloud/ocis/ocis-pkg/sync"
"github.com/micro/cli/v2"
ociscfg "github.com/owncloud/ocis/ocis-pkg/config"
"github.com/owncloud/ocis/ocis-pkg/log"
@@ -64,6 +66,8 @@ func NewLogger(cfg *config.Config) log.Logger {
// ParseConfig loads webdav configuration from Viper known paths.
func ParseConfig(c *cli.Context, cfg *config.Config) error {
sync.ParsingViperConfig.Lock()
defer sync.ParsingViperConfig.Unlock()
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))