Skip to content

Commit

Permalink
Move all utils configmapproviders to internal to prepare interface ch…
Browse files Browse the repository at this point in the history
…ange (open-telemetry#4600)

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
  • Loading branch information
bogdandrutu authored Dec 21, 2021
1 parent 92772f7 commit eb6f051
Show file tree
Hide file tree
Showing 15 changed files with 39 additions and 35 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- `configauth`: remove interceptor functions from the ServerAuthenticator interface (#4583)
- Replace ConfigMapProvider and ConfigUnmarshaler in collector settings by one simpler ConfigProvider (#4590)
- Remove deprecated consumererror.Combine (#4597)
- Remove `configmapprovider.NewDefault`, `configmapprovider.NewExpand`, `configmapprovider.NewMerge` (#4600)

## 💡 Enhancements 💡

Expand Down
3 changes: 2 additions & 1 deletion config/configtest/configtest.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/config/configmapprovider"
"go.opentelemetry.io/collector/config/configunmarshaler"
"go.opentelemetry.io/collector/internal/configprovider"
)

// The regular expression for valid config field tag.
Expand All @@ -35,7 +36,7 @@ var configFieldTagRegExp = regexp.MustCompile("^[a-z0-9][a-z0-9_]*$")
// LoadConfig loads a config.Config from file, and does NOT validate the configuration.
func LoadConfig(fileName string, factories component.Factories) (*config.Config, error) {
// Read yaml config from file
cp, err := configmapprovider.NewExpand(configmapprovider.NewFile(fileName)).Retrieve(context.Background(), nil)
cp, err := configprovider.NewExpand(configmapprovider.NewFile(fileName)).Retrieve(context.Background(), nil)
if err != nil {
return nil, err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configprovider // import "go.opentelemetry.io/collector/service/internal/configprovider"
package configprovider // import "go.opentelemetry.io/collector/internal/configprovider"

import (
"go.opentelemetry.io/collector/config/configmapprovider"
Expand All @@ -21,8 +21,5 @@ import (
// NewDefaultMapProvider returns the default configmapprovider.Provider, and it creates configuration from a file
// defined by the given configFile and overwrites fields using properties.
func NewDefaultMapProvider(configFileName string, properties []string) configmapprovider.Provider {
return configmapprovider.NewExpand(
configmapprovider.NewMerge(
configmapprovider.NewFile(configFileName),
configmapprovider.NewProperties(properties)))
return NewExpand(NewMerge(configmapprovider.NewFile(configFileName), configmapprovider.NewProperties(properties)))
}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,30 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configmapprovider // import "go.opentelemetry.io/collector/config/configmapprovider"
package configprovider // import "go.opentelemetry.io/collector/internal/configprovider"

import (
"context"
"fmt"
"os"

"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/config/configmapprovider"
)

type expandMapProvider struct {
base Provider
base configmapprovider.Provider
}

// NewExpand returns a Provider, that expands all environment variables for a
// config.Map provided by the given Provider.
func NewExpand(base Provider) Provider {
func NewExpand(base configmapprovider.Provider) configmapprovider.Provider {
return &expandMapProvider{
base: base,
}
}

func (emp *expandMapProvider) Retrieve(ctx context.Context, onChange func(*ChangeEvent)) (Retrieved, error) {
func (emp *expandMapProvider) Retrieve(ctx context.Context, onChange func(*configmapprovider.ChangeEvent)) (configmapprovider.Retrieved, error) {
retr, err := emp.base.Retrieve(ctx, onChange)
if err != nil {
return nil, fmt.Errorf("failed to retrieve from base provider: %w", err)
Expand All @@ -46,9 +47,9 @@ func (emp *expandMapProvider) Retrieve(ctx context.Context, onChange func(*Chang
for _, k := range cfgMap.AllKeys() {
cfgMap.Set(k, expandStringValues(cfgMap.Get(k)))
}
return NewRetrieved(func(ctx context.Context) (*config.Map, error) {
return configmapprovider.NewRetrieved(func(ctx context.Context) (*config.Map, error) {
return cfgMap, nil
}, WithClose(retr.Close))
}, configmapprovider.WithClose(retr.Close))
}

func (emp *expandMapProvider) Shutdown(ctx context.Context) error {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configmapprovider
package configprovider

import (
"context"
Expand All @@ -23,6 +23,8 @@ import (

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"go.opentelemetry.io/collector/config/configmapprovider"
)

func TestBaseRetrieveFailsOnRetrieve(t *testing.T) {
Expand Down Expand Up @@ -87,15 +89,15 @@ func TestExpand(t *testing.T) {
}()

// Cannot use configtest.LoadConfigMap because of circular deps.
ret, errRet := NewFile(path.Join("testdata", "expand-with-no-env.yaml")).Retrieve(context.Background(), nil)
ret, errRet := configmapprovider.NewFile(path.Join("testdata", "expand-with-no-env.yaml")).Retrieve(context.Background(), nil)
require.NoError(t, errRet, "Unable to get expected config")
expectedCfgMap, errExpected := ret.Get(context.Background())
require.NoError(t, errExpected, "Unable to get expected config")

for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
// Retrieve the config
emp := NewExpand(NewFile(path.Join("testdata", test.name)))
emp := NewExpand(configmapprovider.NewFile(path.Join("testdata", test.name)))
cp, err := emp.Retrieve(context.Background(), nil)
require.NoError(t, err, "Unable to get config")

Expand All @@ -115,7 +117,7 @@ func TestExpand_EscapedEnvVars(t *testing.T) {
}()

// Retrieve the config
emp := NewExpand(NewFile(path.Join("testdata", "expand-escaped-env.yaml")))
emp := NewExpand(configmapprovider.NewFile(path.Join("testdata", "expand-escaped-env.yaml")))
cp, err := emp.Retrieve(context.Background(), nil)
require.NoError(t, err, "Unable to get config")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,30 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configmapprovider // import "go.opentelemetry.io/collector/config/configmapprovider"
package configprovider // import "go.opentelemetry.io/collector/internal/configprovider"

import (
"context"

"go.uber.org/multierr"

"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/config/configmapprovider"
)

type mergeMapProvider struct {
providers []Provider
providers []configmapprovider.Provider
}

// NewMerge returns a Provider, that merges the result from multiple Provider.
//
// The ConfigMaps are merged in the given order, by merging all of them in order into an initial empty map.
func NewMerge(ps ...Provider) Provider {
func NewMerge(ps ...configmapprovider.Provider) configmapprovider.Provider {
return &mergeMapProvider{providers: ps}
}

func (mp *mergeMapProvider) Retrieve(ctx context.Context, onChange func(*ChangeEvent)) (Retrieved, error) {
var retrs []Retrieved
func (mp *mergeMapProvider) Retrieve(ctx context.Context, onChange func(*configmapprovider.ChangeEvent)) (configmapprovider.Retrieved, error) {
var retrs []configmapprovider.Retrieved
retCfgMap := config.NewMap()
for _, p := range mp.providers {
retr, err := p.Retrieve(ctx, onChange)
Expand All @@ -50,11 +51,11 @@ func (mp *mergeMapProvider) Retrieve(ctx context.Context, onChange func(*ChangeE
}
retrs = append(retrs, retr)
}
return NewRetrieved(
return configmapprovider.NewRetrieved(
func(ctx context.Context) (*config.Map, error) {
return retCfgMap, nil
},
WithClose(func(ctxF context.Context) error {
configmapprovider.WithClose(func(ctxF context.Context) error {
var err error
for _, ret := range retrs {
err = multierr.Append(err, ret.Close(ctxF))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configmapprovider
package configprovider

import (
"context"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,30 @@
// See the License for the specific language governing permissions and
// limitations under the License.

package configmapprovider
package configprovider

import (
"context"

"go.opentelemetry.io/collector/config"
"go.opentelemetry.io/collector/config/configmapprovider"
)

// mockProvider is a mock implementation of Provider, useful for testing.
type mockProvider struct {
retrieved Retrieved
retrieved configmapprovider.Retrieved
retrieveErr error
shutdownErr error
}

var _ Provider = &mockProvider{}
var _ configmapprovider.Provider = &mockProvider{}

func (m *mockProvider) Retrieve(context.Context, func(*ChangeEvent)) (Retrieved, error) {
func (m *mockProvider) Retrieve(context.Context, func(*configmapprovider.ChangeEvent)) (configmapprovider.Retrieved, error) {
if m.retrieveErr != nil {
return nil, m.retrieveErr
}
if m.retrieved == nil {
return NewRetrieved(func(ctx context.Context) (*config.Map, error) { return config.NewMap(), nil })
return configmapprovider.NewRetrieved(func(ctx context.Context) (*config.Map, error) { return config.NewMap(), nil })
}
return m.retrieved, nil
}
Expand All @@ -43,14 +44,14 @@ func (m *mockProvider) Shutdown(context.Context) error {
return m.shutdownErr
}

func newErrGetRetrieved(getErr error) Retrieved {
ret, _ := NewRetrieved(func(ctx context.Context) (*config.Map, error) { return nil, getErr })
func newErrGetRetrieved(getErr error) configmapprovider.Retrieved {
ret, _ := configmapprovider.NewRetrieved(func(ctx context.Context) (*config.Map, error) { return nil, getErr })
return ret
}

func newErrCloseRetrieved(closeErr error) Retrieved {
ret, _ := NewRetrieved(
func newErrCloseRetrieved(closeErr error) configmapprovider.Retrieved {
ret, _ := configmapprovider.NewRetrieved(
func(ctx context.Context) (*config.Map, error) { return config.NewMap(), nil },
WithClose(func(ctx context.Context) error { return closeErr }))
configmapprovider.WithClose(func(ctx context.Context) error { return closeErr }))
return ret
}
2 changes: 1 addition & 1 deletion service/config_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"go.opentelemetry.io/collector/config/configmapprovider"
"go.opentelemetry.io/collector/config/configunmarshaler"
"go.opentelemetry.io/collector/config/experimental/configsource"
"go.opentelemetry.io/collector/service/internal/configprovider"
"go.opentelemetry.io/collector/internal/configprovider"
)

// ConfigProvider provides the service configuration.
Expand Down

0 comments on commit eb6f051

Please sign in to comment.