#Panic on Container().Stdout().Contents()

1 messages ยท Page 1 of 1 (latest)

glacial quartz
#

Is this error familiar to anyone? Using Go SDK:

The corresponding line in my code is:

stdout, err := p.Stdout().Contents(ctx)
2022/11/17 15:07:16 http: panic serving : interface conversion: interface {} is nil, not map[string]interface {}
goroutine 32 [running]:
net/http.(*conn).serve.func1()
        /opt/homebrew/Cellar/go/1.19/libexec/src/net/http/server.go:1850 +0xb0
panic({0x105b42340, 0x14001676870})
        /opt/homebrew/Cellar/go/1.19/libexec/src/runtime/panic.go:890 +0x258
dagger.io/dagger/internal/querybuilder.(*Selection).unpack(0x140001d9c80, {0x105b29660, 0x14001676810})
        /Users/shykes/go/pkg/mod/dagger.io/dagger@v0.4.0/internal/querybuilder/querybuilder.go:113 +0x220
dagger.io/dagger/internal/querybuilder.(*Selection).Execute(0x1400058c480?, {0x105c98c48, 0x1400019a008}, {0x105c8ea20, 0x140011864f0})
        /Users/shykes/go/pkg/mod/dagger.io/dagger@v0.4.0/internal/querybuilder/querybuilder.go:144 +0x114
dagger.io/dagger.(*File).Contents(0x14000f75668, {0x105c98c48, 0x1400019a008})
        /Users/shykes/go/pkg/mod/dagger.io/dagger@v0.4.0/api.gen.go:769 +0x13c
main.(*DockerFrontend).ContainerAttach(0x105c405a0?, {0x14000b44017, 0x3e4}, 0x140008d4ae0)
        /Users/shykes/dev/dagger/docker2dagger/frontend.go:394 +0x240
#

@low shadow does this ring a bell? interface {} is nil, not map[string]interface {}

low shadow
#

what's the full query? error is probably somewhere else, this just happens to trigger the whole query builder

glacial quartz
#

Hang on let me share the full Dagger Cloud run link

#

