cuelang / cue

CUE has moved to https://github.com/cue-lang/cue
https://cuelang.org
Apache License 2.0
3.09k stars 171 forks source link

cmd/cue: export causes unhandled panic #837

Closed kumorid closed 3 years ago

kumorid commented 3 years ago
$ cue version
cue version 0.3.0-beta.6 darwin/amd64

Does this issue reproduce with the latest release?

No

What did you do?

cue export

What did you expect to see?

Some json output. Maybe a cue-emmited error message

What did you see instead?

A panic report:

panic: uncaught error panic: freeNode: nodeContext out of sync [recovered] panic: freeNode: nodeContext out of sync

goroutine 1 [running]: cuelang.org/go/cmd/cue/cmd.recoverError(0xc001533ec0) /home/runner/work/cue/cue/cmd/cue/cmd/root.go:221 +0x95 panic(0x17a7d00, 0x1985510) /opt/hostedtoolcache/go/1.15.8/x64/src/runtime/panic.go:969 +0x1b9 cuelang.org/go/internal/core/adt.(Vertex).freeNode(0xc0008fb4d0, 0xc0008a6700) /home/runner/work/cue/cue/internal/core/adt/eval.go:918 +0x132 panic(0x17a7d00, 0x19854e0) /opt/hostedtoolcache/go/1.15.8/x64/src/runtime/panic.go:975 +0x47a cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc00102c3f0, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:239 +0xed7 cuelang.org/go/internal/core/adt.(Vertex).Finalize(0xc00102c3f0, 0xc0000e12b0) /home/runner/work/cue/cue/internal/core/adt/composite.go:441 +0x3a cuelang.org/go/internal/core/adt.matchBulk(0xc0000e12b0, 0xc0002e7bd0, 0xc0003797a0, 0xc000000890, 0x19ae6c0, 0xc000aa5d70, 0x0) /home/runner/work/cue/cue/internal/core/adt/optional.go:119 +0x333 cuelang.org/go/internal/core/adt.(StructInfo).MatchAndInsert(0xc000aa5ce0, 0xc0000e12b0, 0xc00102c360) /home/runner/work/cue/cue/internal/core/adt/optional.go:59 +0x5a5 cuelang.org/go/internal/core/adt.(nodeContext).insertField(0xc000953880, 0x890, 0xc0002e7d10, 0x199c480, 0xc000367720, 0xc00049b1a0, 0x0, 0xc000367720) /home/runner/work/cue/cue/internal/core/adt/eval.go:1786 +0x111 cuelang.org/go/internal/core/adt.(nodeContext).addStruct(0xc000953880, 0xc0002e7cc0, 0xc000483440, 0xc00049b1a0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1758 +0x538 cuelang.org/go/internal/core/adt.(nodeContext).addExprConjunct(0xc000953880, 0xc0002e7cc0, 0x199c980, 0xc000483440, 0xc00049b1a0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1176 +0x208 cuelang.org/go/internal/core/adt.(nodeContext).addVertexConjuncts(0xc000953880, 0xc0001f9d10, 0xc0006020e0, 0xc000060000, 0x19a9940, 0xc00006c960, 0xc0000f3b90, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1377 +0x41d cuelang.org/go/internal/core/adt.(nodeContext).evalExpr(0xc000953880, 0xc0001f9d10, 0x199c4c0, 0xc00006c960, 0xc0006020e0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1226 +0x774 cuelang.org/go/internal/core/adt.(nodeContext).addExprConjunct(0xc000953880, 0xc0001f9d10, 0x199c4c0, 0xc00006c960, 0xc0006020e0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1186 +0x245 cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc0008a6700, 0xc0008fb405, 0xc0008a6700, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:228 +0x41d cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0008fb4d0, 0xc0004bc805) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc00097b880, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc00097b880, 0xc000204605) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc00097b880, 0xc0008fb305, 0xc00097b880, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0008fb320, 0xc0004bd505) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc000884e00, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc000884e00, 0xc0004bd705) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc000884e00, 0xc0008fb105, 0xc000884e00, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0008fb170, 0xc0001f9705) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(BinaryExpr).evaluate(0xc0003cb770, 0xc0000e12b0, 0xc0003cb770, 0x9c28060) /home/runner/work/cue/cue/internal/core/adt/expr.go:1118 +0x105 cuelang.org/go/internal/core/adt.(OpContext).unifyNode(0xc0000e12b0, 0x19a9600, 0xc0003cb770, 0x2, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/context.go:691 +0x3cc cuelang.org/go/internal/core/adt.(OpContext).node(0xc0000e12b0, 0x199c8c0, 0xc0003b4ea0, 0x19a9600, 0xc0003cb770, 0x1810201, 0x9c80e01) /home/runner/work/cue/cue/internal/core/adt/context.go:885 +0x66 cuelang.org/go/internal/core/adt.(SelectorExpr).resolve(0xc0003b4ea0, 0xc0000e12b0, 0xc0003b4e02, 0x19a3c40) /home/runner/work/cue/cue/internal/core/adt/expr.go:863 +0x6e cuelang.org/go/internal/core/adt.(OpContext).evalState(0xc0000e12b0, 0x19a9c00, 0xc0003b4ea0, 0x1e1a502, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/context.go:623 +0x209 cuelang.org/go/internal/core/adt.(Environment).evalCached(0xc0001f97c0, 0xc0000e12b0, 0x19a9c00, 0xc0003b4ea0, 0x501, 0x25c6680) /home/runner/work/cue/cue/internal/core/adt/composite.go:143 +0x1a5 cuelang.org/go/internal/core/adt.(LetReference).evaluate(0xc0003b4fc0, 0xc0000e12b0, 0xc0003b4fc0, 0x25c6680) /home/runner/work/cue/cue/internal/core/adt/expr.go:842 +0x66 cuelang.org/go/internal/core/adt.(OpContext).unifyNode(0xc0000e12b0, 0x19a9a80, 0xc0003b4fc0, 0xc0004beb02, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/context.go:691 +0x3cc cuelang.org/go/internal/core/adt.(OpContext).node(0xc0000e12b0, 0x199c8c0, 0xc0003b4fe0, 0x19a9a80, 0xc0003b4fc0, 0x1000201, 0xc00001e000) /home/runner/work/cue/cue/internal/core/adt/context.go:885 +0x66 cuelang.org/go/internal/core/adt.(SelectorExpr).resolve(0xc0003b4fe0, 0xc0000e12b0, 0xc000440402, 0x19a9c00) /home/runner/work/cue/cue/internal/core/adt/expr.go:863 +0x6e cuelang.org/go/internal/core/adt.(OpContext).Resolve(0xc0000e12b0, 0xc0001f97c0, 0x19a3c40, 0xc0003b4fe0, 0xc0003b4fe0, 0x1) /home/runner/work/cue/cue/internal/core/adt/context.go:404 +0xe2 cuelang.org/go/internal/core/adt.(nodeContext).evalExpr(0xc0003dd180, 0xc0001f97c0, 0x199c480, 0xc0003b5000, 0xc0017bdb00, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1216 +0x571 cuelang.org/go/internal/core/adt.(nodeContext).addExprConjunct(0xc0003dd180, 0xc0001f97c0, 0x199c480, 0xc0003b5000, 0xc0017bdb00, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1186 +0x245 cuelang.org/go/internal/core/adt.(nodeContext).insertConjuncts(0xc0003dd180) /home/runner/work/cue/cue/internal/core/adt/eval.go:391 +0xfb cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0008faea0, 0xc0004bee05) /home/runner/work/cue/cue/internal/core/adt/eval.go:255 +0x27f cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc0001a0380, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc0001a0380, 0xc0001a0305) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc0001a0380, 0xc000707d05, 0xc0001a0380, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc000707d40, 0xc0004bfb05) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc0003db500, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc0003db500, 0xc0003db505) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc0003db500, 0xc0017c1605, 0xc0003db500, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0017c1680, 0xc0004c0805) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc0003daa80, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc0003daa80, 0xc0003daa05) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc0003daa80, 0xc0017c1405, 0xc0003daa80, 0x0, 0xc0004c0100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0017c1440, 0xc0017b7c05) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(BinaryExpr).evaluate(0xc0003cb6b0, 0xc0000e12b0, 0xc0003cb6b0, 0x9c28060) /home/runner/work/cue/cue/internal/core/adt/expr.go:1118 +0x105 cuelang.org/go/internal/core/adt.(OpContext).unifyNode(0xc0000e12b0, 0x19a9600, 0xc0003cb6b0, 0xc0004c1a02, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/context.go:691 +0x3cc cuelang.org/go/internal/core/adt.(OpContext).node(0xc0000e12b0, 0x199c8c0, 0xc0003b4980, 0x19a9600, 0xc0003cb6b0, 0x201, 0xc000047888) /home/runner/work/cue/cue/internal/core/adt/context.go:885 +0x66 cuelang.org/go/internal/core/adt.(SelectorExpr).resolve(0xc0003b4980, 0xc0000e12b0, 0xc000440202, 0x19a9c00) /home/runner/work/cue/cue/internal/core/adt/expr.go:863 +0x6e cuelang.org/go/internal/core/adt.(OpContext).Resolve(0xc0000e12b0, 0xc0017b7cc0, 0x19a3c40, 0xc0003b4980, 0xc0003b4980, 0x1) /home/runner/work/cue/cue/internal/core/adt/context.go:404 +0xe2 cuelang.org/go/internal/core/adt.(nodeContext).evalExpr(0xc000136700, 0xc0017b7cc0, 0x199c480, 0xc0003b49a0, 0xc001778020, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1216 +0x571 cuelang.org/go/internal/core/adt.(nodeContext).addExprConjunct(0xc000136700, 0xc0017b7cc0, 0x199c480, 0xc0003b49a0, 0xc001778020, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1186 +0x245 cuelang.org/go/internal/core/adt.(nodeContext).insertConjuncts(0xc000136700) /home/runner/work/cue/cue/internal/core/adt/eval.go:391 +0xfb cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0017c0cf0, 0xc0004c1e05) /home/runner/work/cue/cue/internal/core/adt/eval.go:255 +0x27f cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc00041e000, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc00041e000, 0xc00041e005) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc00041e000, 0xc0017ba905, 0xc00041e000, 0x0, 0xc0004c0100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0017ba990, 0xc0004c2b05) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc000377880, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc000377880, 0xc000377805) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc000377880, 0xc00177a105, 0xc000377880, 0x0, 0x100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc00177a120, 0xc0004c3805) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc000443880, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc000443880, 0xc0004c3a05) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc000443880, 0xc001771e05, 0xc000443880, 0x0, 0xc0000f0100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc001771e60, 0xc0006add05) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(BinaryExpr).evaluate(0xc00019da10, 0xc0000e12b0, 0xc00019da10, 0x9c28060) /home/runner/work/cue/cue/internal/core/adt/expr.go:1118 +0x105 cuelang.org/go/internal/core/adt.(OpContext).unifyNode(0xc0000e12b0, 0x19a9600, 0xc00019da10, 0xc0004c4a02, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/context.go:691 +0x3cc cuelang.org/go/internal/core/adt.(OpContext).node(0xc0000e12b0, 0x199c8c0, 0xc00040a120, 0x19a9600, 0xc00019da10, 0x1000201, 0xc00001e000) /home/runner/work/cue/cue/internal/core/adt/context.go:885 +0x66 cuelang.org/go/internal/core/adt.(SelectorExpr).resolve(0xc00040a120, 0xc0000e12b0, 0xc000481a02, 0x19a9c00) /home/runner/work/cue/cue/internal/core/adt/expr.go:863 +0x6e cuelang.org/go/internal/core/adt.(OpContext).Resolve(0xc0000e12b0, 0xc0006add10, 0x19a3c40, 0xc00040a120, 0xc00040a120, 0x1) /home/runner/work/cue/cue/internal/core/adt/context.go:404 +0xe2 cuelang.org/go/internal/core/adt.(nodeContext).evalExpr(0xc000442a80, 0xc0006add10, 0x199c480, 0xc00040a2e0, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1216 +0x571 cuelang.org/go/internal/core/adt.(nodeContext).addExprConjunct(0xc000442a80, 0xc0006add10, 0x199c480, 0xc00040a2e0, 0x0, 0x0) /home/runner/work/cue/cue/internal/core/adt/eval.go:1186 +0x245 cuelang.org/go/internal/core/adt.(nodeContext).insertConjuncts(0xc000442a80) /home/runner/work/cue/cue/internal/core/adt/eval.go:391 +0xfb cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0000f1ef0, 0xc0004c4d05) /home/runner/work/cue/cue/internal/core/adt/eval.go:255 +0x27f cuelang.org/go/internal/core/adt.(nodeContext).completeArcs(0xc000442700, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:656 +0x14a cuelang.org/go/internal/core/adt.(nodeContext).postDisjunct(0xc000442700, 0x19a9605) /home/runner/work/cue/cue/internal/core/adt/eval.go:589 +0x53b cuelang.org/go/internal/core/adt.(nodeContext).expandDisjuncts(0xc000442700, 0xc0000f1405, 0xc000442700, 0x0, 0x1010100) /home/runner/work/cue/cue/internal/core/adt/disjunct.go:151 +0x1610 cuelang.org/go/internal/core/adt.(OpContext).Unify(0xc0000e12b0, 0xc0000f1440, 0x5) /home/runner/work/cue/cue/internal/core/adt/eval.go:309 +0x479 cuelang.org/go/internal/core/adt.(Vertex).Finalize(...) /home/runner/work/cue/cue/internal/core/adt/composite.go:441

myitcv commented 3 years ago

@kumorid do you have a repro that leads to this panic?

kumorid commented 3 years ago

Yes, but it is a bit complex, and will take me a while to assemble.

It had been a while since I used 0.3.0-xxx on our setup, and the surprise is this panic that I had never seen before.

myitcv commented 3 years ago

If this is in private code and you want to, for speed and simplicity's sake, share a full repro privately then please let me/@mpvl know.

kumorid commented 3 years ago

No problem, a part was private although it should not have been.

These are the steps to reproduce the behavior above:

git clone git@gitlab.com:kumori-systems/community/calc-cache.git
cd calc-cache/cue-modules/deployment_nocache
cue export
kumorid commented 3 years ago

And, by the way, on linux (using the Docker image) seems to behave in the same way.

myitcv commented 3 years ago

Unfortunately those steps don't work for me, neither do:

git clone https://gitlab.com/kumori-systems/community/calc-cache
cd calc-cache/cue-manifests/deployment_nocache/
cue export

I get:

import failed: import failed: import failed: cannot find package "kumori.systems/kumori/kmv":
    ./manifest.cue:5:3
kumorid commented 3 years ago

Sorry, Paul, I prepared the repo in a hurry and did not modify the .gitignore.

The repo now has all the content and reproduces de error as reported.

myitcv commented 3 years ago

Thanks @kumorid. As a first cut, here is a standalone reproducer; not attempted to reduce this yet:

https://gist.github.com/myitcv/7247151729dff01d63cc9f8d848860e6

myitcv commented 3 years ago

A bit more progress, I've reduced this down quite significantly:

https://gist.github.com/myitcv/0e07e62162d81a82e1158ce086f0355f

Still more to do though.

myitcv commented 3 years ago

A tiny bit more progress:

https://gist.github.com/myitcv/73f95df74ca9038827eb760e6795058b

Will come back to this later today.

cueckoo commented 3 years ago

This issue has been migrated to https://github.com/cue-lang/cue/issues/837.

For more details about CUE's migration to a new home, please see https://github.com/cue-lang/cue/issues/1078.