package children import ( "context" "time" "dev.mediocregopher.com/mediocre-go-lib.git/mlog" ) // until keeps trying fn until it returns nil, returning true. If the context is // canceled then until returns false. func until( ctx context.Context, logger *mlog.Logger, descr string, fn func(context.Context) error, ) bool { for { logger.Info(ctx, descr) err := fn(ctx) if err == nil { return true } else if ctxErr := ctx.Err(); ctxErr != nil { return false } logger.Warn(ctx, descr+" failed, retrying in one second", err) time.Sleep(1 * time.Second) } }