(just kidding, that would be useful right now though ๐Ÿ™‚

low shadow
#

Looks like an unexpected server response

glacial quartz
#

(cc @tough fog )

low shadow
#

This is basically the querybuilder unpacking the server response

glacial quartz
#

To reproduce just try docker run against that daemon

low shadow
#

it's expecting map[string]interface{} (basically the data field of the server response)

#

it's getting nil instead

tough fog
#

data is nil

tough fog
#

it's on a "contents" query

glacial quartz
#

Oh I though it was public! sorry

low shadow
#

nil data is against the graphql spec, and we're using a graphql server, so basically this means the server blew up

#

or something ๐Ÿ™‚

#

and it's not contents() doing that, probably something else triggered the server to blow up

glacial quartz
#

ok that makes sense. probably just a side effect of something on the client side blowing up then

low shadow
#

now go collect your "i blew up the server" sticker

#

๐Ÿ™‚

#

taking a look

#

anything of interest in the logs?

#

maybe there's a panic or something

glacial quartz
#

not really... the useful context is that we're trying to get docker run to work, which involves a soup of even subscription implicit APIs, an attach dropping to tcp somewhere, etc

low shadow
#

oh

glacial quartz
#

weirdly, docker container exec works just fine, including attach. But docker run... yeah no

low shadow
#

hard to say with this p := c.Container(dagger.ContainerOpts{ID: dagger.ContainerID(name)})

#

since I'm assuming this is LLB made outside of query builder?

#

err outside of the server

glacial quartz
#

No it's a dagger ID that I'm feeding back ๐Ÿ™‚

#

The fake docker engine returns container "IDs" that are actually dagger IDs

#

Turns out clients don't care about the size or format of those IDs

low shadow
#

I see

#

contents is triggering a Solve on that ID

glacial quartz
#
% docker container create alpine:latest
eyJmcyI6eyJkZWYiOlsiR2pBS0xtUnZZMnRsY2kxcGJXRm5aVG92TDJSdlkydGxjaTVwYnk5c2FXSnlZWEo1TDJGc2NHbHVaVHBzWVhSbGMzUlNEZ29GWVhKdE5qUVNCV3hwYm5WNFdnQT0iLCJDa2tLUjNOb1lUSTFOanBrTWpCa1lXRXdNR1V5TlRKaVptSXpORFZoTVdJMFpqVXpZalppWWpNek1tRmhabVUzTURKa09HUmxOV1UxT0ROaE56Wm1ZMlF3T1dKaE4yVmhNV014Il0sIm1ldGFkYXRhIjp7InNoYTI1NjpkMjBkYWEwMGUyNTJiZmIzNDVhMWI0ZjUzYjZiYjMzMmFhZmU3MDJkOGRlNWU1ODNhNzZmY2QwOWJhN2VhMWMxIjp7ImNhcHMiOnsic291cmNlLmltYWdlIjp0cnVlfX0sInNoYTI1NjpmMDc1Y2MwN2RiMWFhNWNhZWI2Mjk2YjBlMGM3M2M2NTIxMzJkNjM1MjE4M2VmODZkYTE4NWM3MmQxNzc4OGMxIjp7ImNhcHMiOnsiY29uc3RyYWludHMiOnRydWUsInBsYXRmb3JtIjp0cnVlfX19LCJTb3VyY2UiOnsibG9jYXRpb25zIjp7InNoYTI1NjpkMjBkYWEwMGUyNTJiZmIzNDVhMWI0ZjUzYjZiYjMzMmFhZmU3MDJkOGRlNWU1ODNhNzZmY2QwOWJhN2VhMWMxIjp7fX19fSwiY2ZnIjp7IkVudiI6WyJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiJdLCJDbWQiOlsiL2Jpbi9zaCJdfSwicGxhdGZvcm0iOnsiYXJjaGl0ZWN0dXJlIjoiYXJtNjQiLCJvcyI6ImxpbnV4In19
glacial quartz
#
% docker container exec eyJmcyI6eyJkZWYiOlsiR2pBS0xtUnZZMnRsY2kxcGJXRm5aVG92TDJSdlkydGxjaTVwYnk5c2FXSnlZWEo1TDJGc2NHbHVaVHBzWVhSbGMzUlNEZ29GWVhKdE5qUVNCV3hwYm5WNFdnQT0iLCJDa2tLUjNOb1lUSTFOanBrTWpCa1lXRXdNR1V5TlRKaVptSXpORFZoTVdJMFpqVXpZalppWWpNek1tRmhabVUzTURKa09HUmxOV1UxT0ROaE56Wm1ZMlF3T1dKaE4yVmhNV014Il0sIm1ldGFkYXRhIjp7InNoYTI1NjpkMjBkYWEwMGUyNTJiZmIzNDVhMWI0ZjUzYjZiYjMzMmFhZmU3MDJkOGRlNWU1ODNhNzZmY2QwOWJhN2VhMWMxIjp7ImNhcHMiOnsic291cmNlLmltYWdlIjp0cnVlfX0sInNoYTI1NjpmMDc1Y2MwN2RiMWFhNWNhZWI2Mjk2YjBlMGM3M2M2NTIxMzJkNjM1MjE4M2VmODZkYTE4NWM3MmQxNzc4OGMxIjp7ImNhcHMiOnsiY29uc3RyYWludHMiOnRydWUsInBsYXRmb3JtIjp0cnVlfX19LCJTb3VyY2UiOnsibG9jYXRpb25zIjp7InNoYTI1NjpkMjBkYWEwMGUyNTJiZmIzNDVhMWI0ZjUzYjZiYjMzMmFhZmU3MDJkOGRlNWU1ODNhNzZmY2QwOWJhN2VhMWMxIjp7fX19fSwiY2ZnIjp7IkVudiI6WyJQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW46L2JpbiJdLCJDbWQiOlsiL2Jpbi9zaCJdfSwicGxhdGZvcm0iOnsiYXJjaGl0ZWN0dXJlIjoiYXJtNjQiLCJvcyI6ImxpbnV4In19 uname -a
Linux buildkitsandbox 5.10.104-linuxkit #1 SMP PREEMPT Thu Mar 17 17:05:54 UTC 2022 aarch64 Linux
low shadow
#

yeah, not the easiest to debug

#

can you try to send the query in raw graphql?

#

see what the server says?

glacial quartz
#

The thing is, it works fine with docker container create and docker container exec

#

So that part is probably not the problem

low shadow
#

basically a {container(id: <xxx>)} in graphiql

#

look at the output, look at cloak dev's logs

glacial quartz
#

Here's the error on the client side (while that panic occurs):

low shadow
#

or dagger listen if you feel like dogfooding

glacial quartz
#
 % docker run docker/whalesay cowsay hi there
Unrecognized input header: 72
low shadow
glacial quartz
#

How do I dump the graphql query?

low shadow
#

I think we're printing it, but if not, it's a simple query:

    p := c.Container(dagger.ContainerOpts{ID: dagger.ContainerID(name)})
    stdout, err := p.Stdout().Contents(ctx)

{ container(id: <name>) { stdout { contents } }

glacial quartz
#

That query works

#

It's the same query used by docker container exec

low shadow
#

does the output contain data?

glacial quartz
#

Trying to share a playground URL with you but I'm getting a cloud error ๐Ÿ˜ฆ /cc @weary pewter

weary pewter
#

cc @dire patio probably the deploy we merged today? I'm AFK.

dire patio
#

๐Ÿ‘‹