bigquery-emulator icon indicating copy to clipboard operation
bigquery-emulator copied to clipboard

Panic uploading data to a table in a dataset that does not exist

Open pgcamus opened this issue 8 months ago • 1 comments

What happened?

Using the BigQuery Python SDK's Client.load_table_from_file() method results in a panic if we request writing to a table that does not exist, in a dataset that also does not exist.

Stack trace

2025-04-02T18:37:45.220Z        INFO    server/middleware.go:63 PUT /upload/bigquery/v2/projects/camus-unittest/jobs    {"query": "uploadType=resumable&upload_id=82cfb08d-a7f7-4240-83ff-66c49100ae77"}
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:33 internalError   {"error": "internalError: runtime error: invalid memory address or nil pointer dereference"}
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 1: /usr/local/go/src/runtime/panic.go:914
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 2: /usr/local/go/src/runtime/panic.go:261
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 3: /usr/local/go/src/runtime/signal_unix.go:861
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 4: /work/internal/metadata/dataset.go:157
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 5: /work/server/handler.go:404
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 6: /work/server/handler.go:330
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 7: /work/server/middleware.go:297
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 8: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 9: /work/server/middleware.go:274
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 10: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 11: /work/server/middleware.go:251
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 12: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 13: /work/server/middleware.go:228
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 14: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 15: /work/server/middleware.go:205
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 16: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 17: /work/server/middleware.go:182
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 18: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 19: /work/server/middleware.go:100
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 20: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 21: /work/server/middleware.go:81
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 22: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 23: /work/server/middleware.go:67
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 24: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 25: /work/server/middleware.go:55
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 26: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 27: /work/server/middleware.go:46
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 28: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 29: /work/server/middleware.go:22
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 30: /usr/local/go/src/net/http/server.go:2136
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 31: /go/pkg/mod/github.com/gorilla/[email protected]/mux.go:210
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 32: /usr/local/go/src/net/http/server.go:2938
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 33: /usr/local/go/src/net/http/server.go:2009
2025-04-02T18:37:45.224Z        ERROR   server/middleware.go:40 34: /usr/local/go/src/runtime/asm_amd64.s:1650

What did you expect to happen?

The request should be failed with a gRPC error rather than crashing the server.

How can we reproduce it (as minimally and precisely as possible)?

Trigger the upload endpoint targetting a dataset that does not exist.

Anything else we need to know?

No response

pgcamus avatar Apr 02 '25 18:04 pgcamus

+1

0xcaffeinated avatar Apr 17 '25 05:04 0xcaffeinated