OncePerServerBlock may now return an error

This commit is contained in:
Matthew Holt 2015-10-15 11:38:17 -06:00
parent a518049fa2
commit 691204ceed
3 changed files with 16 additions and 8 deletions

View File

@ -68,7 +68,13 @@ func Load(filename string, input io.Reader) (Group, error) {
controller := &setup.Controller{ controller := &setup.Controller{
Config: &config, Config: &config,
Dispenser: parse.NewDispenserTokens(filename, tokens), Dispenser: parse.NewDispenserTokens(filename, tokens),
OncePerServerBlock: func(f func()) { onces[dir.name].Do(f) }, OncePerServerBlock: func(f func() error) error {
var err error
onces[dir.name].Do(func() {
err = f()
})
return err
},
} }
midware, err := dir.setup(controller) midware, err := dir.setup(controller)

View File

@ -19,8 +19,11 @@ type Controller struct {
// OncePerServerBlock is a function that executes f // OncePerServerBlock is a function that executes f
// exactly once per server block, no matter how many // exactly once per server block, no matter how many
// hosts are associated with it. // hosts are associated with it. If it is the first
OncePerServerBlock func(f func()) // time, the function f is executed immediately
// (not deferred) and may return an error which is
// returned by OncePerServerBlock.
OncePerServerBlock func(f func() error) error
} }
// NewTestController creates a new *Controller for // NewTestController creates a new *Controller for

View File

@ -55,9 +55,8 @@ func registerCallback(c *Controller, list *[]func() error) error {
funcs = append(funcs, fn) funcs = append(funcs, fn)
} }
c.OncePerServerBlock(func() { return c.OncePerServerBlock(func() error {
*list = append(*list, funcs...) *list = append(*list, funcs...)
})
return nil return nil
})
} }