Open achimweigel opened 3 weeks ago
What happened:
There seems to be a race condition in the MatchingResolver. Usually, the parallel access to the member rules is synchronized (e.g. here) but this is violated here.
rules
During our tests we got the following error:
WARNING: DATA RACE [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:580) Write at 0x00c00044f248 by goroutine 86: [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:581) github.com/open-component-model/ocm/pkg/contexts/ocm/internal.(*MatchingResolver).AddRule() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:582) [/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/resolver.go:165](mailto:/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/resolver.go:165) +0x38b [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:583) github.com/open-component-model/ocm/pkg/contexts/ocm/internal.(*_context).AddResolverRule() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:584) [/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/context.go:329](mailto:/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/context.go:329) +0xea [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:585) github.com/open-component-model/ocm/pkg/contexts/ocm/internal.(*gcWrapper).AddResolverRule() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:586) <autogenerated>:1 +0x1f [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:587) github.com/gardener/landscaper/pkg/components/ocmlib.(*RegistryAccess).GetComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:588) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/ocmlib/registryaccess.go:144 +0x6b0 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:589) github.com/gardener/landscaper/pkg/components/model.GetComponentVersionWithOverwriter() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:590) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/model/registryaccess.go:31 +0x101 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:591) github.com/gardener/landscaper/pkg/components/ocmlib.(*ComponentVersion).GetReferencedComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:592) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/ocmlib/componentversion.go:77 +0x1f0 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:593) github.com/gardener/landscaper/pkg/components/model.fetchComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:594) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/model/componentversion_refs.go:226 +0x1f3 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:595) github.com/gardener/landscaper/pkg/components/model.getTransitiveComponentReferencesRecursively.gowrap2() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:596) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/model/componentversion_refs.go:203 +0x124 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:597) [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:598) Previous read at 0x00c00044f248 by goroutine 87: [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:599) github.com/open-component-model/ocm/pkg/contexts/ocm/internal.(*_context).GetResolver() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:600) [/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/context.go:322](mailto:/go/pkg/mod/github.com/open-component-model/ocm@v0.10.0/pkg/contexts/ocm/internal/context.go:322) +0xc6 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:601) github.com/open-component-model/ocm/pkg/contexts/ocm/internal.(*gcWrapper).GetResolver() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:602) <autogenerated>:1 +0x24 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:603) github.com/gardener/landscaper/pkg/components/ocmlib.(*RegistryAccess).GetComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:604) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/ocmlib/registryaccess.go:145 +0x6d5 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:605) github.com/gardener/landscaper/pkg/components/model.GetComponentVersionWithOverwriter() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:606) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/model/registryaccess.go:31 +0x101 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:607) github.com/gardener/landscaper/pkg/components/ocmlib.(*ComponentVersion).GetReferencedComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:608) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/ocmlib/componentversion.go:77 +0x1f0 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:609) github.com/gardener/landscaper/pkg/components/model.fetchComponentVersion() [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:610) /tmp/build/86a4261d/pull-request-gardener.landscaper-master-pr/pkg/components/model/componentversion_refs.go:226 +0x1f3 [04:35:15](https://concourse.ci.gardener.cloud/builds/306331845#L665a4bc5:611) github.com/gardener/landscaper/pkg/components/model.getTransitiveComponentReferencesRecursively.gowrap2()
What you expected to happen:
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know:
Environment:
What happened:
There seems to be a race condition in the MatchingResolver. Usually, the parallel access to the member
rules
is synchronized (e.g. here) but this is violated here.During our tests we got the following error:
What you expected to happen:
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know:
Environment: