Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prevent race when resolving a property map #11186

Merged
merged 1 commit into from Oct 28, 2022

Conversation

iwahbe
Copy link
Member

@iwahbe iwahbe commented Oct 28, 2022

I encountered a problem trying to flush non-determinism out of pulumi-yaml. Running our tests with high --count=N values resulted in panics from concurrent accesses to Ouptput values. These changes allow running go test -count=500 -race ./... without errors (caused by pulumi/pulumi).

@iwahbe iwahbe requested review from t0yv0 and kpitzen October 28, 2022 18:31
@iwahbe iwahbe self-assigned this Oct 28, 2022
@pulumi-bot
Copy link
Contributor

Changelog

[uncommitted] (2022-10-28)

Bug Fixes

  • [sdk/{go,yaml}] Prevent race on resource output
    #11186

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Can you give an example of a panic trace being fixed? 🙇

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

The PR fixes 3 data races. The first (encountered when resolving a property map), causes raw panics:

The panicking thread looks like this:

fatal error: concurrent map iteration and map write

goroutine 13081 [running]:
github.com/pulumi/pulumi/sdk/v3/go/common/resource.PropertyMap.ContainsUnknowns(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/common/resource/properties.go:152
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail.func1({0xc000813ba0?, 0xc000cc6aa0?, 0x18?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1450 +0x173a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func1({0xc000813ba0, 0x2, 0x2})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2023 +0x8a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2.1({0xc000813ba0?, 0xc0003a2020?, 0x2?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2028 +0x22
reflect.Value.call({0x1cc0480?, 0xc0005c2680?, 0x100f14e?}, {0x1e6a41a, 0x4}, {0xc000a48138, 0x1, 0xc0004ce240?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:584 +0x8c5
reflect.Value.Call({0x1cc0480?, 0xc0005c2680?, 0x10c677c?}, {0xc000a48138?, 0xc000cc7788?, 0xc000cc7600?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:368 +0xbc
github.com/pulumi/pulumi/sdk/v3/go/pulumi.makeContextful.func1({0xc000a48120?, 0x5?, 0x8?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:384 +0x56
reflect.Value.call({0xc000714300?, 0xc000942210?, 0x0?}, {0x1e6a41a, 0x4}, {0xc000c79fa0, 0x2, 0x1a1915a?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:584 +0x8c5
reflect.Value.Call({0xc000714300?, 0xc000942210?, 0xc000048080?}, {0xc000c79fa0?, 0xc000531ed8?, 0x1a1fbe7?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:368 +0xbc
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:505 +0x2f0
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411
Full Stacktrace

fatal error: concurrent map iteration and map write

goroutine 13081 [running]:
github.com/pulumi/pulumi/sdk/v3/go/common/resource.PropertyMap.ContainsUnknowns(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/common/resource/properties.go:152
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail.func1({0xc000813ba0?, 0xc000cc6aa0?, 0x18?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1450 +0x173a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func1({0xc000813ba0, 0x2, 0x2})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2023 +0x8a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2.1({0xc000813ba0?, 0xc0003a2020?, 0x2?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2028 +0x22
reflect.Value.call({0x1cc0480?, 0xc0005c2680?, 0x100f14e?}, {0x1e6a41a, 0x4}, {0xc000a48138, 0x1, 0xc0004ce240?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:584 +0x8c5
reflect.Value.Call({0x1cc0480?, 0xc0005c2680?, 0x10c677c?}, {0xc000a48138?, 0xc000cc7788?, 0xc000cc7600?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:368 +0xbc
github.com/pulumi/pulumi/sdk/v3/go/pulumi.makeContextful.func1({0xc000a48120?, 0x5?, 0x8?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:384 +0x56
reflect.Value.call({0xc000714300?, 0xc000942210?, 0x0?}, {0x1e6a41a, 0x4}, {0xc000c79fa0, 0x2, 0x1a1915a?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:584 +0x8c5
reflect.Value.Call({0xc000714300?, 0xc000942210?, 0xc000048080?}, {0xc000c79fa0?, 0xc000531ed8?, 0x1a1fbe7?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:368 +0xbc
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:505 +0x2f0
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 1 [chan receive]:
testing.tRunner.func1()
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1412 +0x4a5
testing.tRunner(0xc000c9c820, 0xc000cb5cd8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1452 +0x144
testing.runTests(0xc0000014a0?, {0x28a0ba0, 0x43, 0x43}, {0x2b73108?, 0x40?, 0x28adea0?})
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1844 +0x456
testing.(*M).Run(0xc0000014a0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1726 +0x5d9
main.main()
	_testmain.go:179 +0x1aa

goroutine 6 [chan receive]:
github.com/golang/glog.(*loggingT).flushDaemon(0x0?)
	/Users/ianwahbe/go/pkg/mod/github.com/golang/glog@v1.0.0/glog.go:882 +0x6a
created by github.com/golang/glog.init.0
	/Users/ianwahbe/go/pkg/mod/github.com/golang/glog@v1.0.0/glog.go:410 +0x1bf

goroutine 13174 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009b61a0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0009b61a0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0009b61a0, 0xc00079a8c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12832 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9cea0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeOutputs(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:24 +0x1e
testing.tRunner(0xc000c9cea0, 0x1f14f20)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13177 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009b6b60)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0009b6b60)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0009b6b60, 0xc00079a9b0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13127 [chan receive]:
testing.tRunner.func1()
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1412 +0x4a5
testing.tRunner(0xc000ba41a0, 0x1f15048)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1452 +0x144
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13204 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744fd0, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x1bf6c05?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x1e65420?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1e65420?, 0xc0008bab60?, 0x5?}, {0x1ccb0a0, 0xc00098eea0, 0x194})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:732 +0x7a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1ccb0a0?, 0xc000889be0?, 0xc000013d28?}, {0x1ccb0a0, 0xc00098eea0, 0x194})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:805 +0x1565
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add4e8?, 0x98?}, {0x1c75fc0, 0xc000013d10, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:841 +0x21a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1ccb0a0?, 0xc000889d90?, 0xc000013cf8?}, {0x1ccb0a0, 0xc00098ee50, 0x194})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:805 +0x1565
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add518?, 0x97?}, {0x1c75fc0, 0xc000add530, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:841 +0x21a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13089 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add4b8?, 0x97?}, {0x1c75fc0, 0xc000add4d0, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:787 +0x113a
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13146 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8e680)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestReadResourceErrorTyping(0xc0002c33d8?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1819 +0x33
testing.tRunner(0xc000c8e680, 0x1f14fe8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12831 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9cd00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestAsyncDiagsOptions(0xc000c9cd00)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_async_diags_test.go:45 +0x33
testing.tRunner(0xc000c9cd00, 0x1f14e38)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13219 [runnable]:
reflect.Value.Elem({0x1c62ea0?, 0xc0002f3050?, 0x16?})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/value.go:1212 +0x1ba
github.com/pulumi/pulumi/sdk/v3/go/pulumi.unmarshalOutput(0x1c64160?, {{0x1e06420?, 0xc00036acf0?}}, {0x1cee8a0?, 0xc000a64250?, 0x4?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:749 +0x1f13
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*resourceState).resolve(0xc0009467e0, 0xc00053e580, {0x0?, 0x0?}, 0x8?, {0xc000b2a0a0, 0x42}, {0x1e8af41, 0xf}, 0xc00036ac90, ...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1221 +0x757
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource.func1.1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:815 +0x7b
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:878 +0xd3d
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:807 +0x845

goroutine 13133 [GC assist wait]:
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.String(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/expr.go:130
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestToBase64(0xc000cd2a10?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1393 +0x45
testing.tRunner(0xc000773520, 0x1f15058)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13099 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971380)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionValuePatched(0xc0008017a0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:43 +0x25
testing.tRunner(0xc000971380, 0x1f15150)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13128 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000ba4340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestToJSON(0xc0007ab890?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:904 +0x36
testing.tRunner(0xc000ba4340, 0x1f15060)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13214 [GC assist wait]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add6c8?, 0x97?}, {0x1c75fc0, 0xc000add6e0, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:787 +0x113a
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13087 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744f50, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13172 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000921a00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc000921a00)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc000921a00, 0xc00079a820)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13238 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0009cacd0, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x17?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x1d0be80?, {0x20ba8f8, 0xc000048088})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInputImpl({0x1e65420?, 0xc0001bfe30?}, {0x20ca688?, 0x1ccb0a0?}, 0x1, 0xbe?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:262 +0x19c5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInput(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:214
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInputImpl({0x1d6e3a0?, 0xc000942750?}, {0x20ca688?, 0x1ccb0a0?}, 0x1, 0xa8?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:453 +0x25e6
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInput(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:214
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1508 +0x109
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1495 +0xbe

goroutine 13154 [runnable]:
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.yamlTemplate(0x1ed8ff0?, {0x1ed8ff1?, 0x353e91c8?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort_test.go:45 +0x29
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariableMemozied(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:256 +0x3f
testing.tRunner(0xc00045e4e0, 0x1f150d0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13211 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000952450, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xb948880?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13090 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9d1e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeVariable(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:82 +0x1e
testing.tRunner(0xc000c9d1e0, 0x1f14f40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13149 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8f1e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariablePulumiInDependencies(0xc000d06960?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:68 +0x1e
testing.tRunner(0xc000c8f1e0, 0x1f150f8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13209 [GC assist wait]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*ResourceState).addChild(0xc00063ac00, {0x20c2e10, 0xc000b5ac40})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/resource.go:92 +0x76
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).getOpts(0xc000831600, {0x20c2e10?, 0xc000b5ac40?}, {0x280e55e?, 0x5ad6b5?}, {0x0?, 0x0}, 0xc000929c20, _, 0x1)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1381 +0x158
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).prepareResourceInputs(0xc000831600, {0x20c2e10?, 0xc000b5ac40?}, {0x20b1860, 0xc000942a80}, {0xc000abc3a0?, 0x12?}, 0xc000929c20, 0xc00032bb00, 0x0, ...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1258 +0xc5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:820 +0x271
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:807 +0x845

goroutine 13160 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc00045f040)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc00045f040)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc00045f040, 0xc000318820)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13084 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744e90, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc0000143a0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0xc000014110?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13085 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744ed0, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0xc000189cc0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13119 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b51e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConflictKeyDiags(0xc000a930e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:579 +0x33
testing.tRunner(0xc0002b51e0, 0x1f14e78)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13106 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000cb6680)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestPropertiesAbsent(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:401 +0x1e
testing.tRunner(0xc000cb6680, 0x1f14fb0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13104 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971ba0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestYAML(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:339 +0x1e
testing.tRunner(0xc000971ba0, 0x1f15170)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13150 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0005da1a0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariableInput(0xc000d06990?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:98 +0x1e
testing.tRunner(0xc0005da1a0, 0x1f150b0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13175 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009b64e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0009b64e0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0009b64e0, 0xc00079a910)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13202 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000745010, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc0007b3788?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13152 [runnable]:
gopkg.in/yaml%2ev3.yaml_parser_fetch_value(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/scannerc.go:1397 +0x3ff
gopkg.in/yaml%2ev3.yaml_parser_fetch_next_token(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/scannerc.go:802 +0x57f
gopkg.in/yaml%2ev3.yaml_parser_fetch_more_tokens(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/scannerc.go:677 +0x1c5
gopkg.in/yaml%2ev3.peek_token(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:69 +0x2c
gopkg.in/yaml%2ev3.yaml_parser_parse_block_mapping_value(0xc000a06400, 0xc000a066b0)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:892 +0x3e
gopkg.in/yaml%2ev3.yaml_parser_state_machine(0x1e3ed40?, 0xc000a066b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:194 +0x128
gopkg.in/yaml%2ev3.yaml_parser_parse(0xc000a06400?, 0xc000a066b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:129 +0x8c
gopkg.in/yaml%2ev3.(*parser).peek(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:106 +0x30
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:149 +0x7a
gopkg.in/yaml%2ev3.(*parser).parseChild(0xc000a06400?, 0xc00088e000)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197 +0x25
gopkg.in/yaml%2ev3.(*parser).mapping(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:288 +0x1d7
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:155 +0x105
gopkg.in/yaml%2ev3.(*parser).parseChild(0xc000a06400?, 0xc000487ea0)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197 +0x25
gopkg.in/yaml%2ev3.(*parser).mapping(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:288 +0x1d7
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:155 +0x105
gopkg.in/yaml%2ev3.(*parser).parseChild(0xc000a06400?, 0xc000487d60)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197 +0x25
gopkg.in/yaml%2ev3.(*parser).mapping(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:288 +0x1d7
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:155 +0x105
gopkg.in/yaml%2ev3.(*parser).parseChild(0xc000a06400?, 0xc0004879a0)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197 +0x25
gopkg.in/yaml%2ev3.(*parser).mapping(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:288 +0x1d7
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:155 +0x105
gopkg.in/yaml%2ev3.(*parser).parseChild(...)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197
gopkg.in/yaml%2ev3.(*parser).document(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:206 +0x85
gopkg.in/yaml%2ev3.(*parser).parse(0xc000a06400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:159 +0xae
gopkg.in/yaml%2ev3.(*Decoder).Decode(0xc000dcee80, {0x1cd1f80?, 0xc000b64690})
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/yaml.go:123 +0x136
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding.DecodeYAML({0x1e6fa76, 0x7}, 0x2b73a68?, {0x20b1840, 0x2838a60})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding/yaml.go:291 +0x10a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.LoadYAMLBytes({0x1e6fa76, 0x7}, {0xc0005ca1e0, 0x1df, 0x1e0})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:121 +0x29f
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.yamlTemplate(0x1ed9688?, {0x1ed9689?, 0x353e7e40?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort_test.go:45 +0x45
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariableDoubleIntermediate(0xc0000341a0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:192 +0x3f
testing.tRunner(0xc00045e1a0, 0x1f150a0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13102 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971860)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionDuplicate(0xc000c93500?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:172 +0x25
testing.tRunner(0xc000971860, 0x1f15118)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13023 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0004b2b60)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0004b2b60)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0004b2b60, 0xc000318870)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13105 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971d40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestAssetOrArchive(0xc000971d40)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:361 +0x1e
testing.tRunner(0xc000971d40, 0x1f14e28)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12940 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0003a84e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1(0xc0003a84e0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:874 +0x2a
testing.tRunner(0xc0003a84e0, 0xc000b03350)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13082 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744e10, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc0005d41c0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13210 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000952350, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x1bf6c05?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x1e65420?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1e65420?, 0xc0008bb3b0?, 0x19?}, {0x1ccb0a0, 0xc0002f2d40, 0x194})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:732 +0x7a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1ccb0a0?, 0xc000889f20?, 0xc0003a68a0?}, {0x1ccb0a0, 0xc0002f2d40, 0x194})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:805 +0x1565
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add638?, 0x97?}, {0x1c75fc0, 0xc000add650, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:841 +0x21a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13170 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000921380)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc000921380)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc000921380, 0xc00079a780)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13098 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009711e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionValueComplex(0xc000cfcf00?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:14 +0x25
testing.tRunner(0xc0009711e0, 0x1f15130)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13220 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048088})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:267 +0x154
github.com/pulumi/pulumi/sdk/v3/go/pulumi.URNOutput.awaitURN({0x0?}, {0x20ba8f8?, 0xc000048088?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:1084 +0x27
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1503 +0xc5
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1495 +0xbe

goroutine 13101 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009716c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionOnExample(0x198?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:101 +0x25
testing.tRunner(0xc0009716c0, 0x1f15120)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13203 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000745050, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x10d959c?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13083 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add3c8?, 0x97?}, {0x1c75fc0, 0xc000add3e0, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:787 +0x113a
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13205 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc0007450d0, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13025 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000920d00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc000920d00)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc000920d00, 0xc00079a730)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13129 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000ba44e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSelect(0xc0007ab800?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1005 +0x36
testing.tRunner(0xc000ba44e0, 0x1f15028)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13118 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b5040)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestDuplicateKeyDiags(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:542 +0x33
testing.tRunner(0xc0002b5040, 0x1f14eb0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13144 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8e340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestReadResource(0xc000c8e340)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1763 +0x33
testing.tRunner(0xc000c8e340, 0x1f14ff8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12881 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0007fa340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0007fa340)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0007fa340, 0xc000434eb0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13108 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000cb69c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConfigTypes(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:440 +0x33
testing.tRunner(0xc000cb69c0, 0x1f14e68)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13178 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.mergeDependencies({0x0, 0x0, 0x51b?}, {0xc00052ef60, 0x1, 0x2826b40?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:208 +0x13e
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x3a?, {0x20ba8f8, 0xc000048088})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:256 +0xda
github.com/pulumi/pulumi/sdk/v3/go/pulumi.URNOutput.awaitURN({0xc000580480?}, {0x20ba8f8?, 0xc000048088?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:1084 +0x27
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1503 +0xc5
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1495 +0xbe

goroutine 13093 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9dd40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeVariableSugar(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:153 +0x1e
testing.tRunner(0xc000c9dd40, 0x1f14f38)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12939 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0003a8340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1(0xc0003a8340)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:874 +0x2a
testing.tRunner(0xc0003a8340, 0xc000b03320)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13171 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009216c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0009216c0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0009216c0, 0xc00079a7d0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13122 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b5a00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJSONDiags(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:665 +0x25
testing.tRunner(0xc0002b5a00, 0x1f14f68)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12941 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0003a8680)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1(0xc0003a8680)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:874 +0x2a
testing.tRunner(0xc0003a8680, 0xc000b03380)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13092 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9dba0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeNoInputs(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:134 +0x1e
testing.tRunner(0xc000c9dba0, 0x1f14ef0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13123 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b5ba0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestPropertyAccessVarMap(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:693 +0x1e
testing.tRunner(0xc0002b5ba0, 0x1f14fc0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13124 [runnable]:
gopkg.in/yaml%2ev3.yaml_parser_fetch_next_token(0xc000788400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/scannerc.go:874 +0x89a
gopkg.in/yaml%2ev3.yaml_parser_fetch_more_tokens(0xc000788400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/scannerc.go:677 +0x1c5
gopkg.in/yaml%2ev3.peek_token(0xc000788400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:69 +0x2c
gopkg.in/yaml%2ev3.yaml_parser_parse_stream_start(0xc000788400, 0xc0007886b0)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:232 +0x3e
gopkg.in/yaml%2ev3.yaml_parser_state_machine(0x1e3ed40?, 0xc0007886b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:155 +0x39
gopkg.in/yaml%2ev3.yaml_parser_parse(0xc000788400?, 0xc0007886b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:129 +0x8c
gopkg.in/yaml%2ev3.(*parser).expect(0xc000788400, 0x1)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:82 +0x3c
gopkg.in/yaml%2ev3.(*parser).init(...)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:67
gopkg.in/yaml%2ev3.(*parser).parse(0xc000788400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:148 +0x69
gopkg.in/yaml%2ev3.(*Decoder).Decode(0xc0004f5e48, {0x1cd1f80?, 0xc000728550})
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/yaml.go:123 +0x136
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding.DecodeYAML({0x1e6fa76, 0x7}, 0x2b751d8?, {0x20b1840, 0x2838a60})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding/yaml.go:291 +0x10a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.LoadYAMLBytes({0x1e6fa76, 0x7}, {0xc00093e000, 0x144, 0x160})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:121 +0x29f
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.yamlTemplate(0xc000c45d40?, {0x1ed83a0?, 0x3a?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort_test.go:45 +0x45
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSchemaPropertyDiags(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:737 +0x3b
testing.tRunner(0xc000c45d40, 0x1f15018)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13207 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744f10, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x1d0be80?, {0x20ba8f8, 0xc000048088})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInputImpl({0x1e65420?, 0xc0008baa10?}, {0x20ca688?, 0x1ccb0a0?}, 0x1, 0x28?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:262 +0x19c5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInput(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:214
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInputImpl({0x1d6e3a0?, 0xc000ce9860?}, {0x20ca688?, 0x1ccb0a0?}, 0x1, 0x5?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:453 +0x25e6
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInput(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:214
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1508 +0x109
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).RegisterResourceOutputs
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1495 +0xbe

goroutine 13173 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000921d40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc000921d40)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc000921d40, 0xc00079a870)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13120 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b5520)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConflictResourceVarKeyDiags(0xc000755650?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:609 +0x33
testing.tRunner(0xc0002b5520, 0x1f14e88)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13131 [chan receive]:
testing.tRunner.func1()
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1412 +0x4a5
testing.tRunner(0xc000772820, 0x1f14e40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1452 +0x144
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13086 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add440?, 0x97?}, {0x1c75fc0, 0xc000add458, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:787 +0x1166
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13103 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971a00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionConflicts(0xc0005da4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:209 +0x25
testing.tRunner(0xc000971a00, 0x1f15108)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13215 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000952610, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13137 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009d6680)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestReadFileForbidsPathTraversal(0xc000d060f0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1566 +0x33
testing.tRunner(0xc0009d6680, 0x1f14fd8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13148 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8f040)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariablePulumi(0xc000c8f040)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:20 +0x33
testing.tRunner(0xc000c8f040, 0x1f15100)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13095 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000970d00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeNoInputsSugar(0xc000916ed0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:201 +0x1e
testing.tRunner(0xc000970d00, 0x1f14ee8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12849 [semacquire]:
sync.runtime_SemacquireMutex(0x0?, 0x0?, 0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:77 +0x25
sync.(*Mutex).lockSlow(0xc00063ac00)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/mutex.go:171 +0x165
sync.(*Mutex).Lock(...)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/mutex.go:90
sync.(*RWMutex).Lock(0x1c8c540?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/rwmutex.go:147 +0x36
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*ResourceState).addChild(0xc00063ac00, {0x20c2e10, 0xc000b5ad20})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/resource.go:88 +0x3f
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).getOpts(0xc000831600, {0x20c2e10?, 0xc000b5ad20?}, {0xc00007be70?, 0x0?}, {0x0?, 0x0}, 0xc00096c240, _, 0x1)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1381 +0x158
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).prepareResourceInputs(0xc000831600, {0x20c2e10?, 0xc000b5ad20?}, {0x20b1860, 0xc000942cf0}, {0xc000abc3c0?, 0x12?}, 0xc00096c240, 0xc00032bb90, 0x0, ...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1258 +0xc5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:820 +0x271
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:807 +0x845

goroutine 13176 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009b6820)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0009b6820)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0009b6820, 0xc00079a960)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12879 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0007fa000)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0007fa000)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0007fa000, 0xc000434e10)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13213 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000952510, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc000000000?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13125 [runnable]:
reflect.(*rtype).NumField(0x1ded660?)
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/type.go:1031 +0x71
reflect.(*visibleFieldsWalker).walk(0xc000cf10b8, {0x20ca688, 0x1ded660})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/visiblefields.go:66 +0xf2
reflect.VisibleFields({0x20ca688, 0x1ded660})
	/usr/local/Cellar/go/1.19.2/libexec/src/reflect/visiblefields.go:29 +0x139
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.parseRecord({0xc00059e210, 0xe}, {0x2f5aaf8?, 0xc000c84500}, {0x20b7d80?, 0xc000347860?}, 0x1)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:601 +0x485
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.parseField({0xc00059e210, 0xe}, {0x1d1cca0?, 0xc0005a8330?, 0x2?}, {0x20b7d80, 0xc000347860})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:559 +0x37b
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.(*ResourcesMapDecl).parse(0xc0003479e0, {0xc00059e200, 0x9}, {0x20b7d80?, 0xc000347890?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:194 +0x3d2
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.parseField({0xc00059e200, 0x9}, {0x1d55660?, 0xc00059aa40?, 0x9?}, {0x20b7d80, 0xc000347890})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:538 +0x4d9
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.parseRecord({0x1e74ae4, 0x8}, {0x20ae440?, 0xc00059a9c0}, {0x20b7d80?, 0xc0003478c0?}, 0x0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:604 +0xc06
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast.ParseTemplate(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast/template.go:516
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.LoadTemplate(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:146 +0x138
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.template(0x1ce9a40?, 0xc000347770?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort_test.go:52 +0x25
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestPropertyAccess(0xc0000a29c0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:750 +0x145
testing.tRunner(0xc0000a29c0, 0x1f14fc8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12829 [chan receive]:
testing.tRunner.func1()
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1412 +0x4a5
testing.tRunner(0xc000c9c9c0, 0x1f15068)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1452 +0x144
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13107 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000cb6820)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestYAMLDiags(0x1a0a4e0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:419 +0x25
testing.tRunner(0xc000cb6820, 0x1f15168)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13091 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9d380)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeOutputVariable(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:106 +0x1e
testing.tRunner(0xc000c9d380, 0x1f14f10)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13206 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000745110, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x0?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13130 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000772340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestFromBase64ErrorOnInvalidUTF8(0xc0007ab800?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1136 +0x36
testing.tRunner(0xc000772340, 0x1f14ec8)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13153 [runnable]:
gopkg.in/yaml%2ev3.yaml_parser_parse_node(0xc000be2400, 0xc000be26b0, 0x1, 0x0)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:455 +0x1f7e
gopkg.in/yaml%2ev3.yaml_parser_state_machine(0x1e3ed40?, 0xc000be26b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:170 +0x92
gopkg.in/yaml%2ev3.yaml_parser_parse(0xc000be2400?, 0xc000be26b0?)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/parserc.go:129 +0x8c
gopkg.in/yaml%2ev3.(*parser).peek(0xc000be2400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:106 +0x30
gopkg.in/yaml%2ev3.(*parser).parse(0xc000be2400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:149 +0x7a
gopkg.in/yaml%2ev3.(*parser).parseChild(...)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:197
gopkg.in/yaml%2ev3.(*parser).document(0xc000be2400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:206 +0x85
gopkg.in/yaml%2ev3.(*parser).parse(0xc000be2400)
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/decode.go:159 +0xae
gopkg.in/yaml%2ev3.(*Decoder).Decode(0xc000c7de80, {0x1cd1f80?, 0xc000b20500})
	/Users/ianwahbe/go/pkg/mod/gopkg.in/yaml.v3@v3.0.1/yaml.go:123 +0x136
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding.DecodeYAML({0x1e6fa76, 0x7}, 0x2b75fe8?, {0x20b1840, 0x2838a60})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding/yaml.go:291 +0x10a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.LoadYAMLBytes({0x1e6fa76, 0x7}, {0xc0005ee120, 0x116, 0x120})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:121 +0x29f
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.yamlTemplate(0x1ed7dbc?, {0x1ed7dbd?, 0x353e8610?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort_test.go:45 +0x45
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariableOutput(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:223 +0x3f
testing.tRunner(0xc00045e340, 0x1f150e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13126 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744910, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x30?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*workGroup).Wait(0xc0008315c8)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/workgroup.go:43 +0xd0
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).wait(0xc0008314a0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:173 +0x48
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc0008314a0, 0xc000cf7e68)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:129 +0x279
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x1d1d0a0?, 0x1f15198, {0xc000cf7e60, 0x1, 0x20b7d80?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags(0xc000ba4000?, 0xc00059a340?, 0xc000cf7f48?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x188
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate(0x1ce9a40?, 0xc0003472f0?, 0x1e6b162?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:334 +0x25
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoin(0xc000ba4000)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:783 +0x17f
testing.tRunner(0xc000ba4000, 0x1f14f90)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13132 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000772ea0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestFromBase64(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1315 +0x36
testing.tRunner(0xc000772ea0, 0x1f14ed0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13147 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8ed00)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestBlocklistPulumi(0x6?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_token_blocklist_test.go:14 +0x33
testing.tRunner(0xc000c8ed00, 0x1f14e50)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12833 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9d040)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeWithOptsOutputs(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:51 +0x1e
testing.tRunner(0xc000c9d040, 0x1f14f50)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13145 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c8e4e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestReadResourceNoState(0xc000c8e4e0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1792 +0x33
testing.tRunner(0xc000c8e4e0, 0x1f14ff0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13097 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971040)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestDefaultProvider(0xc000971040)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_options_test.go:120 +0x33
testing.tRunner(0xc000971040, 0x1f14ea0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13140 [runnable]:
fmt.(*fmt).pad(0xc000b198a0?, {0xc000b1990b, 0x1, 0x1?})
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/format.go:90 +0x29e
fmt.(*fmt).fmtInteger(0xc000b198a0, 0x0?, 0xc000caf300?, 0x98?, 0xc0?, {0x1e8e42f?, 0xc000caf3a8?})
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/format.go:319 +0x37e
fmt.(*pp).fmtInteger(0x0?, 0x1e76fab?, 0x0?, 0x0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/print.go:407 +0x17d
fmt.(*pp).printArg(0xc000b19860, {0x1c8b900?, 0x2838a68}, 0x76)
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/print.go:703 +0x55a
fmt.(*pp).doPrintf(0xc000b19860, {0x1ed10ff, 0x4f}, {0xc000caf598?, 0x2, 0x2})
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/print.go:1057 +0x288
fmt.Sprintf({0x1ed10ff, 0x4f}, {0xc000caf598, 0x2, 0x2})
	/usr/local/Cellar/go/1.19.2/libexec/src/fmt/print.go:219 +0x59
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateBuiltinJoin.func1({0xc000a83ea0?, 0xc000caf5e8?, 0x100f14e?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1679 +0x407
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func1({0xc000a83ea0, 0x2, 0x2})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2023 +0x8a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2({0xc000a83ea0, 0x2, 0x2})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2036 +0x13a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateBuiltinJoin(0xc00052f5c0, 0xc000124c80)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1692 +0x151
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateExpr(0x1dcf960?, {0x20b4360?, 0xc000124c80?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1252 +0x3e5
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.programEvaluator.EvalVariable({0xc000ad6340, 0xc000b3e580}, 0xc0003a1400, {{{0x20b18c0, 0xc000a839c0}, 0xc000a83400, {0x20b7d80, 0xc000c3ba70}}, 0xc000a83ce0, {0x20b4360, ...}})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:637 +0x157
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Run(0xc0003a1400, {0x20bb420?, 0xc00052f4c0})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:758 +0x55a
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Evaluate(0xc0003a1400, 0xc000b3e580)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:685 +0x8e
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateSyntaxDiags.func2(0x1e6b400?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:317 +0x134
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc000b3e580, 0xc000cafe68)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x199
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x20b0f20?, 0x1f151a8, {0xc000cafe60, 0x1, 0x0?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateSyntaxDiags(0x1ed6a51?, 0xc000ab6270?, 0x1f14f78?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:315 +0x12d
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoinForbidsNonStringArgs(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1665 +0x6f
testing.tRunner(0xc0009d7520, 0x1f14f80)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13100 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000971520)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVersionValueMajorMinor(0xc00090c360?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_plugin_version_test.go:72 +0x25
testing.tRunner(0xc000971520, 0x1f15140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13024 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000920000)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc000920000)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc000920000, 0xc00079a6e0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13134 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000773d40)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSub(0xc000773d40)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1462 +0x25
testing.tRunner(0xc000773d40, 0x1f15050)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13088 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000744f90, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc0007b26b0?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).await(0x1?, {0x20ba8f8, 0xc000048080})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:252 +0x192
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:494 +0x8b
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13141 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc00044b590, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x30?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*workGroup).Wait(0xc00053e6a8)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/workgroup.go:43 +0xd0
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).wait(0xc00053e580)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:173 +0x48
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc00053e580, 0xc000cc5ec8)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:129 +0x279
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x20b0f20?, 0x1f15190, {0xc000cc5ec0, 0x1, 0x0?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testInvokeDiags(0xc0009d76c0?, 0xc0007d0ea0?, 0x1f15078?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:297 +0x1d8
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestUnicodeLogicalName(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1699 +0x58
testing.tRunner(0xc0009d76c0, 0x1f15080)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13096 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000970ea0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestResourceOptions(0xc000970ea0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_options_test.go:58 +0x33
testing.tRunner(0xc000970ea0, 0x1f15008)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 12830 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000c9cb60)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypePropertyAccess(0xc000c9c9c0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:224 +0x36
testing.tRunner(0xc000c9cb60, 0x1f15070)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13159 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc00045eea0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc00045eea0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc00045eea0, 0xc000318730)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13235 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13094 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc000970000)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestInvokeOutputVariableSugar(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_invoke_test.go:175 +0x1e
testing.tRunner(0xc000970000, 0x1f14f08)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13136 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0009d6340)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestReadFile(0xc0009d6340)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1519 +0x33
testing.tRunner(0xc0009d6340, 0x1f14fe0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13234 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13121 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0002b5860)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJSON(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:635 +0x1e
testing.tRunner(0xc0002b5860, 0x1f14f70)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13151 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000745290, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0x30?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*workGroup).Wait(0xc000831728)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/workgroup.go:43 +0xd0
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).wait(0xc000831600)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:173 +0x48
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc000831600, 0xc0008c5ec0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:129 +0x279
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x1e46720?, 0x1f151b0, {0xc0008c5eb0, 0x1, 0x20b0f20?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testVariableDiags(0xc00045e000?, 0xc0009e2000?, 0x1f150b8?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:334 +0x21d
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestVariableIntermediate(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:152 +0x58
testing.tRunner(0xc00045e000, 0x1f150c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13237 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 13236 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:493 +0x411

goroutine 12880 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0007fa1a0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestTypeError.func1(0xc0007fa1a0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/analyser_test.go:199 +0x3e
testing.tRunner(0xc0007fa1a0, 0xc000434e60)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13212 [runnable]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.awaitInputs({0x20ba8f8, 0xc000048080}, {0x1c75fc0?, 0xc000add668?, 0x97?}, {0x1c75fc0, 0xc000add680, 0x197})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:787 +0x113a
github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:917 +0x131
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x38e

goroutine 13155 [runnable]:
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.checkUniqueNode(0xc0008ad100?, {0x20b6bb0, 0xc000ad67c0})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort.go:187 +0x5e6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.topologicallySortedResources(0xc0006fa000)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/sort.go:102 +0x8af
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).ensureSetup(0xc0006bc180, 0xc000ccaf20)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:710 +0x2c5
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Run(0xc0006bc180, {0x20bb420?, 0xc00052f660})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:727 +0x7d
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Evaluate(0xc0006bc180, 0xc000ccaf20)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:685 +0x8e
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testVariableDiags.func3(0xc000ccaf20)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:336 +0x17b
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc000ccaf20, 0xc0008adec0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x199
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x1e46720?, 0x1f151b0, {0xc0008adeb0, 0x1, 0x20b0f20?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testVariableDiags(0xc00045e820?, 0xc0006fa000?, 0x1f15088?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:334 +0x21d
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestUnusedVariablesEvaluated(0x0?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_variable_test.go:283 +0x58
testing.tRunner(0xc00045e820, 0x1f15090)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13139 [sync.Cond.Wait]:
sync.runtime_notifyListWait(0xc000473690, 0x0)
	/usr/local/Cellar/go/1.19.2/libexec/src/runtime/sema.go:517 +0x14c
sync.(*Cond).Wait(0xc000b3e548?)
	/usr/local/Cellar/go/1.19.2/libexec/src/sync/cond.go:70 +0x8c
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).wait(0xc000b3e420)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:181 +0xb8
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext(0xc000b3e420, 0xc00095de88)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:129 +0x279
github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner(0x1a6f742?, 0x1f15198, {0xc00095de80, 0x1, 0x1d0c300?})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x2f1
github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr(...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags(0xc0009d7380?, 0xc00077a000?, 0xc00095df48?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x188
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate(0x1ed429e?, 0x1ed429f?, 0x353dce7800ce3f58?)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:334 +0x25
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestEscapingInterpolationInTemplate(0xc0009d7380)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1629 +0x79
testing.tRunner(0xc0009d7380, 0x1f14ec0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13076 [chan receive]:
testing.(*testContext).waitParallel(0xc000318140)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1557 +0xab
testing.(*T).Parallel(0xc0006d96c0)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1272 +0x1d6
github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestBase64Roundtrip.func2(0xc0006d96c0)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:1301 +0x3d
testing.tRunner(0xc0006d96c0, 0xc000889620)
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x10b
created by testing.(*T).Run
	/usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x35f

goroutine 13048 [GC assist wait]:
github.com/pulumi/pulumi/sdk/v3/go/pulumi.marshalInputs({0x0, 0x0})
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/rpc.go:126 +0x94
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).prepareResourceInputs(0xc000b3e580, {0x20c3030?, 0xc000236540?}, {0x0, 0x0}, {0x1e95917?, 0x13?}, 0xc000ab8360, 0xc000210bd0, 0x0, ...)
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:1264 +0x1a5
github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource.func1()
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:820 +0x271
created by github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*Context).registerResource
	/Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/context.go:807 +0x845
FAIL	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml	1.065s
ok  	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/ast	0.562s
FAIL	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/codegen [build failed]
ok  	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/config	0.739s
ok  	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/diags	0.316s
ok  	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax	0.207s
?   	github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/syntax/encoding	[no test files]
FAIL

@@ -1204,6 +1202,10 @@ func (state *resourceState) resolve(ctx *Context, err error, inputs *resourceInp
}
}

// We need to wait until after we finish mutating outprops to resolve. Resolving
// unlocks multithreaded access to the resolved value, making mutation a data race.
state.rawOutputs.getState().resolve(outprops, true, false, nil)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This makes sense to me at some basic level. resolve(outprops) shares outprops with other goroutines, but it has not finished populating in the original code. So doing it after outprops["id"]=.. stanzas seems to be better. The outprops[""] I'd love to understand what that does and what for.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like a marker indicating either started to resolve (resource.NewObjectProperty(remaining)), finished resolving (resource.NewObjectProperty(remaining) where remaining = resource.PropertyMap{}) or will not resolve (resource.MakeComputed(resource.NewStringProperty(""))).

I'm not 100% sure though.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Grepping for the key "" in sdk/go/pulumi, its only uses are in resolve function. Despite that, remove it results in test failures for TestRegisterResource.

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

Running with a race detector yielded two additional data races, but resolvable by adding locks.

IsSecret

==================
WARNING: DATA RACE
Read at 0x00c000487149 by goroutine 48:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.IsSecret()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:523 +0x10b
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConfigSecrets.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:499 +0x50
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:285 +0x52f
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConfigSecrets()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:496 +0x2d1
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47

Previous write at 0x00c000487149 by goroutine 50:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).fulfillValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:191 +0x505
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).resolveValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:229 +0x38b
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:925 +0x33a

Goroutine 48 (running) created at:
  testing.(*T).Run()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x75d
  testing.runTests.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1846 +0x99
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.runTests()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1844 +0x7ec
  testing.(*M).Run()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1726 +0xa84
  main.main()
      _testmain.go:179 +0x2e9

Goroutine 50 (finished) created at:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x5a4
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:956 +0x234
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.ToSecretWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:558 +0x84
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.ToSecret()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:543 +0x85
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).registerConfig()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:922 +0x17f5
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.programEvaluator.EvalConfig()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:621 +0x214
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).EvalConfig()
      <autogenerated>:1 +0xd1
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Run()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:748 +0x602
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*Runner).Evaluate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:685 +0xe8
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:279 +0x355
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestConfigSecrets()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:496 +0x2d1
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47
==================

dependencies

==================
WARNING: DATA RACE
Write at 0x00c0007b2360 by goroutine 121:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).fulfillValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:198 +0x590
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).resolveValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:229 +0x38b
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext.func3()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:925 +0x33a

Previous read at 0x00c0007b2360 by goroutine 65:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).dependencies()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:136 +0x406
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:492 +0x14a
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyT()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:440 +0xb8
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2027 +0x184
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1427 +0x2116
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2023 +0xa7
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2036 +0x1f8
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1567 +0x2c1
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccess()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1407 +0x32b
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateInterpolations()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1361 +0x171
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateInterpolate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1352 +0x91d
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateExpr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1246 +0x91e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateList()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1289 +0x104
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateExpr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1238 +0x24d
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateBuiltinJoin()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1645 +0xa4
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoin.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:812 +0x1072
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:285 +0x52f
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:334 +0x44
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoin()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:783 +0x2a5
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47

Goroutine 121 (running) created at:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputTWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:909 +0x5a4
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.toOutputWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:956 +0x234
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.ToOutputWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:938 +0xf0
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.AllWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:573 +0xb4
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.All()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:566 +0xa7
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2027 +0x109
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1427 +0x2116
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2023 +0xa7
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*evalContext).lift.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:2036 +0x1f8
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccessTail()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1567 +0x2c1
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluatePropertyAccess()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1407 +0x32b
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateInterpolations()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1361 +0x171
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateInterpolate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1352 +0x91d
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateExpr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1246 +0x91e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateList()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1289 +0x104
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateExpr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1238 +0x24d
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.(*programEvaluator).evaluateBuiltinJoin()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run.go:1645 +0xa4
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoin.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:812 +0x1072
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:285 +0x52f
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:273 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:334 +0x44
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestJoin()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:783 +0x2a5
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47

Goroutine 65 (running) created at:
  testing.(*T).Run()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x75d
  testing.runTests.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1846 +0x99
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.runTests()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1844 +0x7ec
  testing.(*M).Run()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1726 +0xa84
  main.main()
      _testmain.go:179 +0x2e9
==================

@@ -133,6 +133,8 @@ func (o *OutputState) dependencies() []Resource {
if o == nil {
return nil
}
o.cond.L.Lock()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious do you need this? Is o.deps assign-once? I see it assigned once by fullfillValue under the o.cond.L.Lock(). Wonder if the reader lock buys us something here. It can still observe nil. I guess one thing this buys is that after adding the lock the caller of dependencies() will either observe "before" or "after" state with respect to all the other pieces being populated in fullValue, and never observe it partially populated (like dependencies populated but value not).

@@ -520,7 +522,10 @@ func (o *OutputState) ApplyTWithContext(ctx context.Context, applier interface{}

// IsSecret returns a bool representing the secretness of the Output
func IsSecret(o Output) bool {
return o.getState().secret
s := o.getState()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a .. misleading func. It doesn't await the future to complete, but secretness in the limit is only known after awaiting the result. So it can return false on a secret output at first, and then return true once it completes. Right? So it's on the caller to make sure the output is complete before calling this. I thin this remains true before and after the change. What does the lock buy?

@iwahbe iwahbe requested a review from t0yv0 October 28, 2022 18:56
@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

TestConfigSecrets race: consider awaiting the output before calling IsSecret. https://github.com/pulumi/pulumi-yaml/blob/287d989a179e9d618a547ce334d04318988a7b17/pkg/pulumiyaml/run_test.go#L499 I think since the test code does not await the output it does not return what you want! Adding a lock passes the race detector but it's still a race I think no?

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

Responding to #11186 (comment) and #11186 (comment):
In both cases, the lock buys us freedom from data races. According to https://go.dev/ref/mem#restrictions,

First, any implementation can, upon detecting a data race, report the race and halt execution of the program.

For slices in particular (dependencies), data races can result in "arbitrary memory corruption".

However, the biggest win is that we (and our downstream, including customers) can run their tests with the -race flag enabled.

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

The second race is brilliant and worrisome. ApplyTWithContext races with All ? Like ApplyTWithContext reads dependencies() before toOutputTWithContext called by All resolves the output and populates dependencies? This sounds like it could be a real problem that may or may not be solved by throwing a lock in there. I'm reading ApplyTWithContext.

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

TestConfigSecrets race: consider awaiting the output before calling IsSecret. https://github.com/pulumi/pulumi-yaml/blob/287d989a179e9d618a547ce334d04318988a7b17/pkg/pulumiyaml/run_test.go#L499 I think since the test code does not await the output it does not return what you want! Adding a lock passes the race detector but it's still a race I think no?

We need to distinguish between two types of data race:

  1. The go memory model defines a data races (unsynchronized access + mutation to a word in memory), which isn't as UB as the C memory model, but is still intrinsically bad to have (go is allowed to crash, for example).
  2. We return incorrect or inconsistent results because we don't await correctly, (yes, IsSecret makes this very easy). This is an application bug, but doesn't result in UB or allowed crashes.

Adding the lock makes it not a data race according to (1), but it remains a data race according to (2).

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Well precisely. My worry is that adding locks makes (2) undetectable by race detector while leaving bugs in our SDK.

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

This is interesting

result := newOutput(o.join, resultType, o.dependencies()...)

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

This is interesting

result := newOutput(o.join, resultType, o.dependencies()...)

And then

result.getState().fulfillValue(results[0], true, secret, fulfilledDeps, nil)

We take dependencies() as known dependencies, and then add the rest once the value has resolved.

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Yeah I think I got to the bottom of that one.. It is "kind of" okay but perhaps not really? 👻

What's happening is this. y = x.ApplyT(f) needs to compute dependencies as a union of deps(x) and deps(f(x)). The way it does it in Go, it allocates an output state for y right away with x.dependencies() - which is partially correct, because it certainly does not have deps(f(x)) yet but it also may not have deps(x) yet either since this happens before x resolves. This allocation is a source of the race.

Then, it awaits the x output and finds out real deps(x). Then, it computes f(x). It checks if that's an output (it can be). In that case it tries to compute deps(f(x)) by doing f(x).dependencies() but that's incorrect since it does not await f(x). I think there's a bug here.

Finally, it pushes y.fullfill() with what it thinks is deps(x) union deps(f(x)). Inside the fulfill(), the y.dependencies are updated from their previous partially correct state to this new state - by smart-merging. So the results of ApplyT(), if you observe their dependencies() first you see nil, then you see partial dependencies that are a strict subset of the right answer, and then eventually you see the right answer (modulo the bug above).

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Let me try out a test case for this. This would be something like:

func withDep(Resoure, T) Output<T>
func delay(TimeDelta, Output<T>) Output<T>

testOutput = withDep(r1, 1).ApplyT(func (x int) Output<int> {
   return delay(1*time.Second, withDep(r2, 2))
})

assert.Equal(t, testOutput.await().dependencies(), []Resource{r1, r2})


@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Regarding your changes! I think we should merge the one that fixes concurrent map access, that makes total sense and fixes panic! I'd separate the race detector once into separate PRs and take it a little easier. I don't think they surface as panics. I'd like to take it a little slower there and maybe either accept those changes with TODO notes and new tickets about the underlying bugs, or perhaps if we fix the bugs then we might not need those changes. I think @AaronFriel recently worked on revamping the Go SDK so might have good context, we might also ask around and bring some Go expertise on that.

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

BTW

For slices in particular (dependencies), data races can result in "arbitrary memory corruption".

This is a great callout but I'm not seeing this happening in this case. The slices are not edited they are replaced wholesale. I don't think this would lead to memory corruption. The race is around a pointer to a slice not the contents.

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

BTW

For slices in particular (dependencies), data races can result in "arbitrary memory corruption".

This is a great callout but I'm not seeing this happening in this case. The slices are not edited they are replaced wholesale. I don't think this would lead to memory corruption. The race is around a pointer to a slice not the contents.

We don't see the error, but we definitely could in a future version of go. The race isn't around a pointer to a slice (which would be safe, since ptrs are word sized and word writes are atomic in go), but around a slice itself (3 words). A slice is represented in memory as (ptr, len, cap), so reassigning a slice without any happens before relationships can cause memory corruption. Consider assigning overwriting slice s1 with slice s2. Since the compiler is free to reorder operations, we can read (ptr_1, len_2, cap_2). If s2 is longer then s1, we can write to ptr_1+len_1 (1 past the end of s1) without failing a bounds check since len_2 > len_1.

@iwahbe iwahbe force-pushed the iwahbe/harden-resolve-concurrency branch from 0f374b1 to 211bd3e Compare October 28, 2022 19:58
@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

I've removed all but the panic causing fix from this PR. I'll open a subsequent PR to address the remaining issue separately.

Copy link
Member

@Frassle Frassle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change looks sensible if just for not marking data as resolved while it's still under mutation. A more pure language wouldn't have even allowed the current code 🦀

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

bors r+

bors bot added a commit that referenced this pull request Oct 28, 2022
11186: Prevent race when resolving a property map r=iwahbe a=iwahbe

I encountered a problem trying to flush non-determinism out of pulumi-yaml. Running our tests with high `--count=N` values resulted in panics from concurrent accesses to `Ouptput` values. These changes allow running `go test -count=500 -race  ./...` without errors (caused by pulumi/pulumi).

Co-authored-by: Ian Wahbe <ian@wahbe.com>
@bors
Copy link
Contributor

bors bot commented Oct 28, 2022

Build failed:

@t0yv0
Copy link
Member

t0yv0 commented Oct 28, 2022

Thanks for that slice comment @iwahbe ! TIL slices are structs. Thanks for pointing this out. That's definitely bad then. Your original locks make sense then to add to compensate for this possibility.

but we definitely could in a future version of go.

Sounds like we could see an error in this version of Go then also right?

The race detector traces are gold - if we lose them by adding locks we just need to preserve them in the tracker that's fine. I'll follow up on monday a bit more to see if we can use them to find more bugs.

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

bors retry

bors bot added a commit that referenced this pull request Oct 28, 2022
11186: Prevent race when resolving a property map r=iwahbe a=iwahbe

I encountered a problem trying to flush non-determinism out of pulumi-yaml. Running our tests with high `--count=N` values resulted in panics from concurrent accesses to `Ouptput` values. These changes allow running `go test -count=500 -race  ./...` without errors (caused by pulumi/pulumi).

Co-authored-by: Ian Wahbe <ian@wahbe.com>
@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

Sounds like we could see an error in this version of Go then also right?

There is nothing to say we couldn't, beyond the fact that we haven't, yet. A new optimization in the go compiler could change that, even if we were still targeting go@1.17.

@bors
Copy link
Contributor

bors bot commented Oct 28, 2022

Build failed:

@iwahbe
Copy link
Member Author

iwahbe commented Oct 28, 2022

bors retry

@bors
Copy link
Contributor

bors bot commented Oct 28, 2022

Build succeeded:

@bors bors bot merged commit 2129dc4 into master Oct 28, 2022
@bors bors bot deleted the iwahbe/harden-resolve-concurrency branch October 28, 2022 22:54
bors bot added a commit that referenced this pull request Oct 29, 2022
11189: Make IsSecret threadsafe r=iwahbe a=iwahbe

This PR ensures that `pulumi.IsSecret` works as expected. 

`IsSecret` presented 3 problems.
1. It wasn't thread safe, which triggered go's `-race` flag. (brought up by #11186)
2. It returned the currently known status of secret, meaning that `[]bool{IsSecret(a), IsSecret(a)}` could evaluate to `[]bool{false, true}` if the underlying value resolved between calls.
3. `IsSecret` may return the wrong value for unknown or erred `Output`s.

This PR fixes (1) and (2) by awaiting the underlying value during the `IsSecret` call. (3) is unfixable, and I explain why in a comment.

Blocking on calls to `IsSecret` is necessary for correctness in the general case. We can add optimizations later if necessary. The two I have in mind are
1. Adding a concept of "known secret". `pulumi.Secret(output)` is always secret, so we don't need to block on `output` to resolve this.
2. Distinguishing between functions that return an `Output` (which might be secret) and functions that return raw values (`string`, `int`, ...) which never change the "secretes" of an `Output`. We don't need to block on functions that return raw values.

I believe we should merge this PR without optimizations, and ensure that `IsSecret` is as correct as we can make it. We can add optimizations as they become necessary. I don't think we have customers who rely heavily on `IsSecret` evaluating instantly on not yet resolved outputs, since that is precisely the scenario where `IsSecret` may return the wrong answer.

Co-authored-by: Ian Wahbe <ian@wahbe.com>
bors bot added a commit that referenced this pull request Nov 3, 2022
11248: Make OutputState pass the `-race` detector r=iwahbe a=iwahbe

This is the last step necessary to allow pulumi-yaml to run a subset of its tests with `-race=true`. 

The race is is between `ApplyT` and `fulfillValue` on copying a slice. 

Both me (`@iwahbe)` and `@t0yv0` have independently confirmed that the race is not hiding a deeper issue. Further discussion of the issue is at #11186.

A stack trace from the `-race` flag that this issue fixes:
```
WARNING: DATA RACE
Write at 0x00c000422ec0 by goroutine 463:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).fulfillValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:198 +0x590
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:516 +0x8a5

Previous read at 0x00c000422ec0 by goroutine 306:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).dependencies()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:136 +0x406
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:492 +0x14a
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyT()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:440 +0xb8
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.AnyOutput.ApplyT()
      <autogenerated>:1 +0x49
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1.1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:890 +0x1d3
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:286 +0x516
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:274 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:335 +0x44
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:886 +0x2f5
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47
```

Co-authored-by: Ian Wahbe <ian@wahbe.com>
bors bot added a commit that referenced this pull request Nov 3, 2022
11248: Make OutputState pass the `-race` detector r=iwahbe a=iwahbe

This is the last step necessary to allow pulumi-yaml to run a subset of its tests with `-race=true`. 

The race is is between `ApplyT` and `fulfillValue` on copying a slice. 

Both me (`@iwahbe)` and `@t0yv0` have independently confirmed that the race is not hiding a deeper issue. Further discussion of the issue is at #11186.

A stack trace from the `-race` flag that this issue fixes:
```
WARNING: DATA RACE
Write at 0x00c000422ec0 by goroutine 463:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).fulfillValue()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:198 +0x590
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:516 +0x8a5

Previous read at 0x00c000422ec0 by goroutine 306:
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).dependencies()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:136 +0x406
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyTWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:492 +0x14a
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.(*OutputState).ApplyT()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/types.go:440 +0xb8
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.AnyOutput.ApplyT()
      <autogenerated>:1 +0x49
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1.1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:890 +0x1d3
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags.func2()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:286 +0x516
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunWithContext()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:120 +0x258
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.runErrInner()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:96 +0x4b1
  github.com/pulumi/pulumi/sdk/v3/go/pulumi.RunErr()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi/sdk/go/pulumi/run.go:63 +0x23a
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplateDiags()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:274 +0x2e
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.testTemplate()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:335 +0x44
  github.com/pulumi/pulumi-yaml/pkg/pulumiyaml.TestSplit.func1()
      /Users/ianwahbe/go/src/github.com/pulumi/pulumi-yaml/pkg/pulumiyaml/run_test.go:886 +0x2f5
  testing.tRunner()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1446 +0x216
  testing.(*T).Run.func1()
      /usr/local/Cellar/go/1.19.2/libexec/src/testing/testing.go:1493 +0x47
```

Co-authored-by: Ian Wahbe <ian@wahbe.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants